{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/lib/underscore-exposed.js","webpack:///./packages/core/lib/jquery-netx.js","webpack:///./build-targets/theme/packages/core/lib/jquery-netx.js","webpack:///./packages/core/lib/backbone-netx.js","webpack:///./packages/core/bootstrap.js","webpack:///./node_modules/jquery/dist/jquery-exposed.js","webpack:///./packages/core-app/properties/theme.ts","webpack:///./packages/core-app/config.js","webpack:///./build-targets/theme/packages/core-app/config.js","webpack:///./packages/core/utils/safeReplaceInArray.ts","webpack:///./packages/core/utils/simulateClickBody.ts","webpack:///./src/js/lib/backbone-exposed.js","webpack:///./build-targets/theme/packages/core/config.js","webpack:///./packages/core/utils/actionsToOrderedActions.ts","webpack:///./packages/core/utils/appendQueryObjectToURL.ts","webpack:///./packages/core/utils/arrayToCsv.ts","webpack:///./packages/core/utils/asyncForEach.ts","webpack:///./packages/core/utils/caseInsensitiveStringIncludes.ts","webpack:///./packages/core/utils/createSyntheticEvent.ts","webpack:///./packages/core/utils/csvToArray.ts","webpack:///./packages/core/utils/dateToHtml.ts","webpack:///./packages/core/utils/enforceHttpsUrlString.ts","webpack:///./packages/core/utils/getNormalizedHexColor.ts","webpack:///./packages/core/utils/getScrollbarWidth.ts","webpack:///./packages/core/utils/getScrollParent.ts","webpack:///./packages/core/utils/openDownloadLink.ts","webpack:///./packages/core/utils/spawnNewWindow.ts","webpack:///./packages/core/utils/stopPropagation.ts","webpack:///./packages/core/utils/uniqueArray.ts","webpack:///./packages/core/lib/utils.ts","webpack:///(webpack)/buildin/global.js","webpack:///./packages/core-user/utils/getPreference.ts","webpack:///./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack:///./node_modules/i18next/dist/es/logger.js","webpack:///./node_modules/i18next/dist/es/EventEmitter.js","webpack:///./node_modules/i18next/dist/es/utils.js","webpack:///./node_modules/i18next/dist/es/ResourceStore.js","webpack:///./node_modules/i18next/dist/es/postProcessor.js","webpack:///./node_modules/i18next/dist/es/compatibility/v1.js","webpack:///./node_modules/i18next/dist/es/Translator.js","webpack:///./node_modules/i18next/dist/es/LanguageUtils.js","webpack:///./node_modules/i18next/dist/es/PluralResolver.js","webpack:///./node_modules/i18next/dist/es/Interpolator.js","webpack:///./node_modules/i18next/dist/es/BackendConnector.js","webpack:///./node_modules/i18next/dist/es/CacheConnector.js","webpack:///./node_modules/i18next/dist/es/defaults.js","webpack:///./node_modules/i18next/dist/es/i18next.js","webpack:///./node_modules/i18next/dist/es/index.js","webpack:///./packages/core/i18n.js","webpack:///./packages/core/utils/enumToValues.ts","webpack:///./packages/core/utils/isMobile.ts","webpack:///./packages/core/utils/getURLQueryFromObject.ts","webpack:///./packages/core/utils/isFirefox.ts","webpack:///./node_modules/hammerjs/hammer.js","webpack:///./node_modules/locallyjs/dist/locally.js","webpack:///./node_modules/i18next-xhr-backend/index.js","webpack:///./node_modules/i18next-browser-languagedetector/index.js","webpack:///./node_modules/jquery-i18next/index.js","webpack:///./packages/core/lib/underscore-netx.js","webpack:///./node_modules/lz-string/libs/lz-string.js","webpack:///./node_modules/ms/index.js","webpack:///./src/js/lib/underscore.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./src/js/lib/backbone.js","webpack:///./src/js/lib/modernizr/modernizr.js","webpack:///./src/js/lib/modernizr-tests-0.0.1.js","webpack:///./src/js/lib/polyfills/polyfills-netx.js","webpack:///./node_modules/i18next-xhr-backend/dist/commonjs/index.js","webpack:///./node_modules/i18next-xhr-backend/dist/commonjs/utils.js","webpack:///./node_modules/i18next-xhr-backend/dist/commonjs/ajax.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/index.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/utils.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/cookie.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/querystring.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/localStorage.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/navigator.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/htmlTag.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/path.js","webpack:///./node_modules/i18next-browser-languagedetector/dist/commonjs/browserLookups/subdomain.js","webpack:///./node_modules/jquery-i18next/dist/commonjs/index.js","webpack:///./packages/core/css.ts","webpack:///./packages/core/app.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","installedCssChunks","__webpack_require__","exports","module","l","e","promises","Promise","resolve","reject","href","fullhref","p","existingLinkTags","document","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","jsonpScriptSrc","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","head","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","s","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","_show","jQuery","fn","show","_val","val","special","destroyed","remove","handler","apply","this","arguments","extend","expr","createPseudo","dataName","elem","ret","_","isUndefined","selectpicker","nxVal","boxesToVal","find","map","disable","attr","addClass","enable","removeClass","enableIf","bool","hasActiveTypeahead","tt","$menu","menu","$node","hasClass","hasCollision","b","aTop","offset","top","aLeft","left","bTop","bLeft","outerHeight","outerWidth","isBound","namespace","_data","inArray","found","each","isHidden","is","isModal","Boolean","closest","nxIgnores","selector","dep","change","validation","keys","nxData","split","indexOf","nxIgnore","uniq","concat","join","nxUnignore","filter","k","newVal","pick","v","match","nxRemoveData","removeData","removeAttr","valToBoxes","prop","zIndex","css","position","$","parseInt","isNaN","parent","purge","isArray","args","toArray","idx","el","allowed","arg","has","tapToClick","setup","namespaces","teardown","unbind","$elem","preventDefault","click","Backbone","sync","wrap","method","model","options","token","Netx","session","getToken","headers","Events","retrigger","eventName","trigger","version","custom","getUserLevel","getPreference","setPreference","properties","router","routes","routerReady","store","Locally","Store","compress","user","views","Collections","Models","Routers","ShareableTypes","Views","opts","dispatcher","Hammer","initializedModules","initializingModules","initializeModule","newModules","routesToAdd","total","next","init","defer","addRoutes","loadUrl","history","contains","deferred","initialize","on","isFunction","initialized","api","API","endpoint","URL","host","location","toString","protocol","websocketProtocol","replace","queryString","baseDir","pathname","base","apiEndpoint","proxyApiEndpoint","proxyApi","uploadEndpoint","upload","assetEndpoint","asset","assetFileApiEndpoint","themeName","loginBackgroundEndpoint","loginBackground","watermarkEndpoint","watermark","customCssPropertiesEndpoint","customCssProperties","logoLightEndpoint","logoDarkEndpoint","logoLight","logoDark","themeLogo","websocket","NetxThemePref","NetxThemePrefLabels","DEFAULT","i18n","DARK","LIGHT","userPref","once","assign","modes","light","dark","CSS_CUSTOM_PROPERTY_PREFIX","CSS_CUSTOM_PROPERTIES","DEFAULT_THEME_MODE","DATE_FORMAT","REQUIRED_SERVER_VERSION","CONTAINER_ID","LOGIN_CONTAINER_ID","ALERT_CONTAINER_ID","GALLERY_CONTAINER_ID","TACK_CONTAINER_ID","HEADER_CONTAINER_ID","MODAL_CONTAINER_ID","POLL_INTERVAL","PASSIVE_ALERT_DELAY","Config","CONTACT_EMAIL","safeReplaceInArray","array","index","replaceWith","newArray","splice","simulateClickBody","evt","MouseEvent","bubbles","cancelable","view","body","dispatchEvent","CONSOLE_HISTORY_LENGTH","HOME_ROUTE","actionsToOrderedActions","actions","groups","reduce","action","group","actionGroup","sort","a","label","localeCompare","splitActions","ordered","order","unordered","appendQueryObjectToURL","url","queryParams","_url","entries","forEach","searchParams","append","arrayToCsv","spaces","isString","asyncForEach","async","cb","caseInsensitiveStringIncludes","str","includes","toLocaleLowerCase","toLowerCase","createSyntheticEvent","isDefaultPrevented","isPropagationStopped","metaKey","shiftKey","nativeEvent","currentTarget","defaultPrevented","eventPhase","isTrusted","stopPropagation","persist","timeStamp","csvToArray","csv","sep","Array","tl","foo","x","charAt","f","dateToHTML","Date","getFullYear","getMonth","padStart","getDate","temp","enforceHttpsUrlString","getNormalizedHexColor","color","getScrollbarWidth","outer","style","visibility","overflow","msOverflowStyle","inner","scrollbarWidth","offsetWidth","regex","node","getComputedStyle","getPropertyValue","getScrollparent","test","scroll","openDownloadLink","link","anchor","spawnNewWindow","open","uniqueArray","arr","Set","debouncePromise","ms","timeoutId","pending","currentPending","deepObjectExtend","source","getViewModel","isAppView","viewModel","getViewCollection","collection","isPortal","protectObjectProxy","Proxy","obj","JSON","parse","stringify","set","performAction","actionStr","actionArgs","log","Actions","Find","fake","warn","wrapper","latest","route","navigate","unshift","purgeEls","els","purgeCount","addToArrayUnique","toAdd","isTouchEnabled","navigator","maxTouchPoints","safeToggleArrayValue","secondsToHms","seconds","days","Math","floor","toISOString","substring","h","Number","g","Function","asBoolean","prefs","globalThis","self","global","_extends","_classCallCheck","instance","Constructor","TypeError","consoleLogger","output","_console","arr2","from","_toConsumableArray","Logger","concreteLogger","prefix","logger","debug","setDebug","_len","_key","forward","_len2","_key2","_len3","_key3","deprecate","_len4","_key4","lvl","debugOnly","moduleName","EventEmitter","observers","events","listener","_this","off","_this2","emit","cloned","observer","_cloned","_ref","makeString","getLastOfPath","path","Empty","cleanKey","canNotTraverseDeeper","stack","setPath","newValue","_getLastOfPath","getPath","_getLastOfPath3","deepExtend","overwrite","String","regexEscape","_entityMap","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","constructor","writable","configurable","setPrototypeOf","defaults","getOwnPropertyNames","getOwnPropertyDescriptor","_defaults","_EventEmitter","ResourceStore","defaultNS","addNamespaces","removeNamespaces","getResource","lng","keySeparator","addResource","silent","addResources","resources","addResourceBundle","deep","pack","removeResourceBundle","hasResourceBundle","getResourceBundle","compatibilityAPI","toJSON","processors","addPostProcessor","handle","translator","processor","process","convertInterpolation","interpolation","unescapeSuffix","interpolationPrefix","suffix","interpolationSuffix","escapeValue","escapeInterpolation","nestingPrefix","reusePrefix","nestingSuffix","reuseSuffix","convertTOptions","nsSeparator","nsseparator","keyseparator","returnObjects","returnObjectTrees","_typeof","iterator","Translator","services","changeLanguage","language","exists","extractFromKey","parts","translate","overloadTranslationOptionHandler","_extractFromKey","appendNamespaceToCIMode","res","resType","noObject","joinArrays","returnedObjectHandler","copy","extendTranslation","usedDefault","usedKey","isValidLookup","defaultValue","lngs","fallbackLngs","languageUtils","getFallbackCodes","fallbackLng","saveMissingTo","toResolveHierarchy","saveMissing","missingKeyHandler","backendConnector","appendNamespaceToMissingKey","parseMissingKeyHandler","interpolator","defaultVariables","interpolate","nest","reset","postProcess","postProcessorNames","applyPostProcessor","postProcessor","_this3","extracted","fallbackNS","needsPluralHandling","count","needsContextHandling","context","codes","finalKey","finalKeys","pluralSuffix","pluralResolver","getSuffix","contextSeparator","possibleKey","pop","returnNull","returnEmptyString","resourceStore","capitalize","string","toUpperCase","LanguageUtil","whitelist","getScriptPartFromCode","formatLanguageCode","getLanguagePartFromCode","specialCases","lowerCaseLng","part","cleanCode","isWhitelisted","load","nonExplicitWhitelist","fallbacks","default","fallbackCode","fallbackCodes","addCode","fc","sets","nr","_rulesPluralsTypes","createRules","rules","numbers","plurals","PluralResolver","addRule","getRule","needsPlural","rule","noAbs","abs","simplifyPluralSuffix","returnSuffix","prepend","compatibilityJSON","Interpolator","format","escape","iOpts","prefixEscaped","suffixEscaped","formatSeparator","unescapePrefix","nestingPrefixEscaped","nestingSuffixEscaped","resetRegExp","regexpStr","regexp","RegExp","regexpUnescapeStr","regexpUnescape","nestingRegexpStr","nestingRegexp","regexSafe","handleFormat","trim","exec","lastIndex","clonedOptions","handleHasOptions","optionsString","_slicedToArray","_arr","_n","_d","_e","_s","_i","done","sliceIterator","Connector","backend","state","queue","queueLoad","languages","callback","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","loaded","errors","_name$split","_name$split2","q","_getLastOfPath2","what","read","fcName","tried","_this4","wait","_this5","allowMultiLoading","readMulti","_name$split3","_name$split4","bundle","loadOne","reload","_this6","_this7","_name$split5","_name$split6","fallbackValue","cache","loadLngs","enabled","save","transformOptions","noop","I18n","external","isInitialized","isClone","_ret","initImmediate","createClassOnDemand","ClassOrObject","preload","pluralSeparator","_format","resStore","defaultNs","fallbackToDefaultNS","sendMissing","sendMissingTo","fallbackOnNull","fallbackOnEmpty","objectTreeKeyHandler","parseMissingKey","shortcutFunction","values","sprintf","lngWhitelist","loadPath","resGetPath","addPath","resPostPath","dynamicLoad","expirationTime","useLocalStorage","lu","LanguageUtils","cacheConnector","BackendConnector","CacheConnector","languageDetector","detection","_store","loadLanguages","setLng","fixLng","getFixedT","use","loadResources","reloadResources","cacheUserLanguage","detect","fixedT","_translator","_translator2","setDefaultNamespace","loadNamespaces","preloaded","newLngs","dir","createInstance","cloneInstance","mergedOptions","clone","membersToCopy","i18next","resolver","rejector","NAMESPACES","NAMESPACE_DEFAULT","LANGUAGE_DEFAULT","LANGUAGE_WHITELIST","PATH","i18nextXHRBackend","i18nextBrowserLanguageDetector","lookupQuerystring","lookupCookie","lookupLocalStorage","caches","useCookie","jqueryI18next","tName","i18nName","handleName","selectorAttr","targetAttr","optionsAttr","useOptionsAttr","parseDefaultValueFromContent","documentElement","enumToValues","enumObject","isMobile","testTocuh","matchMedia","matches","innerWidth","getURLQueryFromObject","accum","encodeURIComponent","isFirefox","userAgent","exportName","VENDOR_PREFIXES","TEST_ELEMENT","round","now","setTimeoutContext","bindFn","invokeArrayArg","deprecationMessage","nextKey","dest","merge","inherit","child","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","types","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","inStr","findByKey","results","prefixed","camelProp","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","DIRECTION_VERTICAL","DIRECTION_UP","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","ev","inputHandler","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","start","end","rotation","getRotation","maxPointers","velocity","velocityX","velocityY","direction","last","lastInterval","computeIntervalInputData","srcEvent","computeInputData","recognize","clientX","clientY","p1","p2","props","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","started","normalizeSingleTouches","touches","changed","changedTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","TouchAction","compute","update","touchAction","recognizers","recognizer","getTouchAction","hasPanX","hasPanY","cleanTouchActions","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","DIRECTION_LEFT","preventSrc","STATE_FAILED","Recognizer","id","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","preset","Manager","recognizeWith","dropRecognizeWith","requireFailure","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","inOut","time","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","inputClass","cssProps","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","handlers","oldCssProps","toggleCssProps","item","add","stop","force","stopped","curRecognizer","existing","gestureEvent","createEvent","initEvent","gesture","triggerDomEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","ls","localStorage","lzstring","setItem","getItem","removeItem","this_data","clear","utils","iteratee","newArr","_keys","_config","_compressAll","_timeouts","deconfig","decompressFromUTF16","_rebuildConfig","_saveConfig","_remove","compressToUTF16","_get","ttl","eval","_getType","getTime","_setTimeout","_clearTimeout","pattern","scan","returnString","expire","argsToArray","bytes","maxScale","byteUnits","pow","max","toFixed","isNumber","pad","escapeAttributeName","extendActions","_action","findWhere","getFunctionBody","func","fstring","lastIndexOf","getInlineWorker","blob","Blob","Worker","createObjectURL","isEmptyValue","isEscapedURI","unescapeURI","Modernizr","randomChars","chars","result","random","resizeToFit","dimensions","fitDimensions","height","width","newDimensions","aspectRatio","maxWidth","maxHeight","unescapeAttributeName","unescape","mixin","crumbs","items","currentIndex","itemsToDisplay","ellipsis","crumbArray","totalItems","firstAdjacentItem","lastAdjacentItem","adjacentCount","min","firstItem","times","isURL","matchURL","isNumeric","parseFloat","isFinite","parseURLS","toBoolean","objectToLvbs","lvbsToObject","lvb","isNull","memo","lvbsToDeepObject","lv","_dotExpand","levels","_dotCollapse","rk","dateToDAM","dateToLocalTimezone","timezoneOffset","getTimezoneOffset","dateFromAsset","dateToAsset","omitTime","getHours","getMinutes","getSeconds","dateToAssetUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","dateFromString","escapeURI","decodeURIComponent","getMonthString","getDayString","formatNumber","number","isPromise","isPublicUser","getPublicProperty","getUser","move","fromIndex","toIndex","millisecondsToDateStr","millisecondsToFullDateStr","date","millisecondsToTimeStr","hour","minute","second","ucfirst","lcfirst","toCamelCase","newWordCharacters","stripCharacters","capitalizedArray","newStr","$1","camelCaseToUnderscore","camelCaseToDash","camelCaseToTitle","_str","toCollection","targetClass","classOptions","isModel","isObject","idAttribute","fetch","toJQ","jqObj","search","nodeType","jquery","tidyAssetList","assets","isArguments","rest","tidyAssets","getMenuPosition","Y","X","mouseX","mouseY","boundsX","boundsY","menuWidth","menuHeight","pageX","pageY","scrollTop","scrollLeft","selectorPosition","offsetParent","shadeColor","percent","R","G","B","hexToRgb","hex","rgbToHsl","rgb","parseQuery","chain","compact","decodeURI","mapKeys","newKey","LZString","fromCharCode","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","compressToBase64","_compress","decompressFromBase64","_decompress","compressed","charCodeAt","compressToUint8Array","uncompressed","buf","Uint8Array","TotalLen","current_value","decompressFromUint8Array","decompress","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","resetValue","getNextValue","w","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","entry","plural","msAbs","isPlural","long","fmtLong","fmtShort","root","ArrayProto","ObjProto","SymbolProto","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","nativeKeys","nativeCreate","nativeIsView","isView","_isNaN","_isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","restArguments","startIndex","isBoolean","tagTester","isDate","isRegExp","isError","isSymbol","isArrayBuffer","nodelist","childNodes","Int8Array","isFunction$1","hasObjectTag","hasStringTagBug","isIE11","Map","isDataView","isDataView$1","getInt8","buffer","has$1","isArguments$1","isNaN$1","constant","createSizePropertyCheck","getSizeProperty","sizeProperty","shallowProperty","getByteLength","isBufferLike","typedArrayPattern","isTypedArray$1","getLength","collectNonEnumProps","hash","emulatedSet","nonEnumIdx","proto","isMatch","attrs","_$1","_wrapped","toBufferView","bufferSource","byteOffset","valueOf","tagDataView","eq","aStack","bStack","deepEq","className","areArrays","aCtor","bCtor","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","setMethods","isMap","isWeakMap","isSet","isWeakSet","invert","functions","names","createAssigner","keysFunc","extendOwn","baseCreate","Ctor","toPath$1","toPath","deepGet","identity","matcher","optimizeCb","argCount","accumulator","baseIteratee","Infinity","createEscaper","escaper","testRegexp","replaceRegexp","escapeMap","_escape","_unescape","templateSettings","evaluate","noMatch","escapes","escapeRegExp","escapeChar","bareIdentifier","idCounter","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","callArgs","isArrayLike","flatten$1","depth","strict","j","len","bindAll","delay","negate","predicate","before","findKey","createPredicateIndexFinder","findIndex","findLastIndex","sortedIndex","low","high","mid","createIndexFinder","predicateFind","currentKey","createReduce","reducer","initial","reduceRight","list","every","some","guard","invoke","contextPath","pluck","computed","lastComputed","sample","rand","behavior","partition","groupBy","indexBy","countBy","pass","reStrSymbol","keyInObj","omit","first","difference","without","otherArrays","isSorted","seen","union","arrays","unzip","zip","chainResult","_chain","allExports","__proto__","isElement","isTypedArray","isEmpty","isEqual","pairs","tap","interceptor","mapObject","propertyOf","template","text","settings","oldSettings","render","argument","variable","fallback","uniqueId","memoize","hasher","address","throttle","previous","later","leading","throttled","_now","remaining","trailing","cancel","debounce","immediate","passed","debounced","_args","compose","after","collect","foldl","inject","foldr","select","any","include","where","shuffle","sortBy","criteria","right","size","take","tail","drop","flatten","unique","intersection","argsLength","transpose","range","step","ceil","factory","noGlobal","getProto","getPrototypeOf","flat","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","toType","num","pushStack","elems","prevObject","even","grep","_elem","odd","copyIsArray","isPlainObject","expando","isReady","msg","isEmptyObject","globalEval","makeArray","callbackExpect","guid","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pushNative","booleans","whitespace","attributes","pseudos","rwhitespace","rtrim","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","nonHex","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","seed","nid","newSelector","newContext","getElementById","getElementsByClassName","qsa","testContext","scope","toSelector","querySelectorAll","qsaError","removeAttribute","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","matchIndexes","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tmp","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","elements","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","relative","preFilter","excess","unquoted","nodeNameSelector","operator","check","_argument","simple","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","matched","unmatched","lang","elemLang","activeElement","hasFocus","tabIndex","checked","selected","selectedIndex","_matchIndexes","radio","checkbox","file","password","image","submit","tokens","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","_name","isXMLDoc","escapeSelector","until","truncate","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","firingIndex","fire","stopOnFalse","empty","lock","fireWith","Deferred","tuples","always","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","that","mightThrow","notifyWith","resolveWith","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","resolveContexts","resolveValues","master","updateFunc","rerrorNames","readyException","readyList","completed","catch","readyWait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","getData","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","display","adjustCSS","valueParts","tween","adjusted","maxIterations","currentValue","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","buildFragment","scripts","selection","ignored","attached","fragment","nodes","htmlPrefilter","createTextNode","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","one","origFn","leverageNative","notAsync","saved","isTrigger","delegateType","stopImmediatePropagation","Event","handleObjIn","eventHandle","handleObj","origType","elemData","triggered","dispatch","bindType","delegateCount","mappedTypes","origCount","removeEvent","handlerQueue","fix","delegateTarget","preDispatch","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","noBubble","beforeunload","returnValue","relatedTarget","isSimulated","altKey","ctrlKey","detail","charCode","keyCode","buttons","offsetX","offsetY","screenX","screenY","toElement","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","udataOld","udataCur","fixInput","domManip","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","insertBefore","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","swap","old","rboxStyle","curCSS","minWidth","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","getBoundingClientRect","scrollboxSizeBuggy","margin","padding","border","expand","expanded","propHooks","run","eased","duration","pos","fx","linear","swing","cos","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","classes","curValue","clazz","finalValue","toggleClass","stateVal","isValidValue","classNames","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","processData","contentType","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","hasContent","ifModified","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","username","xhrFields","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","delegate","undelegate","hover","fnOver","fnOut","proxy","holdReady","hold","parseJSON","_jQuery","_$","noConflict","previousBackbone","emulateHTTP","emulateJSON","addMethod","attribute","defaultVal","addUnderscoreMethods","Class","_isModel","modelMatcher","eventSplitter","eventsApi","internalOn","listening","_events","onApi","ctx","_listeners","listenTo","_listenId","listeningTo","_listeningTo","thisId","objId","offApi","listeners","stopListening","ids","_callback","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","a1","a2","a3","Model","cid","cidPrefix","validationError","_validate","unset","changes","changing","_changing","_previousAttributes","_pending","hasChanged","changedAttributes","previousAttributes","resp","serverAttrs","wrapError","validate","isNew","patch","urlError","Collection","models","comparator","_reset","setOptions","addOptions","at","singular","removed","_removeModels","added","merged","toMerge","toRemove","modelMap","sortable","sortAttr","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","_onModelEvent","prevId","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","_removeElement","setElement","undelegateEvents","_setElement","delegateEvents","_createElement","_setAttributes","methodMap","_method","textStatus","errorThrown","Router","_bindRoutes","optionalParam","namedParam","splatParam","_routeToRegExp","_extractParameters","execute","optional","History","checkUrl","routeStripper","rootStripper","pathStripper","atRoot","getSearch","matchRoot","decodeFragment","getHash","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iframe","iWindow","contentWindow","close","_checkUrlInterval","setInterval","detachEvent","clearInterval","title","_updateHash","protoProps","staticProps","__super__","featureName","hasOwnProp","TAGNAMES","docElement","mod","modElem","mStyle","inputElem","smile","prefixes","omPrefixes","cssomPrefixes","domPrefixes","tests","inputs","injectElementWithStyles","testnames","docOverflow","fakeBody","background","isEventSupported","isSupported","_hasOwnProperty","setCss","substr","testProps","testPropsAll","ucProp","testDOMProps","feature","F","getContext","fillText","WebGLRenderingContext","DocumentTouch","offsetTop","postMessage","openDatabase","backgroundColor","textShadow","str1","str2","backgroundImage","offsetLeft","sheet","styleSheet","cssRules","canPlayType","ogg","h264","webm","mp3","wav","m4a","sessionStorage","applicationCache","createElementNS","createSVGRect","HTMLDataListElement","inputElemType","WebkitAppearance","checkValidity","addTest","supportsHtml5Styles","supportsUnknownElements","html5","reSkip","saveClones","expanID","expandoData","getElements","getExpandoData","createElem","canHaveChildren","tagUrn","frag","shivDocument","shivCSS","hasCSS","addStyleSheet","createFrag","shivMethods","_version","_prefixes","_domPrefixes","_cssomPrefixes","mq","msMatchMedia","currentStyle","hasEvent","testProp","testAllProps","testStyles","ipad","ipod","iphone","formatted","Element","parentElement","NodeList","HTMLCollection","flattened","_createClass","defineProperties","descriptor","newObj","_interopRequireWildcard","_ajax","_ajax2","getDefaults","Backend","payload","addQueryString","paramName","queryStringParams","ActiveXObject","withCredentials","customHeaders","_cookie2","_interopRequireDefault","_querystring2","_localStorage2","_navigator2","_htmlTag2","_path2","_subdomain2","Browser","detectors","i18nOptions","excludeCacheFor","lookupFromUrlIndex","lookupFromPathIndex","addDetector","detector","detectionOrder","detected","detectorName","lookup","cleanedLng","cacheName","cookie","minutes","domain","expires","setTime","toGMTString","nameEQ","ca","cookieMinutes","cookieDomain","hasLocalStorageSupport","testKey","userLanguage","htmlTag","lookupFromSubdomainIndex","ele","extendDefault","translated","localize","targetSelector","customPropertyPrefix","config","THEME_PREFS","currentProperties","updated","currentThemeMode","fetchedCSS","getThemeMode","sessionKey","getKey","appAuthenticated","tokenAccess","pref","getStyleProperty","getLoginBackgroundUrl","setMetaThemeColor","meta","querySelector","setStyleProperty","removeProperty","setThemeMode","themeChanged","classList","i18ninit","Core"],"mappings":"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","file":"app.bundle.min.js?2.23.2.92950101.1696963302561","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t32: 0\n \t};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t32: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".bundle.min.js?2.23.2.92950101.1696963302561\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"6\":1,\"8\":1,\"12\":1,\"15\":1,\"19\":1,\"21\":1,\"24\":1,\"25\":1,\"26\":1,\"27\":1,\"28\":1,\"31\":1,\"33\":1,\"34\":1,\"35\":1,\"36\":1,\"39\":1,\"40\":1,\"41\":1,\"43\":1,\"44\":1,\"49\":1,\"53\":1,\"63\":1,\"64\":1,\"70\":1,\"77\":1,\"85\":1,\"98\":1,\"99\":1,\"100\":1,\"102\":1,\"104\":1,\"105\":1,\"117\":1,\"119\":1,\"123\":1,\"124\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"\" + chunkId + \".\" + \"a259baaa2d307b28a8a8\" + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"./assets/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 48);\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./underscore.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"_\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"_\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","/**\n * NetX extensions to jQuery.\n * It seems necessary to install these before Backbone is loaded in order to get\n * these new functions copied onto the scoped jQuery instances provided by Backbone.View.\n *\n * NOTE: Be sure to document new items in https://confluence.netx.net/display/DEV/X7+Library+Overrides%2C+Extensions+and+Mixins\n */\nimport jQuery from 'jquery';\n\nconst _show = jQuery.fn.show;\nconst _val = jQuery.fn.val;\n\n/**\n * Special event to listen for destroyed elements\n */\njQuery.event.special.destroyed = {\n\tremove(o) {\n\t\tif (o.handler) {\n\t\t\to.handler.apply(this, arguments);\n\t\t}\n\t},\n};\n\njQuery.extend(jQuery.expr[':'], {\n\t/**\n\t * Data pseudo selector\n\t */\n\tdata: jQuery.expr.createPseudo(function(dataName) {\n\t\treturn function(elem) {\n\t\t\treturn !!jQuery.data(elem, dataName);\n\t\t};\n\t}),\n});\n\n//\n// Added functions:\n//\njQuery.fn.extend({\n\t//\n\t// A HACK to support bootstrap-select: call refresh on the selectpicker plugin when we change the value.\n\t// (Really this should be done inside the plugin with a mutation observer).\n\t//\n\tval(val) {\n\t\t// Super\n\t\tvar ret = _val.apply(this, arguments);\n\n\t\t// If we have a selectpicker and we are trying to set a value (not get)\n\t\tif (this.data('selectpicker')) {\n\t\t\tif (!_.isUndefined(val)) {\n\t\t\t\tthis.selectpicker('render');\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t},\n\t/**\n\t * With $.nxVal, data-nx-value can override the nominal values of form elements.\n\t */\n\tnxVal() {\n\t\tvar d = this.data('nx-value');\n\t\tif (typeof d !== 'undefined') {\n\t\t\treturn d;\n\t\t} else {\n\t\t\treturn this.val();\n\t\t}\n\t},\n\t/**\n\t * turn the values of a set of checked checkboxes into an array --\n\t * you'd think jQuery would just do that, but no.\n\t * http://stackoverflow.com/questions/19766044/best-way-to-get-all-selected-checkboxes-values-in-jquery\n\t */\n\tboxesToVal() {\n\t\treturn this.find(':checked')\n\t\t\t.map(function() {\n\t\t\t\treturn this.value;\n\t\t\t})\n\t\t\t.get();\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Disable element.\n\t * @returns {object} The jQuery object\n\t */\n\tdisable() {\n\t\tthis.attr('disabled', true);\n\t\tthis.addClass('disabled');\n\t\treturn this;\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Enable element.\n\t * @returns {object} The jQuery object\n\t */\n\tenable() {\n\t\tthis.attr('disabled', false);\n\t\tthis.removeClass('disabled');\n\t\treturn this;\n\t},\n\t/**\n\t * NetX preferred method to enable/disable an element\n\t *\n\t * Enable/Disable element based on the bool passed.\n\t * @param {bool} bool True or false\n\t * @returns {object} The jQuery object\n\t */\n\tenableIf(bool) {\n\t\treturn bool ? this.enable() : this.disable();\n\t},\n\t/**\n\t * Check if typeahead menu is open\n\t * @method\n\t * @return {boolean}\n\t */\n\thasActiveTypeahead() {\n\t\tvar tt = this.data('ttTypeahead');\n\t\tvar $menu = tt && tt.menu.$node;\n\t\treturn $menu && $menu.hasClass('tt-open') && !$menu.hasClass('tt-empty');\n\t},\n\t/**\n\t * Check for collision between two elements\n\t * @param {object} b The jQuery object to test collision with\n\t * @returns {bool} Whether or not element has collision\n\t */\n\thasCollision(b) {\n\t\tvar aTop = this.offset().top,\n\t\t\taLeft = this.offset().left,\n\t\t\tbTop = b.offset().top,\n\t\t\tbLeft = b.offset().left;\n\n\t\treturn !(\n\t\t\taTop + this.outerHeight() < bTop ||\n\t\t\taTop > bTop + b.outerHeight() ||\n\t\t\taLeft + this.outerWidth() < bLeft ||\n\t\t\taLeft > bLeft + b.outerWidth()\n\t\t);\n\t},\n\t/**\n\t * Check if event is already bound to an element\n\t * @param {string} type The event type\n\t * @param {string} namespace The event namespace\n\t * @param {function} fn The function tied to the event\n\t * @returns {object} The jQuery object\n\t */\n\tisBound(type, namespace, fn) {\n\t\tvar data = jQuery._data(this[0], 'events')[type];\n\t\tif (typeof namespace === 'undefined') {\n\t\t\tnamespace = '';\n\t\t}\n\t\tif (data === undefined || data.length === 0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof fn !== 'undefined') {\n\t\t\treturn -1 !== jQuery.inArray(fn, data);\n\t\t}\n\t\tvar found = false;\n\t\tjQuery.each(data, function(d) {\n\t\t\tif (typeof d === 'object') {\n\t\t\t\tif (\n\t\t\t\t\ttypeof d.type !== 'undefined' &&\n\t\t\t\t\td.type == type &&\n\t\t\t\t\ttypeof d.namespace !== 'undefined' &&\n\t\t\t\t\td.namespace == namespace\n\t\t\t\t) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn found;\n\t},\n\t/**\n\t * Checks whether or not an element is hidden.\n\t * @returns {bool} True if hidden, else false\n\t */\n\tisHidden() {\n\t\treturn !this.is(':visible'); // http://stackoverflow.com/questions/178325/testing-if-something-is-hidden-with-jquery\n\t},\n\t/**\n\t * Checks whether or not an element is within a modal.\n\t * @returns {bool} True if modal, else false\n\t */\n\tisModal() {\n\t\treturn Boolean(this.closest('.modal').length);\n\t},\n\n\t/**\n\t * Checks the boolean data-nx-ignore condition of this element, for a particular key.\n\t * If not found on the current element, we search for it up the tree using .closest()\n\t * We can use this for overriding NX behaviours on various elements.\n\t *\n\t * So far the supported keys are all used by FormView form processing:\n\t *\n\t * 'change': (was data-nx-form-ignore) FormView ignores change events on fields for which this is set.\n\t * 'validate': (was data-nx-ignore-field) Form validation does not validate form fields for which this is set.\n\t * 'matrix': FormView's read-only mode will not disable form fields for which this is set.\n\t *\n\t * However, this is intended to be extensible for overriding any Netx.View behaviors that need it.\n\t *\n\t * @param {string} key\n\t * @returns {bool}\n\t */\n\tnxIgnores(key) {\n\t\t// Search for our key in this list of deprecations:\n\t\tvar deprecations = {\n\t\t\tchange: 'form-ignore',\n\t\t\tvalidation: 'ignore-field',\n\t\t};\n\n\t\tvar selector = '[data-nx-ignore~=\"' + key + '\"]';\n\t\t// hopefully undef.\n\t\tvar dep = deprecations[key];\n\t\tif (dep) {\n\t\t\tselector += ',[data-nx-' + dep + ']';\n\t\t}\n\n\t\tvar el = this.closest(selector);\n\t\tif (el.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Okay, deprecation is over, the rest is more logical.\n\t\t// Split by whitespace:\n\t\tvar keys = this.nxData('ignore');\n\t\tif (keys) {\n\t\t\tkeys = keys.split(/\\s+/);\n\t\t\treturn keys.indexOf(key) >= 0;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t/**\n\t * Adds a key to the data-nx-ignore attribute\n\t * @return this\n\t */\n\tnxIgnore(key) {\n\t\tlet keys = this.nxData('ignore') || '';\n\t\tkeys = _.uniq(keys.split(/\\s+/).concat(key)).join(' ');\n\t\tthis.nxData('ignore', keys);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Removes a key from the data-nx-ingore attribute\n\t * @return this\n\t */\n\tnxUnignore(key) {\n\t\tlet keys = this.nxData('ignore');\n\t\tif (keys == null) return this;\n\t\t\n\t\tkeys = keys.split(/\\s+/).filter(k => k !== key).join(' ');\n\t\tthis.nxData('ignore', keys);\n\t\t\n\t\treturn this;\n\t},\n\n\t/**\n\t * Gets/sets a data-nx-* key (X7-specific element data.)\n\t */\n\tnxData(key, newVal) {\n\t\t// Return all `nx-`\n\t\tif (!key) {\n\t\t\treturn _.pick(this.data(), (v, k) => k.match(/^nx/));\n\t\t}\n\t\t\n\t\t// Set new value\n\t\tif (newVal != null) {\n\t\t\treturn this.data(`nx-${key}`, newVal);\n\t\t}\n\t\t\n\t\t// Return specific `nx-`\n\t\treturn this.data(`nx-${key}`);\n\t},\n\n\t/**\n\t * Removes a data-nx-* key.\n\t */\n\tnxRemoveData(key) {\n\t\tkey = 'nx-' + key;\n\t\t// https://api.jquery.com/removeData/\n\t\tthis.removeData(key);\n\t\tthis.removeAttr(key);\n\t\treturn;\n\t},\n\t/**\n\t * wrap $.show() to also remove our deprecated 'hide' class\n\t */\n\tshow() {\n\t\tif (this.hasClass('hide')) {\n\t\t\t// TODO: Discuss this deprecation\n\t\t\t// console.warn('v8 \"hide\" class is deprecated, gone in 8.10');\n\t\t\tthis.removeClass('hide');\n\t\t}\n\t\treturn _show.apply(this, arguments);\n\t},\n\t/**\n\t * turn an array value into the state of a set of checkboxes\n\t */\n\tvalToBoxes(val) {\n\t\t_.each(this.find('checkbox'), function(c) {\n\t\t\tjQuery(c).prop('checked', val.indexOf(c.value) > -1);\n\t\t});\n\t},\n\t/**\n\t * Set or get the zIndex of an element\n\t * Brought over from jQuery UI\n\t * http://jqueryui.com/\n\t * @param {integer} zIndex The zIndex to set for the element (if omitted it will get the zIndex of the element)\n\t * @returns {*} Either the jQuery object or the zIndex of the element\n\t */\n\tzIndex(zIndex) {\n\t\tif (zIndex !== undefined) {\n\t\t\treturn this.css('zIndex', zIndex);\n\t\t}\n\n\t\tif (this.length) {\n\t\t\tvar elem = $(this[0]),\n\t\t\t\tposition,\n\t\t\t\tvalue;\n\t\t\twhile (elem.length && elem[0] !== document) {\n\t\t\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t\t\t// This makes behavior of this function consistent across browsers\n\t\t\t\t// WebKit always returns auto if the element is positioned\n\t\t\t\tposition = elem.css('position');\n\t\t\t\tif (\n\t\t\t\t\tposition === 'absolute' ||\n\t\t\t\t\tposition === 'relative' ||\n\t\t\t\t\tposition === 'fixed'\n\t\t\t\t) {\n\t\t\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t\t\t// other browsers return a string\n\t\t\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t\t\t//
\n\t\t\t\t\tvalue = parseInt(elem.css('zIndex'), 10);\n\t\t\t\t\tif (!isNaN(value) && value !== 0) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telem = elem.parent();\n\t\t\t}\n\t\t}\n\n\t\treturn 0;\n\t},\n\t/**\n\t * Purge a selection. That is, remove from this jQuery array any selection\n\t * that is a descendant of one of the arguments. Useful for removing the contents\n\t * of child views from a parent view's selection.\n\t *\n\t * This is different from jQuery's :not() selector, which can only filter a\n\t * selection based on its own contents. purge() specifically removes items in the\n\t * selection array which have one of the provided arguments as an ancestor.\n\t *\n\t * Parameters are either a set of DOM elements, or a single array containing such a set of elements (ala jQuery)\n\t */\n\tpurge() {\n\t\t// flexible args\n\t\tif (arguments.length === 0) {\n\t\t\treturn this;\n\t\t} // an optimization for the most common case\n\n\t\tif (arguments.length === 1 && _.isArray(arguments[0])) {\n\t\t\t// if we were passed an array,\n\t\t\treturn this.purge.apply(this, arguments[0]); // convert that array to arguments\n\t\t}\n\n\t\tvar args = _.toArray(arguments);\n\t\tvar result = this.filter(function(idx, el) {\n\t\t\tvar allowed = true;\n\t\t\t_.each(args, function(arg) {\n\t\t\t\tif (allowed === false) {\n\t\t\t\t\treturn;\n\t\t\t\t} // optimization\n\t\t\t\tif ($(arg).has(el).length) {\n\t\t\t\t\tallowed = false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn allowed;\n\t\t});\n\t\treturn result;\n\t},\n});\n\n// Turn tap events into clicks\njQuery.event.special.tapToClick = {\n\tsetup: function(data, namespaces) {\n\t\tvar $elem = $(this);\n\t\t$elem.bind('touchstart', $.event.special.tapToClick.handler)\n\t\t\t.bind('touchmove', $.event.special.tapToClick.handler)\n\t\t\t.bind('touchend', $.event.special.tapToClick.handler);\n\t},\n\tteardown: function(namespaces) {\n\t\tvar $elem = $(this);\n\t\t$elem.unbind('touchstart', $.event.special.tapToClick.handler)\n\t\t\t.unbind('touchmove', $.event.special.tapToClick.handler)\n\t\t\t.unbind('touchend', $.event.special.tapToClick.handler);\n\t},\n\thandler: function(event) {\n\t\tvar $elem = $(this);\n\t\t$elem.data(event.type, 1);\n\t\tif (event.type === 'touchend' && !$elem.data('touchmove')) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.click();\n\t\t} else if ($elem.data('touchend')) {\n\t\t\t$elem.removeData('touchstart touchmove touchend');\n\t\t}\n\t}\n};\n\nexport default jQuery;\n","import jQuery from '@netx/core/lib/jquery-netx';\n\njQuery.fn.extend({\n\t/**\n\t * Material design\n\t * @override\n\t */\n\tdisable() {\n\t\tthis.attr('disabled', true);\n\t\tthis.addClass('disabled');\n\t\tif (this.hasClass('mdc-list-item')) {\n\t\t\tthis.addClass('mdc-list-item--disabled');\n\t\t}\n\t\treturn this;\n\t},\n\t/**\n\t * Material design\n\t * @override\n\t */\n\tenable() {\n\t\tthis.attr('disabled', false);\n\t\tthis.removeClass('disabled');\n\t\tif (this.hasClass('mdc-list-item')) {\n\t\t\tthis.removeClass('mdc-list-item--disabled');\n\t\t}\n\t\treturn this;\n\t},\n});\n\nexport default jQuery;\n","import Backbone from 'backbone';\n\n/**\n * NetX Enhancements to Backbone.sync:\n *\n * A HTTP header is added if Netx.Session is storing an authentication token.\n */\n// NOTE: this doesn't deal properly with multiple simultaneous syncs of the same model ... will that ever come up?\nBackbone.sync = _.wrap(Backbone.sync, function(sync, method, model, options) {\n\t// Add token header to options if we have a token.\n\tvar token = Netx.session.getToken();\n\tif (token) {\n\t\toptions = options || {};\n\t\toptions.headers = _.extend(\n\t\t\t{\n\t\t\t\t'NX-Auth-Token': token,\n\t\t\t},\n\t\t\toptions.headers || {},\n\t\t);\n\t}\n\t// should be a no-op.\n\treturn sync(method, model, options);\n});\n\n/**\n * NetX Enhancements to Backbone.Events:\n *\n * retrigger\n *\n * A listener often needs to re-trigger an event on a different object, passing along the arguments it received.\n * Our current pattern do that looks like this:\n *\n * object.trigger.apply(object, ['eventName'].concat(_.toArray(arguments)));\n *\n * Backbone.Events.retrigger() takes an event name and an 'args' parameter that's either a normal array or an arguments object,\n * so that we may instead use this much prettier pattern:\n *\n * object.retrigger(eventName, arguments);\n *\n * @param {string} eventName\n * @param {arguments|array} args\n */\nBackbone.Events.retrigger = function(eventName, args) {\n\treturn this.trigger.apply(this, [eventName].concat(_.toArray(args)));\n};\n\nexport default Backbone;","// Our local storage plugin\nimport Locally from 'locallyjs';\n\n////////////////////////////////////////////\n// Netx global namespace\n////////////////////////////////////////////\n// Setup global namespace\n/**\n * @namespace\n * @static\n */\nconst Netx = {\n\tversion: '2.23.2.92950101',\n\t/**\n\t * @namespace\n\t * @static\n\t */\n\tcustom: {},\n\tgetUserLevel: () => -1,\n\tgetPreference: () => false,\n\tsetPreference: () => true,\n\t/**\n\t * Various DAM-related static properties\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t * @property {array} states - A list of states (provided by the DAM)\n\t * @property {array} countries - A list of countries (provided by the DAM)\n\t * @property {array} attributes - A list of i18n labels for asset properties\n\t * @property {array} assetAttributes.ids - Map from label to IDs for asset metadata types\n\t * @property {array} assetAttributes.numberTypes - Labels, warnings & validators for the various numeric sub-types\n\t * @property {array} assetAttributes.types - Map from IDs to labels for asset metadata types\n\t * @property {array} search - Labels and metadata for the various fields of a searchAssetListObjects() RPC call, as used by Netx.Collections.Assets & others\n\t * @todo refactor 'attributes' to 'attributeLabels'\n\t * @todo assetAttributes.ids and .types are redundant; refactor.\n\t * @private\n\t */\n\tproperties: {},\n\t/**\n\t * Netx.router is our instance of Backbone.Router\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\trouter: {\n\t\troutes: {},\n\t},\n\trouterReady: false,\n\t//https://github.com/ozantunca/locally\n\tstore: new Locally.Store({\n\t\t// DAM-19220 - set to false\n\t\tcompress: false,\n\t}),\n\t/**\n\t * We create a dummy Netx.user.profile here describing an unauthenticated user;\n\t * This will be overwritten with real user data when we authenticate.\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\tuser: {},\n\t/**\n\t * When controllers need a View to have a public name -- i.e. when several listeners need to operate on the same View --\n\t * the controller can put that Views in Netx.views; it can be named anything, but by convention it's usually given the\n\t * name of the template, which by convention is the View class name lowercased.\n\t * For instance, Netx.views.assetDetailView is an instance of Netx.Views.AssetDetailView used by the asset controller.\n\t * @memberOf Netx\n\t * @namespace\n\t * @static\n\t */\n\tviews: {},\n\t/**\n\t * Netx.Collections namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tCollections: {},\n\t/**\n\t * Netx.Models namespace maintains model class definitions\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tModels: {},\n\t/**\n\t * Netx.Routers namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tRouters: {},\n\t/**\n\t * Netx.ShareableTypes holds objects describing things that the DAM can share, along with verbiage to describe those things.\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tShareableTypes: {},\n\t/**\n\t * Netx.Views namespace\n\t * @memberof Netx\n\t * @namespace\n\t * @static\n\t */\n\tViews: {},\n};\nexport default Netx;\nwindow.Netx = Netx;\n\n// Some broad configurations that can not live in the app module\nimport opts from './config';\nwindow.custom = opts;\n////////////////////////////////////////////\n// !Netx global namespace\n////////////////////////////////////////////\n\n////////////////////////////////////////////\n// App utility libraries\n////////////////////////////////////////////\n// Underscore overrides/enhancements\nimport './lib/underscore-netx';\n\n// jQuery overrides/enhancements\nimport './lib/jquery-netx';\n\n// Load in backbone\nimport './lib/backbone-netx';\n// Create global event dispatcher\nexport const dispatcher = (window.dispatcher = {...Backbone.Events});\n\n// Modernizr\nimport 'core-libs/modernizr/modernizr';\nimport 'core-libs/modernizr-tests-0.0.1';\n\n// Polyfills\nimport 'core-libs/polyfills/polyfills-netx';\n\n// Hammerjs (for cross platform gestures)\nimport Hammer from 'hammerjs';\nwindow.Hammer = Hammer;\n////////////////////////////////////////////\n// !App utility libraries\n////////////////////////////////////////////\n\n////////////////////////////////////////////\n// Netx module intialization\n////////////////////////////////////////////\n/**\n * Modules already initialized indexed by namespace\n * @type {array}\n */\nconst initializedModules = [];\n/**\n * Modules currently initializing indexed by namespace and storing the promise to the original initialization call for that module\n * @type {object}\n */\nconst initializingModules = {};\n\n/**\n * Module initialization helper\n * @function\n * @global\n * @param {array|object} modules Module(s) to initialize\n * @param {object} opts Options\n */\n// https://stackoverflow.com/questions/37787123/is-it-possible-to-let-webpacks-system-import-use-ajax-for-progress-events\n// One day we could look into extending the webpack functionality with our own plugin to allow for XHR requests of\n// all of our bundles - then we could use a `progress` event on it and dispatch refined progress\nconst initializeModule = function (modules, opts = {}) {\n\t// Convert to array if not already\n\tmodules = _.isArray(modules) ? modules : [modules];\n\n\treturn new Promise((resolve, reject) => {\n\t\tvar idx = 0,\n\t\t\tnewModules = 0,\n\t\t\troutesToAdd = {},\n\t\t\ttotal = modules.length;\n\n\t\t// Go on to next module (or resolve)\n\t\tfunction next() {\n\t\t\tidx++;\n\t\t\tidx < total ? init() : finished();\n\t\t}\n\n\t\t// Initialize module\n\t\tfunction init() {\n\t\t\tvar m = modules[idx],\n\t\t\t\tnamespace = m.namespace;\n\n\t\t\t// Check if already initialized\n\t\t\tif (_.contains(initializedModules, namespace)) {\n\t\t\t\treturn next();\n\t\t\t}\n\n\t\t\t// Are we already initializing this module - listen for its completion\n\t\t\t// and then continue on\n\t\t\tif (!_.isUndefined(initializingModules[namespace])) {\n\t\t\t\treturn initializingModules[namespace].then(next);\n\t\t\t}\n\n\t\t\t// We are initializing this module now\n\t\t\tdispatcher.trigger(\n\t\t\t\t'netx:initializing:module',\n\t\t\t\tnamespace,\n\t\t\t\t(idx / total) * 100,\n\t\t\t\topts.deferred,\n\t\t\t\topts.loadUrl,\n\t\t\t);\n\n\t\t\t// Store promise\n\t\t\tinitializingModules[namespace] = m.initialize().then(\n\t\t\t\tfunction (routes) {\n\t\t\t\t\t// If the module was deferred remove its wildcard route now\n\t\t\t\t\tif (\n\t\t\t\t\t\topts.deferred &&\n\t\t\t\t\t\tNetx.router.routes[m.namespace + '(/*anything)']\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete Netx.router.routes[m.namespace + '(/*anything)'];\n\t\t\t\t\t}\n\t\t\t\t\t// Add routes to queue\n\t\t\t\t\troutes && _.extend(routesToAdd, routes);\n\t\t\t\t\t// Store namespace in modules initialized array\n\t\t\t\t\tinitializedModules.push(namespace);\n\t\t\t\t\t// A new module was initialized\n\t\t\t\t\tnewModules++;\n\t\t\t\t\t// Remove initialize promise from the initializing array\n\t\t\t\t\tdelete initializingModules[namespace];\n\t\t\t\t\t// Dispatche event\n\t\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t\t'netx:initialized:module',\n\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\t((idx + 1) / total) * 100,\n\t\t\t\t\t\topts.deferred,\n\t\t\t\t\t\topts.loadUrl,\n\t\t\t\t\t);\n\t\t\t\t\t// Next module or resolve\n\t\t\t\t\tnext();\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\t// When all modules are initialized\n\t\tfunction finished() {\n\t\t\t// Defer to allow anything hooked on any of the module initialized promises to respond\n\t\t\t_.defer(function () {\n\t\t\t\t// Only if new modules were intialized\n\t\t\t\tif (newModules) {\n\t\t\t\t\t// Add all new routes\n\t\t\t\t\tNetx.router.addRoutes(routesToAdd);\n\t\t\t\t\t// Load route url when all modules are loaded\n\t\t\t\t\topts.loadUrl && Netx.routerReady && Backbone.history.loadUrl();\n\t\t\t\t}\n\t\t\t});\n\t\t\tresolve(modules);\n\t\t}\n\n\t\t// Start\n\t\tinit();\n\t});\n};\n\n/**\n * @event module:netx#netx:load:module\n * @param {array|object} modules Module object or an array of module objects\n * @param {object} opts Options\n */\ndispatcher.on('netx:load:module', function (modules, opts) {\n\topts = opts || {};\n\tinitializeModule(\n\t\tmodules,\n\t\t_.extend(\n\t\t\t{\n\t\t\t\tdeferred: false,\n\t\t\t\tloadUrl: false,\n\t\t\t},\n\t\t\t_.pick(opts, 'deferred', 'loadUrl'),\n\t\t),\n\t).then(\n\t\tfunction () {\n\t\t\t_.isFunction(opts.initialized) && opts.initialized();\n\t\t},\n\t\tfunction (err) {\n\t\t\t_.isFunction(opts.error) && opts.error(err);\n\t\t},\n\t);\n});\n\n/**\n * @event module:netx#netx:load:deferred:module\n * @param {array|object} modules Module object or an array of module objects\n * @param {object} opts Options\n */\ndispatcher.on('netx:load:deferred:module', function (modules, opts) {\n\tdispatcher.trigger(\n\t\t'netx:load:module',\n\t\tmodules,\n\t\t_.extend({deferred: true}, opts),\n\t);\n});\n////////////////////////////////////////////\n// !Netx module intialization\n////////////////////////////////////////////\n\n/*******\n * The following logic builds the Netx.URL object\n * which contains all relevant path information\n * such as host, protocol, query string, base, api\n * endpoint, etc.\n *\n * TODO: could this go in configure.js ?\n */\n// Set API version\nlet api = (Netx.api = {});\n// Allow an instance to override the default API version via config.js\napi.version = 'v' + (!_.isUndefined(opts.API) ? opts.API : '1.2');\n// API endpoint\napi.endpoint = `/x7/${api.version}/json`;\nexport const URL = (Netx.URL = {});\n// Set the global host\nURL.host = window.location.host;\n// Set the global location\nURL.location = window.location.href.toString();\n// Set the global protocol\nURL.protocol = URL.location.split(URL.host)[0];\n// Set matching socket protocol, ws: or wss:\nURL.websocketProtocol = URL.protocol.replace(/http/, 'ws');\n// Set the query string variables\nURL.queryString = URL.location.split(URL.host)[1];\n// Set the base directory\nURL.baseDir = window.location.pathname;\n// Set the base url\nURL.base = URL.protocol + URL.host + URL.baseDir;\n// Set the api end point\nURL.apiEndpoint = api.endpoint;\n// Set the api url\nURL.api = Netx.URL.protocol + URL.host + URL.apiEndpoint;\n// Set the default location of the rpc proxy\nURL.proxyApiEndpoint = '/core/proxy/';\nURL.proxyApi = URL.protocol + URL.host + URL.proxyApiEndpoint;\n// Upload-specific settings.\nURL.uploadEndpoint = '/servlet/FileUploader';\n//Netx.URL.assetRetrieval = \"/servlet/AssetRetrieval\"; // deprecated\nURL.upload = URL.protocol + URL.host + URL.uploadEndpoint;\n// Set the deprecated api key to the new URL object ref\n// Asset retrieval servlet (for zoom)\nURL.assetEndpoint = '/file/asset';\nURL.asset = URL.protocol + URL.host + URL.assetEndpoint;\n\nURL.assetFileApiEndpoint = `${URL.protocol}${URL.host}/api/file/asset/`;\n\nconst themeName = (Netx.themeName =\n\twindow.location.pathname.match(/\\/portals\\/(.*)\\//)?.[1] || 'netx');\n\n// Branding\n// Login background (only for netx theme currently)\nURL.loginBackgroundEndpoint = '/theme/netx/background';\nURL.loginBackground = URL.protocol + URL.host + URL.loginBackgroundEndpoint;\n\n// Watermark\nURL.watermarkEndpoint = `/theme/${themeName}/watermark`;\nURL.watermark = `${URL.protocol}${URL.host}${URL.watermarkEndpoint}`;\n\n// CSS Properties (vars)\nURL.customCssPropertiesEndpoint = `/theme/${themeName}/cssCustomProperties`;\nURL.customCssProperties =\n\tURL.protocol + URL.host + URL.customCssPropertiesEndpoint;\n\n// Logos (only for netx theme currently)\nURL.logoLightEndpoint = '/theme/netx/logo-light';\nURL.logoDarkEndpoint = '/theme/netx/logo-dark';\nURL.logoLight = URL.protocol + URL.host + URL.logoLightEndpoint;\nURL.logoDark = URL.protocol + URL.host + URL.logoDarkEndpoint;\n\n// This is to holdover portal until both `netx` and `portal` use the same branding mechanism\nURL.themeLogo = themeName !== 'netx' ? `/theme/${themeName}/logo` : '';\n\napi = URL.api;\n\nURL.websocket = `${URL.websocketProtocol}${URL.host}/websocket`;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./jquery.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","// Will fix translations below\nexport const modes = {\n\tlight: '',\n\tdark: '',\n};\n\nexport enum NetxThemePref {\n\tDEFAULT = 'default',\n\tDARK = 'dark',\n\tLIGHT = 'light',\n}\n\nexport const NetxThemePrefLabels = {\n\t[NetxThemePref.DEFAULT]: i18n.t('i18n.themeModeDefault'),\n\t[NetxThemePref.DARK]: i18n.t('i18n.themeModeDark'),\n\t[NetxThemePref.LIGHT]: i18n.t('i18n.themeModeLight'),\n};\n\nexport const userPref = 'app:brand:mode';\n\n// Fix translations since we are loaded in tendem with i18n\ndispatcher.once('app:i18n:ready', () => {\n\tObject.assign(NetxThemePrefLabels, {\n\t\t[NetxThemePref.DEFAULT]: i18n.t('i18n.themeModeDefault'),\n\t\t[NetxThemePref.DARK]: i18n.t('i18n.themeModeDark'),\n\t\t[NetxThemePref.LIGHT]: i18n.t('i18n.themeModeLight'),\n\t});\n});\n\nexport default {modes, userPref};\n","/**\n * @module app/config\n */\n\nexport default {\n\tCSS_CUSTOM_PROPERTY_PREFIX: '--theme-',\n\tCSS_CUSTOM_PROPERTIES: {\n\t\t'light-primary': '#327FEF',\n\t\t'light-on-primary': '#ffffff',\n\n\t\t'light-secondary': '#327FEF',\n\t\t'light-on-secondary': '#ffffff',\n\n\t\t'dark-primary': '#327FEF',\n\t\t'dark-on-primary': '#eee',\n\n\t\t'dark-secondary': '#327FEF',\n\t\t'dark-on-secondary': '#eee',\n\t},\n\tDEFAULT_THEME_MODE: 'light',\n\n\t/**\n\t * The standard date format that all API calls should return\n\t * WARNING: Not all dates have been corrected on the server\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tDATE_FORMAT: 'YYYY-MM-DD HH:mm:ss.SSS',\n\n\t/**\n\t * The DAM (server) version this client instance requires,\n\t * specified in the format of 'semver' -- https://github.com/npm/node-semver\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tREQUIRED_SERVER_VERSION: '>=8.12.x', // at least version 8.12\n\t/**\n\t * CSS id of application wrapper\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCONTAINER_ID: 'wrapper',\n\t/**\n\t * CSS id of login container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tLOGIN_CONTAINER_ID: 'login',\n\t/**\n\t * CSS id of alert container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tALERT_CONTAINER_ID: 'alerts',\n\t/**\n\t * CSS id of gallery container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tGALLERY_CONTAINER_ID: 'gallery',\n\t/**\n\t * CSS id of tack container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTACK_CONTAINER_ID: 'tack',\n\t/**\n\t * CSS id of header container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tHEADER_CONTAINER_ID: 'header',\n\t/**\n\t * CSS id of modal container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tMODAL_CONTAINER_ID: 'modal',\n\n\t/**\n\t * Interval used for polling in milliseconds\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tPOLL_INTERVAL: 5000,\n\t/**\n\t * Length of time passive alert will display before fade out\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tPASSIVE_ALERT_DELAY: 1000,\n};\n","import Config from '@netx/core-app/config';\n\nObject.assign(Config, {\n\tCSS_CUSTOM_PROPERTY_PREFIX: '--mdc-theme-',\n\tPASSIVE_ALERT_DELAY: 2500,\n\tCONTACT_EMAIL: ['support@netx.net'],\n});\n\nexport default Config;\n","export const safeReplaceInArray = function (\n\tarray: T[],\n\tindex: number,\n\treplaceWith: T,\n) {\n\tconst newArray = [...array];\n\tnewArray.splice(index, 1, replaceWith);\n\treturn newArray;\n};\n\nexport default safeReplaceInArray;\n","export const simulateClickBody = () => {\n\tconst evt = new MouseEvent('click', {\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tview: window,\n\t});\n\tconst canceled = !document.body.dispatchEvent(evt);\n};\n\nexport default simulateClickBody;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!./backbone.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\n___EXPOSE_LOADER_GLOBAL_THIS___[\"Backbone\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","//\n// Custom module settings\n// ----------------------\n\nexport default {\n\t// Point this instance of the web files at a remote DAM or proxy\n\t/*DAM_URL: \"http://your.remote.dam\",*/\n\n\t//API: '1.1',\n\n\t// Is a login required? (Default true)\n\t/*REQUIRE_LOGIN: false,*/\n\n\t// Length of the console history log; to disable, set to zero.\n\tCONSOLE_HISTORY_LENGTH: 0,\n\n\t// Display misc RPC exceptions to the user? (Default is false.)\n\t// SHOW_RPC_ALERT: true,\n\n\t// If HOME_ROUTE is set the app will fire its value as the startup route\n\tHOME_ROUTE: 'dashboard',\n\n\t// If TIME_RENDERS is set, the app will log to the console the elapsed time in ms for every view.render() call.\n\t// TIME_RENDERS: true,\n};\n","import type {ReactAction} from '@netx/core/bootstrap';\n\nexport const actionsToOrderedActions = (\n\tactions: ReactAction[],\n): Array => {\n\tconst groups = actions\n\t\t.reduce((groups, action) => {\n\t\t\tconst group = action.group || 0;\n\t\t\tconst actionGroup = (groups[group] = groups[group] || []);\n\t\t\tactionGroup.push(action);\n\t\t\treturn groups;\n\t\t}, [])\n\t\t.filter((group) => group)\n\t\t.map((actionGroup) => {\n\t\t\tactionGroup.sort((a, b) => a.label.localeCompare(b.label));\n\n\t\t\tconst splitActions = actionGroup.reduce(\n\t\t\t\t(splitActions, action) => ({\n\t\t\t\t\tordered:\n\t\t\t\t\t\taction.order != null\n\t\t\t\t\t\t\t? [...splitActions.ordered, action]\n\t\t\t\t\t\t\t: splitActions.ordered,\n\t\t\t\t\tunordered:\n\t\t\t\t\t\taction.order == null\n\t\t\t\t\t\t\t? [...splitActions.unordered, action]\n\t\t\t\t\t\t\t: splitActions.unordered,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tordered: [] as ReactAction[],\n\t\t\t\t\tunordered: [] as ReactAction[],\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn [\n\t\t\t\t...splitActions.ordered.sort((a, b) => a.order! - b.order!),\n\t\t\t\t...splitActions.unordered,\n\t\t\t];\n\t\t});\n\n\treturn groups.length === 1 ? groups[0] : groups;\n};\n\nexport default actionsToOrderedActions;\n","/**\n * Append query params to url string\n * @param url URL\n * @param queryParams Query params\n * @returns New URL string\n * @example\n * appendQueryObjectToURL(\"https://lorem.ipsum\", {\"foo\": \"bar\"});\n * // => https://lorem.ipsum/?foo=bar\n * appendQueryObjectToURL(\"https://lorem.ipsum/?dolar=sit\", {\"foo\": \"bar\"});\n * // => https://lorem.ipsum/?dolar=sit&foo=bar\n */\nexport const appendQueryObjectToURL = (\n\turl: string,\n\tqueryParams: Record,\n) => {\n\tconst _url = new URL(url);\n\tObject.entries(queryParams).forEach(([key, value]) =>\n\t\t_url.searchParams.append(key, value.toString()),\n\t);\n\treturn _url.toString();\n};\n\nexport default appendQueryObjectToURL;\n","import _ from 'underscore';\n\nexport const arrayToCsv = (array: any, spaces?: boolean) => {\n\tif (!array) return '';\n\n\tif (_.isString(array)) return array;\n\n\treturn _.map(array, (v) => `\"${v}\"`).join(',' + (spaces ? ' ' : ''));\n};\n\nexport default arrayToCsv;\n","export const asyncForEach = async = any[]>(\n\tarray: T,\n\tcb: (item: T[number], index: number, array: T) => Promise,\n) => {\n\tfor (let index = 0; index < array.length; index++) {\n\t\tawait cb(array[index], index, array);\n\t}\n};\n\nexport default asyncForEach;\n","export const caseInsensitiveStringIncludes = (str: string, includes: string) =>\n\tstr.toLocaleLowerCase().includes(includes.toLowerCase());\n\nexport default caseInsensitiveStringIncludes;\n","export const createSyntheticEvent = (\n\tevent: E,\n): React.SyntheticEvent => {\n\tlet isDefaultPrevented = false;\n\tlet isPropagationStopped = false;\n\tconst preventDefault = () => {\n\t\tisDefaultPrevented = true;\n\t\tevent.preventDefault();\n\t};\n\tconst stopPropagation = () => {\n\t\tisPropagationStopped = true;\n\t\tevent.stopPropagation();\n\t};\n\treturn {\n\t\t...((event as any).key != null\n\t\t\t? {\n\t\t\t\t\tkey: (event as any).key as string,\n\t\t\t\t\tmetaKey: (event as any).metaKey as boolean,\n\t\t\t\t\tshiftKey: (event as any).shiftKey as boolean,\n\t\t\t }\n\t\t\t: {}),\n\t\tnativeEvent: event,\n\t\tcurrentTarget: event.currentTarget as EventTarget & T,\n\t\ttarget: event.target as EventTarget & T,\n\t\tbubbles: event.bubbles,\n\t\tcancelable: event.cancelable,\n\t\tdefaultPrevented: event.defaultPrevented,\n\t\teventPhase: event.eventPhase,\n\t\tisTrusted: event.isTrusted,\n\t\tpreventDefault,\n\t\tisDefaultPrevented: () => isDefaultPrevented,\n\t\tstopPropagation,\n\t\tisPropagationStopped: () => isPropagationStopped,\n\t\tpersist: () => {},\n\t\ttimeStamp: event.timeStamp,\n\t\ttype: event.type,\n\t};\n};\n","/**\n * Util to convert from the DAM's quoted-csv format for multiselects to a normal array\n */\nexport const csvToArray = (csv?: string[] | string, sep = ',') => {\n\tif (!csv) return [];\n\tif (Array.isArray(csv)) return csv;\n\n\t// the server will not wrap values in additional quotes if there is only 1 value\n\t// if we parse that one value we may end up splitting a value that contains commas\n\t// so, if we start with a \" and end with a \"\n\t// single value example string: \"Half sunk a shattered visage lies, whose frown,\"\n\t// multiple value example string: \"\\\"Who said—“Two vast and trunkless legs of stone\\\",\\\"\\\"I met a traveller from an antique land,\\\"\"\n\tif (csv.slice(0, 1) !== '\"' && csv.slice(-1) !== '\"') {\n\t\treturn [csv];\n\t}\n\n\t// https://greywyvern.com/?post=258\n\tfor (\n\t\t// eslint-disable-next-line no-var\n\t\tvar foo = csv.split((sep = sep || ',')), x = foo.length - 1, tl;\n\t\tx >= 0;\n\t\tx--\n\t) {\n\t\tif (foo[x].replace(/\"\\s+$/, '\"').charAt(foo[x].length - 1) == '\"') {\n\t\t\tif (\n\t\t\t\t(tl = foo[x].replace(/^\\s+\"/, '\"')).length > 1 &&\n\t\t\t\ttl.charAt(0) == '\"'\n\t\t\t) {\n\t\t\t\tfoo[x] = foo[x].replace(/^\\s*\"|\"\\s*$/g, '').replace(/\"\"/g, '\"');\n\t\t\t} else if (x) {\n\t\t\t\tfoo.splice(x - 1, 2, [foo[x - 1], foo[x]].join(sep));\n\t\t\t} else foo = foo.shift()?.split(sep).concat(foo) || [''];\n\t\t} else foo[x].replace(/\"\"/g, '\"');\n\t}\n\treturn foo\n\t\t.map((f) => f.replace(/\\\\'/g, \"'\"))\n\t\t.filter((f) => f != null && f !== '');\n};\n\nexport default csvToArray;\n","export const dateToHTML = (d: Date | string | number) => {\n\tif (!d) return '';\n\n\t// Support milliseconds\n\tif (typeof d === 'number') d = new Date(d);\n\n\tif (d instanceof Date) {\n\t\treturn [\n\t\t\td.getFullYear(),\n\t\t\t(d.getMonth() + 1).toString().padStart(2, '0'),\n\t\t\td.getDate().toString().padStart(2, '0'),\n\t\t].join('-');\n\t}\n\n\tconst temp = d.split('/');\n\tif (temp.length && temp[0].length === 4)\n\t\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$1-$2-$3');\n\n\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$3-$1-$2');\n};\n\nexport default dateToHTML;\n","export const enforceHttpsUrlString = (url: string) => {\n\tif (url === '') return url;\n\n\turl = url.replace(/^http:\\/\\//, 'https://');\n\tif (!url.match(/^https:\\/\\//)) url = `https://${url}`;\n\treturn url;\n};\n\nexport default enforceHttpsUrlString;\n","export const getNormalizedHexColor = (color: any) => {\n\tif (typeof color !== 'string') return color;\n\tif ((color.length === 4 || color.length === 7) && color.match(/^#/))\n\t\treturn color;\n\treturn `#${color}`;\n};\n\nexport default getNormalizedHexColor;\n","/**\n * Get scrollbar width for browser\n */\nexport const getScrollbarWidth = () => {\n\tconst outer = document.createElement('div');\n\touter.style.visibility = 'hidden';\n\touter.style.overflow = 'scroll';\n\t(outer.style as any).msOverflowStyle = 'scrollbar';\n\n\tdocument.body.appendChild(outer);\n\n\tconst inner = document.createElement('div');\n\touter.appendChild(inner);\n\n\tconst scrollbarWidth = outer.offsetWidth - inner.offsetWidth;\n\t// cleanup\n\touter.parentNode?.removeChild(outer);\n\treturn scrollbarWidth;\n};\n\nexport default getScrollbarWidth;\n","// more minimal version of https://github.com/olahol/scrollparent.js/blob/master/scrollparent.js\nconst regex = /(auto|scroll)/;\n\nconst style = (node: Element, prop: string) =>\n\tgetComputedStyle(node, null).getPropertyValue(prop);\n\nconst scroll = (node: Element) =>\n\tregex.test(\n\t\tstyle(node, 'overflow') +\n\t\t\tstyle(node, 'overflow-y') +\n\t\t\tstyle(node, 'overflow-x'),\n\t);\n\nexport const getScrollparent = (node: Element) =>\n\t!node || node === document.body\n\t\t? document.body\n\t\t: scroll(node)\n\t\t? node\n\t\t: getScrollparent(node.parentNode as Element);\n\nexport default getScrollparent;\n","// NOTE: if we trigger a download via window.location, safari (15.2, and maybe a little earlier) will interupt any outgoing calls\n// in cases of things like checking out an asset, we refetch the asset at the same time we are triggering the download - the `getAssetBean`\n// call is interupted and the fetch never goes through (in fact throws a generic error because the call was not resolved)\n\n/**\n * Will trigger a download in the borwser for the provided link\n * @param link\n */\nexport const openDownloadLink = (link: string) => {\n\t// Safari (at least v15.2) ¯\\_(ツ)_/¯\n\t// window.location = link;\n\tconst anchor = document.createElement('a');\n\tanchor.setAttribute('download', '');\n\tanchor.href = link;\n\tdocument.body.appendChild(anchor);\n\tanchor.click();\n\tanchor.remove();\n};\n\nexport default openDownloadLink;\n","export const spawnNewWindow = (url: string) => {\n\treturn window.open(url, '_blank');\n};\n\nexport default spawnNewWindow;\n","import React from 'react';\n\nexport type StopPropagationArgs = {\n\tpreventDefault?: boolean;\n};\n\nexport const stopPropagation = (\n\tevent: E,\n) => {\n\tevent.stopPropagation();\n\tevent.preventDefault();\n};\n\nexport default stopPropagation;\n","export const uniqueArray = >(arr: T) =>\n\t[...new Set(arr)] as T;\n\nexport default uniqueArray;\n","import Netx, {dispatcher} from '../bootstrap';\nimport View from './netx-view';\nimport _ from 'underscore';\n\nimport type AppView from '@netx/core-app/models/appView';\nimport type Collection from '@netx/core/lib/netx-collection';\nimport type Model from '@netx/core/lib/netx-model';\n\nimport {safeReplaceInArray} from '../utils/safeReplaceInArray';\nexport {safeReplaceInArray} from '../utils/safeReplaceInArray';\n\nimport {simulateClickBody} from '../utils/simulateClickBody';\nexport {simulateClickBody} from '../utils/simulateClickBody';\n\n/**\n * Debounce for promises\n * @param fn The async function to debounce\n * @param ms Time in milliseconds\n */\nexport const debouncePromise = <\n\tT extends (...args: any[]) => Promise | void\n>(\n\tfn: T,\n\tms = 0,\n) => {\n\tlet timeoutId: NodeJS.Timeout;\n\tconst pending: {\n\t\tresolve(value?: any): void;\n\t\treject(reason?: any): void;\n\t}[] = [];\n\treturn (...args: Parameters): ReturnType =>\n\t\tnew Promise((resolve, reject) => {\n\t\t\tclearTimeout(timeoutId);\n\t\t\ttimeoutId = setTimeout(() => {\n\t\t\t\tconst currentPending = [...pending];\n\t\t\t\tpending.length = 0;\n\t\t\t\tPromise.resolve(fn.apply(this, args)).then(\n\t\t\t\t\t(data) => currentPending.forEach(({resolve}) => resolve(data)),\n\t\t\t\t\t(error) => currentPending.forEach(({reject}) => reject(error)),\n\t\t\t\t);\n\t\t\t}, ms);\n\t\t\tpending.push({resolve, reject});\n\t\t}) as ReturnType;\n};\n\nexport const deepObjectExtend = (target: Object, source: Object) => {\n\tfor (const prop in source) {\n\t\tif (source.hasOwnProperty(prop)) {\n\t\t\tif (target[prop] && typeof source[prop] === 'object') {\n\t\t\t\tdeepObjectExtend(target[prop], source[prop]);\n\t\t\t} else {\n\t\t\t\ttarget[prop] = source[prop];\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\nexport const getViewModel = (\n\tview: View>,\n): TModel | undefined => {\n\tconst viewData = view.data || {};\n\tlet model = viewData.model || view.model;\n\tif (model && model.isAppView) {\n\t\tmodel = model.viewModel as TModel;\n\t}\n\treturn !model ? undefined : (model as TModel);\n};\n\nexport const getViewCollection = (\n\tview: View,\n): TCollection | undefined => {\n\tconst viewData = view.data || {};\n\tconst collection = viewData.collection || view.collection;\n\treturn !collection ? undefined : (collection as TCollection);\n};\n\n/**\n * Check if the app is at a portal endpoint\n */\nexport const isPortal = () => {\n\t// todo: yarn watch:portal does not have /portals\n\treturn window.location.pathname.match(/^\\/portals\\//) != null;\n};\n\n/**\n * Given an object it will return a protected version that object\n * @function\n * @param {object} object Object\n * @return {Proxy} Object\n */\nexport const protectObjectProxy = (object) => {\n\treturn new Proxy(object, {\n\t\t// Will return any object/arrays as their own copies\n\t\t// elminating the ability to pollute items in the object\n\t\tget(obj, prop) {\n\t\t\tconst value = obj[prop];\n\t\t\tif (typeof value === 'object') return JSON.parse(JSON.stringify(value));\n\t\t\treturn value;\n\t\t},\n\t\t// No setting\n\t\tset(obj, prop, value) {\n\t\t\treturn false;\n\t\t},\n\t});\n};\n\nexport const performAction = (actionStr: string, actionArgs: any[] = []) => {\n\tconsole.log('perform action', actionStr);\n\tconst {router, Actions} = Netx;\n\n\tconst action = Actions.Find(actionStr);\n\tif (!action) throw new Error(`'${actionStr}' is not a registered action`);\n\n\t// Generic handler for all Action clicks:\n\tif (action.fake) {\n\t\tconsole.warn('The action \"' + action.event + '\" has not been registered.');\n\t}\n\t// or else, if the action itself defined a wrapper, run the arguments through that.\n\telse if (_.isFunction(action.wrapper)) {\n\t\tactionArgs = action.wrapper.apply(this, actionArgs);\n\t\tif (!_.isArray(actionArgs)) {\n\t\t\tthrow new Error(\n\t\t\t\t'Action wrapper for ' + action.event + ' did not return an array',\n\t\t\t);\n\t\t}\n\t}\n\n\t// close any/all open dropdown menus\n\tdispatcher.trigger('app:close:menus');\n\n\t// HTML-1050: Remember when actions are fired.\n\tActions.latest = action;\n\tActions.history = Actions.history || [];\n\tActions.history.push(action);\n\n\t// If this action has a route, route to it\n\tif (_.isFunction(action.route)) {\n\t\t// route can be a function that takes args & returns a string\n\t\trouter.navigate(action.route.apply(action, actionArgs), true);\n\t} else if (_.isString(action.route)) {\n\t\t// it can also be a plain string.\n\t\t// TODO: such actions could be rendered as simple hrefs that can be enabled/disabled, so the browser can do this part ...\n\t\trouter.navigate(action.route, true);\n\t}\n\t// If this action has a link, send the browser to it.\n\t// (Again, this could have been rendered as a simple href ...)\n\telse if (_.isString(action.link)) {\n\t\t// a link could be of the format \"#route\", or \"/other/site/on/this/host\" or even \"http://google.com\"\n\t\twindow.location = action.link;\n\t}\n\t// If no view & no route, trigger this action's event\n\telse {\n\t\tactionArgs.unshift(action.event);\n\t\tdispatcher.trigger.apply(dispatcher, actionArgs);\n\t}\n};\n\n/**\n * Purge elements from selection\n * @function\n * @param {array} els Elements selected\n * @param {array} purgeEls Elements to be purged from\n */\nexport const purgeEls = (els: Element[], purgeEls: Element[]) => {\n\tconst purgeCount = purgeEls.length;\n\tif (purgeCount === 0) return els;\n\n\treturn els.filter((el) => {\n\t\tfor (let i = 0; i < purgeCount; i++) {\n\t\t\tif (purgeEls[i].contains(el)) return false;\n\t\t}\n\t\treturn true;\n\t});\n};\n\nexport const executeOnOrReturn = function (\n\tvalue: T,\n\texecutor?: (value: T) => T,\n) {\n\tif (executor) return executor(value);\n\treturn value;\n};\n\nexport const addToArrayUnique = function (array: T[], toAdd: T) {\n\tif (array.includes(toAdd)) return array;\n\tarray.push(toAdd);\n\treturn array;\n};\n\nexport const isTouchEnabled = () =>\n\t'ontouchstart' in window || navigator?.maxTouchPoints > 0;\n\nexport const safeAddToArrayUnique = function (array: T[], toAdd: T) {\n\treturn addToArrayUnique([...array], toAdd);\n};\n\nexport const safeAddOrReplaceInArray = function (\n\tarray: T[],\n\tindex: number,\n\treplaceWith: T,\n) {\n\tif (index > -1) return safeReplaceInArray(array, index, replaceWith);\n\treturn [...array].concat([replaceWith]);\n};\n\nexport const safeToggleArrayValue = function (array: T[], value: T) {\n\tconst index = array.indexOf(value);\n\tconst newArray = [...array];\n\n\tindex === -1 ? newArray.push(value) : newArray.splice(index, 1);\n\n\treturn newArray;\n};\n\n/**\n * Convert seconds to HH:MM:SS\n * If seconds exceeds 24 hours, hours will be greater than 24 (30:05:10)\n *\n * @param seconds\n * @returns hh:mm:ss\n */\nexport const secondsToHms = (seconds: number): string => {\n\tconst days = Math.floor(seconds / 86400);\n\tconst remainderSeconds = seconds % 86400;\n\tconst hms = new Date(remainderSeconds * 1000).toISOString().substring(11, 19);\n\treturn hms.replace(/^(\\d+)/, (h) =>\n\t\t`${Number(h) + days * 24}`.padStart(2, '0'),\n\t);\n};\n\nexport default {\n\tgetViewCollection,\n\tgetViewModel,\n\tperformAction,\n\tprotectObjectProxy,\n\tpurgeEls,\n\tsecondsToHms,\n\tsimulateClickBody,\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","import Netx from '@netx/core/bootstrap';\n\nexport const getPreference = (\n\tkey: string,\n\tasBoolean?: Bool,\n) => {\n\tif (!Netx.user?.prefs)\n\t\treturn (asBoolean ? false : undefined) as Bool extends true\n\t\t\t? boolean\n\t\t\t: undefined;\n\treturn Netx.user?.prefs?.[asBoolean ? 'isTrue' : 'getPreference'](\n\t\tkey,\n\t) as Bool extends true ? boolean : string | undefined;\n};\n\nexport default getPreference;\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === 'object') {\n return globalThis;\n }\n\n var g;\n\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function('return this')();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === 'object') {\n return window;\n } // This works if the self reference is available\n\n\n if (typeof self === 'object') {\n return self;\n } // This works if the global reference is available\n\n\n if (typeof global !== 'undefined') {\n return global;\n }\n }\n\n return g;\n}();","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar consoleLogger = {\n type: 'logger',\n\n log: function log(args) {\n this.output('log', args);\n },\n warn: function warn(args) {\n this.output('warn', args);\n },\n error: function error(args) {\n this.output('error', args);\n },\n output: function output(type, args) {\n var _console;\n\n /* eslint no-console: 0 */\n if (console && console[type]) (_console = console)[type].apply(_console, _toConsumableArray(args));\n }\n};\n\nvar Logger = function () {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Logger);\n\n this.init(concreteLogger, options);\n }\n\n Logger.prototype.init = function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n };\n\n Logger.prototype.setDebug = function setDebug(bool) {\n this.debug = bool;\n };\n\n Logger.prototype.log = function log() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return this.forward(args, 'log', '', true);\n };\n\n Logger.prototype.warn = function warn() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return this.forward(args, 'warn', '', true);\n };\n\n Logger.prototype.error = function error() {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return this.forward(args, 'error', '');\n };\n\n Logger.prototype.deprecate = function deprecate() {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n };\n\n Logger.prototype.forward = function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === 'string') args[0] = '' + prefix + this.prefix + ' ' + args[0];\n return this.logger[lvl](args);\n };\n\n Logger.prototype.create = function create(moduleName) {\n return new Logger(this.logger, _extends({ prefix: this.prefix + ':' + moduleName + ':' }, this.options));\n };\n\n return Logger;\n}();\n\nexport default new Logger();","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventEmitter = function () {\n function EventEmitter() {\n _classCallCheck(this, EventEmitter);\n\n this.observers = {};\n }\n\n EventEmitter.prototype.on = function on(events, listener) {\n var _this = this;\n\n events.split(' ').forEach(function (event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n };\n\n EventEmitter.prototype.off = function off(event, listener) {\n var _this2 = this;\n\n if (!this.observers[event]) {\n return;\n }\n\n this.observers[event].forEach(function () {\n if (!listener) {\n delete _this2.observers[event];\n } else {\n var index = _this2.observers[event].indexOf(listener);\n if (index > -1) {\n _this2.observers[event].splice(index, 1);\n }\n }\n });\n };\n\n EventEmitter.prototype.emit = function emit(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function (observer) {\n observer.apply(undefined, args);\n });\n }\n\n if (this.observers['*']) {\n var _cloned = [].concat(this.observers['*']);\n _cloned.forEach(function (observer) {\n var _ref;\n\n observer.apply(observer, (_ref = [event]).concat.apply(_ref, args));\n });\n }\n };\n\n return EventEmitter;\n}();\n\nexport default EventEmitter;","export function makeString(object) {\n if (object == null) return '';\n /* eslint prefer-template: 0 */\n return '' + object;\n}\n\nexport function copy(a, s, t) {\n a.forEach(function (m) {\n if (s[m]) t[m] = s[m];\n });\n}\n\nfunction getLastOfPath(object, path, Empty) {\n function cleanKey(key) {\n return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n }\n\n function canNotTraverseDeeper() {\n return !object || typeof object === 'string';\n }\n\n var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n while (stack.length > 1) {\n if (canNotTraverseDeeper()) return {};\n\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n object = object[key];\n }\n\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\n\nexport function setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object),\n obj = _getLastOfPath.obj,\n k = _getLastOfPath.k;\n\n obj[k] = newValue;\n}\n\nexport function pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object),\n obj = _getLastOfPath2.obj,\n k = _getLastOfPath2.k;\n\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\n\nexport function getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path),\n obj = _getLastOfPath3.obj,\n k = _getLastOfPath3.k;\n\n if (!obj) return undefined;\n return obj[k];\n}\n\nexport function deepExtend(target, source, overwrite) {\n /* eslint no-restricted-syntax: 0 */\n for (var prop in source) {\n if (prop in target) {\n // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch\n if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n return target;\n}\n\nexport function regexEscape(str) {\n /* eslint no-useless-escape: 0 */\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\n\n/* eslint-disable */\nvar _entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n};\n/* eslint-enable */\n\nexport function escape(data) {\n if (typeof data === 'string') {\n return data.replace(/[&<>\"'\\/]/g, function (s) {\n return _entityMap[s];\n });\n }\n\n return data;\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport EventEmitter from './EventEmitter';\nimport * as utils from './utils';\n\nvar ResourceStore = function (_EventEmitter) {\n _inherits(ResourceStore, _EventEmitter);\n\n function ResourceStore() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' };\n\n _classCallCheck(this, ResourceStore);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.data = data;\n _this.options = options;\n return _this;\n }\n\n ResourceStore.prototype.addNamespaces = function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n };\n\n ResourceStore.prototype.removeNamespaces = function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n };\n\n ResourceStore.prototype.getResource = function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n var keySeparator = options.keySeparator || this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n\n var path = [lng, ns];\n if (key && typeof key !== 'string') path = path.concat(key);\n if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n }\n\n return utils.getPath(this.data, path);\n };\n\n ResourceStore.prototype.addResource = function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false };\n\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = '.';\n\n var path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n\n utils.setPath(this.data, path, value);\n\n if (!options.silent) this.emit('added', lng, ns, key, value);\n };\n\n ResourceStore.prototype.addResources = function addResources(lng, ns, resources) {\n /* eslint no-restricted-syntax: 0 */\n for (var m in resources) {\n if (typeof resources[m] === 'string') this.addResource(lng, ns, m, resources[m], { silent: true });\n }\n this.emit('added', lng, ns, resources);\n };\n\n ResourceStore.prototype.addResourceBundle = function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n\n this.addNamespaces(ns);\n\n var pack = utils.getPath(this.data, path) || {};\n\n if (deep) {\n utils.deepExtend(pack, resources, overwrite);\n } else {\n pack = _extends({}, pack, resources);\n }\n\n utils.setPath(this.data, path, pack);\n\n this.emit('added', lng, ns, resources);\n };\n\n ResourceStore.prototype.removeResourceBundle = function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n\n this.emit('removed', lng, ns);\n };\n\n ResourceStore.prototype.hasResourceBundle = function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n };\n\n ResourceStore.prototype.getResourceBundle = function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n\n // COMPATIBILITY: remove extend in v2.1.0\n if (this.options.compatibilityAPI === 'v1') return _extends({}, this.getResource(lng, ns));\n\n return this.getResource(lng, ns);\n };\n\n ResourceStore.prototype.toJSON = function toJSON() {\n return this.data;\n };\n\n return ResourceStore;\n}(EventEmitter);\n\nexport default ResourceStore;","export default {\n\n processors: {},\n\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n\n processors.forEach(function (processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n\n return value;\n }\n};","/* eslint no-param-reassign: 0 */\nimport logger from '../logger';\n\nfunction convertInterpolation(options) {\n\n options.interpolation = {\n unescapeSuffix: 'HTML'\n };\n\n options.interpolation.prefix = options.interpolationPrefix || '__';\n options.interpolation.suffix = options.interpolationSuffix || '__';\n options.interpolation.escapeValue = options.escapeInterpolation || false;\n\n options.interpolation.nestingPrefix = options.reusePrefix || '$t(';\n options.interpolation.nestingSuffix = options.reuseSuffix || ')';\n\n return options;\n}\n\nexport function convertAPIOptions(options) {\n if (options.resStore) options.resources = options.resStore;\n\n if (options.ns && options.ns.defaultNs) {\n options.defaultNS = options.ns.defaultNs;\n options.ns = options.ns.namespaces;\n } else {\n options.defaultNS = options.ns || 'translation';\n }\n\n if (options.fallbackToDefaultNS && options.defaultNS) options.fallbackNS = options.defaultNS;\n\n options.saveMissing = options.sendMissing;\n options.saveMissingTo = options.sendMissingTo || 'current';\n options.returnNull = !options.fallbackOnNull;\n options.returnEmptyString = !options.fallbackOnEmpty;\n options.returnObjects = options.returnObjectTrees;\n options.joinArrays = '\\n';\n\n options.returnedObjectHandler = options.objectTreeKeyHandler;\n options.parseMissingKeyHandler = options.parseMissingKey;\n options.appendNamespaceToMissingKey = true;\n\n options.nsSeparator = options.nsseparator || ':';\n options.keySeparator = options.keyseparator || '.';\n\n if (options.shortcutFunction === 'sprintf') {\n options.overloadTranslationOptionHandler = function handle(args) {\n var values = [];\n\n for (var i = 1; i < args.length; i++) {\n values.push(args[i]);\n }\n\n return {\n postProcess: 'sprintf',\n sprintf: values\n };\n };\n }\n\n options.whitelist = options.lngWhitelist;\n options.preload = options.preload;\n if (options.load === 'current') options.load = 'currentOnly';\n if (options.load === 'unspecific') options.load = 'languageOnly';\n\n // backend\n options.backend = options.backend || {};\n options.backend.loadPath = options.resGetPath || 'locales/__lng__/__ns__.json';\n options.backend.addPath = options.resPostPath || 'locales/add/__lng__/__ns__';\n options.backend.allowMultiLoading = options.dynamicLoad;\n\n // cache\n options.cache = options.cache || {};\n options.cache.prefix = 'res_';\n options.cache.expirationTime = 7 * 24 * 60 * 60 * 1000;\n options.cache.enabled = options.useLocalStorage;\n\n options = convertInterpolation(options);\n if (options.defaultVariables) options.interpolation.defaultVariables = options.defaultVariables;\n\n // COMPATIBILITY: deprecation\n // if (options.getAsync === false) throw deprecation error\n\n return options;\n}\n\nexport function convertJSONOptions(options) {\n options = convertInterpolation(options);\n options.joinArrays = '\\n';\n\n return options;\n}\n\nexport function convertTOptions(options) {\n if (options.interpolationPrefix || options.interpolationSuffix || options.escapeInterpolation !== undefined) {\n options = convertInterpolation(options);\n }\n\n options.nsSeparator = options.nsseparator;\n options.keySeparator = options.keyseparator;\n\n options.returnObjects = options.returnObjectTrees;\n\n return options;\n}\n\nexport function appendBackwardsAPI(i18n) {\n i18n.lng = function () {\n logger.deprecate('i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.');\n return i18n.services.languageUtils.toResolveHierarchy(i18n.language)[0];\n };\n\n i18n.preload = function (lngs, cb) {\n logger.deprecate('i18next.preload() can be replaced with i18next.loadLanguages()');\n i18n.loadLanguages(lngs, cb);\n };\n\n i18n.setLng = function (lng, options, callback) {\n logger.deprecate('i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.');\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options) options = {};\n\n if (options.fixLng === true) {\n if (callback) return callback(null, i18n.getFixedT(lng));\n }\n\n return i18n.changeLanguage(lng, callback);\n };\n\n i18n.addPostProcessor = function (name, fc) {\n logger.deprecate('i18next.addPostProcessor() can be replaced by i18next.use({ type: \\'postProcessor\\', name: \\'name\\', process: fc })');\n i18n.use({\n type: 'postProcessor',\n name: name,\n process: fc\n });\n };\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport baseLogger from './logger';\nimport EventEmitter from './EventEmitter';\nimport postProcessor from './postProcessor';\nimport * as compat from './compatibility/v1';\nimport * as utils from './utils';\n\nvar Translator = function (_EventEmitter) {\n _inherits(Translator, _EventEmitter);\n\n function Translator(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Translator);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n utils.copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector'], services, _this);\n\n _this.options = options;\n _this.logger = baseLogger.create('translator');\n return _this;\n }\n\n Translator.prototype.changeLanguage = function changeLanguage(lng) {\n if (lng) this.language = lng;\n };\n\n Translator.prototype.exists = function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} };\n\n if (this.options.compatibilityAPI === 'v1') {\n options = compat.convertTOptions(options);\n }\n\n return this.resolve(key, options) !== undefined;\n };\n\n Translator.prototype.extractFromKey = function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n var keySeparator = options.keySeparator || this.options.keySeparator || '.';\n\n var namespaces = options.ns || this.options.defaultNS;\n if (nsSeparator && key.indexOf(nsSeparator) > -1) {\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === 'string') namespaces = [namespaces];\n\n return {\n key: key,\n namespaces: namespaces\n };\n };\n\n Translator.prototype.translate = function translate(keys) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {\n /* eslint prefer-rest-params: 0 */\n options = this.options.overloadTranslationOptionHandler(arguments);\n } else if (this.options.compatibilityAPI === 'v1') {\n options = compat.convertTOptions(options);\n }\n\n // non valid keys handling\n if (keys === undefined || keys === null || keys === '') return '';\n if (typeof keys === 'number') keys = String(keys);\n if (typeof keys === 'string') keys = [keys];\n\n // separators\n var keySeparator = options.keySeparator || this.options.keySeparator || '.';\n\n // get namespace(s)\n\n var _extractFromKey = this.extractFromKey(keys[keys.length - 1], options),\n key = _extractFromKey.key,\n namespaces = _extractFromKey.namespaces;\n\n var namespace = namespaces[namespaces.length - 1];\n\n // return key on CIMode\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n return namespace + nsSeparator + key;\n }\n\n return key;\n }\n\n // resolve from store\n var res = this.resolve(keys, options);\n\n var resType = Object.prototype.toString.apply(res);\n var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n\n // object\n if (res && typeof res !== 'string' && noObject.indexOf(resType) < 0 && !(joinArrays && resType === '[object Array]')) {\n if (!options.returnObjects && !this.options.returnObjects) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(key, res, options) : 'key \\'' + key + ' (' + this.language + ')\\' returned an object instead of string.';\n }\n\n // if we got a separator we loop over children - else we just return object as is\n // as having it set to false means no hierarchy so no lookup for nested values\n if (options.keySeparator || this.options.keySeparator) {\n var copy = resType === '[object Array]' ? [] : {}; // apply child translation on a copy\n\n /* eslint no-restricted-syntax: 0 */\n for (var m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n copy[m] = this.translate('' + key + keySeparator + m, _extends({}, options, { joinArrays: false, ns: namespaces }));\n }\n }\n res = copy;\n }\n } else if (joinArrays && resType === '[object Array]') {\n // array special treatment\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, key, options);\n } else {\n // string, empty or null\n var usedDefault = false;\n var usedKey = false;\n\n // fallback value\n if (!this.isValidLookup(res) && options.defaultValue !== undefined) {\n usedDefault = true;\n res = options.defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n\n // save missing\n if (usedKey || usedDefault) {\n this.logger.log('missingKey', lng, namespace, key, res);\n\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (var i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n\n if (this.options.saveMissing) {\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(lngs, namespace, key, res);\n } else if (this.backendConnector && this.backendConnector.saveMissing) {\n this.backendConnector.saveMissing(lngs, namespace, key, res);\n }\n }\n\n this.emit('missingKey', lngs, namespace, key, res);\n }\n\n // extend\n res = this.extendTranslation(res, key, options);\n\n // append namespace if still key\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = namespace + ':' + key;\n\n // parseMissingKeyHandler\n if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);\n }\n\n // return\n return res;\n };\n\n Translator.prototype.extendTranslation = function extendTranslation(res, key, options) {\n var _this2 = this;\n\n if (options.interpolation) this.interpolator.init(_extends({}, options, { interpolation: _extends({}, this.options.interpolation, options.interpolation) }));\n\n // interpolate\n var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _extends({}, this.options.interpolation.defaultVariables, data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language);\n\n // nesting\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n return _this2.translate.apply(_this2, arguments);\n }, options);\n\n if (options.interpolation) this.interpolator.reset();\n\n // post process\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n\n if (res !== undefined && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, options, this);\n }\n\n return res;\n };\n\n Translator.prototype.resolve = function resolve(keys) {\n var _this3 = this;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var found = void 0;\n\n if (typeof keys === 'string') keys = [keys];\n\n // forEach possible key\n keys.forEach(function (k) {\n if (_this3.isValidLookup(found)) return;\n\n var extracted = _this3.extractFromKey(k, options);\n var key = extracted.key;\n var namespaces = extracted.namespaces;\n if (_this3.options.fallbackNS) namespaces = namespaces.concat(_this3.options.fallbackNS);\n\n var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';\n\n var codes = options.lngs ? options.lngs : _this3.languageUtils.toResolveHierarchy(options.lng || _this3.language);\n\n namespaces.forEach(function (ns) {\n if (_this3.isValidLookup(found)) return;\n\n codes.forEach(function (code) {\n if (_this3.isValidLookup(found)) return;\n\n var finalKey = key;\n var finalKeys = [finalKey];\n\n var pluralSuffix = void 0;\n if (needsPluralHandling) pluralSuffix = _this3.pluralResolver.getSuffix(code, options.count);\n\n // fallback for plural if context not found\n if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);\n\n // get key for context if needed\n if (needsContextHandling) finalKeys.push(finalKey += '' + _this3.options.contextSeparator + options.context);\n\n // get key for plural if needed\n if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);\n\n // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only\n var possibleKey = void 0;\n /* eslint no-cond-assign: 0 */\n while (possibleKey = finalKeys.pop()) {\n if (!_this3.isValidLookup(found)) {\n found = _this3.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n\n return found;\n };\n\n Translator.prototype.isValidLookup = function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n };\n\n Translator.prototype.getResource = function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n return this.resourceStore.getResource(code, ns, key, options);\n };\n\n return Translator;\n}(EventEmitter);\n\nexport default Translator;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport baseLogger from './logger';\n\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar LanguageUtil = function () {\n function LanguageUtil(options) {\n _classCallCheck(this, LanguageUtil);\n\n this.options = options;\n\n this.whitelist = this.options.whitelist || false;\n this.logger = baseLogger.create('languageUtils');\n }\n\n LanguageUtil.prototype.getScriptPartFromCode = function getScriptPartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return null;\n\n var p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n return this.formatLanguageCode(p.join('-'));\n };\n\n LanguageUtil.prototype.getLanguagePartFromCode = function getLanguagePartFromCode(code) {\n if (!code || code.indexOf('-') < 0) return code;\n\n var p = code.split('-');\n return this.formatLanguageCode(p[0]);\n };\n\n LanguageUtil.prototype.formatLanguageCode = function formatLanguageCode(code) {\n // http://www.iana.org/assignments/language-tags/language-tags.xhtml\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n var p = code.split('-');\n\n if (this.options.lowerCaseLng) {\n p = p.map(function (part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n\n // if lenght 2 guess it's a country\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n\n return p.join('-');\n }\n\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n };\n\n LanguageUtil.prototype.isWhitelisted = function isWhitelisted(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1;\n };\n\n LanguageUtil.prototype.getFallbackCodes = function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n\n if (!code) return fallbacks.default || [];\n\n // asume we have an object defining fallbacks\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks.default;\n\n return found || [];\n };\n\n LanguageUtil.prototype.toResolveHierarchy = function toResolveHierarchy(code, fallbackCode) {\n var _this = this;\n\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this.isWhitelisted(c)) {\n codes.push(c);\n } else {\n _this.logger.warn('rejecting non-whitelisted language code: ' + c);\n }\n };\n\n if (typeof code === 'string' && code.indexOf('-') > -1) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === 'string') {\n addCode(this.formatLanguageCode(code));\n }\n\n fallbackCodes.forEach(function (fc) {\n if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));\n });\n\n return codes;\n };\n\n return LanguageUtil;\n}();\n\nexport default LanguageUtil;","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport baseLogger from './logger';\n\n// definition http://translate.sourceforge.net/wiki/l10n/pluralforms\n/* eslint-disable */\nvar sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'tg', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'es_ar', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'he', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt', 'pt_br', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }];\n\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n }\n};\n/* eslint-enable */\n\nfunction createRules() {\n var rules = {};\n sets.forEach(function (set) {\n set.lngs.forEach(function (l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\n\nvar PluralResolver = function () {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, PluralResolver);\n\n this.languageUtils = languageUtils;\n this.options = options;\n\n this.logger = baseLogger.create('pluralResolver');\n\n this.rules = createRules();\n }\n\n PluralResolver.prototype.addRule = function addRule(lng, obj) {\n this.rules[lng] = obj;\n };\n\n PluralResolver.prototype.getRule = function getRule(code) {\n return this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n };\n\n PluralResolver.prototype.needsPlural = function needsPlural(code) {\n var rule = this.getRule(code);\n\n return rule && rule.numbers.length > 1;\n };\n\n PluralResolver.prototype.getSuffix = function getSuffix(code, count) {\n var _this = this;\n\n var rule = this.getRule(code);\n\n if (rule) {\n if (rule.numbers.length === 1) return ''; // only singular\n\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n\n // special treatment for lngs only having singular and plural\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n\n var returnSuffix = function returnSuffix() {\n return _this.options.prepend && suffix.toString() ? _this.options.prepend + suffix.toString() : suffix.toString();\n };\n\n // COMPATIBILITY JSON\n // v1\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return '_plural_' + suffix.toString();\n return returnSuffix();\n } else if ( /* v2 */this.options.compatibilityJSON === 'v2' || rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n } else if ( /* v3 - gettext index */rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n\n this.logger.warn('no plural rule found for: ' + code);\n return '';\n };\n\n return PluralResolver;\n}();\n\nexport default PluralResolver;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport * as utils from './utils';\nimport baseLogger from './logger';\n\nvar Interpolator = function () {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Interpolator);\n\n this.logger = baseLogger.create('interpolator');\n\n this.init(options, true);\n }\n\n /* eslint no-param-reassign: 0 */\n\n\n Interpolator.prototype.init = function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var reset = arguments[1];\n\n if (reset) {\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function (value) {\n return value;\n };\n this.escape = options.interpolation && options.interpolation.escape || utils.escape;\n }\n if (!options.interpolation) options.interpolation = { escapeValue: true };\n\n var iOpts = options.interpolation;\n\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n\n this.prefix = iOpts.prefix ? utils.regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n this.suffix = iOpts.suffix ? utils.regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n\n this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n\n this.nestingPrefix = iOpts.nestingPrefix ? utils.regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || utils.regexEscape('$t(');\n this.nestingSuffix = iOpts.nestingSuffix ? utils.regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || utils.regexEscape(')');\n\n // the regexp\n this.resetRegExp();\n };\n\n Interpolator.prototype.reset = function reset() {\n if (this.options) this.init(this.options);\n };\n\n Interpolator.prototype.resetRegExp = function resetRegExp() {\n // the regexp\n var regexpStr = this.prefix + '(.+?)' + this.suffix;\n this.regexp = new RegExp(regexpStr, 'g');\n\n var regexpUnescapeStr = '' + this.prefix + this.unescapePrefix + '(.+?)' + this.unescapeSuffix + this.suffix;\n this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n\n var nestingRegexpStr = this.nestingPrefix + '(.+?)' + this.nestingSuffix;\n this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n };\n\n Interpolator.prototype.interpolate = function interpolate(str, data, lng) {\n var _this = this;\n\n var match = void 0;\n var value = void 0;\n\n function regexSafe(val) {\n return val.replace(/\\$/g, '$$$$');\n }\n\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) return utils.getPath(data, key);\n\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n\n return _this.format(utils.getPath(data, k), f, lng);\n };\n\n this.resetRegExp();\n\n // unescape if has unescapePrefix/Suffix\n /* eslint no-cond-assign: 0 */\n while (match = this.regexpUnescape.exec(str)) {\n value = handleFormat(match[1].trim());\n str = str.replace(match[0], value);\n this.regexpUnescape.lastIndex = 0;\n }\n\n // regular escape on demand\n while (match = this.regexp.exec(str)) {\n value = handleFormat(match[1].trim());\n if (typeof value !== 'string') value = utils.makeString(value);\n if (!value) {\n this.logger.warn('missed to pass in variable ' + match[1] + ' for interpolating ' + str);\n value = '';\n }\n value = this.escapeValue ? regexSafe(this.escape(value)) : regexSafe(value);\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n };\n\n Interpolator.prototype.nest = function nest(str, fc) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n var match = void 0;\n var value = void 0;\n\n var clonedOptions = _extends({}, options);\n clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup\n\n // if value is something like \"myKey\": \"lorem $(anotherKey, { \"count\": {{aValueInOptions}} })\"\n function handleHasOptions(key) {\n if (key.indexOf(',') < 0) return key;\n\n var p = key.split(',');\n key = p.shift();\n var optionsString = p.join(',');\n optionsString = this.interpolate(optionsString, clonedOptions);\n optionsString = optionsString.replace(/'/g, '\"');\n\n try {\n clonedOptions = JSON.parse(optionsString);\n } catch (e) {\n this.logger.error('failed parsing options string in nesting for key ' + key, e);\n }\n\n return key;\n }\n\n // regular escape on demand\n while (match = this.nestingRegexp.exec(str)) {\n value = fc(handleHasOptions.call(this, match[1].trim()), clonedOptions);\n\n // is only the nesting key (key1 = '$(key2)') return the value without stringify\n if (value && match[0] === str && typeof value !== 'string') return value;\n\n // no string to include or empty\n if (typeof value !== 'string') value = utils.makeString(value);\n if (!value) {\n this.logger.warn('missed to resolve ' + match[1] + ' for nesting ' + str);\n value = '';\n }\n // Nested keys should not be escaped by default #854\n // value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n };\n\n return Interpolator;\n}();\n\nexport default Interpolator;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport * as utils from './utils';\nimport baseLogger from './logger';\nimport EventEmitter from './EventEmitter';\n\nfunction remove(arr, what) {\n var found = arr.indexOf(what);\n\n while (found !== -1) {\n arr.splice(found, 1);\n found = arr.indexOf(what);\n }\n}\n\nvar Connector = function (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n\n function Connector(backend, store, services) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Connector);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.options = options;\n _this.logger = baseLogger.create('backendConnector');\n\n _this.state = {};\n _this.queue = [];\n\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n\n Connector.prototype.queueLoad = function queueLoad(languages, namespaces, callback) {\n var _this2 = this;\n\n // find what needs to be loaded\n var toLoad = [];\n var pending = [];\n var toLoadLanguages = [];\n var toLoadNamespaces = [];\n\n languages.forEach(function (lng) {\n var hasAllNamespaces = true;\n\n namespaces.forEach(function (ns) {\n var name = lng + '|' + ns;\n\n if (_this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2; // loaded\n } else if (_this2.state[name] < 0) {\n // nothing to do for err\n } else if (_this2.state[name] === 1) {\n if (pending.indexOf(name) < 0) pending.push(name);\n } else {\n _this2.state[name] = 1; // pending\n\n hasAllNamespaces = false;\n\n if (pending.indexOf(name) < 0) pending.push(name);\n if (toLoad.indexOf(name) < 0) toLoad.push(name);\n if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);\n }\n });\n\n if (!hasAllNamespaces) toLoadLanguages.push(lng);\n });\n\n if (toLoad.length || pending.length) {\n this.queue.push({\n pending: pending,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n\n return {\n toLoad: toLoad,\n pending: pending,\n toLoadLanguages: toLoadLanguages,\n toLoadNamespaces: toLoadNamespaces\n };\n };\n\n Connector.prototype.loaded = function loaded(name, err, data) {\n var _this3 = this;\n\n var _name$split = name.split('|'),\n _name$split2 = _slicedToArray(_name$split, 2),\n lng = _name$split2[0],\n ns = _name$split2[1];\n\n if (err) this.emit('failedLoading', lng, ns, err);\n\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n\n // set loaded\n this.state[name] = err ? -1 : 2;\n\n // callback if ready\n this.queue.forEach(function (q) {\n utils.pushPath(q.loaded, [lng], ns);\n remove(q.pending, name);\n\n if (err) q.errors.push(err);\n\n if (q.pending.length === 0 && !q.done) {\n _this3.emit('loaded', q.loaded);\n /* eslint no-param-reassign: 0 */\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n\n // remove done load requests\n this.queue = this.queue.filter(function (q) {\n return !q.done;\n });\n };\n\n Connector.prototype.read = function read(lng, ns, fcName) {\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n var _this4 = this;\n\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 250;\n var callback = arguments[5];\n\n if (!lng.length) return callback(null, {}); // noting to load\n\n return this.backend[fcName](lng, ns, function (err, data) {\n if (err && data /* = retryFlag */ && tried < 5) {\n setTimeout(function () {\n _this4.read.call(_this4, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n });\n };\n\n /* eslint consistent-return: 0 */\n\n\n Connector.prototype.load = function load(languages, namespaces, callback) {\n var _this5 = this;\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n var options = _extends({}, this.backend.options, this.options.backend);\n\n if (typeof languages === 'string') languages = this.services.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n\n var toLoad = this.queueLoad(languages, namespaces, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now\n return null; // pendings will trigger callback\n }\n\n // load with multi-load\n if (options.allowMultiLoading && this.backend.readMulti) {\n this.read(toLoad.toLoadLanguages, toLoad.toLoadNamespaces, 'readMulti', null, null, function (err, data) {\n if (err) _this5.logger.warn('loading namespaces ' + toLoad.toLoadNamespaces.join(', ') + ' for languages ' + toLoad.toLoadLanguages.join(', ') + ' via multiloading failed', err);\n if (!err && data) _this5.logger.log('successfully loaded namespaces ' + toLoad.toLoadNamespaces.join(', ') + ' for languages ' + toLoad.toLoadLanguages.join(', ') + ' via multiloading', data);\n\n toLoad.toLoad.forEach(function (name) {\n var _name$split3 = name.split('|'),\n _name$split4 = _slicedToArray(_name$split3, 2),\n l = _name$split4[0],\n n = _name$split4[1];\n\n var bundle = utils.getPath(data, [l, n]);\n if (bundle) {\n _this5.loaded(name, err, bundle);\n } else {\n var error = 'loading namespace ' + n + ' for language ' + l + ' via multiloading failed';\n _this5.loaded(name, error);\n _this5.logger.error(error);\n }\n });\n });\n } else {\n toLoad.toLoad.forEach(function (name) {\n _this5.loadOne(name);\n });\n }\n };\n\n Connector.prototype.reload = function reload(languages, namespaces) {\n var _this6 = this;\n\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n }\n var options = _extends({}, this.backend.options, this.options.backend);\n\n if (typeof languages === 'string') languages = this.services.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === 'string') namespaces = [namespaces];\n\n // load with multi-load\n if (options.allowMultiLoading && this.backend.readMulti) {\n this.read(languages, namespaces, 'readMulti', null, null, function (err, data) {\n if (err) _this6.logger.warn('reloading namespaces ' + namespaces.join(', ') + ' for languages ' + languages.join(', ') + ' via multiloading failed', err);\n if (!err && data) _this6.logger.log('successfully reloaded namespaces ' + namespaces.join(', ') + ' for languages ' + languages.join(', ') + ' via multiloading', data);\n\n languages.forEach(function (l) {\n namespaces.forEach(function (n) {\n var bundle = utils.getPath(data, [l, n]);\n if (bundle) {\n _this6.loaded(l + '|' + n, err, bundle);\n } else {\n var error = 'reloading namespace ' + n + ' for language ' + l + ' via multiloading failed';\n _this6.loaded(l + '|' + n, error);\n _this6.logger.error(error);\n }\n });\n });\n });\n } else {\n languages.forEach(function (l) {\n namespaces.forEach(function (n) {\n _this6.loadOne(l + '|' + n, 're');\n });\n });\n }\n };\n\n Connector.prototype.loadOne = function loadOne(name) {\n var _this7 = this;\n\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var _name$split5 = name.split('|'),\n _name$split6 = _slicedToArray(_name$split5, 2),\n lng = _name$split6[0],\n ns = _name$split6[1];\n\n this.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) _this7.logger.warn(prefix + 'loading namespace ' + ns + ' for language ' + lng + ' failed', err);\n if (!err && data) _this7.logger.log(prefix + 'loaded namespace ' + ns + ' for language ' + lng, data);\n\n _this7.loaded(name, err, data);\n });\n };\n\n Connector.prototype.saveMissing = function saveMissing(languages, namespace, key, fallbackValue) {\n if (this.backend && this.backend.create) this.backend.create(languages, namespace, key, fallbackValue);\n\n // write to store to avoid resending\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n };\n\n return Connector;\n}(EventEmitter);\n\nexport default Connector;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport baseLogger from './logger';\nimport EventEmitter from './EventEmitter';\n\nvar Connector = function (_EventEmitter) {\n _inherits(Connector, _EventEmitter);\n\n function Connector(cache, store, services) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Connector);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.cache = cache;\n _this.store = store;\n _this.services = services;\n _this.options = options;\n _this.logger = baseLogger.create('cacheConnector');\n\n if (_this.cache && _this.cache.init) _this.cache.init(services, options.cache, options);\n return _this;\n }\n\n /* eslint consistent-return: 0 */\n\n\n Connector.prototype.load = function load(languages, namespaces, callback) {\n var _this2 = this;\n\n if (!this.cache) return callback && callback();\n var options = _extends({}, this.cache.options, this.options.cache);\n\n var loadLngs = typeof languages === 'string' ? this.services.languageUtils.toResolveHierarchy(languages) : languages;\n\n if (options.enabled) {\n this.cache.load(loadLngs, function (err, data) {\n if (err) _this2.logger.error('loading languages ' + loadLngs.join(', ') + ' from cache failed', err);\n if (data) {\n /* eslint no-restricted-syntax: 0 */\n for (var l in data) {\n if (Object.prototype.hasOwnProperty.call(data, l)) {\n for (var n in data[l]) {\n if (Object.prototype.hasOwnProperty.call(data[l], n)) {\n if (n !== 'i18nStamp') {\n var bundle = data[l][n];\n if (bundle) _this2.store.addResourceBundle(l, n, bundle);\n }\n }\n }\n }\n }\n }\n if (callback) callback();\n });\n } else if (callback) {\n callback();\n }\n };\n\n Connector.prototype.save = function save() {\n if (this.cache && this.options.cache && this.options.cache.enabled) this.cache.save(this.store.data);\n };\n\n return Connector;\n}(EventEmitter);\n\nexport default Connector;","export { get };\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false, // string or array of namespaces\n\n whitelist: false, // array with whitelisted languages\n nonExplicitWhitelist: false,\n load: 'all', // | currentOnly | languageOnly\n preload: false, // array with preload languages\n\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n\n saveMissing: false, // enable to send missing values\n saveMissingTo: 'fallback', // 'current' || 'all'\n missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling\n\n postProcess: false, // string or array of postProcessor names\n returnNull: true, // allows null value as valid translation\n returnEmptyString: true, // allows empty string value as valid translation\n returnObjects: false,\n joinArrays: false, // or string to join array\n returnedObjectHandler: function returnedObjectHandler() {}, // function(key, value, options) triggered if key returns object but returnObjects is set to false\n parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n return { defaultValue: args[1] };\n },\n\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng) {\n return value;\n },\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n // prefixEscaped: '{{',\n // suffixEscaped: '}}',\n // unescapeSuffix: '',\n unescapePrefix: '-',\n\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n // nestingPrefixEscaped: '$t(',\n // nestingSuffixEscaped: ')',\n defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data\n }\n };\n}\n\n/* eslint no-param-reassign: 0 */\nexport function transformOptions(options) {\n // create namespace object if namespace is passed in as string\n if (typeof options.ns === 'string') options.ns = [options.ns];\n if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n\n // extend whitelist with cimode\n if (options.whitelist && options.whitelist.indexOf('cimode') < 0) options.whitelist.push('cimode');\n\n return options;\n}","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }\n\nimport baseLogger from './logger';\nimport EventEmitter from './EventEmitter';\nimport ResourceStore from './ResourceStore';\nimport Translator from './Translator';\nimport LanguageUtils from './LanguageUtils';\nimport PluralResolver from './PluralResolver';\nimport Interpolator from './Interpolator';\nimport BackendConnector from './BackendConnector';\nimport CacheConnector from './CacheConnector';\nimport { get as getDefaults, transformOptions } from './defaults';\nimport postProcessor from './postProcessor';\n\nimport * as compat from './compatibility/v1';\n\nfunction noop() {}\n\nvar I18n = function (_EventEmitter) {\n _inherits(I18n, _EventEmitter);\n\n function I18n() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments[1];\n\n _classCallCheck(this, I18n);\n\n var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));\n\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = { external: [] };\n\n if (callback && !_this.isInitialized && !options.isClone) {\n var _ret;\n\n // https://github.com/i18next/i18next/issues/879\n if (!_this.options.initImmediate) return _ret = _this.init(options, callback), _possibleConstructorReturn(_this, _ret);\n setTimeout(function () {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n\n I18n.prototype.init = function init(options, callback) {\n var _this2 = this;\n\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options) options = {};\n\n if (options.compatibilityAPI === 'v1') {\n this.options = _extends({}, getDefaults(), transformOptions(compat.convertAPIOptions(options)), {});\n } else if (options.compatibilityJSON === 'v1') {\n this.options = _extends({}, getDefaults(), transformOptions(compat.convertJSONOptions(options)), {});\n } else {\n this.options = _extends({}, getDefaults(), this.options, transformOptions(options));\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n\n function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n }\n\n // init services\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n\n var lu = new LanguageUtils(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.resourceStore.on('added removed', function (lng, ns) {\n s.cacheConnector.save();\n });\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix });\n s.interpolator = new Interpolator(this.options);\n\n s.backendConnector = new BackendConnector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n // pipe events from backendConnector\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n s.backendConnector.on('loaded', function (loaded) {\n s.cacheConnector.save();\n });\n\n s.cacheConnector = new CacheConnector(createClassOnDemand(this.modules.cache), s.resourceStore, s, this.options);\n // pipe events from backendConnector\n s.cacheConnector.on('*', function (event) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n\n this.translator = new Translator(this.services, this.options);\n // pipe events from translator\n this.translator.on('*', function (event) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n _this2.emit.apply(_this2, [event].concat(args));\n });\n\n this.modules.external.forEach(function (m) {\n if (m.init) m.init(_this2);\n });\n }\n\n // append api\n var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle'];\n storeApi.forEach(function (fcName) {\n _this2[fcName] = function () {\n var _store;\n\n return (_store = _this2.store)[fcName].apply(_store, arguments);\n };\n });\n\n // COMPATIBILITY: remove this\n if (this.options.compatibilityAPI === 'v1') compat.appendBackwardsAPI(this);\n\n var load = function load() {\n _this2.changeLanguage(_this2.options.lng, function (err, t) {\n _this2.isInitialized = true;\n _this2.logger.log('initialized', _this2.options);\n _this2.emit('initialized', _this2.options);\n\n callback(err, t);\n });\n };\n\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n\n return this;\n };\n\n /* eslint consistent-return: 0 */\n\n\n I18n.prototype.loadResources = function loadResources() {\n var _this3 = this;\n\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;\n\n if (!this.options.resources) {\n if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode\n\n var toLoad = [];\n\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n\n if (!this.language) {\n // at least load fallbacks in this case\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function (l) {\n return append(l);\n });\n } else {\n append(this.language);\n }\n\n if (this.options.preload) {\n this.options.preload.forEach(function (l) {\n return append(l);\n });\n }\n\n this.services.cacheConnector.load(toLoad, this.options.ns, function () {\n _this3.services.backendConnector.load(toLoad, _this3.options.ns, callback);\n });\n } else {\n callback(null);\n }\n };\n\n I18n.prototype.reloadResources = function reloadResources(lngs, ns) {\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n this.services.backendConnector.reload(lngs, ns);\n };\n\n I18n.prototype.use = function use(module) {\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n\n if (module.type === 'cache') {\n this.modules.cache = module;\n }\n\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n\n return this;\n };\n\n I18n.prototype.changeLanguage = function changeLanguage(lng, callback) {\n var _this4 = this;\n\n var done = function done(err, l) {\n if (l) {\n _this4.emit('languageChanged', l);\n _this4.logger.log('languageChanged', l);\n }\n\n if (callback) callback(err, function () {\n return _this4.t.apply(_this4, arguments);\n });\n };\n\n var setLng = function setLng(l) {\n if (l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n\n _this4.translator.changeLanguage(l);\n\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n\n _this4.loadResources(function (err) {\n done(err, l);\n });\n };\n\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n };\n\n I18n.prototype.getFixedT = function getFixedT(lng, ns) {\n var _this5 = this;\n\n var fixedT = function fixedT(key) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var options = _extends({}, opts);\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n return _this5.t(key, options);\n };\n if (typeof lng === 'string') {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n return fixedT;\n };\n\n I18n.prototype.t = function t() {\n var _translator;\n\n return this.translator && (_translator = this.translator).translate.apply(_translator, arguments);\n };\n\n I18n.prototype.exists = function exists() {\n var _translator2;\n\n return this.translator && (_translator2 = this.translator).exists.apply(_translator2, arguments);\n };\n\n I18n.prototype.setDefaultNamespace = function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n };\n\n I18n.prototype.loadNamespaces = function loadNamespaces(ns, callback) {\n var _this6 = this;\n\n if (!this.options.ns) return callback && callback();\n if (typeof ns === 'string') ns = [ns];\n\n ns.forEach(function (n) {\n if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);\n });\n\n this.loadResources(callback);\n };\n\n I18n.prototype.loadLanguages = function loadLanguages(lngs, callback) {\n if (typeof lngs === 'string') lngs = [lngs];\n var preloaded = this.options.preload || [];\n\n var newLngs = lngs.filter(function (lng) {\n return preloaded.indexOf(lng) < 0;\n });\n // Exit early if all given languages are already preloaded\n if (!newLngs.length) return callback();\n\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(callback);\n };\n\n I18n.prototype.dir = function dir(lng) {\n if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;\n if (!lng) return 'rtl';\n\n var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];\n\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';\n };\n\n /* eslint class-methods-use-this: 0 */\n\n\n I18n.prototype.createInstance = function createInstance() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments[1];\n\n return new I18n(options, callback);\n };\n\n I18n.prototype.cloneInstance = function cloneInstance() {\n var _this7 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n var mergedOptions = _extends({}, this.options, options, { isClone: true });\n var clone = new I18n(mergedOptions, callback);\n var membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(function (m) {\n clone[m] = _this7[m];\n });\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n clone.emit.apply(clone, [event].concat(args));\n });\n clone.init(mergedOptions, callback);\n\n return clone;\n };\n\n return I18n;\n}(EventEmitter);\n\nexport default new I18n();","import i18next from './i18next';\n\nexport default i18next;\n\nexport var changeLanguage = i18next.changeLanguage.bind(i18next);\nexport var cloneInstance = i18next.cloneInstance.bind(i18next);\nexport var createInstance = i18next.createInstance.bind(i18next);\nexport var dir = i18next.dir.bind(i18next);\nexport var exists = i18next.exists.bind(i18next);\nexport var getFixedT = i18next.getFixedT.bind(i18next);\nexport var init = i18next.init.bind(i18next);\nexport var loadLanguages = i18next.loadLanguages.bind(i18next);\nexport var loadNamespaces = i18next.loadNamespaces.bind(i18next);\nexport var loadResources = i18next.loadResources.bind(i18next);\nexport var off = i18next.off.bind(i18next);\nexport var on = i18next.on.bind(i18next);\nexport var setDefaultNamespace = i18next.setDefaultNamespace.bind(i18next);\nexport var t = i18next.t.bind(i18next);\nexport var use = i18next.use.bind(i18next);","import i18next from 'i18next';\n\nwindow.i18n = window.i18next = i18next;\n\nimport {getPreference} from '@netx/core-user/utils/getPreference';\nimport i18nextXHRBackend from 'i18next-xhr-backend';\nimport i18nextBrowserLanguageDetector from 'i18next-browser-languagedetector';\nimport jqueryI18next from 'jquery-i18next';\n\nlet resolver;\nlet rejector;\nexport const initialized = new Promise((resolve, reject) => {\n\tresolver = resolve;\n\trejector = reject;\n});\n\nexport const initialize = function () {\n\treturn new Promise((resolve, reject) => {\n\t\t// Must load before our modules\n\t\t/** @namespace Netx.custom.i18n */\n\t\tconst options = (Netx.custom.i18n = {\n\t\t\t/**\n\t\t\t * i18n - List of namespaces utilized\n\t\t\t * @memberof Netx.custom.i18n\n\t\t\t * @const\n\t\t\t * @type {array}\n\t\t\t * @default\n\t\t\t */\n\t\t\tNAMESPACES: ['translation'],\n\t\t\t/**\n\t\t\t * i18n - Default namespace to use\n\t\t\t * @memberof Netx.custom.i18n\n\t\t\t * @const\n\t\t\t * @type {string}\n\t\t\t * @default\n\t\t\t */\n\t\t\tNAMESPACE_DEFAULT: 'translation',\n\t\t\t/**\n\t\t\t * i18n - Default language (falls back to this if language specified can not be found)\n\t\t\t * @memberof Netx.custom.i18n\n\t\t\t * @const\n\t\t\t * @type {string}\n\t\t\t * @default\n\t\t\t */\n\t\t\tLANGUAGE_DEFAULT: 'en-US',\n\t\t\t/**\n\t\t\t * i18n - Whitelist of languages allowed to load\n\t\t\t * @memberof Netx.custom.i18n\n\t\t\t * @const\n\t\t\t * @type {array}\n\t\t\t * @default\n\t\t\t */\n\t\t\tLANGUAGE_WHITELIST: [\n\t\t\t\t'de-DE',\n\t\t\t\t'de',\n\t\t\t\t'en-US',\n\t\t\t\t'en',\n\t\t\t\t'es-ES',\n\t\t\t\t'es',\n\t\t\t\t'fr-CA',\n\t\t\t\t'fr-FR',\n\t\t\t\t'fr',\n\t\t\t\t'ja-JP',\n\t\t\t\t'jp-JP',\n\t\t\t\t'ja',\n\t\t\t\t'ko-KR',\n\t\t\t\t'nl-BE',\n\t\t\t\t'nl-NL',\n\t\t\t\t'nl',\n\t\t\t\t'zh-CH',\n\t\t\t],\n\t\t\t/**\n\t\t\t * i18n - Path to translation file\n\t\t\t * @memberof Netx.custom.i18n\n\t\t\t * @const\n\t\t\t * @type {string}\n\t\t\t * @default\n\t\t\t */\n\t\t\tPATH: '/locales/__lng__/locales',\n\t\t\t...Netx.custom.i18n,\n\t\t});\n\t\t// Initialize i18n next\n\t\ti18next\n\t\t\t// For loading .json files via XHR\n\t\t\t.use(i18nextXHRBackend)\n\t\t\t.use(i18nextBrowserLanguageDetector)\n\t\t\t.init(\n\t\t\t\t{\n\t\t\t\t\t// For loading json files via XHR\n\t\t\t\t\tbackend: {\n\t\t\t\t\t\t// No multiloading (?de=true&de-at=true)\n\t\t\t\t\t\tallowMultiLoading: false,\n\t\t\t\t\t\t// Path to translation file\n\t\t\t\t\t\tloadPath: options.PATH,\n\t\t\t\t\t},\n\t\t\t\t\t// TODO: update translation files to be i18next JSON structure v3\n\t\t\t\t\tcompatibilityJSON: 'v1',\n\t\t\t\t\t// Debug level output\n\t\t\t\t\t// debug: true,\n\t\t\t\t\t// Default namespace used if not passed to translation function\n\t\t\t\t\tdefaultNS: options.NAMESPACE_DEFAULT,\n\t\t\t\t\t// Requires the i18next plugin i18next-browser-languagedetector\n\t\t\t\t\t// https://github.com/i18next/i18next-browser-languageDetector\n\t\t\t\t\tdetection: {\n\t\t\t\t\t\t// // order and from where user language should be detected\n\t\t\t\t\t\torder: [\n\t\t\t\t\t\t\t'querystring',\n\t\t\t\t\t\t\t'localStorage',\n\t\t\t\t\t\t\t'cookie',\n\t\t\t\t\t\t\t'navigator',\n\t\t\t\t\t\t\t'htmlTag',\n\t\t\t\t\t\t],\n\n\t\t\t\t\t\t// keys or params to lookup language from\n\t\t\t\t\t\tlookupQuerystring: 'lng',\n\t\t\t\t\t\tlookupCookie: 'locale',\n\t\t\t\t\t\tlookupLocalStorage: 'locale',\n\n\t\t\t\t\t\t// cache user language on\n\t\t\t\t\t\tcaches: ['localStorage', 'cookie'],\n\n\t\t\t\t\t\t// optional expire and domain for set cookie\n\t\t\t\t\t\t// cookieMinutes: 10,\n\t\t\t\t\t\t// cookieDomain: 'myDomain',\n\n\t\t\t\t\t\t// optional htmlTag with lang attribute, the default is:\n\t\t\t\t\t\t// htmlTag: document.documentElement\n\t\t\t\t\t},\n\t\t\t\t\t// Default language if none is detected (or not found)\n\t\t\t\t\tfallbackLng: 'en-US',\n\t\t\t\t\t// This ensures that if the key ins't found in the namespace specified it will try and find it in the default namespace\n\t\t\t\t\tfallbackNS: options.NAMESPACE_DEFAULT,\n\t\t\t\t\t// First check the browser for language preference and then fallback to default options if undefined\n\t\t\t\t\t// lng: nav.userLanguage || nav.language || options.LANGUAGE_DEFAULT,\n\t\t\t\t\t// Namespaces to load at initialization\n\t\t\t\t\tns: options.NAMESPACES,\n\t\t\t\t\t//sendMissing: true,\n\t\t\t\t\tuseCookie: false,\n\t\t\t\t\t// Allowed languages\n\t\t\t\t\twhitelist: options.LANGUAGE_WHITELIST,\n\t\t\t\t},\n\t\t\t\t// Ready callback\n\t\t\t\tfunction (error, instance) {\n\t\t\t\t\t// An error is a result of not receiving any locales from the server\n\t\t\t\t\t// Do not blow up the app - initialize the jquery piece\n\n\t\t\t\t\tjqueryI18next.init(i18next, $, {\n\t\t\t\t\t\t// appends $.t = i18next.t\n\t\t\t\t\t\ttName: 't',\n\t\t\t\t\t\t// appends $.i18n = i18next\n\t\t\t\t\t\ti18nName: 'i18n',\n\t\t\t\t\t\t// appends $(selector).localize(opts);\n\t\t\t\t\t\thandleName: 'localize',\n\t\t\t\t\t\t// selector for translating elements\n\t\t\t\t\t\tselectorAttr: 'data-i18n',\n\t\t\t\t\t\t// data-() attribute to grab target element to translate (if diffrent then itself)\n\t\t\t\t\t\ttargetAttr: 'i18n-target',\n\t\t\t\t\t\t// data-() attribute that contains options, will load/set if useOptionsAttr = true\n\t\t\t\t\t\toptionsAttr: 'i18n-options',\n\t\t\t\t\t\t// see optionsAttr\n\t\t\t\t\t\tuseOptionsAttr: false,\n\t\t\t\t\t\t// parses default values from content ele.val or ele.text\n\t\t\t\t\t\tparseDefaultValueFromContent: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\trejector();\n\t\t\t\t\t\treturn reject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set on html tag\n\t\t\t\t\tdocument.documentElement.setAttribute('lang', i18n.language);\n\n\t\t\t\t\tdispatcher.trigger('app:i18n:ready');\n\n\t\t\t\t\tresolve(i18next);\n\t\t\t\t\tresolver();\n\t\t\t\t},\n\t\t\t);\n\t\t/////////////////////////////////////\n\t\t// !i18n initialization\n\t\t/////////////////////////////////////\n\t});\n};\n\nexport const i18n = i18next;\n\nexport default {\n\tinitialize,\n\tinitialized,\n\ti18n,\n};\n","export const enumToValues = (enumObject: T) => {\n\treturn Object.values(enumObject).filter(\n\t\t(v) => typeof v === 'number',\n\t) as T[keyof T][];\n};\n\nexport default enumToValues;\n","// whatever we want to test here for touch devices\nconst isTouchDevice = () => window.matchMedia('(pointer: coarse)').matches;\n\n/**\n * Is this a touch device and smaller than mobile-breakpoint-max?\n * @param testTouch Inlcude testing for touch\n * @return Is mobile\n */\nexport const isMobile = (testTocuh = true) =>\n\t(!testTocuh || isTouchDevice()) && window.innerWidth < 767;\n\nexport default isMobile;\n","/**\n * Given an object, will return a query params string\n * @param obj Object\n * @return Query params\n * @example\n * getURLQueryFromObject({foo: 'bar', moo: 'iar'}): \"?foo=bar&moo=iar\"\n */\nexport const getURLQueryFromObject = (\n\tobj: Record = {},\n) => {\n\treturn obj\n\t\t? Object.entries(obj).reduce(\n\t\t\t\t(accum, [key, value], index) =>\n\t\t\t\t\taccum +\n\t\t\t\t\t((!index ? `?` : `&`) + `${key}=${encodeURIComponent(value)}`),\n\t\t\t\t'',\n\t\t )\n\t\t: '';\n};\n\nexport default getURLQueryFromObject;\n","export const isFirefox = () => navigator.userAgent.indexOf('Firefox') > -1;\nexport default isFirefox;\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","'use strict';\n\n(function () {\n var ls = typeof window !== 'undefined' ? window.localStorage : null\n , ms = require('ms')\n , lzstring = require('lz-string');\n\n // Provide an in-memory fallback for\n // older browsers.\n if (!ls) {\n ls = {\n _data: {},\n setItem: function(id, val) {\n return this._data[id] = String(val);\n },\n getItem: function(id) {\n return this._data.hasOwnProperty(id) ? this._data[id] : undefined;\n },\n removeItem: function(id) {\n return delete this._data[id];\n },\n key: function (index) {\n for (var key in this_data) {\n if (!(index--)) {\n return key;\n }\n }\n },\n clear: function() {\n return this._data = {};\n }\n };\n }\n\n // Fastest utility functions for this case.\n // Faster than underscore and lodash.\n // Besides, do I even need them here?\n var utils = {\n each: function (arr, iteratee) {\n var l = arr.length;\n while (l--) iteratee(arr[l], l);\n },\n map : function (arr, iteratee) {\n var newArr = new Array(arr.length)\n , l = arr.length;\n while (l--) newArr[l] = iteratee(arr[l], l);\n return newArr;\n },\n filter: function (arr, iteratee) {\n var newArr = []\n , l = arr.length;\n while (l--) {\n if (iteratee(arr[l], l))\n newArr.push(arr[l]);\n }\n return newArr;\n }\n }\n\n var _keys, _config, _compressAll, _timeouts = {};\n\n var Locally = function (options) {\n // custom options\n options = options || {};\n _compressAll = options.compress;\n\n // load current localStorage state\n _config = ls.getItem('locally-config');\n\n // start anew if no config\n if (!_config) {\n _config = {};\n\n // reads localstorage and updates config\n _rebuildConfig();\n }\n else {\n var deconfig = lzstring.decompressFromUTF16(_config);\n\n try {\n _config = JSON.parse(deconfig || _config);\n } catch (e) {\n if (!!deconfig) {\n try {\n _config = JSON.parse(_config);\n } catch (e) {\n throw new Error('Locally: config is corrupted');\n }\n } else throw new Error('Locally: config is corrupted');\n }\n\n // reads localstorage and updates config\n _rebuildConfig();\n }\n\n _saveConfig();\n\n Object.defineProperty(this, 'length', {\n get: function () {\n return _keys.length;\n }\n });\n };\n\n Locally.prototype.set = function (key, value, options) {\n if (arguments.length < 2)\n throw new Error('Locally: no key or value given');\n\n options = options || {};\n\n if (typeof options !== 'object') {\n options = { ttl: options };\n }\n\n if (typeof options.ttl === 'string') {\n options.ttl = ms(options.ttl);\n }\n\n // Set TTL\n _config[key] = _config[key] || {};\n\n // Add to keys array\n if (_keys.indexOf(key) == -1) {\n _keys.push(key);\n }\n\n // Set TTL\n if (options.ttl && !isNaN(options.ttl)) {\n _clearTimeout(key);\n _setTimeout(key, options.ttl);\n } else if (_config[key].ttl) {\n _clearTimeout(key);\n }\n\n // LocalStorage saves and returns values as strings.\n // Type of values will be saved so that values will be\n // parsed to their original type.\n var res = _getType(value);\n\n value = res.value;\n _config[key].t = res.type;\n\n // compression\n if (options.compress || _compressAll) {\n _config[key].c = 1;\n value = lzstring.compressToUTF16(value.toString());\n }\n\n key = String(key);\n value = String(value);\n\n ls.setItem(key, value);\n _saveConfig();\n }\n\n Locally.prototype.get = function (key) {\n return Array.isArray(key) ? utils.map(key, function (item) { return _get(item); }.bind(this)) : _get(key);\n }\n\n Locally.prototype.keys = function (pattern) {\n // Return all keys\n if (!pattern || pattern == '*') return _keys.slice(0);\n\n // RegExp pattern to be queried\n if (!(pattern instanceof RegExp)) {\n pattern = new RegExp('.*' + pattern + '.*');\n }\n\n return utils.filter(_keys, function (key) {\n return pattern.test(key);\n });\n }\n\n Locally.prototype.remove = function (key) {\n if (typeof key === 'undefined')\n throw new Error('Locally: \\'remove\\' requires a key');\n\n if (Array.isArray(key)) {\n utils.each(key, _remove);\n } else {\n _remove(key);\n }\n }\n\n // callback gets 'value' and 'key' as parameters\n Locally.prototype.scan = function (key, fn) {\n return utils.each(this.keys(key), function (key) {\n fn(_get(key), key);\n });\n }\n\n Locally.prototype.ttl = function (key, returnString) {\n return _config[key] ?\n _config[key].ttl ?\n !returnString ?\n _config[key].ttl - Date.now()\n : ms(_config[key].ttl - Date.now())\n : -1\n : -2;\n }\n\n Locally.prototype.persist = function (key) {\n return _config[key] ? delete _config[key].ttl && _saveConfig() && _clearTimeout(key) : false;\n }\n\n Locally.prototype.expire = function (key, ttl) {\n return _config[key] ? !!(_config[key].ttl = Date.now() + ttl) && _saveConfig() : false;\n }\n\n Locally.prototype.clear = function () {\n ls.clear();\n\n _config = {};\n _keys = [];\n return _saveConfig();\n }\n\n Locally.prototype.key = function (index) {\n return _keys[index];\n }\n\n // Removes a value from localStorage\n function _remove(key) {\n var i = _keys.indexOf(key)\n if (i > -1) {\n ls.removeItem(key);\n _keys.splice(_keys.indexOf(key), 1);\n delete _config[key];\n }\n }\n\n // Saves config to localStorage\n function _saveConfig() {\n ls.setItem('locally-config', lzstring.compressToUTF16( JSON.stringify(_config)) );\n return true;\n }\n\n function _get(key) {\n // Return null if no key is given\n if (typeof key === 'undefined' || !_config[key]) return null;\n\n // Check for TTL\n // If TTL is exceeded delete data\n // and return null\n if (_config[key].ttl && _config[key].ttl < Date.now()) {\n delete _config[key];\n\n _saveConfig();\n _remove(key);\n\n return null;\n }\n\n var temp, value = _config[key].c ? lzstring.decompressFromUTF16( ls.getItem(key) ) : ls.getItem(key);\n\n // Return value in correct type\n switch (_config[key].t) {\n case 'o':\n try {\n value = JSON.parse(value);\n } catch (e) {}\n\n return value;\n break;\n\n case 'd':\n return new Date(parseInt(value, 10));\n break;\n\n case 'r':\n return new RegExp(value.substring(1, value.length - 1));\n break;\n\n case 'f':\n eval('temp = ' + value);\n return temp;\n break;\n\n case 'n':\n return Number(value);\n break;\n\n case 'b':\n return value == '1';\n break;\n\n case 's':\n default:\n if (value === 'null')\n return null;\n else if (value === 'undefined')\n return undefined;\n else return String(value);\n break;\n }\n }\n\n function _getType(value) {\n var type;\n\n switch (typeof value) {\n case 'object':\n // Keep Date objects as timestamps\n if (value instanceof Date) {\n value = value.getTime();\n type = 'd';\n }\n // Keep RegExp objects as strings\n else if (value instanceof RegExp) {\n value = value.toString();\n type = 'r';\n }\n // Otherwise keep them as JSON\n else {\n value = JSON.stringify(value);\n type = 'o';\n }\n break;\n\n case 'function':\n type = 'f';\n break;\n\n case 'number':\n type = 'n';\n break;\n\n case 'boolean':\n value = value ? 1 : 0;\n type = 'b';\n break;\n\n case 'string':\n default:\n type = 's';\n }\n\n return {\n value: value,\n type: type\n };\n }\n\n function _rebuildConfig() {\n var l = ls.length;\n _keys = new Array(l);\n\n // Cache localStorage keys for faster access\n while (l--) {\n _keys[l] = ls.key(l);\n _config[_keys[l]] = _config[_keys[l]] || {};\n\n // _compressAll is given and value is not\n // compressed then compress the value\n if (_compressAll && !_config[_keys[l]].c) {\n _config[_keys[l]].c = true;\n ls.setItem(_keys[l], lzstring.compressToUTF16( ls.getItem(_keys[l]) ));\n }\n // if the value is compressed and\n // compressAll is not given then decompress\n // current value.\n else if (!_compressAll && _config[_keys[l]].c) {\n delete _config[_keys[l]].c;\n ls.setItem(_keys[l], lzstring.decompressFromUTF16( ls.getItem(_keys[l]) ));\n }\n\n if (_config[_keys[l]].ttl) {\n _setTimeout(_keys[l], _config[_keys[l]].ttl - Date.now());\n }\n }\n\n // Exclude locally-config from _keys array\n if (_keys.indexOf('locally-config') > -1) {\n _keys.splice(_keys.indexOf('locally-config'), 1);\n }\n }\n\n function _setTimeout(key, ttl) {\n _config[key].ttl = Date.now() + ttl;\n _timeouts[key] = setTimeout(function () {\n _remove(key);\n }, ttl);\n }\n\n function _clearTimeout(key) {\n if (_keys.indexOf(key) > -1) {\n clearTimeout(_timeouts[key]);\n delete _timeouts[key];\n delete _config[key].ttl;\n return true;\n }\n else return false;\n }\n\n // CommonJS\n if (typeof exports === 'object') {\n module.exports.Store = Locally;\n }\n // AMD. Register as an anonymous module.\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return {\n Store: Locally\n };\n });\n }\n // Browser global.\n if (typeof window === 'object') {\n window.Locally = {\n Store: Locally\n };\n }\n})();\n","module.exports = require('./dist/commonjs/index.js').default;\n","module.exports = require('./dist/commonjs/index.js').default;\n","module.exports = require('./dist/commonjs/index.js').default;\n","/***************\n * NetX extensions to Underscore's _ object, adding miscellaneous utility functions.\n * NOTE: Be sure to document new items in https://confluence.netx.net/display/DEV/X7+Library+Overrides%2C+Extensions+and+Mixins\n */\nimport _ from 'underscore';\n\nimport {arrayToCsv, csvToArray} from '../utils';\n\n/**\n * Convert arguments to array\n * @param {arguments} args Arguments\n * @return {array}\n */\nexport const argsToArray = (args) => {\n\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments\n\treturn args.length === 1 ? [args[0]] : Array.apply(null, args);\n};\n\n/**\n * Convert integer byte counts into human-readable strings\n * @param {number} bytes Bytes to be formatted\n * @param {boolean} floor Whether to Math.floor the return\n * @param {string} maxScale The maximum unit\n * @returns {string} converted bytes affixed with units\n */\nexport const bytes = (bytes, floor, maxScale) => {\n\tvar i = -1;\n\tvar byteUnits = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n\tvar idx = _.indexOf(byteUnits, maxScale);\n\tif (idx > -1) {\n\t\ti = idx;\n\t\tbytes = bytes ? bytes / Math.pow(1000, idx + 1) : 0;\n\t} else {\n\t\tdo {\n\t\t\tbytes = bytes / 1000;\n\t\t\ti++;\n\t\t} while (bytes >= 1000);\n\t}\n\n\tif (bytes > 0) {\n\t\tif (floor) {\n\t\t\treturn Math.floor(bytes) + ' ' + byteUnits[i];\n\t\t} else {\n\t\t\t// We need more info when it comes to over a gig\n\t\t\tif (i > 1) {\n\t\t\t\treturn Math.max(bytes, 0.01).toFixed(2) + ' ' + byteUnits[i];\n\t\t\t} else {\n\t\t\t\treturn Math.max(bytes, 0.1).toFixed(1) + ' ' + byteUnits[i];\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn idx > -1 ? '0 ' + byteUnits[idx] : '0 kB';\n\t}\n};\n\n/**\n * Returns str without quotes and spaces commas\n * @param {string} str String to clean up\n * @returns {string} Clean spaced string\n */\nexport const cleanQuotes = (str) => {\n\treturn str.replace(/\"/g, '').replace(/,/g, ', ');\n};\n\n/**\n * @param {Date|number|string} d Date string\n * @returns {string} HTML date string (YYYY-MM-DD)\n */\nexport const dateToHTML = (d) => {\n\tif (!_.isUndefined(d) && d) {\n\t\t// Support milliseconds\n\t\tif (_.isNumber(d)) {\n\t\t\td = new Date(d);\n\t\t}\n\n\t\tif (d instanceof Date) {\n\t\t\treturn [\n\t\t\t\td.getFullYear(),\n\t\t\t\tpad(d.getMonth() + 1, 2),\n\t\t\t\tpad(d.getDate(), 2),\n\t\t\t].join('-');\n\t\t}\n\n\t\tvar temp = d.split('/');\n\t\tif (temp.length && temp[0].length === 4)\n\t\t\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$1-$2-$3');\n\n\t\treturn d.replace(/(\\d+)\\/(\\d+)\\/(\\d+)/, '$3-$1-$2');\n\t}\n\treturn '';\n};\n\n/**\n * Escape asset attribute name\n * (Do what underscore's _.escape does, then encode any open & close parens as HTML entities.)\n *\n * @param {string} string Attribute name\n * @return {string} Escaped attribute name\n */\nexport const escapeAttributeName = (string) => {\n\tstring = _.escape(string);\n\tstring = string\n\t\t.replace(/\\(/g, '(')\n\t\t.replace(/\\)/g, ')')\n\t\t.replace(/\\[/g, '[')\n\t\t.replace(/\\]/g, ']');\n\treturn string;\n};\n\n/**\n * @param {object} exports module.exports\n * @param {array} actions Actions\n * @return {array} Extended actions\n */\nexport const extendActions = (exports, actions) => {\n\tvar _action;\n\t_.each(actions, function (action) {\n\t\t_action = _.findWhere(exports, {event: action.event});\n\t\t_action && _.extend(_action, action);\n\t});\n\treturn exports;\n};\n\n/**\n * Get the body of a function as string\n * https://stackoverflow.com/questions/3179861/javascript-get-function-body\n * @method\n * @param {function} func Function\n * @return {string} Function body\n */\nexport const getFunctionBody = (func) => {\n\tvar fstring = func.toString();\n\treturn fstring.substring(fstring.indexOf('{') + 1, fstring.lastIndexOf('}'));\n};\n\n/**\n * Returns a worker\n * @method\n * @param {function} func Worker function\n * @return {Worker} Worker\n */\nexport const getInlineWorker = (func) => {\n\tvar blob = new Blob([getFunctionBody(func)]);\n\n\tvar worker = new Worker(window.URL.createObjectURL(blob));\n\treturn worker;\n};\n\n/**\n * @param {mixed} value Value\n * @return {boolean}\n */\nexport const isEmptyValue = (value) => {\n\tif (Array.isArray(value)) {\n\t\treturn value.length === 0 || (value.length === 1 && value[0] === '');\n\t}\n\treturn value == null || (value + '').trim() === '';\n};\n\n/**\n * Will check if a string has already been escaped via _.escapeURI\n * @param {string} str String in question\n * @returns {boolean}\n */\nexport const isEscapedURI = (str) => {\n\treturn typeof str == 'string' && _.unescapeURI(str) !== str;\n};\n\n/**\n * Is this a touch device and smaller than mobile-breakpoint-max?\n * @function\n * @param {boolean} testTouch Inlcude testing for touch\n */\nexport const isMobile = (testTocuh = true) => {\n\treturn (!testTocuh || Modernizr.touch) && window.innerWidth < 767;\n};\n\nexport const isPublicUser = () => {\n\treturn (\n\t\tNetx.getPublicProperty?.('viewer.userLogin') &&\n\t\tNetx.getPublicProperty?.('viewer.userLogin') === Netx.getUser?.('login')\n\t);\n};\n\n/**\n * Returns str (perhaps representing an integer)\n * left-padded with zeroes to at least 'max' characters in width\n * example: pad(\"3\",4) == \"0003\"\n * @param {string} str String to pad\n * @param {integer} max The amount of '0's to pad to\n * @returns {string} Padded string\n */\nexport const pad = (str, max) => {\n\tstr = str + '';\n\twhile (str.length < max) {\n\t\tstr = '0' + str;\n\t}\n\treturn str;\n};\n\n/**\n * Generate random text.\n * @param {number} length How much.\n * @param {string} [chars] A set of characters to compose random text from.\n */\nexport const randomChars = (length, chars) => {\n\tif (!chars) {\n\t\tchars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\t}\n\tvar result = '';\n\tfor (var i = length; i > 0; --i) {\n\t\tresult += chars[Math.round(Math.random() * (chars.length - 1))];\n\t}\n\treturn result;\n};\n\n/**\n * Provided with full dimensions and dimensions to fit, will return resized dimensions\n * @param {object} dimensions Full dimensions of thing to fit\n * @param {object} fitDimensions Dimensions to fit to\n * @return {object} Resized dimensions\n */\nexport const resizeToFit = (dimensions, fitDimensions) => {\n\tlet height = dimensions.height;\n\tlet width = dimensions.width;\n\tlet newDimensions = _.clone(dimensions);\n\n\tconst aspectRatio = dimensions.aspectRatio || width / height;\n\tconst maxWidth = fitDimensions.width;\n\tconst maxHeight = fitDimensions.height;\n\n\tif (maxHeight && maxWidth) {\n\t\tif (maxWidth < width) {\n\t\t\twidth = maxWidth;\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t\tif (maxHeight < height) {\n\t\t\theight = maxHeight;\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t\t// Make a second pass to be sure our resize did not cause the height or width to exceed the fitDimensions\n\t\tif (maxHeight < height) {\n\t\t\theight = maxHeight;\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t\tif (maxWidth < width) {\n\t\t\twidth = maxWidth;\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t\tnewDimensions = {\n\t\t\theight: height,\n\t\t\twidth: width,\n\t\t};\n\t}\n\treturn newDimensions;\n};\n\n/**\n * Unescape asset attribute name in form fields.\n * (Specifically, do everything underscore's _.unescape method does,\n * and also decode the HTML entities for open & close parens, if present.)\n *\n * @param {string} string Attribute name\n * @return {string} Unescaped attribute name\n */\nexport const unescapeAttributeName = (string) => {\n\tstring = _.unescape(string);\n\tstring = string\n\t\t.replace(/(/g, '(')\n\t\t.replace(/)/g, ')')\n\t\t.replace(/[/g, '[')\n\t\t.replace(/]/g, ']');\n\treturn string;\n};\n\n_.mixin({\n\tbytes,\n\n\t/**\n\t * @param {array|number} items Either an array of items or a number\n\t * @param {number} currentIndex Current index in items\n\t * @param {number} itemsToDisplay Number of items to display\n\t * @param {mixed} ellipsis What to use for ellipis\n\t * @returns {array} array of crumbs\n\t */\n\tcrumbs: function (items, currentIndex, itemsToDisplay, ellipsis) {\n\t\tcurrentIndex = parseInt(currentIndex) || 1;\n\t\titemsToDisplay = parseInt(itemsToDisplay) || 2;\n\t\tellipsis = ellipsis || '...';\n\n\t\tvar crumbArray = [],\n\t\t\ttotalItems = _.isArray(items) ? items.length : parseInt(items) || 0,\n\t\t\tfirstItem = 1;\n\n\t\tif (totalItems) {\n\t\t\t// Subtract 2 ( for 1 on each side ) then divide by 2\n\t\t\tvar adjacentCount = Math.floor((itemsToDisplay - 2) / 2),\n\t\t\t\tfirstAdjacentItem,\n\t\t\t\tlastAdjacentItem;\n\n\t\t\t// Page count must be greater than pages to display\n\t\t\tif (totalItems >= itemsToDisplay) {\n\t\t\t\tif (currentIndex <= adjacentCount + adjacentCount) {\n\t\t\t\t\tfirstAdjacentItem = firstItem;\n\t\t\t\t\tlastAdjacentItem = Math.min(\n\t\t\t\t\t\tfirstItem + adjacentCount + adjacentCount,\n\t\t\t\t\t\ttotalItems,\n\t\t\t\t\t);\n\t\t\t\t} else if (currentIndex > totalItems - adjacentCount - adjacentCount) {\n\t\t\t\t\tlastAdjacentItem = totalItems;\n\t\t\t\t\tfirstAdjacentItem = totalItems - adjacentCount - adjacentCount;\n\t\t\t\t} else {\n\t\t\t\t\tfirstAdjacentItem = currentIndex - adjacentCount;\n\t\t\t\t\tlastAdjacentItem = currentIndex + adjacentCount;\n\t\t\t\t}\n\n\t\t\t\tif (firstAdjacentItem > firstItem) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[firstItem - 1] : firstItem);\n\t\t\t\t\tif (firstAdjacentItem > firstItem + 1) {\n\t\t\t\t\t\tcrumbArray.push(ellipsis);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var i = firstAdjacentItem; i <= lastAdjacentItem; i++) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[i - 1] : i);\n\t\t\t\t}\n\t\t\t\tif (lastAdjacentItem < totalItems) {\n\t\t\t\t\tif (lastAdjacentItem < totalItems - 1) {\n\t\t\t\t\t\tcrumbArray.push(ellipsis);\n\t\t\t\t\t}\n\t\t\t\t\tcrumbArray.push(\n\t\t\t\t\t\t_.isArray(items) ? items[totalItems - 1] : totalItems,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Just spit em all out\n\t\t\telse {\n\t\t\t\t_.times(totalItems, function (n) {\n\t\t\t\t\tcrumbArray.push(_.isArray(items) ? items[n] : n + 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn crumbArray;\n\t},\n\n\t/**\n\t * isURL: returns true if a string is a valid URL.\n\t * @param {string} str the string to be tested\n\t * @return {boolean} Is URL\n\t */\n\tisURL: function (str) {\n\t\treturn !!_.matchURL(str);\n\t},\n\n\t/**\n\t * This is harder than it seems.\n\t * The following page shows a fairly complete test suite for regexp URL validation\n\t * using several popular internet options:\n\t *\n\t * \thttps://mathiasbynens.be/demo/url-regex\n\t *\n\t * isURL uses the only algorithm on this page that passed all tests --\n\t * \thttps://gist.github.com/dperini/729294 -- by Diego Perini\n\t *\n\t * @param {string} str the string to be tested\n\t * @return {array|null} the result of String.match()\n\t */\n\tmatchURL: function (str) {\n\t\treturn str.match(\n\t\t\tnew RegExp(\n\t\t\t\t'^' +\n\t\t\t\t\t// protocol identifier\n\t\t\t\t\t'(?:(?:https?|ftp)://)' +\n\t\t\t\t\t// user:pass authentication\n\t\t\t\t\t'(?:\\\\S+(?::\\\\S*)?@)?' +\n\t\t\t\t\t'(?:' +\n\t\t\t\t\t// IP address exclusion\n\t\t\t\t\t// private & local networks\n\t\t\t\t\t'(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})' +\n\t\t\t\t\t'(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})' +\n\t\t\t\t\t'(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})' +\n\t\t\t\t\t// IP address dotted notation octets\n\t\t\t\t\t// excludes loopback network 0.0.0.0\n\t\t\t\t\t// excludes reserved space >= 224.0.0.0\n\t\t\t\t\t// excludes network & broacast addresses\n\t\t\t\t\t// (first & last IP address of each class)\n\t\t\t\t\t'(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])' +\n\t\t\t\t\t'(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}' +\n\t\t\t\t\t'(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))' +\n\t\t\t\t\t'|' +\n\t\t\t\t\t// host name\n\t\t\t\t\t'(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)' +\n\t\t\t\t\t// domain name\n\t\t\t\t\t'(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*' +\n\t\t\t\t\t// TLD identifier\n\t\t\t\t\t'(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))' +\n\t\t\t\t\t// TLD may end with dot\n\t\t\t\t\t'\\\\.?' +\n\t\t\t\t\t')' +\n\t\t\t\t\t// port number\n\t\t\t\t\t'(?::\\\\d{2,5})?' +\n\t\t\t\t\t// resource path\n\t\t\t\t\t'(?:[/?#]\\\\S*)?' +\n\t\t\t\t\t'$',\n\t\t\t\t'i',\n\t\t\t),\n\t\t);\n\t},\n\n\t/**\n\t * Determine if a string (or number) is numeric; different from _.isNumber, which just tests type\n\t * http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric\n\t * @param {*} String/Integer\n\t * @returns {bool} Whether or not it is a number to test\n\t */\n\tisNumeric: function (n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t},\n\n\t/**\n\t * @method\n\t * @param {string} str String to parse\n\t * @return {string} Parsed URL string\n\t */\n\tparseURLS: function (str) {\n\t\treturn (\n\t\t\tstr &&\n\t\t\tstr.replace(\n\t\t\t\t/(https?:\\/\\/.*?[^\\s|'|\"]+)/g,\n\t\t\t\t'$1',\n\t\t\t)\n\t\t);\n\t},\n\n\t/**\n\t * Convert a string \"true\"/\"false\" to boolean\n\t * @param {string} val String to convert\n\t * @returns {bool} The string as a boolean\n\t */\n\ttoBoolean: function (val) {\n\t\tif (val.toLowerCase() == 'false') return false;\n\t\treturn true;\n\t},\n\n\t/**\n\t * For historical reasons, the DAM sometimes encodes object data as an array of LabelValueBeans.\n\t * objectToLvbs and lvbsToObject are utilities to convert in and out of that format.\n\t * @param {object} obj Label value bean object to convert to array\n\t * @returns {array} Label value been object as array\n\t */\n\tobjectToLvbs: function (obj) {\n\t\treturn _.map(obj, function (v, l) {\n\t\t\treturn {label: l, value: v};\n\t\t});\n\t},\n\n\t/**\n\t * For historical reasons, the DAM sometimes encodes object data as an array of LabelValueBeans.\n\t * objectToLvbs and lvbsToObject are utilities to convert in and out of that format.\n\t * @param {array} lvb Label value bean array to convert to object\n\t * @returns {array} Label value been array as object\n\t */\n\tlvbsToObject: function (lvb) {\n\t\tif (_.isUndefined(lvb) || _.isNull(lvb)) return undefined; // undefined array == undefined object.\n\t\tif (!_.isArray(lvb)) lvb = [lvb]; // convert a single LVB into an array of one.\n\t\tif (lvb.length == 0) return {}; // empty array == empty object.\n\n\t\tvar memo = {};\n\t\t_.reduce(\n\t\t\tlvb,\n\t\t\tfunction (memo, b) {\n\t\t\t\tmemo[b.label] = b.value;\n\t\t\t\treturn memo;\n\t\t\t},\n\t\t\tmemo,\n\t\t);\n\t\treturn memo;\n\t},\n\n\t/**\n\t * An attempt at a utility function to turn a bean label-value array like [ {label: 'foo', value: 123 }, ... ] into\n\t * a more useful object like { foo: 123, ... }\n\t * NOTE: it expands into sub-objects when label has dots. or should. (see _dotExpand() above)\n\t * NOTE: this is destructive to the passed in array lv, as it would otherwise get set on the model\n\t * TODO: should this be done instead outside of this function? probably maybe.\n\t * @param {array} lv Bean label-value array\n\t * @returns {object} Bean label-value array as object\n\t */\n\tlvbsToDeepObject: function (lv) {\n\t\tvar obj = {};\n\t\tfor (var i = 0; i < lv.length; i++) {\n\t\t\tvar val = lv[i].value;\n\t\t\t//being outrageously bold here and assuming no string in user prefs wants to be literal \"true\" or \"false\"\n\t\t\t// if this turns out not to be the case, my apologies and this will have to do a case-by-case check on what to turn into boolean. :( -jon\n\t\t\tif (val == 'true' || val == 'false') val = _.toBoolean(val);\n\t\t\t_._dotExpand(obj, lv[i].label.split('.'), val);\n\t\t}\n\t\tlv.length = 0; //the destructive part\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Really just a utility function for beanArrayToObject.\n\t * This will take (obj, [foo, bar, baz, fu], val) and alter obj to be: obj[foo][bar][baz][fu] = val (creating sub-objects iff necessary)\n\t * NOTE: this will alter/affect the passed-in obj, and the return value is only useful for recursing here\n\t * @param {object} obj Object to expand from array\n\t * @param {array} levels An array of levels which to expand the object to\n\t * @param {*} value The value to assign to this new object level\n\t */\n\t_dotExpand: function (obj, levels, value) {\n\t\tvar key = levels.shift();\n\n\t\t//trivial case where initial levels = [] ... just to do the right thing (i think?)\n\t\tif (_.isUndefined(key)) {\n\t\t\tobj = value;\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (levels.length === 0) {\n\t\t\tobj[key] = value;\n\t\t\treturn obj;\n\t\t}\n\n\t\t//still more levels to go, so lets make sure this has a home\n\t\tif (!obj[key]) obj[key] = {};\n\t\t//if (typeof obj[key] != 'object') return; //???????? TODO\n\n\t\treturn _._dotExpand(obj[key], levels, value);\n\t},\n\n\t/**\n\t * Complement to _dotExpand(). Will return an array of [{label: value}, {label: value},...] of leaf nodes\n\t * e.g. {a: {b: 1, c: 2}} -> [ {a.b: 1}, {a.c: 2} ]\n\t * @param {object} obj Object to collapse to an array\n\t * @returns {array} Collapsed object as an array\n\t */\n\t_dotCollapse: function (obj) {\n\t\tvar arr = [];\n\t\tvar o = {};\n\t\tfor (var key in obj) {\n\t\t\tif (typeof obj[key] == 'object') {\n\t\t\t\tvar r = _._dotCollapse(obj[key]);\n\t\t\t\tfor (var i = 0; i < r.length; i++) {\n\t\t\t\t\tfor (var rk in r[i]) {\n\t\t\t\t\t\t//should really only be one key but how to do this shorthand?\n\t\t\t\t\t\to = {};\n\t\t\t\t\t\to[key + '.' + rk] = r[i][rk];\n\t\t\t\t\t\tarr.push(o);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\to = {};\n\t\t\t\t/////////////TODO deal with conversion to boolean !?!\n\t\t\t\to[key] = obj[key];\n\t\t\t\tarr.push(o);\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t},\n\n\tdateToHTML,\n\n\t/**\n\t * The DAM (sometimes) stores dates on asset attributes in dd/mm/yyyy format, but HTML forms use yyyy-mm-dd format.\n\t * @param {string} d Date string\n\t * @returns {string} DAM date string\n\t */\n\tdateToDAM: function (d) {\n\t\tif (!_.isUndefined(d)) {\n\t\t\tvar temp = d.split('-');\n\t\t\tif (temp.length && temp[0].length === 4)\n\t\t\t\treturn d.replace(/(\\d+)-(\\d+)-(\\d+)/, '$1/$2/$3');\n\n\t\t\treturn d.replace(/(\\d+)-(\\d+)-(\\d+)/, '$3/$1/$2');\n\t\t}\n\t},\n\t/**\n\t * Provided with a date or time (in milliseconds), get a new date in the users timezone\n\t * If nothing is provided you will get now\n\t * @param {date|number} d Date or time\n\t * @return {date} Local date\n\t */\n\tdateToLocalTimezone: function (d) {\n\t\tif (!(d instanceof Date)) {\n\t\t\tif (_.isNumber(d)) {\n\t\t\t\td = new Date(d);\n\t\t\t} else {\n\t\t\t\treturn new Date();\n\t\t\t}\n\t\t}\n\n\t\tvar time = d.getTime(),\n\t\t\ttimezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;\n\n\t\treturn new Date(time + timezoneOffset);\n\t},\n\t/**\n\t * The DAM stores timestamps on assets (and some other objects) in a completely different format:\n\t * yyyy-mm-dd hh:mm:ss.s\n\t * (.s == tenths of a second ... sometimes there and sometimes not)\n\t * This function takes one of those strings, and returns a JS Date object.\n\t * @param {string} d asset timestamp\n\t * @returns {Date} JS Date object\n\t */\n\tdateFromAsset: function (d) {\n\t\tvar t = d.match(/(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)/);\n\t\tif (!t || !t.length) {\n\t\t\tthrow new Error(\"dateFromAsset: bad date '\" + d + \"'\");\n\t\t}\n\n\t\treturn new Date(t[1], t[2] - 1, t[3], t[4], t[5], t[6]);\n\t},\n\n\t/**\n\t * The opposite: turn a js Date object into a DAM asset timestamp\n\t * @param {Date} d A Date object. If omitted, we create one with the current time.\n\t * @param {boolean} omitTime Omit the time piece\n\t * @returns {string} asset timestamp in local timezone\n\t */\n\tdateToAsset: function (d, omitTime) {\n\t\td = d || new Date();\n\t\tvar ret =\n\t\t\td.getFullYear() +\n\t\t\t'-' +\n\t\t\tpad(d.getMonth() + 1, 2) +\n\t\t\t'-' +\n\t\t\tpad(d.getDate(), 2);\n\t\tif (!omitTime) {\n\t\t\tret +=\n\t\t\t\t' ' +\n\t\t\t\tpad(d.getHours(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(d.getMinutes(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(d.getSeconds(), 2) +\n\t\t\t\t'.0';\n\t\t}\n\t\treturn ret;\n\t},\n\n\t/**\n\t * Same thing, but in UTC.\n\t * @param {Date} d A Date object. If omitted, we create one with the current time.\n\t * @returns {string} asset timestamp in UTC\n\t */\n\tdateToAssetUTC: function (d) {\n\t\treturn [\n\t\t\td.getUTCFullYear(),\n\t\t\t'-',\n\t\t\tpad(d.getUTCMonth(), 2),\n\t\t\t'-',\n\t\t\tpad(d.getUTCDate(), 2),\n\t\t\t' ',\n\t\t\tpad(d.getUTCHours(), 2),\n\t\t\t':',\n\t\t\tpad(d.getUTCMinutes(), 2),\n\t\t\t':',\n\t\t\tpad(d.getUTCSeconds(), 2),\n\t\t\t'.0',\n\t\t].join('');\n\t},\n\n\t/**\n\t * Convert string date 'yyyy-mm-dd' to JavaScript Date object\n\t * @param {string} dateString Date string formatted 'yyyy-mm-dd'\n\t * @returns {date} JavaScript Date object\n\t */\n\tdateFromString: function (d) {\n\t\t// Try with \"-\"\n\t\tvar t = d.match(/(\\d+)-(\\d+)-(\\d+)/);\n\t\tif (!t || !t.length) {\n\t\t\t// Try with \"/\"\n\t\t\tt = d.match(/(\\d+)\\/(\\d+)\\/(\\d+)/);\n\t\t\tif (!t || !t.length) {\n\t\t\t\tthrow new Error(\"dateFromString: bad date '\" + d + \"'\");\n\t\t\t}\n\t\t}\n\n\t\tvar nd = new Date(t[1], t[2] - 1, t[3]);\n\t\treturn nd;\n\t},\n\t/**\n\t * Escape special characters in the URI function escapes [']\n\t * @param {string} str URI string to be escaped\n\t * @return {string} \t\tEscaped URI string\n\t */\n\tescapeURI: function (str) {\n\t\tvar URI = encodeURIComponent(str).replace(\"'\", '%27');\n\t\treturn URI;\n\t},\n\t/**\n\t * Unescape special characters in the URI function unescape [%27]\n\t * @param {string} str URI string to be unescaped\n\t * @return {string} Unescaped URI string\n\t */\n\tunescapeURI: function (str) {\n\t\t// var URI = decodeURIComponent(str).replace(\"%27\",\"'\");\n\t\tvar URI = decodeURIComponent(str.replace('%27', \"'\"));\n\t\treturn URI;\n\t},\n\t/**\n\t * Convert month integer to month name string\n\t * @param {integer} m Month from 0 - 11\n\t * @returns {string} month name\n\t */\n\tgetMonthString: function (m) {\n\t\tif (!_.isUndefined(m) && m < 12 && m > -1) {\n\t\t\tvar months = [\n\t\t\t\t'January',\n\t\t\t\t'February',\n\t\t\t\t'March',\n\t\t\t\t'April',\n\t\t\t\t'May',\n\t\t\t\t'June',\n\t\t\t\t'July',\n\t\t\t\t'August',\n\t\t\t\t'September',\n\t\t\t\t'October',\n\t\t\t\t'November',\n\t\t\t\t'December',\n\t\t\t];\n\t\t\treturn months[m];\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert day integer to day name string\n\t * @param {integer} d Day from 0 - 6\n\t * @returns {string} day name\n\t */\n\tgetDayString: function (d) {\n\t\tif (!_.isUndefined(d) && d < 7 && d > -1) {\n\t\t\tvar days = [\n\t\t\t\t'Sunday',\n\t\t\t\t'Monday',\n\t\t\t\t'Tuesday',\n\t\t\t\t'Wednesday',\n\t\t\t\t'Thursday',\n\t\t\t\t'Friday',\n\t\t\t\t'Saturday',\n\t\t\t];\n\t\t\treturn days[d];\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert integer to a stylized string (1000000 -> \"1,000,000\")\n\t * @param {integer} number Number you want formatted\n\t * @returns {string} formatted number string\n\t */\n\tformatNumber: function (number) {\n\t\treturn number.toString().replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n\t},\n\t/**\n\t * The jQuery Promise implementation uses some crazy internal class-hackery\n\t * such that 'instanceof' is useless for detecting either $.Promise or $.Deferred classes.\n\t * This is our go-to pattern for detecting either thing:\n\t * Is it an object with a then() function?\n\t * (Please update as the pattern improves, or we use more/different Promise libraries.)\n\t *\n\t * @param {object} obj Something that is or is not a promise\n\t * @returns {boolean} True if a promise was passed\n\t */\n\tisPromise: function (obj) {\n\t\treturn obj && _.isFunction(obj.then);\n\t},\n\n\tisPublicUser,\n\n\t/**\n\t * Takes an array and moves item at index to another index\n\t * @param {Array} array Array that in being modified\n\t * @param {Int} fromIndex Index of item that is being moved\n\t * @param {Int} toIndex Index where item should be placed\n\t */\n\tmove: function (array, fromIndex, toIndex) {\n\t\tarray.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n\t\treturn array;\n\t},\n\t/**\n\t * Convert milliseconds to a date string yyyy-mm-dd\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Date str\n\t */\n\tmillisecondsToDateStr: function (ms) {\n\t\tms = parseInt(ms) || 0;\n\t\tif (ms) {\n\t\t\treturn new Date(ms).toISOString().substring(0, 10);\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert milliseconds to a date string `November 30, 2016 (13:55:42)`\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Date str\n\t */\n\tmillisecondsToFullDateStr: function (ms) {\n\t\tms = parseInt(ms) || 0;\n\t\tif (ms) {\n\t\t\tvar date = new Date(ms);\n\t\t\treturn (\n\t\t\t\t_.getMonthString(date.getMonth()) +\n\t\t\t\t' ' +\n\t\t\t\tdate.getDate() +\n\t\t\t\t', ' +\n\t\t\t\tdate.getFullYear() +\n\t\t\t\t' (' +\n\t\t\t\tpad(date.getHours(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(date.getMinutes(), 2) +\n\t\t\t\t':' +\n\t\t\t\tpad(date.getSeconds(), 2) +\n\t\t\t\t')'\n\t\t\t);\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Convert milliseconds to a time string hh::mm::ss.ms\n\t * @param {string|number} ms Milliseconds\n\t * @return {string} Time str\n\t */\n\tmillisecondsToTimeStr: function (ms) {\n\t\t// Vars\n\t\tvar floor = Math.floor,\n\t\t\ttime = parseInt(ms),\n\t\t\thour,\n\t\t\tminute,\n\t\t\tsecond;\n\n\t\thour = floor(time / 3600000);\n\t\ttime -= hour * 3600000;\n\t\tminute = floor(time / 60000);\n\t\ttime -= floor(minute * 60000);\n\t\tsecond = floor(time / 1000);\n\t\ttime -= floor(second * 1000);\n\n\t\treturn (\n\t\t\tpad(hour, 2) +\n\t\t\t':' +\n\t\t\tpad(minute, 2) +\n\t\t\t':' +\n\t\t\tpad(second, 2) +\n\t\t\t'.' +\n\t\t\tpad(time, 3)\n\t\t);\n\t},\n\t/**\n\t * Convert string to first letter capitalized. You might recognize me from PHP.\n\t * @param {string} str String to have the first letter capitalized\n\t * @returns {string} String with first letter capitalized\n\t */\n\tucfirst: function (str) {\n\t\tif (!_.isUndefined(str)) {\n\t\t\tif (str.length > 1) {\n\t\t\t\treturn str.charAt(0).toUpperCase() + str.substring(1);\n\t\t\t} else {\n\t\t\t\treturn str.toUpperCase();\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * You can't have one without the other ... Lowercase the first character of a string.\n\t * @param {string} str String needing decapitalization\n\t * @returns {string} String with the first letter lowercased.\n\t */\n\tlcfirst: function (str) {\n\t\tif (_.isUndefined(str)) {\n\t\t\treturn str;\n\t\t}\n\t\tif (str.length > 1) {\n\t\t\treturn str.slice(0, 1).toLowerCase() + str.slice(1);\n\t\t} else {\n\t\t\treturn str.toLowerCase();\n\t\t}\n\t},\n\t/**\n\t * Convert string to a proper camelCased string\n\t * @param {string} str String you want camelCased\n\t * @returns {string} camelCased string\n\t */\n\ttoCamelCase: function (str) {\n\t\tif (_.isUndefined(str)) {\n\t\t\t//console.warn('undefined argument');\n\t\t\treturn undefined;\n\t\t}\n\t\tstr = str.toString();\n\t\t// First check if the first character is alphanumeric and strip it if it is not\n\t\t// Otherwise we will end up with a capital first word once non alphanumeric characters are removed\n\t\t// We dont' want to remove all of them yet as things like underscors and dashes symbolize a need for a new capitalized word\n\t\tstr = str.replace(/^[\\W]+/g, '');\n\n\t\t// Characters we will consider as markers for new words\n\t\tvar newWordCharacters = new RegExp(/[-_ .](.)/g);\n\t\tvar stripCharacters = new RegExp(/[\\W_]+/g);\n\n\t\t// Then check if we have capital letters already (\"GEO\", \"NLO / Country\", \"FileType\", etc)\n\t\tvar capitalizedArray = str.match(/([A-Z]?[^A-Z]*)/g).slice(0, -1);\n\t\tvar newStr = '';\n\n\t\t// If we have more than one capital letter we need to do and check some things ourselves\n\t\tif (capitalizedArray.length > 1) {\n\t\t\tfor (var i = 0, c = capitalizedArray.length; i < c; i++) {\n\t\t\t\t// If we are not at the last index\n\t\t\t\t// and this char is capital\n\t\t\t\t// and next char is capital as well\n\t\t\t\t// this maintains all cap words in the string\n\t\t\t\tif (\n\t\t\t\t\ti < c - 1 &&\n\t\t\t\t\tcapitalizedArray[i].toUpperCase() === capitalizedArray[i] &&\n\t\t\t\t\tcapitalizedArray[i + 1].toUpperCase() === capitalizedArray[i + 1]\n\t\t\t\t) {\n\t\t\t\t\tnewStr += capitalizedArray[i];\n\t\t\t\t} else {\n\t\t\t\t\t// If this is the first word and it contains a new word chartacter as defined above\n\t\t\t\t\tif (!i && newWordCharacters.test(capitalizedArray[i])) {\n\t\t\t\t\t\tcapitalizedArray[i] = capitalizedArray[i]\n\t\t\t\t\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\t\t\t\t\treturn $1.toUpperCase();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.replace(/^(.)/, function ($1) {\n\t\t\t\t\t\t\t\treturn $1.toLowerCase();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.replace(stripCharacters, '');\n\n\t\t\t\t\t\tnewStr += capitalizedArray[i];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If it is the first word then we want it lowercase\n\t\t\t\t\t\tif (!i) {\n\t\t\t\t\t\t\tnewStr += capitalizedArray[i]\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.replace(/[\\W_]+/g, '');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewStr += capitalizedArray[i]\n\t\t\t\t\t\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\t\t\t\t\t\treturn $1.toUpperCase();\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.replace(stripCharacters, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn newStr.replace(/[\\W_]+/g, '');\n\t\t}\n\n\t\t// If we are here than this is a standard camelCase issue\n\t\treturn str\n\t\t\t.replace(newWordCharacters, function ($1) {\n\t\t\t\treturn $1.toUpperCase();\n\t\t\t})\n\t\t\t.replace(/^(.)/, function ($1) {\n\t\t\t\treturn $1.toLowerCase();\n\t\t\t})\n\t\t\t.replace(/[\\W_]+/g, '');\n\t},\n\n\t/**\n\t * Convert a camel cased string and returns an underscored string\n\t * @param {string} str camelCased string you want under_scored\n\t * @returns {string} under_scored string\n\t */\n\tcamelCaseToUnderscore: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\treturn str.replace(/([A-Z])/g, function ($1) {\n\t\t\t\treturn '_' + $1.toLowerCase();\n\t\t\t});\n\t\t}\n\t\treturn '';\n\t},\n\n\t/**\n\t * Convert a camel cased string and returns an dashed string\n\t * @param {string} str camelCased string you want dash-ed\n\t * @returns {string} dash-ed string\n\t */\n\tcamelCaseToDash: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\treturn str.replace(/([A-Z])/g, function ($1) {\n\t\t\t\treturn '-' + $1.toLowerCase();\n\t\t\t});\n\t\t}\n\t\treturn '';\n\t},\n\n\t/**\n\t * Convert a camel cased string to a titled string\n\t * @param {string} str camelCased string you want To Turn Into A Titled String\n\t * @returns {string} titlelized string\n\t */\n\tcamelCaseToTitle: function (str) {\n\t\tif (typeof str !== 'undefined') {\n\t\t\tvar _str = _.ucfirst(\n\t\t\t\tstr.replace(/([A-Z])/g, function ($1) {\n\t\t\t\t\treturn ' ' + _.ucfirst($1.toLowerCase());\n\t\t\t\t}),\n\t\t\t);\n\t\t\tif (!_str.includes(' ')) {\n\t\t\t\t_str = _str.toUpperCase();\n\t\t\t}\n\t\t\treturn _str;\n\t\t}\n\t\treturn '';\n\t},\n\t/**\n\t * Given a collection, an array of models, an array of objects or a single object,\n\t * return a Backbone.Collection of the given class.\n\t * @param {*} obj Item to be converted to Collection.\n\t * @param {Object} targetClass Target Collection type -- a Backbone class extended from Backbone.Collection.\n\t * @param {Object} classOptions Any Backbone options to pass to the collection instantiation call.\n\t */\n\ttoCollection: function (obj, targetClass, classOptions) {\n\t\tif (_.isUndefined(targetClass)) {\n\t\t\tthrow new Error('Undefined target class');\n\t\t}\n\n\t\t// If we got an undefined object but a defined class,\n\t\t// return an empty collection of that class.\n\t\tif (_.isUndefined(obj)) {\n\t\t\treturn new targetClass([], classOptions);\n\t\t}\n\n\t\t// Maybe obj needs no conversion?\n\t\tif (obj instanceof targetClass) {\n\t\t\treturn obj;\n\t\t}\n\n\t\t// if obj is an array of models or bare objects, Backbone will convert it as needed.\n\t\tif (_.isArray(obj)) {\n\t\t\t//return new targetClass( obj, classOptions );\n\t\t\treturn new targetClass(\n\t\t\t\t_.map(obj, function (item) {\n\t\t\t\t\t// Don't process models.\n\t\t\t\t\tif (item.isModel) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\t\t\t\t\t// Let Backbone convert bare objects into models.\n\t\t\t\t\tif (_.isObject(item)) {\n\t\t\t\t\t\treturn item;\n\t\t\t\t\t}\n\t\t\t\t\tif (_.isNumeric(item)) {\n\t\t\t\t\t\t// Convert objectIds into objects.\n\t\t\t\t\t\tvar model = new targetClass.prototype.model();\n\t\t\t\t\t\t// Fetch them, too.\n\t\t\t\t\t\tmodel.set(model.idAttribute, item);\n\t\t\t\t\t\tmodel.fetch();\n\t\t\t\t\t\treturn model;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tclassOptions,\n\t\t\t);\n\t\t}\n\n\t\t// TODO: this is a troublesome mixin and will no longer work as models are defined at constructor time\n\n\t\t// If obj is a Model of the correct type, it just needs wrapping.\n\t\t// If obj is a bare object, Backbone will convert it to the correct type.\n\t\tif (obj instanceof targetClass.prototype.model || _.isObject(obj)) {\n\t\t\treturn new targetClass([obj], classOptions);\n\t\t}\n\n\t\tthrow new Error(\"can't convert \" + obj + ' to class ' + targetClass);\n\t},\n\n\t/**\n\t * Given a DOM object, a jQuery object, a jQuery selector or a DOM ID\n\t * return a jQuery object.\n\t * @param {*} obj Item to be converted to jQuery object\n\t * @returns jQuery object\n\t */\n\ttoJQ: function (obj) {\n\t\tif (typeof obj === 'string') {\n\t\t\t/*\n\t\t\t * Upgrading this to handle a selector is easy, but most of the system still passes bare IDs.\n\t\t\t * The following bit of logic tries to avoid excess query work:\n\t\t\t */\n\t\t\tvar jqObj = [];\n\n\t\t\t// this string of yours ... is it a jquery selector?\n\t\t\tif (obj.search(/[#.]/)) {\n\t\t\t\t// does it have id or class selector sigils?\n\t\t\t\tjqObj = $(obj);\n\t\t\t}\n\n\t\t\t// if that failed (or wasn't tried), try backwards-compability: we used to accept a bare element ID\n\t\t\tif (jqObj.length === 0 && obj.indexOf('#') === -1) {\n\t\t\t\tjqObj = $('#' + obj);\n\t\t\t}\n\t\t\t// if that failed, maybe it's a selector after all.\n\t\t\tif (jqObj.length === 0) {\n\t\t\t\tjqObj = $(obj);\n\t\t\t}\n\n\t\t\tobj = jqObj;\n\t\t} else if (typeof obj === 'object') {\n\t\t\tif (obj.nodeType) {\n\t\t\t\tobj = $(obj);\n\t\t\t} else if (typeof obj.jquery === 'string') {\n\t\t\t\t// already jQuery. leave it alone\n\t\t\t\treturn obj;\n\t\t\t} else {\n\t\t\t\tconsole.warn('toJQ received bogus object: ', obj);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn('toJQ received bogus argument: ', obj);\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t/**\n\t * Convert various things (an assetId, an asset model, or an array of either)\n\t * to an array of 1 or more assetIDs.\n\t *\n\t * 'assets' may be integer assetIDs or full-on asset models,\n\t * and it can be either an array of them or just one.\n\t * @param {*} assets Array of assetIDs or asset models\n\t * @returns {array} A tidy array of assets\n\t */\n\ttidyAssetList: function (assets) {\n\t\tif (_.isArguments(assets)) {\n\t\t\tassets = _.rest(assets, 0);\n\t\t} else if (!_.isArray(assets)) {\n\t\t\tassets = [assets];\n\t\t}\n\n\t\tvar tidyAssets = [];\n\n\t\t_.each(assets, function (a, idx, all) {\n\t\t\tif (_.isObject(a)) {\n\t\t\t\ttidyAssets.push(a.id);\n\t\t\t} else {\n\t\t\t\ttidyAssets.push(a);\n\t\t\t}\n\t\t});\n\n\t\treturn tidyAssets;\n\t},\n\n\t/**\n\t * Determine where to place a pop-up context menu; takes the click event and a menu element\n\t * @param {event} e MouseEvent\n\t * @param {object} $menu jQuery object for the context menu\n\t * @returns {object} Position\n\t */\n\tgetMenuPosition: function (e, $menu) {\n\t\t$menu = _.toJQ($menu);\n\n\t\tvar mouseX = e.clientX,\n\t\t\tmouseY = e.clientY,\n\t\t\tboundsX = $(window).width(),\n\t\t\tboundsY = $(window).height(),\n\t\t\tmenuWidth = $menu.find('.dropdown-menu').outerWidth(),\n\t\t\tmenuHeight = $menu.find('.dropdown-menu [role=\"menu\"]').outerHeight(),\n\t\t\ttp = {position: 'absolute'},\n\t\t\tY,\n\t\t\tX;\n\n\t\tif (mouseX == null) mouseX = e.pageX;\n\t\tif (mouseY == null) mouseY = e.pageY;\n\n\t\t// If menu is going to be cutoff at bottom of screen, move it up\n\t\t// The +15 is for padding, otherwise menu can open right to the bottom\n\t\t// of the screen and look cutoff, even though it isn't\n\t\tif (mouseY + menuHeight + 15 > boundsY) {\n\t\t\tY = {top: mouseY - menuHeight + $(window).scrollTop()};\n\t\t} else {\n\t\t\tY = {top: mouseY + $(window).scrollTop()};\n\t\t}\n\n\t\t// If menu is going ot be cutoff at right of screen, move it left\n\t\tif (mouseX + menuWidth > boundsX && mouseX - menuWidth > 0) {\n\t\t\tX = {left: mouseX - menuWidth + $(window).scrollLeft()};\n\t\t} else {\n\t\t\tX = {left: mouseX + $(window).scrollLeft()};\n\t\t}\n\n\t\t// Adjust the position of the menu by its offset parent position.\n\t\tvar selectorPosition = $menu.offsetParent().offset();\n\t\tX.left = X.left - selectorPosition.left;\n\t\tY.top = Y.top - selectorPosition.top;\n\n\t\treturn $.extend(tp, Y, X);\n\t},\n\n\t/**\n\t * Utils to convert back & forth between the DAM's quoted-csv format for multiselects <-> a normal array.\n\t * TODO: escape and unescape double-quotes!\n\t * @param {string} csv CSV string\n\t * @returns {array} CSV as array\n\t */\n\tcsvToArray,\n\n\t/**\n\t * Utils to convert back & forth between the DAM's quoted-csv format for multiselects <-> a normal array.\n\t * TODO: escape and unescape double-quotes and commas!\n\t * @param {array} array Array to convert to CSV string\n\t * @returns {string} Array as CSV string\n\t */\n\tarrayToCsv,\n\n\t// Color utilities\n\t/**\n\t * Convert a color to a new shade\n\t * @param {hex} color Hex color '#000000'\n\t * @param {integer} percent Percentage of shading as an integer\n\t * @returns {hex} New shade of color '#000000'\n\t */\n\tshadeColor: function (color, percent) {\n\t\tvar R = parseInt(color.substring(1, 3), 16),\n\t\t\tG = parseInt(color.substring(3, 5), 16),\n\t\t\tB = parseInt(color.substring(5, 7), 16);\n\n\t\tR = parseInt((R * (100 + percent)) / 100);\n\t\tG = parseInt((G * (100 + percent)) / 100);\n\t\tB = parseInt((B * (100 + percent)) / 100);\n\n\t\tR = R < 255 ? R : 255;\n\t\tG = G < 255 ? G : 255;\n\t\tB = B < 255 ? B : 255;\n\n\t\tvar RR = R.toString(16).length == 1 ? '0' + R.toString(16) : R.toString(16),\n\t\t\tGG = G.toString(16).length == 1 ? '0' + G.toString(16) : G.toString(16),\n\t\t\tBB = B.toString(16).length == 1 ? '0' + B.toString(16) : B.toString(16);\n\n\t\treturn '#' + RR + GG + BB;\n\t},\n\n\t/**\n\t * Convert Hex color to RGB color\n\t * @param {hex} color Hex color to be converted to RGB\n\t * @returns {object} RGB color '{ r: 0, g: 0, b: 0 }'\n\t */\n\thexToRgb: function (hex) {\n\t\tvar result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t\treturn result\n\t\t\t? {\n\t\t\t\t\tr: parseInt(result[1], 16),\n\t\t\t\t\tg: parseInt(result[2], 16),\n\t\t\t\t\tb: parseInt(result[3], 16),\n\t\t\t }\n\t\t\t: {r: 0, g: 0, b: 0};\n\t},\n\t/**\n\t * Convert RGB color to HSL color\n\t * @param {hex} color Hex color to be converted to RGB\n\t * @returns {object} HSL color '{ h: 0, s: 0, l: 0 }'\n\t */\n\n\trgbToHsl: function (rgb) {\n\t\tvar r = rgb[0],\n\t\t\tg = rgb[1],\n\t\t\tb = rgb[2];\n\n\t\t// DEVNOTE: eslint flags this as an error -- https://github.com/eslint/eslint/blob/master/docs/rules/no-sequences.md\n\t\t(r /= 255), (g /= 255), (b /= 255);\n\t\t// Any reason not to use semicolons instead of commas here? -m-\n\n\t\tvar max = Math.max(r, g, b),\n\t\t\tmin = Math.min(r, g, b),\n\t\t\th,\n\t\t\ts,\n\t\t\tl = (max + min) / 2;\n\n\t\tif (max == min) {\n\t\t\th = s = 0; // achromatic\n\t\t} else {\n\t\t\tvar d = max - min;\n\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\tswitch (max) {\n\t\t\t\tcase r:\n\t\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase g:\n\t\t\t\t\th = (b - r) / d + 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase b:\n\t\t\t\t\th = (r - g) / d + 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\th /= 6;\n\t\t}\n\t\treturn {h: h, s: s, l: l};\n\t},\n\n\t/**\n\t * I feel I must me missing something here. Is it really the case that\n\t * neither JS, jQuery or underscore have a function to parse the URI query string\n\t * into an object? Please prove me wrong. -m-\n\t */\n\tparseQuery: function () {\n\t\treturn (\n\t\t\t_.chain(\n\t\t\t\t// get the query string (if any) without the leading ?\n\t\t\t\twindow.location.search\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t// chop it up by &\n\t\t\t\t\t.split('&'),\n\t\t\t)\n\t\t\t\t// clean out any weird undefined stuff\n\t\t\t\t.compact()\n\t\t\t\t// chop each string into a tuple by its equals (if any)\n\t\t\t\t.map(function (item) {\n\t\t\t\t\tif (item) return item.split('=');\n\t\t\t\t})\n\t\t\t\t// uri-decode the values, if any\n\t\t\t\t// (NOTE: not sure if i'm supposed to decode the keys or not. There is no standard, apparently ...)\n\t\t\t\t.map(function (array) {\n\t\t\t\t\treturn array.length == 2 ? [array[0], decodeURI(array[1])] : array;\n\t\t\t\t})\n\t\t\t\t// Make that an object.\n\t\t\t\t.object()\n\t\t\t\t.value()\n\t\t);\n\t},\n\n\t/**\n\t * This seems like something underscore would have, but it doesn't:\n\t * http://stackoverflow.com/questions/8747561/is-there-any-way-to-rename-js-object-keys-using-underscore-js\n\t */\n\tmapKeys: function (obj, map) {\n\t\tvar result = {};\n\t\t_.chain(obj)\n\t\t\t.keys()\n\t\t\t.each(function (key) {\n\t\t\t\tvar newKey;\n\t\t\t\tif (_.isFunction(map)) {\n\t\t\t\t\tnewKey = map(key) || key;\n\t\t\t\t} else {\n\t\t\t\t\tnewKey = map[key] || key;\n\t\t\t\t}\n\t\t\t\tresult[newKey] = obj[key];\n\t\t\t});\n\t\treturn result;\n\t},\n});\n\nexport default _;\n","// Copyright (c) 2013 Pieroxy \n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('underscore', factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {\n var current = global._;\n var exports = global._ = factory();\n exports.noConflict = function () { global._ = current; return exports; };\n }()));\n}(this, (function () {\n // Underscore.js 1.13.0-2\n // https://underscorejs.org\n // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n // Underscore may be freely distributed under the MIT license.\n\n // Current version.\n var VERSION = '1.13.0-2';\n\n // Establish the root object, `window` (`self`) in the browser, `global`\n // on the server, or `this` in some virtual machines. We use `self`\n // instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype;\n var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n // Create quick reference variables for speed access to core prototypes.\n var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // Modern feature detection.\n var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n // All **ECMAScript 5+** native function implementations that we hope to use\n // are declared here.\n var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n // Create references to these builtin functions because we override them.\n var _isNaN = isNaN,\n _isFinite = isFinite;\n\n // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n // The largest integer that can be represented exactly.\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n // Some functions take a variable number of arguments, or a few expected\n // arguments at the beginning and then a variable number of values to operate\n // on. This helper accumulates all remaining arguments past the function’s\n // argument length (or an explicit `startIndex`), into an array that becomes\n // the last argument. Similar to ES6’s \"rest parameter\".\n function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n }\n\n // Is a given variable an object?\n function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n }\n\n // Is a given value equal to null?\n function isNull(obj) {\n return obj === null;\n }\n\n // Is a given variable undefined?\n function isUndefined(obj) {\n return obj === void 0;\n }\n\n // Is a given value a boolean?\n function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n }\n\n // Is a given value a DOM element?\n function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n // Internal function for creating a `toString`-based type tester.\n function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n }\n\n var isString = tagTester('String');\n\n var isNumber = tagTester('Number');\n\n var isDate = tagTester('Date');\n\n var isRegExp = tagTester('RegExp');\n\n var isError = tagTester('Error');\n\n var isSymbol = tagTester('Symbol');\n\n var isArrayBuffer = tagTester('ArrayBuffer');\n\n var isFunction = tagTester('Function');\n\n // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\n var nodelist = root.document && root.document.childNodes;\n if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n }\n\n var isFunction$1 = isFunction;\n\n var hasObjectTag = tagTester('Object');\n\n // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n // In IE 11, the most common among them, this problem also applies to\n // `Map`, `WeakMap` and `Set`.\n var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n\n var isDataView = tagTester('DataView');\n\n // In IE 10 - Edge 13, we need a different heuristic\n // to determine whether an object is a `DataView`.\n function ie10IsDataView(obj) {\n return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);\n }\n\n var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);\n\n // Is a given value an array?\n // Delegates to ECMA5's native `Array.isArray`.\n var isArray = nativeIsArray || tagTester('Array');\n\n // Internal function to check whether `key` is an own property name of `obj`.\n function has$1(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n }\n\n var isArguments = tagTester('Arguments');\n\n // Define a fallback version of the method in browsers (ahem, IE < 9), where\n // there isn't any inspectable \"Arguments\" type.\n (function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has$1(obj, 'callee');\n };\n }\n }());\n\n var isArguments$1 = isArguments;\n\n // Is a given object a finite number?\n function isFinite$1(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n }\n\n // Is the given value `NaN`?\n function isNaN$1(obj) {\n return isNumber(obj) && _isNaN(obj);\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n // Common internal logic for `isArrayLike` and `isBufferLike`.\n function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n }\n\n // Internal helper to generate a function to obtain property `key` from `obj`.\n function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n }\n\n // Internal helper to obtain the `byteLength` property of an object.\n var getByteLength = shallowProperty('byteLength');\n\n // Internal helper to determine whether we should spend extensive checks against\n // `ArrayBuffer` et al.\n var isBufferLike = createSizePropertyCheck(getByteLength);\n\n // Is a given value a typed array?\n var typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\n function isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n }\n\n var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);\n\n // Internal helper to obtain the `length` property of an object.\n var getLength = shallowProperty('length');\n\n // Internal helper to create a simple lookup structure.\n // `collectNonEnumProps` used to depend on `_.contains`, but this led to\n // circular imports. `emulatedSet` is a one-off solution that only works for\n // arrays of strings.\n function emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n }\n\n // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n // be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n // needed.\n function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n }\n\n // Retrieve the names of an object's own properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`.\n function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has$1(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments$1(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n }\n\n // Returns whether an object has a given set of `key:value` pairs.\n function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n }\n\n // If Underscore is called as a function, it returns a wrapped object that can\n // be used OO-style. This wrapper holds altered versions of all functions added\n // through `_.mixin`. Wrapped objects may be chained.\n function _$1(obj) {\n if (obj instanceof _$1) return obj;\n if (!(this instanceof _$1)) return new _$1(obj);\n this._wrapped = obj;\n }\n\n _$1.VERSION = VERSION;\n\n // Extracts the result from a wrapped and chained object.\n _$1.prototype.value = function() {\n return this._wrapped;\n };\n\n // Provide unwrapping proxies for some methods used in engine operations\n // such as arithmetic and JSON stringification.\n _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;\n\n _$1.prototype.toString = function() {\n return String(this._wrapped);\n };\n\n // Internal function to wrap or shallow-copy an ArrayBuffer,\n // typed array or DataView to a new view, reusing the buffer.\n function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n }\n\n // We use this string twice, so give it a name for minification.\n var tagDataView = '[object DataView]';\n\n // Internal recursive comparison function for `_.isEqual`.\n function eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n }\n\n // Internal recursive comparison function for `_.isEqual`.\n function deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _$1) a = a._wrapped;\n if (b instanceof _$1) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {\n if (!isDataView$1(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray$1(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&\n isFunction$1(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n function isEqual(a, b) {\n return eq(a, b);\n }\n\n // Retrieve all the enumerable property names of an object.\n function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n }\n\n // Since the regular `Object.prototype.toString` type tests don't work for\n // some types in IE 11, we use a fingerprinting heuristic instead, based\n // on the methods. It's not great, but it's the best we got.\n // The fingerprint method lists are defined below.\n function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction$1(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);\n };\n }\n\n // In the interest of compact minification, we write\n // each string in the fingerprints only once.\n var forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n // `Map`, `WeakMap` and `Set` each have slightly different\n // combinations of the above sublists.\n var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n\n var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n\n var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n\n var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n\n var isWeakSet = tagTester('WeakSet');\n\n // Retrieve the values of an object's properties.\n function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n }\n\n // Convert an object into a list of `[key, value]` pairs.\n // The opposite of `_.object` with one argument.\n function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n }\n\n // Invert the keys and values of an object. The values must be serializable.\n function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n }\n\n // Return a sorted list of the function names available on the object.\n function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction$1(obj[key])) names.push(key);\n }\n return names.sort();\n }\n\n // An internal function for creating assigner functions.\n function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n }\n\n // Extend a given object with all the properties in passed-in object(s).\n var extend = createAssigner(allKeys);\n\n // Assigns a given object with all the own properties in the passed-in\n // object(s).\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var extendOwn = createAssigner(keys);\n\n // Fill in a given object with default properties.\n var defaults = createAssigner(allKeys, true);\n\n // Create a naked function reference for surrogate-prototype-swapping.\n function ctor() {\n return function(){};\n }\n\n // An internal function for creating a new object that inherits from another.\n function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n }\n\n // Creates an object that inherits from the given prototype object.\n // If additional properties are provided then they will be added to the\n // created object.\n function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n }\n\n // Create a (shallow-cloned) duplicate of an object.\n function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n }\n\n // Invokes `interceptor` with the `obj` and then returns `obj`.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n }\n\n // Normalize a (deep) property `path` to array.\n // Like `_.iteratee`, this function can be customized.\n function toPath$1(path) {\n return isArray(path) ? path : [path];\n }\n _$1.toPath = toPath$1;\n\n // Internal wrapper for `_.toPath` to enable minification.\n // Similar to `cb` for `_.iteratee`.\n function toPath(path) {\n return _$1.toPath(path);\n }\n\n // Internal function to obtain a nested property in `obj` along `path`.\n function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n }\n\n // Get the value of the (deep) property on `path` from `object`.\n // If any property in `path` does not exist or if the value is\n // `undefined`, return `defaultValue` instead.\n // The `path` is normalized through `_.toPath`.\n function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n }\n\n // Shortcut function for checking if an object has a given property directly on\n // itself (in other words, not on a prototype). Unlike the internal `has`\n // function, this public version can also traverse nested properties.\n function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!has$1(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n }\n\n // Keep the identity function around for default iteratees.\n function identity(value) {\n return value;\n }\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n }\n\n // Creates a function that, when passed an object, will traverse that object’s\n // properties down the given `path`, specified as an array of keys or indices.\n function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n }\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n }\n\n // An internal function to generate callbacks that can be applied to each\n // element in a collection, returning the desired result — either `_.identity`,\n // an arbitrary callback, a property matcher, or a property accessor.\n function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction$1(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n }\n\n // External wrapper for our callback generator. Users may customize\n // `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n // This abstraction hides the internal-only `argCount` argument.\n function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n }\n _$1.iteratee = iteratee;\n\n // The function we call internally to generate a callback. It invokes\n // `_.iteratee` if overridden, otherwise `baseIteratee`.\n function cb(value, context, argCount) {\n if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n }\n\n // Returns the results of applying the `iteratee` to each element of `obj`.\n // In contrast to `_.map` it returns an object.\n function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Predicate-generating function. Often useful outside of Underscore.\n function noop(){}\n\n // Generates a function for a given object that returns a given property.\n function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n }\n\n // Run a function **n** times.\n function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n }\n\n // Return a random integer between `min` and `max` (inclusive).\n function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n }\n\n // A (possibly faster) way to get the current timestamp as an integer.\n var now = Date.now || function() {\n return new Date().getTime();\n };\n\n // Internal helper to generate functions for escaping and unescaping strings\n // to/from HTML interpolation.\n function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n }\n\n // Internal list of HTML entities for escaping.\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n };\n\n // Function for escaping strings to HTML interpolation.\n var _escape = createEscaper(escapeMap);\n\n // Internal list of HTML entities for unescaping.\n var unescapeMap = invert(escapeMap);\n\n // Function for unescaping strings from HTML interpolation.\n var _unescape = createEscaper(unescapeMap);\n\n // By default, Underscore uses ERB-style template delimiters. Change the\n // following template settings to use alternative delimiters.\n var templateSettings = _$1.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `_.templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n function escapeChar(match) {\n return '\\\\' + escapes[match];\n }\n\n var bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n // NB: `oldSettings` only exists for backwards compatibility.\n function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _$1.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n if (!bareIdentifier.test(argument)) throw new Error(argument);\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _$1);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n }\n\n // Traverses the children of `obj` along `path`. If a child is a function, it\n // is invoked with its parent as context. Returns the value of the final\n // child, or `fallback` if any child is undefined.\n function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction$1(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction$1(prop) ? prop.call(obj) : prop;\n }\n return obj;\n }\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n }\n\n // Start chaining a wrapped Underscore object.\n function chain(obj) {\n var instance = _$1(obj);\n instance._chain = true;\n return instance;\n }\n\n // Internal function to execute `sourceFunc` bound to `context` with optional\n // `args`. Determines whether to execute a function as a constructor or as a\n // normal function.\n function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n }\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context. `_` acts\n // as a placeholder by default, allowing any combination of arguments to be\n // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\n var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n });\n\n partial.placeholder = _$1;\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally).\n var bind = restArguments(function(func, context, args) {\n if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n });\n\n // Internal helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object.\n // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n var isArrayLike = createSizePropertyCheck(getLength);\n\n // Internal implementation of a recursive `flatten` function.\n function flatten$1(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten$1(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n }\n\n // Bind a number of an object's methods to that object. Remaining arguments\n // are the method names to be bound. Useful for ensuring that all callbacks\n // defined on an object belong to it.\n var bindAll = restArguments(function(obj, keys) {\n keys = flatten$1(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n });\n\n // Memoize an expensive function by storing its results.\n function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n }\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n });\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n var defer = partial(delay, _$1, 1);\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n }\n\n // When a sequence of calls of the returned function ends, the argument\n // function is triggered. The end of a sequence is defined by the `wait`\n // parameter. If `immediate` is passed, the argument function will be\n // triggered at the beginning of the sequence instead of at the end.\n function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n }\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n function wrap(func, wrapper) {\n return partial(wrapper, func);\n }\n\n // Returns a negated version of the passed-in predicate.\n function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n }\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n }\n\n // Returns a function that will only be executed on and after the Nth call.\n function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n // Returns a function that will only be executed up to (but not including) the\n // Nth call.\n function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n }\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n var once = partial(before, 2);\n\n // Returns the first key on an object that passes a truth test.\n function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n }\n\n // Internal function to generate `_.findIndex` and `_.findLastIndex`.\n function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n }\n\n // Returns the first index on an array-like that passes a truth test.\n var findIndex = createPredicateIndexFinder(1);\n\n // Returns the last index on an array-like that passes a truth test.\n var findLastIndex = createPredicateIndexFinder(-1);\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n }\n\n // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\n function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN$1);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n }\n\n // Return the position of the first occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n var indexOf = createIndexFinder(1, findIndex, sortedIndex);\n\n // Return the position of the last occurrence of an item in an array,\n // or -1 if the item is not included in the array.\n var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n // Return the first value which passes a truth test.\n function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n }\n\n // Convenience version of a common use case of `_.find`: getting the first\n // object containing specific `key:value` pairs.\n function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n }\n\n // The cornerstone for collection functions, an `each`\n // implementation, aka `forEach`.\n // Handles raw objects in addition to array-likes. Treats all\n // sparse array-likes as if they were dense.\n function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n }\n\n // Return the results of applying the iteratee to each element.\n function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n }\n\n // Internal helper to create a reducing function, iterating left or right.\n function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n }\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`.\n var reduce = createReduce(1);\n\n // The right-associative version of reduce, also known as `foldr`.\n var reduceRight = createReduce(-1);\n\n // Return all the elements that pass a truth test.\n function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n }\n\n // Return all the elements for which a truth test fails.\n function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n }\n\n // Determine whether all of the elements pass a truth test.\n function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n }\n\n // Determine if at least one element in the object passes a truth test.\n function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n }\n\n // Determine if the array or object contains a given item (using `===`).\n function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n }\n\n // Invoke a method (with arguments) on every item in a collection.\n var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction$1(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n });\n\n // Convenience version of a common use case of `_.map`: fetching a property.\n function pluck(obj, key) {\n return map(obj, property(key));\n }\n\n // Convenience version of a common use case of `_.filter`: selecting only\n // objects containing specific `key:value` pairs.\n function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n }\n\n // Return the maximum element (or element-based computation).\n function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Return the minimum element (or element-based computation).\n function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n }\n\n // Sample **n** random values from a collection using the modern version of the\n // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n // If **n** is not specified, returns a single random element.\n // The internal `guard` argument allows it to work with `_.map`.\n function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n }\n\n // Shuffle a collection.\n function shuffle(obj) {\n return sample(obj, Infinity);\n }\n\n // Sort the object's values by a criterion produced by an iteratee.\n function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n }\n\n // An internal function used for aggregate \"group by\" operations.\n function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n }\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n var groupBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key].push(value); else result[key] = [value];\n });\n\n // Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n // when you know that your index values will be unique.\n var indexBy = group(function(result, value, key) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n var countBy = group(function(result, value, key) {\n if (has$1(result, key)) result[key]++; else result[key] = 1;\n });\n\n // Split a collection into two arrays: one whose elements all pass the given\n // truth test, and one whose elements all do not pass the truth test.\n var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n }, true);\n\n // Safely create a real, live array from anything iterable.\n var reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n }\n\n // Return the number of elements in a collection.\n function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n }\n\n // Internal `_.pick` helper function to determine whether `key` is an enumerable\n // property name of `obj`.\n function keyInObj(value, key, obj) {\n return key in obj;\n }\n\n // Return a copy of the object only containing the allowed properties.\n var pick = restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction$1(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten$1(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n });\n\n // Return a copy of the object without the disallowed properties.\n var omit = restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction$1(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten$1(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n });\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N.\n function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n }\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. The **guard** check allows it to work with `_.map`.\n function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n }\n\n // Returns everything but the first entry of the `array`. Especially useful on\n // the `arguments` object. Passing an **n** will return the rest N values in the\n // `array`.\n function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n }\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array.\n function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n }\n\n // Trim out all falsy values from an array.\n function compact(array) {\n return filter(array, Boolean);\n }\n\n // Flatten out an array, either recursively (by default), or up to `depth`.\n // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\n function flatten(array, depth) {\n return flatten$1(array, depth, false);\n }\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n var difference = restArguments(function(array, rest) {\n rest = flatten$1(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n });\n\n // Return a version of the array that does not contain the specified value(s).\n var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n });\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // The faster algorithm will not work with an iteratee if the iteratee\n // is not a one-to-one function, so providing an iteratee will disable\n // the faster algorithm.\n function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n }\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n var union = restArguments(function(arrays) {\n return uniq(flatten$1(arrays, true, true));\n });\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n }\n\n // Complement of zip. Unzip accepts an array of arrays and groups\n // each array's elements on shared indices.\n function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n }\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n var zip = restArguments(unzip);\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values. Passing by pairs is the reverse of `_.pairs`.\n function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n }\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](https://docs.python.org/library/functions.html#range).\n function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n }\n\n // Chunk a single array into multiple arrays, each containing `count` or fewer\n // items.\n function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n }\n\n // Helper function to continue chaining intermediate results.\n function chainResult(instance, obj) {\n return instance._chain ? _$1(obj).chain() : obj;\n }\n\n // Add your own custom functions to the Underscore object.\n function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _$1[name] = obj[name];\n _$1.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_$1, args));\n };\n });\n return _$1;\n }\n\n // Add all mutator `Array` functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n });\n\n // Add all accessor `Array` functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _$1.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n });\n\n // Named Exports\n\n var allExports = {\n __proto__: null,\n VERSION: VERSION,\n restArguments: restArguments,\n isObject: isObject,\n isNull: isNull,\n isUndefined: isUndefined,\n isBoolean: isBoolean,\n isElement: isElement,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isRegExp: isRegExp,\n isError: isError,\n isSymbol: isSymbol,\n isArrayBuffer: isArrayBuffer,\n isDataView: isDataView$1,\n isArray: isArray,\n isFunction: isFunction$1,\n isArguments: isArguments$1,\n isFinite: isFinite$1,\n isNaN: isNaN$1,\n isTypedArray: isTypedArray$1,\n isEmpty: isEmpty,\n isMatch: isMatch,\n isEqual: isEqual,\n isMap: isMap,\n isWeakMap: isWeakMap,\n isSet: isSet,\n isWeakSet: isWeakSet,\n keys: keys,\n allKeys: allKeys,\n values: values,\n pairs: pairs,\n invert: invert,\n functions: functions,\n methods: functions,\n extend: extend,\n extendOwn: extendOwn,\n assign: extendOwn,\n defaults: defaults,\n create: create,\n clone: clone,\n tap: tap,\n get: get,\n has: has,\n mapObject: mapObject,\n identity: identity,\n constant: constant,\n noop: noop,\n toPath: toPath$1,\n property: property,\n propertyOf: propertyOf,\n matcher: matcher,\n matches: matcher,\n times: times,\n random: random,\n now: now,\n escape: _escape,\n unescape: _unescape,\n templateSettings: templateSettings,\n template: template,\n result: result,\n uniqueId: uniqueId,\n chain: chain,\n iteratee: iteratee,\n partial: partial,\n bind: bind,\n bindAll: bindAll,\n memoize: memoize,\n delay: delay,\n defer: defer,\n throttle: throttle,\n debounce: debounce,\n wrap: wrap,\n negate: negate,\n compose: compose,\n after: after,\n before: before,\n once: once,\n findKey: findKey,\n findIndex: findIndex,\n findLastIndex: findLastIndex,\n sortedIndex: sortedIndex,\n indexOf: indexOf,\n lastIndexOf: lastIndexOf,\n find: find,\n detect: find,\n findWhere: findWhere,\n each: each,\n forEach: each,\n map: map,\n collect: map,\n reduce: reduce,\n foldl: reduce,\n inject: reduce,\n reduceRight: reduceRight,\n foldr: reduceRight,\n filter: filter,\n select: filter,\n reject: reject,\n every: every,\n all: every,\n some: some,\n any: some,\n contains: contains,\n includes: contains,\n include: contains,\n invoke: invoke,\n pluck: pluck,\n where: where,\n max: max,\n min: min,\n shuffle: shuffle,\n sample: sample,\n sortBy: sortBy,\n groupBy: groupBy,\n indexBy: indexBy,\n countBy: countBy,\n partition: partition,\n toArray: toArray,\n size: size,\n pick: pick,\n omit: omit,\n first: first,\n head: first,\n take: first,\n initial: initial,\n last: last,\n rest: rest,\n tail: rest,\n drop: rest,\n compact: compact,\n flatten: flatten,\n without: without,\n uniq: uniq,\n unique: uniq,\n union: union,\n intersection: intersection,\n difference: difference,\n unzip: unzip,\n transpose: unzip,\n zip: zip,\n object: object,\n range: range,\n chunk: chunk,\n mixin: mixin,\n 'default': _$1\n };\n\n // Default Export\n\n // Add all of the Underscore functions to the wrapper object.\n var _ = mixin(allExports);\n // Legacy Node.js API.\n _._ = _;\n\n return _;\n\n})));\n//# sourceMappingURL=underscore-umd.js.map\n","/*!\n * jQuery JavaScript Library v3.5.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2020-05-04T22:49Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.5.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( _i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.5\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2020-03-14\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[ \"ID\" ] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[ \"TAG\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr[ \"CHILD\" ].test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"odd\": createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\t\"gt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos[ \"nth\" ] = Expr.pseudos[ \"eq\" ];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rcombinators.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrim, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[ \"TAG\" ]( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[ \"needsContext\" ].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces \";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px\";\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = parseInt( trStyle.height ) > 3;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = (\n\t\t\t\t\tdataPriv.get( cur, \"events\" ) || Object.create( null )\n\t\t\t\t)[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script\n\t\t\tif ( !isSuccess && jQuery.inArray( \"script\", s.dataTypes ) > -1 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"