%PDF- %PDF-
Direktori : /var/www/html/itworks/wp-content/plugins/wp-smushit/app/assets/js/ |
Current File : /var/www/html/itworks/wp-content/plugins/wp-smushit/app/assets/js/smush-admin.min.js.map |
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./_src/js/smush/smush.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/jquery.fancytree/dist/modules/jquery.fancytree.js","webpack:///./_src/js/app.js","webpack:///./_src/js/modules/helpers.js","webpack:///./_src/js/modules/admin.js","webpack:///./_src/js/modules/bulk-smush.js","webpack:///./_src/js/modules/onboarding.js","webpack:///./node_modules/jquery.fancytree/dist/modules/jquery.fancytree.ui-deps.js","webpack:///./_src/js/smush/cdn.js","webpack:///./_src/js/smush/lazy-load.js","webpack:///./_src/js/modules/notice.js","webpack:///./_src/js/smush/directory-scanner.js","webpack:///./_src/js/modules/directory-smush.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Smush","button","bulk","type","arguments","length","undefined","_classCallCheck","this","errors","progressBar","jQuery","smushed","parseInt","find","html","total","skip_resmush","data","is_bulk","_typeof","url","ajaxurl","log","deferred","Deferred","ids","wp_smushit_data","resmush","unsmushed","concat","filter","itm","a","indexOf","is_bulk_resmush","status","parent","smush_type","single_ajax_suffix","bulk_ajax_suffix","smushAddParams","action","start","run","bind_deferred_events","cancel_ajax","isEmptyObject","param","member_validity_notice","show_warning","show","hide","id","send_url","nonce","attachment_id","_nonce","ajax","timeout","dataType","cur_ele","txt","state","progress_button","parents","eq","wp_smush_msgs","all_done","toggleClass","savings","savings_percent","savings_bytes","orig_diff","pro_savings","percent","WP_Smush","helpers","precise_round","formatBytes","scan_type","is_nextgen","super_savings","size_before","size_after","formatted_size","statsHuman","getFormatFromString","getSizeFromString","isNaN","savings_resize","count_images","count_resize","smushedCountDiv","count_supersmushed","smush_conversion_savings","savings_conversion","conversion_savings","smush_resize_savings","savings_value","resize_savings","resize_message","set_pro_savings","smush_pro_savings","pro_savings_percent","pro_savings_bytes","sidenavCountDiv","addClass","removeClass","new_size","attachmentSize","contents","nodeType","text","sizeStrongEl","image_stats","count","is_lossy","bytes","errorMsg","fileName","thumbnail","tableDiv","error_ignore","current_id","u_index","splice","index","attr","bulk_start","single_start","remove","show_loader","prop","removeAttr","progress_bar","smushing","hide_loader","self","request","done","response","replaceWith","membership_validity","success","error_msg","append","stats","update_image_stats","enable_button","error","message_holder","progress_message","sync_stats","extend","count_smushed","count_total","update_stats","always","statusIcon","notice","progress","resumeCountDiv","wrapperCountDiv","_res","update_localized_stats","update_remaining_count","_update_progress","width","css","continue_smush","push","nonce_value","shift","update_smush_ids","nonce_field","val","res","increment_errors","prepare_error_row","error_message","file_name","increment_smushed","is_resolved","update_progress","free_exceeded","unshift","single_done","complete","continue","call_ajax","resolve","msg","error_in_bulk","replace","bulk_done","on","abort","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","document","w","Error","window","noGlobal","arr","getProto","getPrototypeOf","slice","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","obj","isWindow","preservedScriptAttributes","src","noModule","DOMEval","code","doc","node","script","createElement","head","appendChild","parentNode","removeChild","toType","selector","context","fn","init","rtrim","isArrayLike","jquery","constructor","toArray","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","apply","first","last","len","j","end","sort","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","expando","Math","random","isReady","noop","proto","Ctor","globalEval","trim","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","iterator","split","toLowerCase","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","Date","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","b","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","disabledAncestor","addCombinator","disabled","dir","next","childNodes","e","els","seed","nid","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","getAttribute","setAttribute","toSelector","join","testContext","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","elements","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","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","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","prev","sibling","targets","closest","prevAll","add","addBack","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","reject","noValue","method","promise","fail","then","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","disable","lock","fireWith","func","tuples","catch","pipe","fns","newDefer","tuple","returned","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","configurable","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","defer","pnum","source","rcssNum","cssExpand","isHiddenWithinTree","style","display","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","values","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","types","one","origFn","event","off","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","writable","load","noBubble","trigger","blur","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","prepend","insertBefore","before","after","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","finalPropName","cssProps","capName","vendorPropName","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","clearTimeout","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","classes","curValue","clazz","finalValue","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","isTrigger","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","noConflict","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","ui","fancytree","FT","TEST_IMG","REX_HTML","REX_TOOLTIP","ENTITY_MAP","&","<","\"","'","/","IGNORE_KEYCODES","16","17","18","SPECIAL_KEYCODES","8","9","10","13","19","20","27","32","33","34","35","36","37","38","39","40","45","46","59","61","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","173","186","187","188","189","190","191","192","219","220","221","222","MODIFIERS","91","93","MOUSE_BUTTONS","1","2","3","CLASS_ATTRS","CLASS_ATTR_MAP","TREE_ATTRS","NODE_ATTRS","NODE_ATTR_MAP","NODE_ATTR_LOWERCASE_MAP","NONE_NODE_DATA_MAP","_assert","getTime","FancytreeNode","_findDirectChild","ptr","cl","_setChildren","addChildren","firstNode","origFirstChild","getFirstChild","origLastChild","getLastChild","nodeList","render","renderStatus","ul","tree","selectMode","fixSelection3FromEndNodes","triggerModifyChild","addNode","getParent","getNextSibling","addPagingNode","title","strings","moreData","statusNodeType","icon","partload","appendSibling","applyPatch","patch","_getResolvedPromise","IGNORE_MAP","removeChildren","isVisible","renderTitle","setExpanded","collapseSiblings","_callHook","copyTo","toDict","countChildren","debug","debugLevel","consoleApply","discard","resetLazy","discardMarkup","includeSelf","findAll","_makeNodeTitleMatcher","visit","findFirst","_changeSelectStatusAttrs","changed","unselectable","evalOption","unselectableStatus","partsel","fixSelection3AfterClick","callOpts","isSelected","_walk","child","allSelected","someSelected","unselState","visitParents","fromDict","dict","getChildren","hasChildren","getIndex","getIndexHier","separator","digits","getParentList","substr","getKeyPath","excludeSelf","path","sep","keyPathSeparator","getLevel","level","dtn","ac","includeRoot","getPrevSibling","getSelectedNodes","stopOnParents","lazy","isStatusNode","focusNode","info","isActive","activeNode","isBelowOf","otherNode","isChildOf","isDescendantOf","isExpanded","isFirstSibling","isFolder","folder","isLastSibling","isLazy","isLoaded","isLoading","_isLoading","isRoot","isRootNode","isPartsel","isPartload","rootNode","isPagingNode","isTopLevel","isUndefined","lazyLoad","forceReload","wasExpanded","_triggerNodeEvent","makeVisible","deferreds","dfd","effects","noAnimation","scroll","scrollIntoView","moveTo","targetNode","prevParent","targetParent","navigate","where","activate","KC","sib","_goto","span","setFocus","setActive","BACKSPACE","HOME","END","LEFT","RIGHT","UP","DOWN","childNode","force","scheduleAction","ms","x","scrollOfs","scrollParent","topNode","$scrollParent","$container","topNodeY","nodeY","containerOffsetTop","nodeHeight","topOfs","bottomOfs","bottom","containerHeight","$animateTarget","isParentWindow","newScrollTop","innerHeight","clientHeight","setSelected","setStatus","details","setTitle","triggerModify","sortChildren","cmp","y","recursive","wasAdded","statusElem","statusClassPropName","curClasses","extraClasses","toggleExpanded","toggleSelected","operation","modifyChild","visitAndLoad","_recursion","loaders","visitSiblings","Fancytree","_makeHookContext","ctx","widget","typeInfo","contextObject","_extraArgs","_setExpiringValue","_tempCache","expire","_getExpiringValue","entry","_requireExtension","required","thisName","_local","extList","extensions","isBefore","isMissing","ext","badOrder","activateKey","getNodeByKey","patchList","p2","patchCount","deferredList","_makeResolveFunc","clear","enable","enableUpdate","_enableUpdate","expandAll","findNextNode","startNode","visibleOnly","reMatch","stopNode","parentChildren","matchingNode","walkVisible","grandParent","siblingCount","generateFormElements","selectedName","_id","activeName","$result","_appender","getActiveNode","getFocusNode","getOption","optionName","searchRoot","idPrefix","ftnode","getRootNode","_hasFocus","loadKeyPath","keyPathList","optsOrCallback","pathSegList","matchKey","charAt","_loadKeyPathImpl","remainMap","tmpParent","segList","subDfd","__findChild","__lazyload","errMsg","nodeKey","remain","reactivate","noFocus","reload","selectAll","setOption","_trigger","_triggerTreeEvent","visitRows","_visitRowsUp","siblingOfs","skipFirstNode","includeHidden","nodeClick","targetType","focusOnSelect","clickFolderMode","nodeSetFocus","nodeCollapseSiblings","nodeDblclick","nodeKeydown","matchNode","stamp","specialModifiers","isAlnum","$target","handled","autoActivate","quicksearch","lastQuicksearchTime","lastQuicksearchTerm","eventToString","nodeSetExpanded","nodeToggleSelected","nodeSetActive","nodeLoadChildren","requestId","_requestId","debugDelay","textStatus","errorObj","postProcess","enableAspx","errorThrown","reason","nodeSetStatus","ctxErr","metaData","noDataRes","nodata","nodeLoadKeyPath","nodeRemoveChild","subCtx","nodeRemoveChildren","nodeRemoveMarkup","nodeRemoveChildMarkup","li","nodeRenderStatus","nodeRender","collapsed","_recursive","childLI","childNode1","childNode2","aria","firstTime","successorLi","generateIds","nodeRenderTitle","createNode","renderNode","$div","nodeTitle","role","tooltip","iconTooltip","ares","minExpandLevel","radiogroup","iconClass","_escapeTooltip","imagePath","escapeHtml","titlesTabbable","escapeTitles","enhanceTitle","$title","$ariaElem","isLastSib","cn","_classNames","cnList","focused","Boolean","lastsib","loading","_error","statusNodePrefix","combinedExpanderPrefix","combinedIconPrefix","noEvents","_getRejectedPromise","activeVisible","_afterLoad","prevAC","autoCollapse","autoScroll","effect","toggleEffect","animating","ctx2","isInput","calledByNode","uniqueId","nodeSetSelected","_lastSelectIntent","lastSelectedNode","_setStatusNode","_clearStatusNode","loadError","noData","nodeToggleExpanded","treeClear","treeCreate","treeDestroy","$source","treeInit","rtl","treeLoad","$ul","element","rootCtx","parseHtml","_getElementDataAsDict","treeRegisterNode","treeSetFocus","_lastMousedownNode","treeSetOption","callDefault","callCreate","callRender","_super","Widget","_setOption","keyboard","_create","extension","extName","_extensions","_simpleDeepMerge","_subclassObject","icons","tabbable","_init","_bind","destroy","_unbind","_ns","getNode","prevPhase","phase","et","getEventTarget","getTree","version","buildType","_nextId","_nextNodeKey","_FancytreeClass","_FancytreeNodeClass","jquerySupports","positionMyOfs","dottedVersion","major","minor","verParts","testParts","isVersionAtLeast","cond","createTree","debounce","invokeAsap","fixPositionOptions","my","at","myParts","atParts","dx","dy","tcn","getEventTargetType","nodeObject","treeOptions","treeOpt","nodeOpt","setSpanIcon","baseClass","$span","keyEventToString","overrideMethod","instance","methodName","prevSuper","iPos","tmp2","$children","allData","lowerCaseAttr","$li","$liSpan","$liA","search","substring","registerExtension","definition","unescapeHtml","_makeVirtualFunction","prevFunc","baseFunc","_superApply","prevLocal","prevSuperApply","attrName","argArray","$el","uiFancytree","unselectableIgnore","hideCheckbox","defaultKey","lazyload","loaderror","removeNode","columns","systemFocusElement","ariaPropName","nodeContainerAttrName","fakeParent","includes","require","units","abs","u","toFixed","decimals","sign","pow","findPos","cur_top","offsetTop","geturlparam","sURLVariables","sParameterName","resetSettings","smush_url","smush_vars","get_smush_status","__webpack_exports__","_smush_smush__WEBPACK_IMPORTED_MODULE_0__","remove_element","process_smush_action","current_button","smush_action","post","run_re_check","process_settings","notices","get_ui","wp_smush_options_nonce","resmush_ids","count_image","smush_percent","unsmushed_count","smushed_count","$progress_bar","update_progress_bar_resmush","super_smush","enable_lossy","super_smush_stats","resmush_complete","resmush_check","reCheckMessage","goToByScroll","slide_symbol","otherClass","classList","setting_type","setting_input","checking","savings_dir_smush","orig_size","image_size","remainingCountDiv","scroll_and_enable_resize","scroll_and_enable_lossy","setting_hash","keypress","wrapper_div","width_only","height_only","resize_checkbox","width_input","width_error_note","height_input","height_error_note","width_error","height_error","resize_sizes","validate_resize_settings","settings_wrap","notice_wrap","warning_wrap","membership_valid","membership_invalid","wp_smush_run_re_check","dir_smush","ajax_error","stats_human","stats_percent","human","combined_stats","c_stats","total_count","update_cummulative_stats","keyup","modal","onboarding","membership","slide","auto","lossy","strip_exif","usage","contentContainer","onboardingSlides","touchX","touchY","dataset","renderTemplate","skipButton","querySelector","skipSetup","SUI","dialogs","handleTouchStart","firstTouch","handleTouchMove","xUp","yUp","xDiff","yDiff","directionClass","_this","template","bindSubmit","submitButton","showScanDialog","stringify","whereTo","newIndex","goTo","memoize","evaluate","interpolate","variable","templateSettings","uuid","widgetUuid","widgetSlice","existingConstructor","basePrototype","proxiedPrototype","fullName","_createWidget","_proto","_childConstructors","__super","__superApply","widgetEventPrefix","widgetName","widgetFullName","childPrototype","bridge","inputIndex","inputLength","isMethodCall","methodValue","defaultElement","eventNamespace","bindings","hoverable","focusable","classesElementLookup","_on","_getCreateOptions","_setOptionDisabled","_getCreateEventData","_destroy","_removeClass","curOption","_setOptions","_setOptionClasses","classKey","currentElements","_classes","_toggleClass","full","processClassString","checkOption","_untrackClassesElement","_addClass","suppressDisabledCheck","delegateElement","handlerProxy","eventName","_off","_delay","_hoverable","_focusable","focusout","defaultEffect","hasOptions","effectName","cachedScrollbarWidth","rhorizontal","rvertical","roffset","rposition","rpercent","_position","getOffsets","offsets","parseCss","scrollbarWidth","w1","w2","innerDiv","clientWidth","getScrollInfo","within","isDocument","hasOverflowX","scrollWidth","hasOverflowY","scrollHeight","getWithinInfo","withinElement","hasOffset","outerWidth","outerHeight","of","atOffset","targetWidth","targetHeight","targetOffset","basePosition","dimensions","scrollInfo","collision","horizontalOffset","verticalOffset","collisionPosition","elemWidth","elemHeight","marginTop","collisionWidth","collisionHeight","myOffset","feedback","horizontal","vertical","important","fit","newOverRight","withinOffset","collisionPosLeft","overLeft","overRight","newOverBottom","collisionPosTop","overTop","overBottom","flip","newOverLeft","offsetLeft","newOverTop","flipfit","COMMA","DELETE","ENTER","ESCAPE","PAGE_DOWN","PAGE_UP","PERIOD","SPACE","TAB","excludeStaticParent","overflowRegex","removeUniqueId","CDN","cdnEnableButton","cdnDisableButton","cdnStatsBox","loader","toggle_cdn","updateStatsBox","_this2","nonceField","showNotice","_this3","toggleElements","spinner","Lazyload","lazyloadEnableButton","lazyloadDisableButton","toggle_lazy_load","el_notice","btn_act","btn_dismiss","remove_notice","notify_wordpress","send_dismiss_request","ev","DirectoryScanner","totalSteps","currentStep","cancelling","failedItems","scan","remainingSteps","cancel","getProgress","min","onFinishStep","progress_smushed","directory","updateProgressBar","onFinish","directory_url","limitReached","dialog","bulk_resume","resume","items","failed","progress_dialog","currentScanStep","scanner","Scanner","showSmushDialog","initFileTree","selectedFolders","abs_path","paths","forEach","smush_path","image_list_nonce","showProgressDialog","getDirectoryList","list_nonce","add_dir","smushButton","loadChildren"],"mappings":"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","file":"smush-admin.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","/**\n * Smush class.\n *\n * @since 2.9.0 Moved from admin.js into a dedicated ES6 class.\n */\n\nclass Smush {\n\n\t/**\n\t * Class constructor.\n\t *\n\t * @param {object} button Button object that made the call.\n\t * @param {boolean} bulk Bulk smush or not.\n\t * @param {string} type Accepts: 'nextgen', 'media'.\n\t */\n\tconstructor( button, bulk, type = 'media' ) {\n\t\t// TODO: errors will reset after bulk smush limit is reached and user clicks continue. Might be\n\t\tthis.errors = [];\n\t\t// Smushed and total we take from the progress bar... I don't like this :-(\n\t\tconst progressBar = jQuery( '.bulk-smush-wrapper .sui-progress-state-text' );\n\t\tthis.smushed = parseInt( progressBar.find( 'span:first-child' ).html() );\n\t\tthis.total = parseInt( progressBar.find( 'span:last-child' ).html() );\n\n\t\t//If smush attribute is not defined, Need not skip re-Smush IDs.\n\t\tthis.skip_resmush = ! ( 'undefined' === typeof button.data( 'smush' ) || ! button.data( 'smush' ) );\n\n\t\tthis.button = jQuery( button[0] );\n\t\tthis.is_bulk = typeof bulk ? bulk : false;\n\t\tthis.url = ajaxurl;\n\t\tthis.log = jQuery( '.smush-final-log' );\n\t\tthis.deferred = jQuery.Deferred();\n\t\tthis.deferred.errors = [];\n\n\t\tconst ids = 0 < wp_smushit_data.resmush.length && ! this.skip_resmush ? ( wp_smushit_data.unsmushed.length > 0 ? wp_smushit_data.resmush.concat( wp_smushit_data.unsmushed ) : wp_smushit_data.resmush ) : wp_smushit_data.unsmushed;\n\t\tif ( 'object' === typeof ids ) {\n\t\t\t// If button has re-Smush class, and we do have ids that needs to re-Smushed, put them in the list.\n\t\t\tthis.ids = ids.filter( function ( itm, i, a ) {\n\t\t\t\treturn i === a.indexOf( itm );\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.ids = ids;\n\t\t}\n\n\t\tthis.is_bulk_resmush = 0 < wp_smushit_data.resmush.length && ! this.skip_resmush;\n\n\t\tthis.status = this.button.parent().find( '.smush-status' );\n\n\t\t// Added for NextGen support.\n\t\tthis.smush_type = type;\n\t\tthis.single_ajax_suffix = 'nextgen' === this.smush_type ? 'smush_manual_nextgen' : 'wp_smushit_manual';\n\t\tthis.bulk_ajax_suffix = 'nextgen' === this.smush_type ? 'wp_smushit_nextgen_bulk' : 'wp_smushit_bulk';\n\t\tthis.url = this.is_bulk ? Smush.smushAddParams( this.url, { action: this.bulk_ajax_suffix } ) : Smush.smushAddParams( this.url, { action: this.single_ajax_suffix } );\n\n\t\tthis.start();\n\t\tthis.run();\n\t\tthis.bind_deferred_events();\n\n\t\t// Handle cancel ajax.\n\t\tthis.cancel_ajax();\n\n\t\treturn this.deferred;\n\t}\n\n\t/**\n\t * Add params to the URL.\n\t *\n\t * @param {string} url URL to add the params to.\n\t * @param {object} data Object with params.\n\t * @returns {*}\n\t */\n\tstatic smushAddParams( url, data ) {\n\t\tif ( ! jQuery.isEmptyObject( data ) ) {\n\t\t\turl += ( url.indexOf( '?' ) >= 0 ? '&' : '?' ) + jQuery.param( data );\n\t\t}\n\n\t\treturn url;\n\t}\n\n\t/**\n\t * Check membership validity.\n\t *\n\t * @param data\n\t * @param {int} data.show_warning\n\t */\n\tstatic membership_validity( data ) {\n\t\tconst member_validity_notice = jQuery( '#wp-smush-invalid-member' );\n\n\t\t// Check for membership warning.\n\t\tif ( 'undefined' !== typeof ( data ) && 'undefined' !== typeof ( data.show_warning ) && member_validity_notice.length > 0 ) {\n\t\t\tif ( data.show_warning ) {\n\t\t\t\tmember_validity_notice.show();\n\t\t\t} else {\n\t\t\t\tmember_validity_notice.hide();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Send Ajax request for Smushing the image.\n\t *\n\t * @param {boolean} is_bulk_resmush\n\t * @param {int} id\n\t * @param {string} send_url\n\t * @param {string} nonce\n\t * @returns {*|jQuery.promise|void}\n\t */\n\tstatic ajax( is_bulk_resmush, id, send_url, nonce ) {\n\t\tconst param = jQuery.param({\n\t\t\tis_bulk_resmush: is_bulk_resmush,\n\t\t\tattachment_id: id,\n\t\t\t_nonce: nonce\n\t\t});\n\n\t\treturn jQuery.ajax( {\n\t\t\ttype: 'GET',\n\t\t\tdata: param,\n\t\t\turl: send_url,\n\t\t\t/** @var {array} wp_smushit_data */\n\t\t\ttimeout: wp_smushit_data.timeout,\n\t\t\tdataType: 'json'\n\t\t} );\n\t};\n\n\t/**\n\t * Show loader in button for single and bulk Smush.\n\t */\n\tstart() {\n\t\tthis.button.attr( 'disabled', 'disabled' );\n\t\tthis.button.addClass( 'wp-smush-started' );\n\n\t\tthis.bulk_start();\n\t\tthis.single_start();\n\t};\n\n\t/**\n\t * Start bulk Smush.\n\t */\n\tbulk_start() {\n\t\tif ( ! this.is_bulk ) return;\n\n\t\t// Hide the bulk div.\n\t\tjQuery( '.wp-smush-bulk-wrapper' ).hide();\n\n\t\t// Remove any global notices if there.\n\t\tjQuery( '.sui-notice-top' ).remove();\n\n\t\t// Hide the bulk limit message.\n\t\tjQuery( '.wp-smush-bulk-progress-bar-wrapper .sui-notice-warning' ).hide();\n\n\t\t// Hide parent wrapper, if there are no other messages.\n\t\tif ( 0 >= jQuery( 'div.smush-final-log .smush-bulk-error-row' ).length ) {\n\t\t\tjQuery( 'div.smush-final-log' ).hide();\n\t\t}\n\n\t\t// Show the progress bar.\n\t\tjQuery( '.bulk-smush-wrapper .wp-smush-bulk-progress-bar-wrapper' ).show();\n\t};\n\n\t/**\n\t * Start single image Smush.\n\t */\n\tsingle_start() {\n\t\tif ( this.is_bulk ) return;\n\t\tthis.show_loader();\n\t\tthis.status.removeClass( 'error' );\n\t};\n\n\t/**\n\t * Enable button.\n\t */\n\tenable_button() {\n\t\tthis.button.prop( 'disabled', false );\n\t\t// For bulk process, enable other buttons.\n\t\tjQuery( 'button.wp-smush-all' ).removeAttr( 'disabled' );\n\t\tjQuery( 'button.wp-smush-scan, a.wp-smush-lossy-enable, button.wp-smush-resize-enable, button#wp-smush-save-settings' ).removeAttr( 'disabled' );\n\t};\n\n\t/**\n\t * Show loader.\n\t *\n\t * @var {string} wp_smush_msgs.smushing\n\t */\n\tshow_loader() {\n\t\tSmush.progress_bar( this.button, wp_smush_msgs.smushing, 'show' );\n\t};\n\n\t/**\n\t * Hide loader.\n\t *\n\t * @var {string} wp_smush_msgs.smushing\n\t */\n\thide_loader() {\n\t\tSmush.progress_bar( this.button, wp_smush_msgs.smushing, 'hide' );\n\t};\n\n\t/**\n\t * Show/hide the progress bar for Smushing/Restore/SuperSmush.\n\t *\n\t * @param cur_ele\n\t * @param txt Message to be displayed\n\t * @param {string} state show/hide\n\t */\n\tstatic progress_bar( cur_ele, txt, state ) {\n\t\t// Update progress bar text and show it.\n\t\tconst progress_button = cur_ele.parents().eq( 1 ).find( '.wp-smush-progress' );\n\n\t\tif ( 'show' === state ) {\n\t\t\tprogress_button.html( txt );\n\t\t} else {\n\t\t\t/** @var {string} wp_smush_msgs.all_done */\n\t\t\tprogress_button.html( wp_smush_msgs.all_done );\n\t\t}\n\n\t\tprogress_button.toggleClass( 'visible' );\n\t};\n\n\t/**\n\t * Finish single image Smush.\n\t */\n\tsingle_done() {\n\t\tif ( this.is_bulk ) return;\n\n\t\tthis.hide_loader();\n\n\t\tconst self = this;\n\n\t\tthis.request.done( function ( response ) {\n\t\t\tif ( 'undefined' !== typeof response.data ) {\n\n\t\t\t\t// Check if stats div exists.\n\t\t\t\tconst parent = self.status.parent(),\n\t\t\t\t\tstats_div = parent.find( '.smush-stats-wrapper' );\n\n\t\t\t\t// If we've updated status, replace the content.\n\t\t\t\tif ( response.data.status ) {\n\t\t\t\t\t//remove Links\n\t\t\t\t\tparent.find( '.smush-status-links' ).remove();\n\t\t\t\t\tself.status.replaceWith( response.data.status );\n\t\t\t\t}\n\n\t\t\t\t// Check whether to show membership validity notice or not.\n\t\t\t\tSmush.membership_validity( response.data );\n\n\t\t\t\tif ( response.success && 'Not processed' !== response.data ) {\n\t\t\t\t\tself.status.removeClass( 'sui-hidden' );\n\t\t\t\t\tself.button.parent().removeClass( 'unsmushed' ).addClass( 'smushed' );\n\t\t\t\t\tself.button.remove();\n\t\t\t\t} else {\n\t\t\t\t\tself.status.addClass( 'error' );\n\t\t\t\t\t/** @var {string} response.data.error_msg */\n\t\t\t\t\tself.status.html( response.data.error_msg );\n\t\t\t\t\tself.status.show();\n\t\t\t\t}\n\n\t\t\t\t//if ( 'undefined' !== stats_div && stats_div.length ) {\n\t\t\t\t//\tstats_div.replaceWith( response.data.stats );\n\t\t\t\t//} else {\n\t\t\t\t\tparent.append( response.data.stats );\n\t\t\t\t//}\n\n\t\t\t\t/**\n\t\t\t\t * Update image size in attachment info panel.\n\t\t\t\t * @var {string|int} response.data.new_size\n\t\t\t\t */\n\t\t\t\tSmush.update_image_stats( response.data.new_size );\n\t\t\t}\n\t\t\tself.enable_button();\n\t\t} ).error( function ( response ) {\n\t\t\tself.status.html( response.data );\n\t\t\tself.status.addClass( 'error' );\n\t\t\tself.enable_button();\n\t\t} );\n\t};\n\n\t/**\n\t * Set pro savings stats if not premium user.\n\t *\n\t * For non-premium users, show expected avarage savings based\n\t * on the free version savings.\n\t */\n\tstatic set_pro_savings() {\n\t\t// Default values.\n\t\tlet savings = wp_smushit_data.savings_percent > 0 ? wp_smushit_data.savings_percent : 0,\n\t\t\tsavings_bytes = wp_smushit_data.savings_bytes > 0 ? wp_smushit_data.savings_bytes : 0,\n\t\t\torig_diff = 2.22058824;\n\n\t\tif ( savings > 49 ) {\n\t\t\torig_diff = 1.22054412;\n\t\t}\n\n\t\t// Calculate Pro savings.\n\t\tif ( savings > 0 ) {\n\t\t\tsavings = orig_diff * savings;\n\t\t\tsavings_bytes = orig_diff * savings_bytes;\n\t\t}\n\n\t\twp_smushit_data.pro_savings = {\n\t\t\t'percent': WP_Smush.helpers.precise_round( savings, 1 ),\n\t\t\t'savings_bytes': WP_Smush.helpers.formatBytes( savings_bytes, 1 )\n\t\t}\n\t};\n\n\t/**\n\t * Update all stats sections based on the response.\n\t *\n\t * @param scan_type Current scan type.\n\t */\n\tstatic update_stats( scan_type ) {\n\t\tconst is_nextgen = 'undefined' !== typeof scan_type && 'nextgen' === scan_type;\n\t\tlet super_savings = 0;\n\n\t\t// Calculate updated savings in bytes.\n\t\twp_smushit_data.savings_bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after );\n\n\t\tconst formatted_size = WP_Smush.helpers.formatBytes( wp_smushit_data.savings_bytes, 1 );\n\t\tconst statsHuman = jQuery( '.wp-smush-savings .wp-smush-stats-human' );\n\n\t\tif ( is_nextgen ) {\n\t\t\tstatsHuman.html( formatted_size );\n\t\t} else {\n\t\t\tstatsHuman.html( WP_Smush.helpers.getFormatFromString( formatted_size ) );\n\t\t\tjQuery( '.sui-summary-large.wp-smush-stats-human' ).html( WP_Smush.helpers.getSizeFromString( formatted_size ) );\n\t\t}\n\n\t\t// Update the savings percent.\n\t\twp_smushit_data.savings_percent = WP_Smush.helpers.precise_round( ( parseInt( wp_smushit_data.savings_bytes ) / parseInt( wp_smushit_data.size_before ) ) * 100, 1 );\n\t\tif ( ! isNaN( wp_smushit_data.savings_percent ) ) {\n\t\t\tjQuery( '.wp-smush-savings .wp-smush-stats-percent' ).html( wp_smushit_data.savings_percent );\n\t\t}\n\n\t\t// Super-Smush savings.\n\t\tif ( 'undefined' !== typeof wp_smushit_data.savings_bytes && 'undefined' !== typeof wp_smushit_data.savings_resize ) {\n\t\t\tsuper_savings = parseInt( wp_smushit_data.savings_bytes ) - parseInt( wp_smushit_data.savings_resize );\n\t\t\tif ( super_savings > 0 ) {\n\t\t\t\tjQuery( 'li.super-smush-attachments span.smushed-savings' ).html( WP_Smush.helpers.formatBytes( super_savings, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t// Update image count.\n\t\tif ( is_nextgen ) {\n\t\t\tjQuery( '.sui-summary-details span.wp-smush-total-optimised' ).html( wp_smushit_data.count_images );\n\t\t} else {\n\t\t\tjQuery( 'span.smushed-items-count span.wp-smush-count-total span.wp-smush-total-optimised' ).html( wp_smushit_data.count_images );\n\t\t}\n\n\t\t// Update resize image count.\n\t\tjQuery( 'span.smushed-items-count span.wp-smush-count-resize-total span.wp-smush-total-optimised' ).html( wp_smushit_data.count_resize );\n\n\t\t// Update super-Smushed image count.\n\t\tconst smushedCountDiv = jQuery( 'li.super-smush-attachments .smushed-count' );\n\t\tif ( smushedCountDiv.length && 'undefined' !== typeof wp_smushit_data.count_supersmushed ) {\n\t\t\tsmushedCountDiv.html( wp_smushit_data.count_supersmushed );\n\t\t}\n\n\t\t// Update conversion savings.\n\t\tconst smush_conversion_savings = jQuery( '.smush-conversion-savings' );\n\t\tif ( smush_conversion_savings.length > 0 && 'undefined' !== typeof ( wp_smushit_data.savings_conversion ) && wp_smushit_data.savings_conversion != '' ) {\n\t\t\tconst conversion_savings = smush_conversion_savings.find( '.wp-smush-stats' );\n\t\t\tif ( conversion_savings.length > 0 ) {\n\t\t\t\tconversion_savings.html( WP_Smush.helpers.formatBytes( wp_smushit_data.savings_conversion, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t// Update resize savings.\n\t\tconst smush_resize_savings = jQuery( '.smush-resize-savings' );\n\t\tif ( smush_resize_savings.length > 0 && 'undefined' !== typeof ( wp_smushit_data.savings_resize ) && wp_smushit_data.savings_resize != '' ) {\n\t\t\t// Get the resize savings in number.\n\t\t\tconst savings_value = parseInt( wp_smushit_data.savings_resize );\n\t\t\tconst resize_savings = smush_resize_savings.find( '.wp-smush-stats' );\n\t\t\tconst resize_message = smush_resize_savings.find( '.wp-smush-stats-label-message' );\n\t\t\t// Replace only if value is grater than 0.\n\t\t\tif ( savings_value > 0 && resize_savings.length > 0 ) {\n\t\t\t\t// Hide message.\n\t\t\t\tif ( resize_message.length > 0 ) {\n\t\t\t\t\tresize_message.hide();\n\t\t\t\t}\n\t\t\t\tresize_savings.html( WP_Smush.helpers.formatBytes( wp_smushit_data.savings_resize, 1 ) );\n\t\t\t}\n\t\t}\n\n\t\t//Update pro Savings\n\t\tSmush.set_pro_savings();\n\n\t\t// Updating pro savings stats.\n\t\tif ( 'undefined' !== typeof wp_smushit_data.pro_savings ) {\n\t\t\t// Pro stats section.\n\t\t\tconst smush_pro_savings = jQuery( '.smush-avg-pro-savings' );\n\t\t\tif ( smush_pro_savings.length > 0 ) {\n\t\t\t\tconst pro_savings_percent = smush_pro_savings.find( '.wp-smush-stats-percent' );\n\t\t\t\tconst pro_savings_bytes = smush_pro_savings.find( '.wp-smush-stats-human' );\n\t\t\t\tif ( pro_savings_percent.length > 0 && 'undefined' !== typeof wp_smushit_data.pro_savings.percent && wp_smushit_data.pro_savings.percent != '' ) {\n\t\t\t\t\tpro_savings_percent.html( wp_smushit_data.pro_savings.percent );\n\t\t\t\t}\n\t\t\t\tif ( pro_savings_bytes.length > 0 && 'undefined' !== typeof wp_smushit_data.pro_savings.savings_bytes && wp_smushit_data.pro_savings.savings_bytes != '' ) {\n\t\t\t\t\tpro_savings_bytes.html( wp_smushit_data.pro_savings.savings_bytes );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update remaining count.\n\t\t// Update sidebar count.\n\t\tconst sidenavCountDiv = jQuery( '.smush-sidenav .wp-smush-remaining-count' );\n\t\tif ( sidenavCountDiv.length && 'undefined' !== typeof wp_smushit_data.resmush ) {\n\t\t\tif ( wp_smushit_data.resmush.length > 0 ) {\n\t\t\t\tsidenavCountDiv.html( wp_smushit_data.resmush.length );\n\t\t\t} else {\n\t\t\t\tjQuery( '.sui-summary-smush .smush-stats-icon' ).addClass( 'sui-hidden' );\n\t\t\t\tsidenavCountDiv.removeClass( 'sui-tag sui-tag-warning' ).html( '' );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update image size in attachment info panel.\n\t *\n\t * @since 2.8\n\t *\n\t * @param {int} new_size\n\t */\n\tstatic update_image_stats( new_size ) {\n\t\tif ( 0 === new_size ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst attachmentSize = jQuery( '.attachment-info .file-size' );\n\t\tconst currentSize = attachmentSize.contents().filter( function () {\n\t\t\treturn this.nodeType === 3;\n\t\t} ).text();\n\n\t\t// There is a space before the size.\n\t\tif ( currentSize !== ( ' ' + new_size ) ) {\n\t\t\tconst sizeStrongEl = attachmentSize.contents().filter( function () {\n\t\t\t\treturn this.nodeType === 1;\n\t\t\t} ).text();\n\t\t\tattachmentSize.html( '<strong>' + sizeStrongEl + '</strong> ' + new_size );\n\t\t}\n\t}\n\n\t/**\n\t * Sync stats.\n\t */\n\tsync_stats() {\n\t\tconst message_holder = jQuery( 'div.wp-smush-bulk-progress-bar-wrapper div.wp-smush-count.tc' );\n\t\t// Store the existing content in a variable.\n\t\tconst progress_message = message_holder.html();\n\t\t/** @var {string} wp_smush_msgs.sync_stats */\n\t\tmessage_holder.html( wp_smush_msgs.sync_stats );\n\n\t\t// Send ajax.\n\t\tjQuery.ajax( {\n\t\t\ttype: 'GET',\n\t\t\turl: this.url,\n\t\t\tdata: {\n\t\t\t\t'action': 'get_stats'\n\t\t\t},\n\t\t\tsuccess: function ( response ) {\n\t\t\t\tif ( response && 'undefined' !== typeof response ) {\n\t\t\t\t\tresponse = response.data;\n\t\t\t\t\tjQuery.extend( wp_smushit_data, {\n\t\t\t\t\t\tcount_images: response.count_images,\n\t\t\t\t\t\tcount_smushed: response.count_smushed,\n\t\t\t\t\t\tcount_total: response.count_total,\n\t\t\t\t\t\tcount_resize: response.count_resize,\n\t\t\t\t\t\tcount_supersmushed: response.count_supersmushed,\n\t\t\t\t\t\tsavings_bytes: response.savings_bytes,\n\t\t\t\t\t\tsavings_conversion: response.savings_conversion,\n\t\t\t\t\t\tsavings_resize: response.savings_resize,\n\t\t\t\t\t\tsize_before: response.size_before,\n\t\t\t\t\t\tsize_after: response.size_after\n\t\t\t\t\t} );\n\t\t\t\t\t// Got the stats, update it.\n\t\t\t\t\tSmush.update_stats( this.smush_type );\n\t\t\t\t}\n\t\t\t}\n\t\t} ).always( () => message_holder.html( progress_message ) );\n\t};\n\n\t/**\n\t * After the bulk Smushing has been finished.\n\t */\n\tbulk_done() {\n\t\tif ( ! this.is_bulk ) return;\n\n\t\t// Enable the button.\n\t\tthis.enable_button();\n\n\t\tconst statusIcon = jQuery( '.sui-summary-smush .smush-stats-icon' );\n\n\t\t// Show notice.\n\t\tif ( 0 === this.ids.length ) {\n\t\t\tstatusIcon.addClass( 'sui-hidden' );\n\t\t\tjQuery( '.bulk-smush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t\tjQuery( '.wp-smush-bulk-wrapper' ).hide();\n\t\t\t// Hide the progress bar if scan is finished.\n\t\t\tjQuery( '.wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t} else {\n\t\t\t// Show loader.\n\t\t\tstatusIcon.removeClass( 'sui-icon-loader sui-loading sui-hidden' ).addClass( 'sui-icon-info sui-warning' );\n\n\t\t\tconst notice = jQuery( '.bulk-smush-wrapper .wp-smush-resmush-notice' );\n\n\t\t\tif ( notice.length > 0 ) {\n\t\t\t\tnotice.show();\n\t\t\t} else {\n\t\t\t\tjQuery( '.bulk-smush-wrapper .wp-smush-remaining' ).show();\n\t\t\t}\n\t\t}\n\n\t\t// Enable re-Smush and scan button.\n\t\tjQuery( '.wp-resmush.wp-smush-action, .wp-smush-scan' ).removeAttr( 'disabled' );\n\t};\n\n\tis_resolved() {\n\t\treturn 'resolved' === this.deferred.state();\n\t};\n\n\t/**\n\t * Free Smush limit exceeded.\n\t */\n\tfree_exceeded() {\n\t\tif ( this.ids.length > 0 ) {\n\t\t\tconst progress = jQuery( '.wp-smush-bulk-progress-bar-wrapper' );\n\t\t\tprogress.addClass( 'wp-smush-exceed-limit' );\n\t\t\tprogress.find( '.sui-progress-block .wp-smush-cancel-bulk' ).addClass('sui-hidden');\n\t\t\tprogress.find( '.sui-progress-block .wp-smush-all' ).removeClass('sui-hidden');\n\t\t\tprogress.find( '.sui-box-body.sui-no-padding-right' ).removeClass('sui-hidden');\n\t\t} else {\n\t\t\tjQuery( '.wp-smush-notice.wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t}\n\t};\n\n\t/**\n\t * Update remaining count.\n\t */\n\tupdate_remaining_count() {\n\t\tif ( this.is_bulk_resmush ) {\n\t\t\t// Re-Smush notice.\n\t\t\tconst resumeCountDiv = jQuery( '.wp-smush-resmush-notice .wp-smush-remaining-count' );\n\t\t\tif ( resumeCountDiv.length && 'undefined' !== typeof this.ids ) {\n\t\t\t\tresumeCountDiv.html( this.ids.length );\n\t\t\t}\n\t\t} else {\n\t\t\t// Smush notice.\n\t\t\tconst wrapperCountDiv = jQuery( '.bulk-smush-wrapper .wp-smush-remaining-count' );\n\t\t\tif ( wrapperCountDiv.length && 'undefined' !== typeof this.ids ) {\n\t\t\t\twrapperCountDiv.html( this.ids.length );\n\t\t\t}\n\t\t}\n\n\t\t// Update sidebar count.\n\t\tconst sidenavCountDiv = jQuery( '.smush-sidenav .wp-smush-remaining-count' );\n\t\tif ( sidenavCountDiv.length && 'undefined' !== typeof this.ids ) {\n\t\t\tif ( this.ids.length > 0 ) {\n\t\t\t\tsidenavCountDiv.html( this.ids.length );\n\t\t\t} else {\n\t\t\t\tjQuery( '.sui-summary-smush .smush-stats-icon' ).addClass( 'sui-hidden' );\n\t\t\t\tsidenavCountDiv.removeClass( 'sui-tag sui-tag-warning' ).html( '' );\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Adds the stats for the current image to existing stats.\n\t *\n\t * @param {array} image_stats\n\t * @param {string} image_stats.count\n\t * @param {boolean} image_stats.is_lossy\n\t * @param {array} image_stats.savings_resize\n\t * @param {array} image_stats.savings_conversion\n\t * @param {string} image_stats.size_before\n\t * @param {string} image_stats.size_after\n\t * @param {string} type\n\t */\n\tstatic update_localized_stats( image_stats, type ) {\n\t\t// Increase the Smush count.\n\t\tif ( 'undefined' === typeof wp_smushit_data ) return;\n\n\t\t// No need to increase attachment count, resize, conversion savings for directory Smush.\n\t\tif ( 'media' === type ) {\n\t\t\t// Increase Smushed image count.\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + parseInt( image_stats.count );\n\n\t\t\t// Increase super Smush count, if applicable.\n\t\t\tif ( image_stats.is_lossy ) {\n\t\t\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + 1;\n\t\t\t}\n\n\t\t\t// Add to resize savings.\n\t\t\twp_smushit_data.savings_resize = 'undefined' !== typeof image_stats.savings_resize.bytes ? parseInt( wp_smushit_data.savings_resize ) + parseInt( image_stats.savings_resize.bytes ) : parseInt( wp_smushit_data.savings_resize );\n\n\t\t\t// Update resize count.\n\t\t\twp_smushit_data.count_resize = 'undefined' !== typeof image_stats.savings_resize.bytes ? parseInt( wp_smushit_data.count_resize ) + 1 : wp_smushit_data.count_resize;\n\n\t\t\t// Add to conversion savings.\n\t\t\twp_smushit_data.savings_conversion = 'undefined' !== typeof image_stats.savings_conversion && 'undefined' !== typeof image_stats.savings_conversion.bytes ? parseInt( wp_smushit_data.savings_conversion ) + parseInt( image_stats.savings_conversion.bytes ) : parseInt( wp_smushit_data.savings_conversion );\n\t\t} else if ( 'directory_smush' === type ) {\n\t\t\t//Increase smushed image count\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + 1;\n\t\t} else if ( 'nextgen' === type ) {\n\t\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + 1;\n\n\t\t\t// Increase Smushed image count.\n\t\t\twp_smushit_data.count_images = parseInt( wp_smushit_data.count_images ) + parseInt( image_stats.count );\n\t\t}\n\n\t\t// If we have savings. Update savings.\n\t\tif ( image_stats.size_before > image_stats.size_after ) {\n\t\t\twp_smushit_data.size_before = 'undefined' !== typeof image_stats.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' !== typeof image_stats.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\n\t\t// Add stats for resizing. Update savings.\n\t\tif ( 'undefined' !== typeof image_stats.savings_resize ) {\n\t\t\twp_smushit_data.size_before = 'undefined' !== typeof image_stats.savings_resize.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.savings_resize.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' !== typeof image_stats.savings_resize.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.savings_resize.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\n\t\t// Add stats for conversion. Update savings.\n\t\tif ( 'undefined' !== typeof image_stats.savings_conversion ) {\n\t\t\twp_smushit_data.size_before = 'undefined' !== typeof image_stats.savings_conversion.size_before ? parseInt( wp_smushit_data.size_before ) + parseInt( image_stats.savings_conversion.size_before ) : parseInt( wp_smushit_data.size_before );\n\t\t\twp_smushit_data.size_after = 'undefined' !== typeof image_stats.savings_conversion.size_after ? parseInt( wp_smushit_data.size_after ) + parseInt( image_stats.savings_conversion.size_after ) : parseInt( wp_smushit_data.size_after );\n\t\t}\n\t};\n\n\t/**\n\t * Update progress.\n\t *\n\t * @param _res\n\t */\n\tupdate_progress( _res ) {\n\t\tif ( ! this.is_bulk_resmush && ! this.is_bulk ) return;\n\n\t\tlet progress = '';\n\n\t\t// Update localized stats.\n\t\tif ( _res && ( 'undefined' !== typeof _res.data && 'undefined' !== typeof _res.data.stats ) ) {\n\t\t\tSmush.update_localized_stats( _res.data.stats, this.smush_type );\n\t\t}\n\n\t\tif ( ! this.is_bulk_resmush ) {\n\t\t\t// Handle progress for normal bulk smush.\n\t\t\tprogress = ( ( this.smushed + this.errors.length ) / this.total ) * 100;\n\t\t} else {\n\t\t\t// If the request was successful, update the progress bar.\n\t\t\tif ( _res.success ) {\n\t\t\t\t// Handle progress for super Smush progress bar.\n\t\t\t\tif ( wp_smushit_data.resmush.length > 0 ) {\n\t\t\t\t\t// Update the count.\n\t\t\t\t\tjQuery( '.wp-smush-images-remaining' ).html( wp_smushit_data.resmush.length );\n\t\t\t\t} else if ( 0 === wp_smushit_data.resmush.length && 0 === this.ids.length ) {\n\t\t\t\t\t// If all images are re-Smushed, show the All Smushed message.\n\t\t\t\t\tjQuery( '.bulk-resmush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).removeClass( 'sui-hidden' );\n\n\t\t\t\t\t// Hide everything else.\n\t\t\t\t\tjQuery( '.wp-smush-resmush-wrap, .wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Handle progress for normal bulk Smush. Set progress bar width.\n\t\t\tif ( 'undefined' !== typeof this.ids && 'undefined' !== typeof this.total && this.total > 0 ) {\n\t\t\t\tprogress = ( ( this.smushed + this.errors.length ) / this.total ) * 100;\n\t\t\t}\n\t\t}\n\n\t\t// No more images left. Show bulk wrapper and Smush notice.\n\t\tif ( 0 === this.ids.length ) {\n\t\t\t// Sync stats for bulk Smush media library ( skip for Nextgen ).\n\t\t\tif ( 'nextgen' !== this.smush_type ) {\n\t\t\t\tthis.sync_stats();\n\t\t\t}\n\t\t\tjQuery( '.bulk-smush-wrapper .wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\t\t\tjQuery( '.wp-smush-bulk-wrapper' ).hide();\n\t\t}\n\n\t\t// Update remaining count.\n\t\tthis.update_remaining_count();\n\n\t\t// Increase the progress bar and counter.\n\t\tthis._update_progress( this.smushed + this.errors.length, WP_Smush.helpers.precise_round( progress, 1 ) );\n\n\t\t// Update stats and counts.\n\t\tSmush.update_stats( this.smush_type );\n\t};\n\n\t/**\n\t * Update progress.\n\t *\n\t * @param {int} count Number of images Smushed.\n\t * @param {string} width Percentage complete.\n\t * @private\n\t */\n\t_update_progress( count, width ) {\n\t\tif ( ! this.is_bulk && ! this.is_bulk_resmush ) return;\n\n\t\t// Progress bar label.\n\t\tjQuery( 'span.wp-smush-images-percent' ).html( width );\n\t\t// Progress bar.\n\t\tjQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' ).css( 'width', width + '%' );\n\n\t\t// Progress bar status.\n\t\tjQuery( '.bulk-smush-wrapper .sui-progress-state-text' )\n\t\t\t.find( 'span:first-child' ).html( count )\n\t\t\t.find( 'span:last-child' ).html( this.total );\n\t};\n\n\t/**\n\t * Whether to send the ajax requests further or not.\n\t *\n\t * @returns {*|boolean}\n\t */\n\tcontinue() {\n\t\tlet continue_smush = this.button.attr( 'continue_smush' );\n\n\t\tif ( 'undefined' === typeof continue_smush ) {\n\t\t\tcontinue_smush = true;\n\t\t}\n\n\t\tif ( 'false' === continue_smush || ! continue_smush ) {\n\t\t\tcontinue_smush = false;\n\t\t}\n\n\t\treturn continue_smush && this.ids.length > 0 && this.is_bulk;\n\t};\n\n\t/**\n\t * Add image ID to the errors array.\n\t *\n\t * @param {int} id\n\t */\n\tincrement_errors( id ) {\n\t\tthis.errors.push( id );\n\t};\n\n\t/**\n\t * Add image ID to smushed array.\n\t *\n\t * @param {int} id\n\t */\n\tincrement_smushed( id ) {\n\t\tthis.smushed = this.smushed + 1;\n\t}\n\n\t/**\n\t * Send ajax request for Smushing single and bulk, call update_progress on ajax response.\n\t *\n\t * @returns {*|{}}\n\t */\n\tcall_ajax() {\n\t\tlet nonce_value = '';\n\t\t// Remove from array while processing so we can continue where left off.\n\t\tthis.current_id = this.is_bulk ? this.ids.shift() : this.button.data( 'id' );\n\n\t\t// Remove the ID from respective variable as well.\n\t\tSmush.update_smush_ids( this.current_id );\n\n\t\tconst nonce_field = this.button.parent().find( '#_wp_smush_nonce' );\n\t\tif ( nonce_field ) {\n\t\t\tnonce_value = nonce_field.val();\n\t\t}\n\n\t\tconst self = this;\n\n\t\tthis.request = Smush.ajax( this.is_bulk_resmush, this.current_id, this.url, nonce_value )\n\t\t\t.done( function ( res ) {\n\t\t\t\t// If no response or success is false, do not process further. Increase the error count except if bulk request limit exceeded.\n\t\t\t\tif ( 'undefined' === typeof res.success || ( 'undefined' !== typeof res.success && false === res.success && 'undefined' !== typeof res.data && 'limit_exceeded' !== res.data.error ) ) {\n\t\t\t\t\tself.increment_errors( self.current_id );\n\n\t\t\t\t\t/** @var {string} res.data.file_name */\n\t\t\t\t\tconst error_msg = Smush.prepare_error_row( res.data.error_message, res.data.file_name, res.data.thumbnail, self.current_id, self.smush_type );\n\n\t\t\t\t\tself.log.show();\n\n\t\t\t\t\tif ( self.errors.length > 5 ) {\n\t\t\t\t\t\tjQuery('.smush-bulk-errors-actions').removeClass('sui-hidden');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Print the error on screen.\n\t\t\t\t\t\tself.log.find( '.smush-bulk-errors' ).append( error_msg );\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( 'undefined' !== typeof res.success && res.success ) {\n\t\t\t\t\t// Increment the smushed count if image smushed without errors.\n\t\t\t\t\tself.increment_smushed( self.current_id );\n\t\t\t\t}\n\n\t\t\t\t// Check whether to show the warning notice or not.\n\t\t\t\tSmush.membership_validity( res.data );\n\n\t\t\t\t/**\n\t\t\t\t * Bulk Smush limit exceeded: Stop ajax requests, remove progress bar, append the last image ID\n\t\t\t\t * back to Smush variable, and reset variables to allow the user to continue bulk Smush.\n\t\t\t\t */\n\t\t\t\tif ( 'undefined' !== typeof res.data && 'limit_exceeded' === res.data.error && ! self.is_resolved() ) {\n\t\t\t\t\t// Show error message.\n\t\t\t\t\tconst bulk_error_message = jQuery( '.wp-smush-bulk-progress-bar-wrapper' );\n\t\t\t\t\t/** @var {string} res.data.error_message */\n\t\t\t\t\tbulk_error_message.find( '.sui-notice-warning' )\n\t\t\t\t\t\t.html( '<p>' + res.data.error_message + '</p>' )\n\t\t\t\t\t\t.show();\n\n\t\t\t\t\t// Add a data attribute to the Smush button, to stop sending ajax.\n\t\t\t\t\tself.button.attr( 'continue_smush', false );\n\n\t\t\t\t\tself.free_exceeded();\n\n\t\t\t\t\t// Reinsert the current ID.\n\t\t\t\t\twp_smushit_data.unsmushed.unshift( self.current_id );\n\t\t\t\t} else if ( self.is_bulk ) {\n\t\t\t\t\tself.update_progress( res );\n\t\t\t\t} else if ( 0 === self.ids.length ) {\n\t\t\t\t\t// Sync stats anyway.\n\t\t\t\t\tself.sync_stats();\n\t\t\t\t}\n\n\t\t\t\tself.single_done();\n\t\t\t} )\n\t\t\t.complete( function () {\n\t\t\t\tif ( ! self.continue() || ! self.is_bulk ) {\n\t\t\t\t\t// Calls deferred.done()\n\t\t\t\t\tself.deferred.resolve();\n\t\t\t\t} else {\n\t\t\t\t\tself.call_ajax();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.deferred.errors = this.errors;\n\t\treturn this.deferred;\n\t};\n\n\t/**\n\t * Prepare error row. Will only allow to hide errors for WP media attachments (not nextgen).\n\t *\n\t * @since 1.9.0\n\t *\n\t * @param {string} errorMsg Error message.\n\t * @param {string} fileName File name.\n\t * @param {string} thumbnail Thumbnail for image (if available).\n\t * @param {int} id Image ID.\n\t * @param {string} type Smush type: media or netxgen.\n\t *\n\t * @returns {string}\n\t */\n\tstatic prepare_error_row( errorMsg, fileName, thumbnail, id, type ) {\n\t\tconst thumbDiv = ( 'undefined' === typeof thumbnail ) ? '<i class=\"sui-icon-photo-picture\" aria-hidden=\"true\"></i>' : thumbnail;\n\t\tconst fileLink = ( 'undefined' === fileName || 'undefined' === typeof fileName ) ? 'undefined' : fileName;\n\n\t\tlet tableDiv =\n\t\t\t'<div class=\"smush-bulk-error-row\">' +\n\t\t\t\t'<div class=\"smush-bulk-image-data\">' + thumbDiv +\n\t\t\t\t\t'<span class=\"smush-image-name\">' + fileLink + '</span>' +\n\t\t\t\t\t'<span class=\"smush-image-error\">' + errorMsg + '</span>' +\n\t\t\t\t'</div>';\n\n\t\tif ( 'media' === type ) {\n\t\t\ttableDiv = tableDiv +\n\t\t\t\t'<div class=\"smush-bulk-image-actions\">' +\n\t\t\t\t\t'<button type=\"button\" class=\"sui-button-icon sui-tooltip sui-tooltip-constrained sui-tooltip-top-left smush-ignore-image\" data-tooltip=\"' + wp_smush_msgs.error_ignore + '\" data-id=\"' + id + '\">' +\n\t\t\t\t\t\t'<i class=\"sui-icon-eye-hide\" aria-hidden=\"true\"></i>' +\n\t\t\t\t\t'</button>' +\n\t\t\t\t'</div>';\n\t\t}\n\n\t\ttableDiv = tableDiv + '</div>';\n\n\t\treturn tableDiv;\n\t};\n\n\t/**\n\t * Send ajax request for single and bulk Smushing.\n\t */\n\trun() {\n\t\t// If bulk and we have a definite number of IDs.\n\t\tif ( this.is_bulk && this.ids.length > 0 )\n\t\t\tthis.call_ajax();\n\n\t\tif ( ! this.is_bulk )\n\t\t\tthis.call_ajax();\n\t};\n\n\t/**\n\t * Show bulk Smush errors, and disable bulk Smush button on completion.\n\t */\n\tbind_deferred_events() {\n\t\tconst self = this;\n\n\t\tthis.deferred.done( function () {\n\t\t\tself.button.removeAttr( 'continue_smush' );\n\n\t\t\tif ( self.errors.length ) {\n\t\t\t\t/** @var {string} wp_smush_msgs.error_in_bulk */\n\t\t\t\tlet msg = wp_smush_msgs.error_in_bulk\n\t\t\t\t\t.replace( \"{{errors}}\", self.errors.length )\n\t\t\t\t\t.replace( \"{{total}}\", self.total )\n\t\t\t\t\t.replace( \"{{smushed}}\", self.smushed );\n\n\t\t\t\tjQuery( '.wp-smush-all-done' )\n\t\t\t\t\t.addClass( 'sui-notice-warning' )\n\t\t\t\t\t.removeClass( 'sui-notice-success' )\n\t\t\t\t\t.find( 'p' ).html( msg );\n\t\t\t}\n\n\t\t\tself.bulk_done();\n\n\t\t\t// Re-enable the buttons.\n\t\t\tjQuery( '.wp-smush-all:not(.wp-smush-finished), .wp-smush-scan' ).removeAttr( 'disabled' );\n\t\t} );\n\t};\n\n\t/**\n\t * Handles the cancel button click.\n\t * Update the UI, and enable the bulk Smush button.\n\t */\n\tcancel_ajax() {\n\t\tconst self = this;\n\n\t\tjQuery( '.wp-smush-cancel-bulk' ).on( 'click', function () {\n\t\t\t// Add a data attribute to the Smush button, to stop sending ajax.\n\t\t\tself.button.attr( 'continue_smush', false );\n\t\t\t// Sync and update stats.\n\t\t\tself.sync_stats();\n\t\t\tSmush.update_stats( this.smush_type );\n\n\t\t\tself.request.abort();\n\t\t\tself.enable_button();\n\t\t\tself.button.removeClass( 'wp-smush-started' );\n\t\t\twp_smushit_data.unsmushed.unshift( self.current_id );\n\t\t\tjQuery( '.wp-smush-bulk-wrapper' ).show();\n\n\t\t\t// Hide the progress bar.\n\t\t\tjQuery( '.wp-smush-bulk-progress-bar-wrapper' ).hide();\n\t\t} );\n\t};\n\n\t/**\n\t * Remove the current ID from the unSmushed/re-Smush variable.\n\t *\n\t * @param current_id\n\t */\n\tstatic update_smush_ids( current_id ) {\n\t\tif ( 'undefined' !== typeof wp_smushit_data.unsmushed && wp_smushit_data.unsmushed.length > 0 ) {\n\t\t\tconst u_index = wp_smushit_data.unsmushed.indexOf( current_id );\n\t\t\tif ( u_index > -1 ) {\n\t\t\t\twp_smushit_data.unsmushed.splice( u_index, 1 );\n\t\t\t}\n\t\t}\n\n\t\t// Remove from the re-Smush list.\n\t\tif ( 'undefined' !== typeof wp_smushit_data.resmush && wp_smushit_data.resmush.length > 0 ) {\n\t\t\tconst index = wp_smushit_data.resmush.indexOf( current_id );\n\t\t\tif ( index > -1 ) {\n\t\t\t\twp_smushit_data.resmush.splice( index, 1 );\n\t\t\t}\n\t\t}\n\t};\n\n}\n\nexport default Smush;","/*!\n * jQuery JavaScript Library v3.3.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: 2018-01-20T17:24Z\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 document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\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 <object> 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\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\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\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\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.3.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\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\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\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\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( 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\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\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\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\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 global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\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// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\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 concat.apply( [], 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.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\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\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\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\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|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// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\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\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\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 + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\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)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\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 + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\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-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\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 ) + \"\\\\\" + ch.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\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\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\t// Support: Android<4.0\n\t// Detect silently failing push.apply\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\tpush_native.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\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\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\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!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\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 + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\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\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\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\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\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\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\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\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\t\tdisabledAncestor( 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\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\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\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\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\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/* 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\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\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\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 = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\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// 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\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\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// 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\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\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\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(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\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\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\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\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\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\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\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ 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\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\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}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\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\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\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\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\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\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\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\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] || match[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\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\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] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\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\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\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() { return true; } :\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 + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\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\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};\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\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\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\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\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 ] || (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\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\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\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\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 || elem.innerText || 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\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 && (!document.hasFocus || document.hasFocus()) && !!(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\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) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\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\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\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 || attr.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 ? argument + length : argument;\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\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\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\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\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 ] || (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\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( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\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\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\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\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\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\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\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).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\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\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\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: <number>) 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\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\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\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\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( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\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\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].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\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 ) || context\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\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 = \"<a href='#'></a>\";\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 = \"<input/>\";\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\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\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 <tag> 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 if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return 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 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\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\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.apply( elem, args || [] );\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\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 = ( 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// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\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 <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\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, contains, 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\tcontains = jQuery.contains( elem.ownerDocument, 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 ( contains ) {\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\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 = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\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 only\n// See #13393 for more info\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// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\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 = {};\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\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ 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// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.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 <use> 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\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.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\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\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\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/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\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 = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\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, pdataCur, 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.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.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 = concat.apply( [], 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 ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\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, \"\" ), doc, node );\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 && jQuery.contains( node.ownerDocument, 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.replace( rxhtmlTag, \"<$1></$2>\" );\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 = jQuery.contains( elem.ownerDocument, 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 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\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\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\treliableMarginLeftVal,\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\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 === \"\" && !jQuery.contains( elem.ownerDocument, 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\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\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\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 property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\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\t\t) );\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\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\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\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\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\"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\tif ( type === \"number\" ) {\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\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\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 && support.scrollboxSize() === styles.position ) {\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( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\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 && type !== false ) {\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 = ( dataPriv.get( cur, \"events\" ) || {} )[ 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\t\t\t\tvar doc = this.ownerDocument || 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,\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 = 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\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() ] = 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;\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++ ) + uncached;\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// 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\n\njQuery._evalUrl = function( url ) {\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\t\t\"throws\": true\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 requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\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\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * jquery.fancytree.js\n * Tree view control with support for lazy loading and much more.\n * https://github.com/mar10/fancytree/\n *\n * Copyright (c) 2008-2019, Martin Wendt (http://wwWendt.de)\n * Released under the MIT license\n * https://github.com/mar10/fancytree/wiki/LicenseInfo\n *\n * @version 2.30.2\n * @date 2019-01-13T08:17:01Z\n */\n\n/** Core Fancytree module.\n */\n\n// UMD wrapper for the Fancytree core module\n(function(factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([\"jquery\", \"./jquery.fancytree.ui-deps\"], factory);\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\t// Node/CommonJS\n\t\trequire(\"./jquery.fancytree.ui-deps\");\n\t\tmodule.exports = factory(require(\"jquery\"));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n})(function($) {\n\t\"use strict\";\n\n\t// prevent duplicate loading\n\tif ($.ui && $.ui.fancytree) {\n\t\t$.ui.fancytree.warn(\"Fancytree: ignored duplicate include\");\n\t\treturn;\n\t}\n\n\t/******************************************************************************\n\t * Private functions and variables\n\t */\n\n\tvar i,\n\t\tattr,\n\t\tFT = null, // initialized below\n\t\tTEST_IMG = new RegExp(/\\.|\\//), // strings are considered image urls if they contain '.' or '/'\n\t\tREX_HTML = /[&<>\"'\\/]/g, // Escape those characters\n\t\tREX_TOOLTIP = /[<>\"'\\/]/g, // Don't escape `&` in tooltips\n\t\tRECURSIVE_REQUEST_ERROR = \"$recursive_request\",\n\t\tENTITY_MAP = {\n\t\t\t\"&\": \"&\",\n\t\t\t\"<\": \"<\",\n\t\t\t\">\": \">\",\n\t\t\t'\"': \""\",\n\t\t\t\"'\": \"'\",\n\t\t\t\"/\": \"/\",\n\t\t},\n\t\tIGNORE_KEYCODES = { 16: true, 17: true, 18: true },\n\t\tSPECIAL_KEYCODES = {\n\t\t\t8: \"backspace\",\n\t\t\t9: \"tab\",\n\t\t\t10: \"return\",\n\t\t\t13: \"return\",\n\t\t\t// 16: null, 17: null, 18: null, // ignore shift, ctrl, alt\n\t\t\t19: \"pause\",\n\t\t\t20: \"capslock\",\n\t\t\t27: \"esc\",\n\t\t\t32: \"space\",\n\t\t\t33: \"pageup\",\n\t\t\t34: \"pagedown\",\n\t\t\t35: \"end\",\n\t\t\t36: \"home\",\n\t\t\t37: \"left\",\n\t\t\t38: \"up\",\n\t\t\t39: \"right\",\n\t\t\t40: \"down\",\n\t\t\t45: \"insert\",\n\t\t\t46: \"del\",\n\t\t\t59: \";\",\n\t\t\t61: \"=\",\n\t\t\t// 91: null, 93: null, // ignore left and right meta\n\t\t\t96: \"0\",\n\t\t\t97: \"1\",\n\t\t\t98: \"2\",\n\t\t\t99: \"3\",\n\t\t\t100: \"4\",\n\t\t\t101: \"5\",\n\t\t\t102: \"6\",\n\t\t\t103: \"7\",\n\t\t\t104: \"8\",\n\t\t\t105: \"9\",\n\t\t\t106: \"*\",\n\t\t\t107: \"+\",\n\t\t\t109: \"-\",\n\t\t\t110: \".\",\n\t\t\t111: \"/\",\n\t\t\t112: \"f1\",\n\t\t\t113: \"f2\",\n\t\t\t114: \"f3\",\n\t\t\t115: \"f4\",\n\t\t\t116: \"f5\",\n\t\t\t117: \"f6\",\n\t\t\t118: \"f7\",\n\t\t\t119: \"f8\",\n\t\t\t120: \"f9\",\n\t\t\t121: \"f10\",\n\t\t\t122: \"f11\",\n\t\t\t123: \"f12\",\n\t\t\t144: \"numlock\",\n\t\t\t145: \"scroll\",\n\t\t\t173: \"-\",\n\t\t\t186: \";\",\n\t\t\t187: \"=\",\n\t\t\t188: \",\",\n\t\t\t189: \"-\",\n\t\t\t190: \".\",\n\t\t\t191: \"/\",\n\t\t\t192: \"`\",\n\t\t\t219: \"[\",\n\t\t\t220: \"\\\\\",\n\t\t\t221: \"]\",\n\t\t\t222: \"'\",\n\t\t},\n\t\tMODIFIERS = {\n\t\t\t16: \"shift\",\n\t\t\t17: \"ctrl\",\n\t\t\t18: \"alt\",\n\t\t\t91: \"meta\",\n\t\t\t93: \"meta\",\n\t\t},\n\t\tMOUSE_BUTTONS = { 0: \"\", 1: \"left\", 2: \"middle\", 3: \"right\" },\n\t\t// Boolean attributes that can be set with equivalent class names in the LI tags\n\t\t// Note: v2.23: checkbox and hideCheckbox are *not* in this list\n\t\tCLASS_ATTRS = \"active expanded focus folder lazy radiogroup selected unselectable unselectableIgnore\".split(\n\t\t\t\" \"\n\t\t),\n\t\tCLASS_ATTR_MAP = {},\n\t\t// Top-level Fancytree attributes, that can be set by dict\n\t\tTREE_ATTRS = \"columns types\".split(\" \"),\n\t\t// TREE_ATTR_MAP = {},\n\t\t// Top-level FancytreeNode attributes, that can be set by dict\n\t\tNODE_ATTRS = \"checkbox expanded extraClasses folder icon iconTooltip key lazy partsel radiogroup refKey selected statusNodeType title tooltip type unselectable unselectableIgnore unselectableStatus\".split(\n\t\t\t\" \"\n\t\t),\n\t\tNODE_ATTR_MAP = {},\n\t\t// Mapping of lowercase -> real name (because HTML5 data-... attribute only supports lowercase)\n\t\tNODE_ATTR_LOWERCASE_MAP = {},\n\t\t// Attribute names that should NOT be added to node.data\n\t\tNONE_NODE_DATA_MAP = {\n\t\t\tactive: true,\n\t\t\tchildren: true,\n\t\t\tdata: true,\n\t\t\tfocus: true,\n\t\t};\n\n\tfor (i = 0; i < CLASS_ATTRS.length; i++) {\n\t\tCLASS_ATTR_MAP[CLASS_ATTRS[i]] = true;\n\t}\n\tfor (i = 0; i < NODE_ATTRS.length; i++) {\n\t\tattr = NODE_ATTRS[i];\n\t\tNODE_ATTR_MAP[attr] = true;\n\t\tif (attr !== attr.toLowerCase()) {\n\t\t\tNODE_ATTR_LOWERCASE_MAP[attr.toLowerCase()] = attr;\n\t\t}\n\t}\n\t// for(i=0; i<TREE_ATTRS.length; i++) {\n\t// \tTREE_ATTR_MAP[TREE_ATTRS[i]] = true;\n\t// }\n\n\tfunction _assert(cond, msg) {\n\t\t// TODO: see qunit.js extractStacktrace()\n\t\tif (!cond) {\n\t\t\tmsg = msg ? \": \" + msg : \"\";\n\t\t\t// consoleApply(\"assert\", [!!cond, msg]);\n\t\t\t$.error(\"Fancytree assertion failed\" + msg);\n\t\t}\n\t}\n\n\t_assert($.ui, \"Fancytree requires jQuery UI (http://jqueryui.com)\");\n\n\tfunction consoleApply(method, args) {\n\t\tvar i,\n\t\t\ts,\n\t\t\tfn = window.console ? window.console[method] : null;\n\n\t\tif (fn) {\n\t\t\ttry {\n\t\t\t\tfn.apply(window.console, args);\n\t\t\t} catch (e) {\n\t\t\t\t// IE 8?\n\t\t\t\ts = \"\";\n\t\t\t\tfor (i = 0; i < args.length; i++) {\n\t\t\t\t\ts += args[i];\n\t\t\t\t}\n\t\t\t\tfn(s);\n\t\t\t}\n\t\t}\n\t}\n\n\t/* support: IE8 Polyfil for Date.now() */\n\tif (!Date.now) {\n\t\tDate.now = function now() {\n\t\t\treturn new Date().getTime();\n\t\t};\n\t}\n\n\t/*Return true if x is a FancytreeNode.*/\n\tfunction _isNode(x) {\n\t\treturn !!(x.tree && x.statusNodeType !== undefined);\n\t}\n\n\t/** Return true if dotted version string is equal or higher than requested version.\n\t *\n\t * See http://jsfiddle.net/mar10/FjSAN/\n\t */\n\tfunction isVersionAtLeast(dottedVersion, major, minor, patch) {\n\t\tvar i,\n\t\t\tv,\n\t\t\tt,\n\t\t\tverParts = $.map($.trim(dottedVersion).split(\".\"), function(e) {\n\t\t\t\treturn parseInt(e, 10);\n\t\t\t}),\n\t\t\ttestParts = $.map(\n\t\t\t\tArray.prototype.slice.call(arguments, 1),\n\t\t\t\tfunction(e) {\n\t\t\t\t\treturn parseInt(e, 10);\n\t\t\t\t}\n\t\t\t);\n\n\t\tfor (i = 0; i < testParts.length; i++) {\n\t\t\tv = verParts[i] || 0;\n\t\t\tt = testParts[i] || 0;\n\t\t\tif (v !== t) {\n\t\t\t\treturn v > t;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Deep-merge a list of objects (but replace array-type options).\n\t *\n\t * jQuery's $.extend(true, ...) method does a deep merge, that also merges Arrays.\n\t * This variant is used to merge extension defaults with user options, and should\n\t * merge objects, but override arrays (for example the `triggerStart: [...]` option\n\t * of ext-edit). Also `null` values are copied over and not skipped.\n\t *\n\t * See issue #876\n\t *\n\t * Example:\n\t * _simpleDeepMerge({}, o1, o2);\n\t */\n\tfunction _simpleDeepMerge() {\n\t\tvar options,\n\t\t\tname,\n\t\t\tsrc,\n\t\t\tcopy,\n\t\t\tclone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length;\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !$.isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\t\tif (i === length) {\n\t\t\tthrow \"need at least two args\";\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tsrc = target[name];\n\t\t\t\t\tcopy = options[name];\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// Recurse if we're merging plain objects\n\t\t\t\t\t// (NOTE: unlike $.extend, we don't merge arrays, but relace them)\n\t\t\t\t\tif (copy && $.isPlainObject(copy)) {\n\t\t\t\t\t\tclone = src && $.isPlainObject(src) ? src : {};\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = _simpleDeepMerge(clone, copy);\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Return the modified object\n\t\treturn target;\n\t}\n\n\t/** Return a wrapper that calls sub.methodName() and exposes\n\t * this : tree\n\t * this._local : tree.ext.EXTNAME\n\t * this._super : base.methodName.call()\n\t * this._superApply : base.methodName.apply()\n\t */\n\tfunction _makeVirtualFunction(methodName, tree, base, extension, extName) {\n\t\t// $.ui.fancytree.debug(\"_makeVirtualFunction\", methodName, tree, base, extension, extName);\n\t\t// if(rexTestSuper && !rexTestSuper.test(func)){\n\t\t// // extension.methodName() doesn't call _super(), so no wrapper required\n\t\t// return func;\n\t\t// }\n\t\t// Use an immediate function as closure\n\t\tvar proxy = (function() {\n\t\t\tvar prevFunc = tree[methodName], // org. tree method or prev. proxy\n\t\t\t\tbaseFunc = extension[methodName], //\n\t\t\t\t_local = tree.ext[extName],\n\t\t\t\t_super = function() {\n\t\t\t\t\treturn prevFunc.apply(tree, arguments);\n\t\t\t\t},\n\t\t\t\t_superApply = function(args) {\n\t\t\t\t\treturn prevFunc.apply(tree, args);\n\t\t\t\t};\n\n\t\t\t// Return the wrapper function\n\t\t\treturn function() {\n\t\t\t\tvar prevLocal = tree._local,\n\t\t\t\t\tprevSuper = tree._super,\n\t\t\t\t\tprevSuperApply = tree._superApply;\n\n\t\t\t\ttry {\n\t\t\t\t\ttree._local = _local;\n\t\t\t\t\ttree._super = _super;\n\t\t\t\t\ttree._superApply = _superApply;\n\t\t\t\t\treturn baseFunc.apply(tree, arguments);\n\t\t\t\t} finally {\n\t\t\t\t\ttree._local = prevLocal;\n\t\t\t\t\ttree._super = prevSuper;\n\t\t\t\t\ttree._superApply = prevSuperApply;\n\t\t\t\t}\n\t\t\t};\n\t\t})(); // end of Immediate Function\n\t\treturn proxy;\n\t}\n\n\t/**\n\t * Subclass `base` by creating proxy functions\n\t */\n\tfunction _subclassObject(tree, base, extension, extName) {\n\t\t// $.ui.fancytree.debug(\"_subclassObject\", tree, base, extension, extName);\n\t\tfor (var attrName in extension) {\n\t\t\tif (typeof extension[attrName] === \"function\") {\n\t\t\t\tif (typeof tree[attrName] === \"function\") {\n\t\t\t\t\t// override existing method\n\t\t\t\t\ttree[attrName] = _makeVirtualFunction(\n\t\t\t\t\t\tattrName,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\textName\n\t\t\t\t\t);\n\t\t\t\t} else if (attrName.charAt(0) === \"_\") {\n\t\t\t\t\t// Create private methods in tree.ext.EXTENSION namespace\n\t\t\t\t\ttree.ext[extName][attrName] = _makeVirtualFunction(\n\t\t\t\t\t\tattrName,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\tbase,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\textName\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"Could not override tree.\" +\n\t\t\t\t\t\t\tattrName +\n\t\t\t\t\t\t\t\". Use prefix '_' to create tree.\" +\n\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\"._\" +\n\t\t\t\t\t\t\tattrName\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Create member variables in tree.ext.EXTENSION namespace\n\t\t\t\tif (attrName !== \"options\") {\n\t\t\t\t\ttree.ext[extName][attrName] = extension[attrName];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction _getResolvedPromise(context, argArray) {\n\t\tif (context === undefined) {\n\t\t\treturn $.Deferred(function() {\n\t\t\t\tthis.resolve();\n\t\t\t}).promise();\n\t\t} else {\n\t\t\treturn $.Deferred(function() {\n\t\t\t\tthis.resolveWith(context, argArray);\n\t\t\t}).promise();\n\t\t}\n\t}\n\n\tfunction _getRejectedPromise(context, argArray) {\n\t\tif (context === undefined) {\n\t\t\treturn $.Deferred(function() {\n\t\t\t\tthis.reject();\n\t\t\t}).promise();\n\t\t} else {\n\t\t\treturn $.Deferred(function() {\n\t\t\t\tthis.rejectWith(context, argArray);\n\t\t\t}).promise();\n\t\t}\n\t}\n\n\tfunction _makeResolveFunc(deferred, context) {\n\t\treturn function() {\n\t\t\tdeferred.resolveWith(context);\n\t\t};\n\t}\n\n\tfunction _getElementDataAsDict($el) {\n\t\t// Evaluate 'data-NAME' attributes with special treatment for 'data-json'.\n\t\tvar d = $.extend({}, $el.data()),\n\t\t\tjson = d.json;\n\n\t\tdelete d.fancytree; // added to container by widget factory (old jQuery UI)\n\t\tdelete d.uiFancytree; // added to container by widget factory\n\n\t\tif (json) {\n\t\t\tdelete d.json;\n\t\t\t// <li data-json='...'> is already returned as object (http://api.jquery.com/data/#data-html5)\n\t\t\td = $.extend(d, json);\n\t\t}\n\t\treturn d;\n\t}\n\n\tfunction _escapeTooltip(s) {\n\t\treturn (\"\" + s).replace(REX_TOOLTIP, function(s) {\n\t\t\treturn ENTITY_MAP[s];\n\t\t});\n\t}\n\n\t// TODO: use currying\n\tfunction _makeNodeTitleMatcher(s) {\n\t\ts = s.toLowerCase();\n\t\treturn function(node) {\n\t\t\treturn node.title.toLowerCase().indexOf(s) >= 0;\n\t\t};\n\t}\n\n\tfunction _makeNodeTitleStartMatcher(s) {\n\t\tvar reMatch = new RegExp(\"^\" + s, \"i\");\n\t\treturn function(node) {\n\t\t\treturn reMatch.test(node.title);\n\t\t};\n\t}\n\n\t/******************************************************************************\n\t * FancytreeNode\n\t */\n\n\t/**\n\t * Creates a new FancytreeNode\n\t *\n\t * @class FancytreeNode\n\t * @classdesc A FancytreeNode represents the hierarchical data model and operations.\n\t *\n\t * @param {FancytreeNode} parent\n\t * @param {NodeData} obj\n\t *\n\t * @property {Fancytree} tree The tree instance\n\t * @property {FancytreeNode} parent The parent node\n\t * @property {string} key Node id (must be unique inside the tree)\n\t * @property {string} title Display name (may contain HTML)\n\t * @property {object} data Contains all extra data that was passed on node creation\n\t * @property {FancytreeNode[] | null | undefined} children Array of child nodes.<br>\n\t * For lazy nodes, null or undefined means 'not yet loaded'. Use an empty array\n\t * to define a node that has no children.\n\t * @property {boolean} expanded Use isExpanded(), setExpanded() to access this property.\n\t * @property {string} extraClasses Additional CSS classes, added to the node's `<span>`.<br>\n\t * Note: use `node.add/remove/toggleClass()` to modify.\n\t * @property {boolean} folder Folder nodes have different default icons and click behavior.<br>\n\t * Note: Also non-folders may have children.\n\t * @property {string} statusNodeType null for standard nodes. Otherwise type of special system node: 'error', 'loading', 'nodata', or 'paging'.\n\t * @property {boolean} lazy True if this node is loaded on demand, i.e. on first expansion.\n\t * @property {boolean} selected Use isSelected(), setSelected() to access this property.\n\t * @property {string} tooltip Alternative description used as hover popup\n\t * @property {string} iconTooltip Description used as hover popup for icon. @since 2.27\n\t * @property {string} type Node type, used with tree.types map. @since 2.27\n\t */\n\tfunction FancytreeNode(parent, obj) {\n\t\tvar i, l, name, cl;\n\n\t\tthis.parent = parent;\n\t\tthis.tree = parent.tree;\n\t\tthis.ul = null;\n\t\tthis.li = null; // <li id='key' ftnode=this> tag\n\t\tthis.statusNodeType = null; // if this is a temp. node to display the status of its parent\n\t\tthis._isLoading = false; // if this node itself is loading\n\t\tthis._error = null; // {message: '...'} if a load error occurred\n\t\tthis.data = {};\n\n\t\t// TODO: merge this code with node.toDict()\n\t\t// copy attributes from obj object\n\t\tfor (i = 0, l = NODE_ATTRS.length; i < l; i++) {\n\t\t\tname = NODE_ATTRS[i];\n\t\t\tthis[name] = obj[name];\n\t\t}\n\t\t// unselectableIgnore and unselectableStatus imply unselectable\n\t\tif (\n\t\t\tthis.unselectableIgnore != null ||\n\t\t\tthis.unselectableStatus != null\n\t\t) {\n\t\t\tthis.unselectable = true;\n\t\t}\n\t\tif (obj.hideCheckbox) {\n\t\t\t$.error(\n\t\t\t\t\"'hideCheckbox' node option was removed in v2.23.0: use 'checkbox: false'\"\n\t\t\t);\n\t\t}\n\t\t// node.data += obj.data\n\t\tif (obj.data) {\n\t\t\t$.extend(this.data, obj.data);\n\t\t}\n\t\t// Copy all other attributes to this.data.NAME\n\t\tfor (name in obj) {\n\t\t\tif (\n\t\t\t\t!NODE_ATTR_MAP[name] &&\n\t\t\t\t!$.isFunction(obj[name]) &&\n\t\t\t\t!NONE_NODE_DATA_MAP[name]\n\t\t\t) {\n\t\t\t\t// node.data.NAME = obj.NAME\n\t\t\t\tthis.data[name] = obj[name];\n\t\t\t}\n\t\t}\n\n\t\t// Fix missing key\n\t\tif (this.key == null) {\n\t\t\t// test for null OR undefined\n\t\t\tif (this.tree.options.defaultKey) {\n\t\t\t\tthis.key = this.tree.options.defaultKey(this);\n\t\t\t\t_assert(this.key, \"defaultKey() must return a unique key\");\n\t\t\t} else {\n\t\t\t\tthis.key = \"_\" + FT._nextNodeKey++;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.key = \"\" + this.key; // Convert to string (#217)\n\t\t}\n\n\t\t// Fix tree.activeNode\n\t\t// TODO: not elegant: we use obj.active as marker to set tree.activeNode\n\t\t// when loading from a dictionary.\n\t\tif (obj.active) {\n\t\t\t_assert(\n\t\t\t\tthis.tree.activeNode === null,\n\t\t\t\t\"only one active node allowed\"\n\t\t\t);\n\t\t\tthis.tree.activeNode = this;\n\t\t}\n\t\tif (obj.selected) {\n\t\t\t// #186\n\t\t\tthis.tree.lastSelectedNode = this;\n\t\t}\n\t\t// TODO: handle obj.focus = true\n\n\t\t// Create child nodes\n\t\tcl = obj.children;\n\t\tif (cl) {\n\t\t\tif (cl.length) {\n\t\t\t\tthis._setChildren(cl);\n\t\t\t} else {\n\t\t\t\t// if an empty array was passed for a lazy node, keep it, in order to mark it 'loaded'\n\t\t\t\tthis.children = this.lazy ? [] : null;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.children = null;\n\t\t}\n\t\t// Add to key/ref map (except for root node)\n\t\t//\tif( parent ) {\n\t\tthis.tree._callHook(\"treeRegisterNode\", this.tree, true, this);\n\t\t//\t}\n\t}\n\n\tFancytreeNode.prototype = /** @lends FancytreeNode# */ {\n\t\t/* Return the direct child FancytreeNode with a given key, index. */\n\t\t_findDirectChild: function(ptr) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tcl = this.children;\n\n\t\t\tif (cl) {\n\t\t\t\tif (typeof ptr === \"string\") {\n\t\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\t\tif (cl[i].key === ptr) {\n\t\t\t\t\t\t\treturn cl[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof ptr === \"number\") {\n\t\t\t\t\treturn this.children[ptr];\n\t\t\t\t} else if (ptr.parent === this) {\n\t\t\t\t\treturn ptr;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t// TODO: activate()\n\t\t// TODO: activateSilently()\n\t\t/* Internal helper called in recursive addChildren sequence.*/\n\t\t_setChildren: function(children) {\n\t\t\t_assert(\n\t\t\t\tchildren && (!this.children || this.children.length === 0),\n\t\t\t\t\"only init supported\"\n\t\t\t);\n\t\t\tthis.children = [];\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tthis.children.push(new FancytreeNode(this, children[i]));\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Append (or insert) a list of child nodes.\n\t\t *\n\t\t * @param {NodeData[]} children array of child node definitions (also single child accepted)\n\t\t * @param {FancytreeNode | string | Integer} [insertBefore] child node (or key or index of such).\n\t\t * If omitted, the new children are appended.\n\t\t * @returns {FancytreeNode} first child added\n\t\t *\n\t\t * @see FancytreeNode#applyPatch\n\t\t */\n\t\taddChildren: function(children, insertBefore) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tpos,\n\t\t\t\torigFirstChild = this.getFirstChild(),\n\t\t\t\torigLastChild = this.getLastChild(),\n\t\t\t\tfirstNode = null,\n\t\t\t\tnodeList = [];\n\n\t\t\tif ($.isPlainObject(children)) {\n\t\t\t\tchildren = [children];\n\t\t\t}\n\t\t\tif (!this.children) {\n\t\t\t\tthis.children = [];\n\t\t\t}\n\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\tnodeList.push(new FancytreeNode(this, children[i]));\n\t\t\t}\n\t\t\tfirstNode = nodeList[0];\n\t\t\tif (insertBefore == null) {\n\t\t\t\tthis.children = this.children.concat(nodeList);\n\t\t\t} else {\n\t\t\t\t// Returns null if insertBefore is not a direct child:\n\t\t\t\tinsertBefore = this._findDirectChild(insertBefore);\n\t\t\t\tpos = $.inArray(insertBefore, this.children);\n\t\t\t\t_assert(pos >= 0, \"insertBefore must be an existing child\");\n\t\t\t\t// insert nodeList after children[pos]\n\t\t\t\tthis.children.splice.apply(\n\t\t\t\t\tthis.children,\n\t\t\t\t\t[pos, 0].concat(nodeList)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (origFirstChild && !insertBefore) {\n\t\t\t\t// #708: Fast path -- don't render every child of root, just the new ones!\n\t\t\t\t// #723, #729: but only if it's appended to an existing child list\n\t\t\t\tfor (i = 0, l = nodeList.length; i < l; i++) {\n\t\t\t\t\tnodeList[i].render(); // New nodes were never rendered before\n\t\t\t\t}\n\t\t\t\t// Adjust classes where status may have changed\n\t\t\t\t// Has a first child\n\t\t\t\tif (origFirstChild !== this.getFirstChild()) {\n\t\t\t\t\t// Different first child -- recompute classes\n\t\t\t\t\torigFirstChild.renderStatus();\n\t\t\t\t}\n\t\t\t\tif (origLastChild !== this.getLastChild()) {\n\t\t\t\t\t// Different last child -- recompute classes\n\t\t\t\t\torigLastChild.renderStatus();\n\t\t\t\t}\n\t\t\t} else if (!this.parent || this.parent.ul || this.tr) {\n\t\t\t\t// render if the parent was rendered (or this is a root node)\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tif (this.tree.options.selectMode === 3) {\n\t\t\t\tthis.fixSelection3FromEndNodes();\n\t\t\t}\n\t\t\tthis.triggerModifyChild(\n\t\t\t\t\"add\",\n\t\t\t\tnodeList.length === 1 ? nodeList[0] : null\n\t\t\t);\n\t\t\treturn firstNode;\n\t\t},\n\t\t/**\n\t\t * Add class to node's span tag and to .extraClasses.\n\t\t *\n\t\t * @param {string} className class name\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\taddClass: function(className) {\n\t\t\treturn this.toggleClass(className, true);\n\t\t},\n\t\t/**\n\t\t * Append or prepend a node, or append a child node.\n\t\t *\n\t\t * This a convenience function that calls addChildren()\n\t\t *\n\t\t * @param {NodeData} node node definition\n\t\t * @param {string} [mode=child] 'before', 'after', 'firstChild', or 'child' ('over' is a synonym for 'child')\n\t\t * @returns {FancytreeNode} new node\n\t\t */\n\t\taddNode: function(node, mode) {\n\t\t\tif (mode === undefined || mode === \"over\") {\n\t\t\t\tmode = \"child\";\n\t\t\t}\n\t\t\tswitch (mode) {\n\t\t\t\tcase \"after\":\n\t\t\t\t\treturn this.getParent().addChildren(\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tthis.getNextSibling()\n\t\t\t\t\t);\n\t\t\t\tcase \"before\":\n\t\t\t\t\treturn this.getParent().addChildren(node, this);\n\t\t\t\tcase \"firstChild\":\n\t\t\t\t\t// Insert before the first child if any\n\t\t\t\t\tvar insertBefore = this.children ? this.children[0] : null;\n\t\t\t\t\treturn this.addChildren(node, insertBefore);\n\t\t\t\tcase \"child\":\n\t\t\t\tcase \"over\":\n\t\t\t\t\treturn this.addChildren(node);\n\t\t\t}\n\t\t\t_assert(false, \"Invalid mode: \" + mode);\n\t\t},\n\t\t/**Add child status nodes that indicate 'More...', etc.\n\t\t *\n\t\t * This also maintains the node's `partload` property.\n\t\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t\t * @param {string} [mode='child'] 'child'|firstChild'\n\t\t * @since 2.15\n\t\t */\n\t\taddPagingNode: function(node, mode) {\n\t\t\tvar i, n;\n\n\t\t\tmode = mode || \"child\";\n\t\t\tif (node === false) {\n\t\t\t\tfor (i = this.children.length - 1; i >= 0; i--) {\n\t\t\t\t\tn = this.children[i];\n\t\t\t\t\tif (n.statusNodeType === \"paging\") {\n\t\t\t\t\t\tthis.removeChild(n);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.partload = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnode = $.extend(\n\t\t\t\t{\n\t\t\t\t\ttitle: this.tree.options.strings.moreData,\n\t\t\t\t\tstatusNodeType: \"paging\",\n\t\t\t\t\ticon: false,\n\t\t\t\t},\n\t\t\t\tnode\n\t\t\t);\n\t\t\tthis.partload = true;\n\t\t\treturn this.addNode(node, mode);\n\t\t},\n\t\t/**\n\t\t * Append new node after this.\n\t\t *\n\t\t * This a convenience function that calls addNode(node, 'after')\n\t\t *\n\t\t * @param {NodeData} node node definition\n\t\t * @returns {FancytreeNode} new node\n\t\t */\n\t\tappendSibling: function(node) {\n\t\t\treturn this.addNode(node, \"after\");\n\t\t},\n\t\t/**\n\t\t * Modify existing child nodes.\n\t\t *\n\t\t * @param {NodePatch} patch\n\t\t * @returns {$.Promise}\n\t\t * @see FancytreeNode#addChildren\n\t\t */\n\t\tapplyPatch: function(patch) {\n\t\t\t// patch [key, null] means 'remove'\n\t\t\tif (patch === null) {\n\t\t\t\tthis.remove();\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\t// TODO: make sure that root node is not collapsed or modified\n\t\t\t// copy (most) attributes to node.ATTR or node.data.ATTR\n\t\t\tvar name,\n\t\t\t\tpromise,\n\t\t\t\tv,\n\t\t\t\tIGNORE_MAP = { children: true, expanded: true, parent: true }; // TODO: should be global\n\n\t\t\tfor (name in patch) {\n\t\t\t\tv = patch[name];\n\t\t\t\tif (!IGNORE_MAP[name] && !$.isFunction(v)) {\n\t\t\t\t\tif (NODE_ATTR_MAP[name]) {\n\t\t\t\t\t\tthis[name] = v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.data[name] = v;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove and/or create children\n\t\t\tif (patch.hasOwnProperty(\"children\")) {\n\t\t\t\tthis.removeChildren();\n\t\t\t\tif (patch.children) {\n\t\t\t\t\t// only if not null and not empty list\n\t\t\t\t\t// TODO: addChildren instead?\n\t\t\t\t\tthis._setChildren(patch.children);\n\t\t\t\t}\n\t\t\t\t// TODO: how can we APPEND or INSERT child nodes?\n\t\t\t}\n\t\t\tif (this.isVisible()) {\n\t\t\t\tthis.renderTitle();\n\t\t\t\tthis.renderStatus();\n\t\t\t}\n\t\t\t// Expand collapse (final step, since this may be async)\n\t\t\tif (patch.hasOwnProperty(\"expanded\")) {\n\t\t\t\tpromise = this.setExpanded(patch.expanded);\n\t\t\t} else {\n\t\t\t\tpromise = _getResolvedPromise(this);\n\t\t\t}\n\t\t\treturn promise;\n\t\t},\n\t\t/** Collapse all sibling nodes.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tcollapseSiblings: function() {\n\t\t\treturn this.tree._callHook(\"nodeCollapseSiblings\", this);\n\t\t},\n\t\t/** Copy this node as sibling or child of `node`.\n\t\t *\n\t\t * @param {FancytreeNode} node source node\n\t\t * @param {string} [mode=child] 'before' | 'after' | 'child'\n\t\t * @param {Function} [map] callback function(NodeData) that could modify the new node\n\t\t * @returns {FancytreeNode} new\n\t\t */\n\t\tcopyTo: function(node, mode, map) {\n\t\t\treturn node.addNode(this.toDict(true, map), mode);\n\t\t},\n\t\t/** Count direct and indirect children.\n\t\t *\n\t\t * @param {boolean} [deep=true] pass 'false' to only count direct children\n\t\t * @returns {int} number of child nodes\n\t\t */\n\t\tcountChildren: function(deep) {\n\t\t\tvar cl = this.children,\n\t\t\t\ti,\n\t\t\t\tl,\n\t\t\t\tn;\n\t\t\tif (!cl) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tn = cl.length;\n\t\t\tif (deep !== false) {\n\t\t\t\tfor (i = 0, l = n; i < l; i++) {\n\t\t\t\t\tn += cl[i].countChildren();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn n;\n\t\t},\n\t\t// TODO: deactivate()\n\t\t/** Write to browser console if debugLevel >= 4 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tdebug: function(msg) {\n\t\t\tif (this.tree.options.debugLevel >= 4) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Deprecated.\n\t\t * @deprecated since 2014-02-16. Use resetLazy() instead.\n\t\t */\n\t\tdiscard: function() {\n\t\t\tthis.warn(\n\t\t\t\t\"FancytreeNode.discard() is deprecated since 2014-02-16. Use .resetLazy() instead.\"\n\t\t\t);\n\t\t\treturn this.resetLazy();\n\t\t},\n\t\t/** Remove DOM elements for all descendents. May be called on .collapse event\n\t\t * to keep the DOM small.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t */\n\t\tdiscardMarkup: function(includeSelf) {\n\t\t\tvar fn = includeSelf ? \"nodeRemoveMarkup\" : \"nodeRemoveChildMarkup\";\n\t\t\tthis.tree._callHook(fn, this);\n\t\t},\n\t\t/** Write error to browser console if debugLevel >= 1 (prepending tree info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\terror: function(msg) {\n\t\t\tif (this.options.debugLevel >= 1) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"error\", arguments);\n\t\t\t}\n\t\t},\n\t\t/**Find all nodes that match condition (excluding self).\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t * callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t\t */\n\t\tfindAll: function(match) {\n\t\t\tmatch = $.isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\t\tvar res = [];\n\t\t\tthis.visit(function(n) {\n\t\t\t\tif (match(n)) {\n\t\t\t\t\tres.push(n);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t\t/**Find first node that matches condition (excluding self).\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t * callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t * @see FancytreeNode#findAll\n\t\t */\n\t\tfindFirst: function(match) {\n\t\t\tmatch = $.isFunction(match) ? match : _makeNodeTitleMatcher(match);\n\t\t\tvar res = null;\n\t\t\tthis.visit(function(n) {\n\t\t\t\tif (match(n)) {\n\t\t\t\t\tres = n;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn res;\n\t\t},\n\t\t/* Apply selection state (internal use only) */\n\t\t_changeSelectStatusAttrs: function(state) {\n\t\t\tvar changed = false,\n\t\t\t\topts = this.tree.options,\n\t\t\t\tunselectable = FT.evalOption(\n\t\t\t\t\t\"unselectable\",\n\t\t\t\t\tthis,\n\t\t\t\t\tthis,\n\t\t\t\t\topts,\n\t\t\t\t\tfalse\n\t\t\t\t),\n\t\t\t\tunselectableStatus = FT.evalOption(\n\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\tthis,\n\t\t\t\t\tthis,\n\t\t\t\t\topts,\n\t\t\t\t\tundefined\n\t\t\t\t);\n\n\t\t\tif (unselectable && unselectableStatus != null) {\n\t\t\t\tstate = unselectableStatus;\n\t\t\t}\n\t\t\tswitch (state) {\n\t\t\t\tcase false:\n\t\t\t\t\tchanged = this.selected || this.partsel;\n\t\t\t\t\tthis.selected = false;\n\t\t\t\t\tthis.partsel = false;\n\t\t\t\t\tbreak;\n\t\t\t\tcase true:\n\t\t\t\t\tchanged = !this.selected || !this.partsel;\n\t\t\t\t\tthis.selected = true;\n\t\t\t\t\tthis.partsel = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase undefined:\n\t\t\t\t\tchanged = this.selected || !this.partsel;\n\t\t\t\t\tthis.selected = false;\n\t\t\t\t\tthis.partsel = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t_assert(false, \"invalid state: \" + state);\n\t\t\t}\n\t\t\t// this.debug(\"fixSelection3AfterLoad() _changeSelectStatusAttrs()\", state, changed);\n\t\t\tif (changed) {\n\t\t\t\tthis.renderStatus();\n\t\t\t}\n\t\t\treturn changed;\n\t\t},\n\t\t/**\n\t\t * Fix selection status, after this node was (de)selected in multi-hier mode.\n\t\t * This includes (de)selecting all children.\n\t\t */\n\t\tfixSelection3AfterClick: function(callOpts) {\n\t\t\tvar flag = this.isSelected();\n\n\t\t\t//\t\tthis.debug(\"fixSelection3AfterClick()\");\n\n\t\t\tthis.visit(function(node) {\n\t\t\t\tnode._changeSelectStatusAttrs(flag);\n\t\t\t});\n\t\t\tthis.fixSelection3FromEndNodes(callOpts);\n\t\t},\n\t\t/**\n\t\t * Fix selection status for multi-hier mode.\n\t\t * Only end-nodes are considered to update the descendants branch and parents.\n\t\t * Should be called after this node has loaded new children or after\n\t\t * children have been modified using the API.\n\t\t */\n\t\tfixSelection3FromEndNodes: function(callOpts) {\n\t\t\tvar opts = this.tree.options;\n\n\t\t\t//\t\tthis.debug(\"fixSelection3FromEndNodes()\");\n\t\t\t_assert(opts.selectMode === 3, \"expected selectMode 3\");\n\n\t\t\t// Visit all end nodes and adjust their parent's `selected` and `partsel`\n\t\t\t// attributes. Return selection state true, false, or undefined.\n\t\t\tfunction _walk(node) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tchild,\n\t\t\t\t\ts,\n\t\t\t\t\tstate,\n\t\t\t\t\tallSelected,\n\t\t\t\t\tsomeSelected,\n\t\t\t\t\tunselIgnore,\n\t\t\t\t\tunselState,\n\t\t\t\t\tchildren = node.children;\n\n\t\t\t\tif (children && children.length) {\n\t\t\t\t\t// check all children recursively\n\t\t\t\t\tallSelected = true;\n\t\t\t\t\tsomeSelected = false;\n\n\t\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\t\tchild = children[i];\n\t\t\t\t\t\t// the selection state of a node is not relevant; we need the end-nodes\n\t\t\t\t\t\ts = _walk(child);\n\t\t\t\t\t\t// if( !child.unselectableIgnore ) {\n\t\t\t\t\t\tunselIgnore = FT.evalOption(\n\t\t\t\t\t\t\t\"unselectableIgnore\",\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\topts,\n\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!unselIgnore) {\n\t\t\t\t\t\t\tif (s !== false) {\n\t\t\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (s !== true) {\n\t\t\t\t\t\t\t\tallSelected = false;\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\tstate = allSelected\n\t\t\t\t\t\t? true\n\t\t\t\t\t\t: someSelected\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: false;\n\t\t\t\t} else {\n\t\t\t\t\t// This is an end-node: simply report the status\n\t\t\t\t\tunselState = FT.evalOption(\n\t\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tundefined\n\t\t\t\t\t);\n\t\t\t\t\tstate = unselState == null ? !!node.selected : !!unselState;\n\t\t\t\t}\n\t\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t\t\treturn state;\n\t\t\t}\n\t\t\t_walk(this);\n\n\t\t\t// Update parent's state\n\t\t\tthis.visitParents(function(node) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tchild,\n\t\t\t\t\tstate,\n\t\t\t\t\tunselIgnore,\n\t\t\t\t\tunselState,\n\t\t\t\t\tchildren = node.children,\n\t\t\t\t\tallSelected = true,\n\t\t\t\t\tsomeSelected = false;\n\n\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tchild = children[i];\n\t\t\t\t\tunselIgnore = FT.evalOption(\n\t\t\t\t\t\t\"unselectableIgnore\",\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\tchild,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t\tif (!unselIgnore) {\n\t\t\t\t\t\tunselState = FT.evalOption(\n\t\t\t\t\t\t\t\"unselectableStatus\",\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\topts,\n\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t);\n\t\t\t\t\t\tstate =\n\t\t\t\t\t\t\tunselState == null\n\t\t\t\t\t\t\t\t? !!child.selected\n\t\t\t\t\t\t\t\t: !!unselState;\n\t\t\t\t\t\t// When fixing the parents, we trust the sibling status (i.e.\n\t\t\t\t\t\t// we don't recurse)\n\t\t\t\t\t\tif (state || child.partsel) {\n\t\t\t\t\t\t\tsomeSelected = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!state) {\n\t\t\t\t\t\t\tallSelected = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstate = allSelected ? true : someSelected ? undefined : false;\n\t\t\t\tnode._changeSelectStatusAttrs(state);\n\t\t\t});\n\t\t},\n\t\t// TODO: focus()\n\t\t/**\n\t\t * Update node data. If dict contains 'children', then also replace\n\t\t * the hole sub tree.\n\t\t * @param {NodeData} dict\n\t\t *\n\t\t * @see FancytreeNode#addChildren\n\t\t * @see FancytreeNode#applyPatch\n\t\t */\n\t\tfromDict: function(dict) {\n\t\t\t// copy all other attributes to this.data.xxx\n\t\t\tfor (var name in dict) {\n\t\t\t\tif (NODE_ATTR_MAP[name]) {\n\t\t\t\t\t// node.NAME = dict.NAME\n\t\t\t\t\tthis[name] = dict[name];\n\t\t\t\t} else if (name === \"data\") {\n\t\t\t\t\t// node.data += dict.data\n\t\t\t\t\t$.extend(this.data, dict.data);\n\t\t\t\t} else if (\n\t\t\t\t\t!$.isFunction(dict[name]) &&\n\t\t\t\t\t!NONE_NODE_DATA_MAP[name]\n\t\t\t\t) {\n\t\t\t\t\t// node.data.NAME = dict.NAME\n\t\t\t\t\tthis.data[name] = dict[name];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dict.children) {\n\t\t\t\t// recursively set children and render\n\t\t\t\tthis.removeChildren();\n\t\t\t\tthis.addChildren(dict.children);\n\t\t\t}\n\t\t\tthis.renderTitle();\n\t\t\t/*\n\t\t\tvar children = dict.children;\n\t\t\tif(children === undefined){\n\t\t\t\tthis.data = $.extend(this.data, dict);\n\t\t\t\tthis.render();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdict = $.extend({}, dict);\n\t\t\tdict.children = undefined;\n\t\t\tthis.data = $.extend(this.data, dict);\n\t\t\tthis.removeChildren();\n\t\t\tthis.addChild(children);\n\t\t\t*/\n\t\t},\n\t\t/** Return the list of child nodes (undefined for unexpanded lazy nodes).\n\t\t * @returns {FancytreeNode[] | undefined}\n\t\t */\n\t\tgetChildren: function() {\n\t\t\tif (this.hasChildren() === undefined) {\n\t\t\t\t// TODO: only required for lazy nodes?\n\t\t\t\treturn undefined; // Lazy node: unloaded, currently loading, or load error\n\t\t\t}\n\t\t\treturn this.children;\n\t\t},\n\t\t/** Return the first child node or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetFirstChild: function() {\n\t\t\treturn this.children ? this.children[0] : null;\n\t\t},\n\t\t/** Return the 0-based child index.\n\t\t * @returns {int}\n\t\t */\n\t\tgetIndex: function() {\n\t\t\t//\t\treturn this.parent.children.indexOf(this);\n\t\t\treturn $.inArray(this, this.parent.children); // indexOf doesn't work in IE7\n\t\t},\n\t\t/** Return the hierarchical child index (1-based, e.g. '3.2.4').\n\t\t * @param {string} [separator=\".\"]\n\t\t * @param {int} [digits=1]\n\t\t * @returns {string}\n\t\t */\n\t\tgetIndexHier: function(separator, digits) {\n\t\t\tseparator = separator || \".\";\n\t\t\tvar s,\n\t\t\t\tres = [];\n\t\t\t$.each(this.getParentList(false, true), function(i, o) {\n\t\t\t\ts = \"\" + (o.getIndex() + 1);\n\t\t\t\tif (digits) {\n\t\t\t\t\t// prepend leading zeroes\n\t\t\t\t\ts = (\"0000000\" + s).substr(-digits);\n\t\t\t\t}\n\t\t\t\tres.push(s);\n\t\t\t});\n\t\t\treturn res.join(separator);\n\t\t},\n\t\t/** Return the parent keys separated by options.keyPathSeparator, e.g. \"id_1/id_17/id_32\".\n\t\t * @param {boolean} [excludeSelf=false]\n\t\t * @returns {string}\n\t\t */\n\t\tgetKeyPath: function(excludeSelf) {\n\t\t\tvar path = [],\n\t\t\t\tsep = this.tree.options.keyPathSeparator;\n\t\t\tthis.visitParents(function(n) {\n\t\t\t\tif (n.parent) {\n\t\t\t\t\tpath.unshift(n.key);\n\t\t\t\t}\n\t\t\t}, !excludeSelf);\n\t\t\treturn sep + path.join(sep);\n\t\t},\n\t\t/** Return the last child of this node or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetLastChild: function() {\n\t\t\treturn this.children\n\t\t\t\t? this.children[this.children.length - 1]\n\t\t\t\t: null;\n\t\t},\n\t\t/** Return node depth. 0: System root node, 1: visible top-level node, 2: first sub-level, ... .\n\t\t * @returns {int}\n\t\t */\n\t\tgetLevel: function() {\n\t\t\tvar level = 0,\n\t\t\t\tdtn = this.parent;\n\t\t\twhile (dtn) {\n\t\t\t\tlevel++;\n\t\t\t\tdtn = dtn.parent;\n\t\t\t}\n\t\t\treturn level;\n\t\t},\n\t\t/** Return the successor node (under the same parent) or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetNextSibling: function() {\n\t\t\t// TODO: use indexOf, if available: (not in IE6)\n\t\t\tif (this.parent) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tac = this.parent.children;\n\n\t\t\t\tfor (i = 0, l = ac.length - 1; i < l; i++) {\n\t\t\t\t\t// up to length-2, so next(last) = null\n\t\t\t\t\tif (ac[i] === this) {\n\t\t\t\t\t\treturn ac[i + 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/** Return the parent node (null for the system root node).\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetParent: function() {\n\t\t\t// TODO: return null for top-level nodes?\n\t\t\treturn this.parent;\n\t\t},\n\t\t/** Return an array of all parent nodes (top-down).\n\t\t * @param {boolean} [includeRoot=false] Include the invisible system root node.\n\t\t * @param {boolean} [includeSelf=false] Include the node itself.\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetParentList: function(includeRoot, includeSelf) {\n\t\t\tvar l = [],\n\t\t\t\tdtn = includeSelf ? this : this.parent;\n\t\t\twhile (dtn) {\n\t\t\t\tif (includeRoot || dtn.parent) {\n\t\t\t\t\tl.unshift(dtn);\n\t\t\t\t}\n\t\t\t\tdtn = dtn.parent;\n\t\t\t}\n\t\t\treturn l;\n\t\t},\n\t\t/** Return the predecessor node (under the same parent) or null.\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetPrevSibling: function() {\n\t\t\tif (this.parent) {\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tac = this.parent.children;\n\n\t\t\t\tfor (i = 1, l = ac.length; i < l; i++) {\n\t\t\t\t\t// start with 1, so prev(first) = null\n\t\t\t\t\tif (ac[i] === this) {\n\t\t\t\t\t\treturn ac[i - 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\t/**\n\t\t * Return an array of selected descendant nodes.\n\t\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t\t * node (useful with selectMode 3)\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetSelectedNodes: function(stopOnParents) {\n\t\t\tvar nodeList = [];\n\t\t\tthis.visit(function(node) {\n\t\t\t\tif (node.selected) {\n\t\t\t\t\tnodeList.push(node);\n\t\t\t\t\tif (stopOnParents === true) {\n\t\t\t\t\t\treturn \"skip\"; // stop processing this branch\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn nodeList;\n\t\t},\n\t\t/** Return true if node has children. Return undefined if not sure, i.e. the node is lazy and not yet loaded).\n\t\t * @returns {boolean | undefined}\n\t\t */\n\t\thasChildren: function() {\n\t\t\tif (this.lazy) {\n\t\t\t\tif (this.children == null) {\n\t\t\t\t\t// null or undefined: Not yet loaded\n\t\t\t\t\treturn undefined;\n\t\t\t\t} else if (this.children.length === 0) {\n\t\t\t\t\t// Loaded, but response was empty\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.children.length === 1 &&\n\t\t\t\t\tthis.children[0].isStatusNode()\n\t\t\t\t) {\n\t\t\t\t\t// Currently loading or load error\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !!(this.children && this.children.length);\n\t\t},\n\t\t/** Return true if node has keyboard focus.\n\t\t * @returns {boolean}\n\t\t */\n\t\thasFocus: function() {\n\t\t\treturn this.tree.hasFocus() && this.tree.focusNode === this;\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 3 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tinfo: function(msg) {\n\t\t\tif (this.tree.options.debugLevel >= 3) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Return true if node is active (see also FancytreeNode#isSelected).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisActive: function() {\n\t\t\treturn this.tree.activeNode === this;\n\t\t},\n\t\t/** Return true if node is vertically below `otherNode`, i.e. rendered in a subsequent row.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t * @since 2.28\n\t\t */\n\t\tisBelowOf: function(otherNode) {\n\t\t\treturn this.getIndexHier(\".\", 5) > otherNode.getIndexHier(\".\", 5);\n\t\t},\n\t\t/** Return true if node is a direct child of otherNode.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t */\n\t\tisChildOf: function(otherNode) {\n\t\t\treturn this.parent && this.parent === otherNode;\n\t\t},\n\t\t/** Return true, if node is a direct or indirect sub node of otherNode.\n\t\t * @param {FancytreeNode} otherNode\n\t\t * @returns {boolean}\n\t\t */\n\t\tisDescendantOf: function(otherNode) {\n\t\t\tif (!otherNode || otherNode.tree !== this.tree) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar p = this.parent;\n\t\t\twhile (p) {\n\t\t\t\tif (p === otherNode) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tif (p === p.parent) {\n\t\t\t\t\t$.error(\"Recursive parent link: \" + p);\n\t\t\t\t}\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t/** Return true if node is expanded.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisExpanded: function() {\n\t\t\treturn !!this.expanded;\n\t\t},\n\t\t/** Return true if node is the first node of its parent's children.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFirstSibling: function() {\n\t\t\tvar p = this.parent;\n\t\t\treturn !p || p.children[0] === this;\n\t\t},\n\t\t/** Return true if node is a folder, i.e. has the node.folder attribute set.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFolder: function() {\n\t\t\treturn !!this.folder;\n\t\t},\n\t\t/** Return true if node is the last node of its parent's children.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLastSibling: function() {\n\t\t\tvar p = this.parent;\n\t\t\treturn !p || p.children[p.children.length - 1] === this;\n\t\t},\n\t\t/** Return true if node is lazy (even if data was already loaded)\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLazy: function() {\n\t\t\treturn !!this.lazy;\n\t\t},\n\t\t/** Return true if node is lazy and loaded. For non-lazy nodes always return true.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoaded: function() {\n\t\t\treturn !this.lazy || this.hasChildren() !== undefined; // Also checks if the only child is a status node\n\t\t},\n\t\t/** Return true if children are currently beeing loaded, i.e. a Ajax request is pending.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisLoading: function() {\n\t\t\treturn !!this._isLoading;\n\t\t},\n\t\t/*\n\t\t * @deprecated since v2.4.0: Use isRootNode() instead\n\t\t */\n\t\tisRoot: function() {\n\t\t\treturn this.isRootNode();\n\t\t},\n\t\t/** Return true if node is partially selected (tri-state).\n\t\t * @returns {boolean}\n\t\t * @since 2.23\n\t\t */\n\t\tisPartsel: function() {\n\t\t\treturn !this.selected && !!this.partsel;\n\t\t},\n\t\t/** (experimental) Return true if this is partially loaded.\n\t\t * @returns {boolean}\n\t\t * @since 2.15\n\t\t */\n\t\tisPartload: function() {\n\t\t\treturn !!this.partload;\n\t\t},\n\t\t/** Return true if this is the (invisible) system root node.\n\t\t * @returns {boolean}\n\t\t * @since 2.4\n\t\t */\n\t\tisRootNode: function() {\n\t\t\treturn this.tree.rootNode === this;\n\t\t},\n\t\t/** Return true if node is selected, i.e. has a checkmark set (see also FancytreeNode#isActive).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisSelected: function() {\n\t\t\treturn !!this.selected;\n\t\t},\n\t\t/** Return true if this node is a temporarily generated system node like\n\t\t * 'loading', 'paging', or 'error' (node.statusNodeType contains the type).\n\t\t * @returns {boolean}\n\t\t */\n\t\tisStatusNode: function() {\n\t\t\treturn !!this.statusNodeType;\n\t\t},\n\t\t/** Return true if this node is a status node of type 'paging'.\n\t\t * @returns {boolean}\n\t\t * @since 2.15\n\t\t */\n\t\tisPagingNode: function() {\n\t\t\treturn this.statusNodeType === \"paging\";\n\t\t},\n\t\t/** Return true if this a top level node, i.e. a direct child of the (invisible) system root node.\n\t\t * @returns {boolean}\n\t\t * @since 2.4\n\t\t */\n\t\tisTopLevel: function() {\n\t\t\treturn this.tree.rootNode === this.parent;\n\t\t},\n\t\t/** Return true if node is lazy and not yet loaded. For non-lazy nodes always return false.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisUndefined: function() {\n\t\t\treturn this.hasChildren() === undefined; // also checks if the only child is a status node\n\t\t},\n\t\t/** Return true if all parent nodes are expanded. Note: this does not check\n\t\t * whether the node is scrolled into the visible part of the screen.\n\t\t * @returns {boolean}\n\t\t */\n\t\tisVisible: function() {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tparents = this.getParentList(false, false);\n\n\t\t\tfor (i = 0, l = parents.length; i < l; i++) {\n\t\t\t\tif (!parents[i].expanded) {\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\t/** Deprecated.\n\t\t * @deprecated since 2014-02-16: use load() instead.\n\t\t */\n\t\tlazyLoad: function(discard) {\n\t\t\tthis.warn(\n\t\t\t\t\"FancytreeNode.lazyLoad() is deprecated since 2014-02-16. Use .load() instead.\"\n\t\t\t);\n\t\t\treturn this.load(discard);\n\t\t},\n\t\t/**\n\t\t * Load all children of a lazy node if neccessary. The <i>expanded</i> state is maintained.\n\t\t * @param {boolean} [forceReload=false] Pass true to discard any existing nodes before. Otherwise this method does nothing if the node was already loaded.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tload: function(forceReload) {\n\t\t\tvar res,\n\t\t\t\tsource,\n\t\t\t\tthat = this,\n\t\t\t\twasExpanded = this.isExpanded();\n\n\t\t\t_assert(this.isLazy(), \"load() requires a lazy node\");\n\t\t\t// _assert( forceReload || this.isUndefined(), \"Pass forceReload=true to re-load a lazy node\" );\n\t\t\tif (!forceReload && !this.isUndefined()) {\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\tif (this.isLoaded()) {\n\t\t\t\tthis.resetLazy(); // also collapses\n\t\t\t}\n\t\t\t// This method is also called by setExpanded() and loadKeyPath(), so we\n\t\t\t// have to avoid recursion.\n\t\t\tsource = this.tree._triggerNodeEvent(\"lazyLoad\", this);\n\t\t\tif (source === false) {\n\t\t\t\t// #69\n\t\t\t\treturn _getResolvedPromise(this);\n\t\t\t}\n\t\t\t_assert(\n\t\t\t\ttypeof source !== \"boolean\",\n\t\t\t\t\"lazyLoad event must return source in data.result\"\n\t\t\t);\n\t\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\t\tif (wasExpanded) {\n\t\t\t\tthis.expanded = true;\n\t\t\t\tres.always(function() {\n\t\t\t\t\tthat.render();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tres.always(function() {\n\t\t\t\t\tthat.renderStatus(); // fix expander icon to 'loaded'\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Expand all parents and optionally scroll into visible area as neccessary.\n\t\t * Promise is resolved, when lazy loading and animations are done.\n\t\t * @param {object} [opts] passed to `setExpanded()`.\n\t\t * Defaults to {noAnimation: false, noEvents: false, scrollIntoView: true}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tmakeVisible: function(opts) {\n\t\t\tvar i,\n\t\t\t\tthat = this,\n\t\t\t\tdeferreds = [],\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tparents = this.getParentList(false, false),\n\t\t\t\tlen = parents.length,\n\t\t\t\teffects = !(opts && opts.noAnimation === true),\n\t\t\t\tscroll = !(opts && opts.scrollIntoView === false);\n\n\t\t\t// Expand bottom-up, so only the top node is animated\n\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t// that.debug(\"pushexpand\" + parents[i]);\n\t\t\t\tdeferreds.push(parents[i].setExpanded(true, opts));\n\t\t\t}\n\t\t\t$.when.apply($, deferreds).done(function() {\n\t\t\t\t// All expands have finished\n\t\t\t\t// that.debug(\"expand DONE\", scroll);\n\t\t\t\tif (scroll) {\n\t\t\t\t\tthat.scrollIntoView(effects).done(function() {\n\t\t\t\t\t\t// that.debug(\"scroll DONE\");\n\t\t\t\t\t\tdfd.resolve();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdfd.resolve();\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/** Move this node to targetNode.\n\t\t * @param {FancytreeNode} targetNode\n\t\t * @param {string} mode <pre>\n\t\t * 'child': append this node as last child of targetNode.\n\t\t * This is the default. To be compatble with the D'n'd\n\t\t * hitMode, we also accept 'over'.\n\t\t * 'firstChild': add this node as first child of targetNode.\n\t\t * 'before': add this node as sibling before targetNode.\n\t\t * 'after': add this node as sibling after targetNode.</pre>\n\t\t * @param {function} [map] optional callback(FancytreeNode) to allow modifcations\n\t\t */\n\t\tmoveTo: function(targetNode, mode, map) {\n\t\t\tif (mode === undefined || mode === \"over\") {\n\t\t\t\tmode = \"child\";\n\t\t\t} else if (mode === \"firstChild\") {\n\t\t\t\tif (targetNode.children && targetNode.children.length) {\n\t\t\t\t\tmode = \"before\";\n\t\t\t\t\ttargetNode = targetNode.children[0];\n\t\t\t\t} else {\n\t\t\t\t\tmode = \"child\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar pos,\n\t\t\t\tprevParent = this.parent,\n\t\t\t\ttargetParent =\n\t\t\t\t\tmode === \"child\" ? targetNode : targetNode.parent;\n\n\t\t\tif (this === targetNode) {\n\t\t\t\treturn;\n\t\t\t} else if (!this.parent) {\n\t\t\t\t$.error(\"Cannot move system root\");\n\t\t\t} else if (targetParent.isDescendantOf(this)) {\n\t\t\t\t$.error(\"Cannot move a node to its own descendant\");\n\t\t\t}\n\t\t\tif (targetParent !== prevParent) {\n\t\t\t\tprevParent.triggerModifyChild(\"remove\", this);\n\t\t\t}\n\t\t\t// Unlink this node from current parent\n\t\t\tif (this.parent.children.length === 1) {\n\t\t\t\tif (this.parent === targetParent) {\n\t\t\t\t\treturn; // #258\n\t\t\t\t}\n\t\t\t\tthis.parent.children = this.parent.lazy ? [] : null;\n\t\t\t\tthis.parent.expanded = false;\n\t\t\t} else {\n\t\t\t\tpos = $.inArray(this, this.parent.children);\n\t\t\t\t_assert(pos >= 0, \"invalid source parent\");\n\t\t\t\tthis.parent.children.splice(pos, 1);\n\t\t\t}\n\t\t\t// Remove from source DOM parent\n\t\t\t// if(this.parent.ul){\n\t\t\t// \tthis.parent.ul.removeChild(this.li);\n\t\t\t// }\n\n\t\t\t// Insert this node to target parent's child list\n\t\t\tthis.parent = targetParent;\n\t\t\tif (targetParent.hasChildren()) {\n\t\t\t\tswitch (mode) {\n\t\t\t\t\tcase \"child\":\n\t\t\t\t\t\t// Append to existing target children\n\t\t\t\t\t\ttargetParent.children.push(this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"before\":\n\t\t\t\t\t\t// Insert this node before target node\n\t\t\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\t\t\ttargetParent.children.splice(pos, 0, this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"after\":\n\t\t\t\t\t\t// Insert this node after target node\n\t\t\t\t\t\tpos = $.inArray(targetNode, targetParent.children);\n\t\t\t\t\t\t_assert(pos >= 0, \"invalid target parent\");\n\t\t\t\t\t\ttargetParent.children.splice(pos + 1, 0, this);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttargetParent.children = [this];\n\t\t\t}\n\t\t\t// Parent has no <ul> tag yet:\n\t\t\t// if( !targetParent.ul ) {\n\t\t\t// \t// This is the parent's first child: create UL tag\n\t\t\t// \t// (Hidden, because it will be\n\t\t\t// \ttargetParent.ul = document.createElement(\"ul\");\n\t\t\t// \ttargetParent.ul.style.display = \"none\";\n\t\t\t// \ttargetParent.li.appendChild(targetParent.ul);\n\t\t\t// }\n\t\t\t// // Issue 319: Add to target DOM parent (only if node was already rendered(expanded))\n\t\t\t// if(this.li){\n\t\t\t// \ttargetParent.ul.appendChild(this.li);\n\t\t\t// }\n\n\t\t\t// Let caller modify the nodes\n\t\t\tif (map) {\n\t\t\t\ttargetNode.visit(map, true);\n\t\t\t}\n\t\t\tif (targetParent === prevParent) {\n\t\t\t\ttargetParent.triggerModifyChild(\"move\", this);\n\t\t\t} else {\n\t\t\t\t// prevParent.triggerModifyChild(\"remove\", this);\n\t\t\t\ttargetParent.triggerModifyChild(\"add\", this);\n\t\t\t}\n\t\t\t// Handle cross-tree moves\n\t\t\tif (this.tree !== targetNode.tree) {\n\t\t\t\t// Fix node.tree for all source nodes\n\t\t\t\t//\t\t\t_assert(false, \"Cross-tree move is not yet implemented.\");\n\t\t\t\tthis.warn(\"Cross-tree moveTo is experimantal!\");\n\t\t\t\tthis.visit(function(n) {\n\t\t\t\t\t// TODO: fix selection state and activation, ...\n\t\t\t\t\tn.tree = targetNode.tree;\n\t\t\t\t}, true);\n\t\t\t}\n\n\t\t\t// A collaposed node won't re-render children, so we have to remove it manually\n\t\t\t// if( !targetParent.expanded ){\n\t\t\t// prevParent.ul.removeChild(this.li);\n\t\t\t// }\n\n\t\t\t// Update HTML markup\n\t\t\tif (!prevParent.isDescendantOf(targetParent)) {\n\t\t\t\tprevParent.render();\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!targetParent.isDescendantOf(prevParent) &&\n\t\t\t\ttargetParent !== prevParent\n\t\t\t) {\n\t\t\t\ttargetParent.render();\n\t\t\t}\n\t\t\t// TODO: fix selection state\n\t\t\t// TODO: fix active state\n\n\t\t\t/*\n\t\t\tvar tree = this.tree;\n\t\t\tvar opts = tree.options;\n\t\t\tvar pers = tree.persistence;\n\n\t\t\t// Always expand, if it's below minExpandLevel\n\t\t\t// tree.logDebug (\"%s._addChildNode(%o), l=%o\", this, ftnode, ftnode.getLevel());\n\t\t\tif ( opts.minExpandLevel >= ftnode.getLevel() ) {\n\t\t\t\t// tree.logDebug (\"Force expand for %o\", ftnode);\n\t\t\t\tthis.bExpanded = true;\n\t\t\t}\n\n\t\t\t// In multi-hier mode, update the parents selection state\n\t\t\t// DT issue #82: only if not initializing, because the children may not exist yet\n\t\t\t// if( !ftnode.data.isStatusNode() && opts.selectMode==3 && !isInitializing )\n\t\t\t// \tftnode._fixSelectionState();\n\n\t\t\t// In multi-hier mode, update the parents selection state\n\t\t\tif( ftnode.bSelected && opts.selectMode==3 ) {\n\t\t\t\tvar p = this;\n\t\t\t\twhile( p ) {\n\t\t\t\t\tif( !p.hasSubSel )\n\t\t\t\t\t\tp._setSubSel(true);\n\t\t\t\t\tp = p.parent;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// render this node and the new child\n\t\t\tif ( tree.bEnableUpdate )\n\t\t\t\tthis.render();\n\t\t\treturn ftnode;\n\t\t\t*/\n\t\t},\n\t\t/** Set focus relative to this node and optionally activate.\n\t\t *\n\t\t * @param {number} where The keyCode that would normally trigger this move,\n\t\t *\t\te.g. `$.ui.keyCode.LEFT` would collapse the node if it\n\t\t * is expanded or move to the parent oterwise.\n\t\t * @param {boolean} [activate=true]\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tnavigate: function(where, activate) {\n\t\t\tvar i,\n\t\t\t\tparents,\n\t\t\t\tres,\n\t\t\t\thandled = true,\n\t\t\t\tKC = $.ui.keyCode,\n\t\t\t\tsib = null;\n\n\t\t\t// Navigate to node\n\t\t\tfunction _goto(n) {\n\t\t\t\tif (n) {\n\t\t\t\t\t// setFocus/setActive will scroll later (if autoScroll is specified)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tn.makeVisible({ scrollIntoView: false });\n\t\t\t\t\t} catch (e) {} // #272\n\t\t\t\t\t// Node may still be hidden by a filter\n\t\t\t\t\tif (!$(n.span).is(\":visible\")) {\n\t\t\t\t\t\tn.debug(\"Navigate: skipping hidden node\");\n\t\t\t\t\t\tn.navigate(where, activate);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn activate === false ? n.setFocus() : n.setActive();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (where) {\n\t\t\t\tcase KC.BACKSPACE:\n\t\t\t\t\tif (this.parent && this.parent.parent) {\n\t\t\t\t\t\tres = _goto(this.parent);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.HOME:\n\t\t\t\t\tthis.tree.visit(function(n) {\n\t\t\t\t\t\t// goto first visible node\n\t\t\t\t\t\tif ($(n.span).is(\":visible\")) {\n\t\t\t\t\t\t\tres = _goto(n);\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.END:\n\t\t\t\t\tthis.tree.visit(function(n) {\n\t\t\t\t\t\t// goto last visible node\n\t\t\t\t\t\tif ($(n.span).is(\":visible\")) {\n\t\t\t\t\t\t\tres = n;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (res) {\n\t\t\t\t\t\tres = _goto(res);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.LEFT:\n\t\t\t\t\tif (this.expanded) {\n\t\t\t\t\t\tthis.setExpanded(false);\n\t\t\t\t\t\tres = _goto(this);\n\t\t\t\t\t} else if (this.parent && this.parent.parent) {\n\t\t\t\t\t\tres = _goto(this.parent);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.RIGHT:\n\t\t\t\t\tif (!this.expanded && (this.children || this.lazy)) {\n\t\t\t\t\t\tthis.setExpanded();\n\t\t\t\t\t\tres = _goto(this);\n\t\t\t\t\t} else if (this.children && this.children.length) {\n\t\t\t\t\t\tres = _goto(this.children[0]);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.UP:\n\t\t\t\t\tsib = this.getPrevSibling();\n\t\t\t\t\t// #359: skip hidden sibling nodes, preventing a _goto() recursion\n\t\t\t\t\twhile (sib && !$(sib.span).is(\":visible\")) {\n\t\t\t\t\t\tsib = sib.getPrevSibling();\n\t\t\t\t\t}\n\t\t\t\t\twhile (\n\t\t\t\t\t\tsib &&\n\t\t\t\t\t\tsib.expanded &&\n\t\t\t\t\t\tsib.children &&\n\t\t\t\t\t\tsib.children.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tsib = sib.children[sib.children.length - 1];\n\t\t\t\t\t}\n\t\t\t\t\tif (!sib && this.parent && this.parent.parent) {\n\t\t\t\t\t\tsib = this.parent;\n\t\t\t\t\t}\n\t\t\t\t\tres = _goto(sib);\n\t\t\t\t\tbreak;\n\t\t\t\tcase KC.DOWN:\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.expanded &&\n\t\t\t\t\t\tthis.children &&\n\t\t\t\t\t\tthis.children.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tsib = this.children[0];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparents = this.getParentList(false, true);\n\t\t\t\t\t\tfor (i = parents.length - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tsib = parents[i].getNextSibling();\n\t\t\t\t\t\t\t// #359: skip hidden sibling nodes, preventing a _goto() recursion\n\t\t\t\t\t\t\twhile (sib && !$(sib.span).is(\":visible\")) {\n\t\t\t\t\t\t\t\tsib = sib.getNextSibling();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (sib) {\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\tres = _goto(sib);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\thandled = false;\n\t\t\t}\n\t\t\treturn res || _getResolvedPromise();\n\t\t},\n\t\t/**\n\t\t * Remove this node (not allowed for system root).\n\t\t */\n\t\tremove: function() {\n\t\t\treturn this.parent.removeChild(this);\n\t\t},\n\t\t/**\n\t\t * Remove childNode from list of direct children.\n\t\t * @param {FancytreeNode} childNode\n\t\t */\n\t\tremoveChild: function(childNode) {\n\t\t\treturn this.tree._callHook(\"nodeRemoveChild\", this, childNode);\n\t\t},\n\t\t/**\n\t\t * Remove all child nodes and descendents. This converts the node into a leaf.<br>\n\t\t * If this was a lazy node, it is still considered 'loaded'; call node.resetLazy()\n\t\t * in order to trigger lazyLoad on next expand.\n\t\t */\n\t\tremoveChildren: function() {\n\t\t\treturn this.tree._callHook(\"nodeRemoveChildren\", this);\n\t\t},\n\t\t/**\n\t\t * Remove class from node's span tag and .extraClasses.\n\t\t *\n\t\t * @param {string} className class name\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\tremoveClass: function(className) {\n\t\t\treturn this.toggleClass(className, false);\n\t\t},\n\t\t/**\n\t\t * This method renders and updates all HTML markup that is required\n\t\t * to display this node in its current state.<br>\n\t\t * Note:\n\t\t * <ul>\n\t\t * <li>It should only be neccessary to call this method after the node object\n\t\t * was modified by direct access to its properties, because the common\n\t\t * API methods (node.setTitle(), moveTo(), addChildren(), remove(), ...)\n\t\t * already handle this.\n\t\t * <li> {@link FancytreeNode#renderTitle} and {@link FancytreeNode#renderStatus}\n\t\t * are implied. If changes are more local, calling only renderTitle() or\n\t\t * renderStatus() may be sufficient and faster.\n\t\t * </ul>\n\t\t *\n\t\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t\t */\n\t\trender: function(force, deep) {\n\t\t\treturn this.tree._callHook(\"nodeRender\", this, force, deep);\n\t\t},\n\t\t/** Create HTML markup for the node's outer <span> (expander, checkbox, icon, and title).\n\t\t * Implies {@link FancytreeNode#renderStatus}.\n\t\t * @see Fancytree_Hooks#nodeRenderTitle\n\t\t */\n\t\trenderTitle: function() {\n\t\t\treturn this.tree._callHook(\"nodeRenderTitle\", this);\n\t\t},\n\t\t/** Update element's CSS classes according to node state.\n\t\t * @see Fancytree_Hooks#nodeRenderStatus\n\t\t */\n\t\trenderStatus: function() {\n\t\t\treturn this.tree._callHook(\"nodeRenderStatus\", this);\n\t\t},\n\t\t/**\n\t\t * (experimental) Replace this node with `source`.\n\t\t * (Currently only available for paging nodes.)\n\t\t * @param {NodeData[]} source List of child node definitions\n\t\t * @since 2.15\n\t\t */\n\t\treplaceWith: function(source) {\n\t\t\tvar res,\n\t\t\t\tparent = this.parent,\n\t\t\t\tpos = $.inArray(this, parent.children),\n\t\t\t\tthat = this;\n\n\t\t\t_assert(\n\t\t\t\tthis.isPagingNode(),\n\t\t\t\t\"replaceWith() currently requires a paging status node\"\n\t\t\t);\n\n\t\t\tres = this.tree._callHook(\"nodeLoadChildren\", this, source);\n\t\t\tres.done(function(data) {\n\t\t\t\t// New nodes are currently children of `this`.\n\t\t\t\tvar children = that.children;\n\t\t\t\t// Prepend newly loaded child nodes to `this`\n\t\t\t\t// Move new children after self\n\t\t\t\tfor (i = 0; i < children.length; i++) {\n\t\t\t\t\tchildren[i].parent = parent;\n\t\t\t\t}\n\t\t\t\tparent.children.splice.apply(\n\t\t\t\t\tparent.children,\n\t\t\t\t\t[pos + 1, 0].concat(children)\n\t\t\t\t);\n\n\t\t\t\t// Remove self\n\t\t\t\tthat.children = null;\n\t\t\t\tthat.remove();\n\t\t\t\t// Redraw new nodes\n\t\t\t\tparent.render();\n\t\t\t\t// TODO: set node.partload = false if this was tha last paging node?\n\t\t\t\t// parent.addPagingNode(false);\n\t\t\t}).fail(function() {\n\t\t\t\tthat.setExpanded();\n\t\t\t});\n\t\t\treturn res;\n\t\t\t// $.error(\"Not implemented: replaceWith()\");\n\t\t},\n\t\t/**\n\t\t * Remove all children, collapse, and set the lazy-flag, so that the lazyLoad\n\t\t * event is triggered on next expand.\n\t\t */\n\t\tresetLazy: function() {\n\t\t\tthis.removeChildren();\n\t\t\tthis.expanded = false;\n\t\t\tthis.lazy = true;\n\t\t\tthis.children = undefined;\n\t\t\tthis.renderStatus();\n\t\t},\n\t\t/** Schedule activity for delayed execution (cancel any pending request).\n\t\t * scheduleAction('cancel') will only cancel a pending request (if any).\n\t\t * @param {string} mode\n\t\t * @param {number} ms\n\t\t */\n\t\tscheduleAction: function(mode, ms) {\n\t\t\tif (this.tree.timer) {\n\t\t\t\tclearTimeout(this.tree.timer);\n\t\t\t\tthis.tree.debug(\"clearTimeout(%o)\", this.tree.timer);\n\t\t\t}\n\t\t\tthis.tree.timer = null;\n\t\t\tvar self = this; // required for closures\n\t\t\tswitch (mode) {\n\t\t\t\tcase \"cancel\":\n\t\t\t\t\t// Simply made sure that timer was cleared\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"expand\":\n\t\t\t\t\tthis.tree.timer = setTimeout(function() {\n\t\t\t\t\t\tself.tree.debug(\"setTimeout: trigger expand\");\n\t\t\t\t\t\tself.setExpanded(true);\n\t\t\t\t\t}, ms);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"activate\":\n\t\t\t\t\tthis.tree.timer = setTimeout(function() {\n\t\t\t\t\t\tself.tree.debug(\"setTimeout: trigger activate\");\n\t\t\t\t\t\tself.setActive(true);\n\t\t\t\t\t}, ms);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t$.error(\"Invalid mode \" + mode);\n\t\t\t}\n\t\t\t// this.tree.debug(\"setTimeout(%s, %s): %s\", mode, ms, this.tree.timer);\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @param {boolean | PlainObject} [effects=false] animation options.\n\t\t * @param {object} [options=null] {topNode: null, effects: ..., parent: ...} this node will remain visible in\n\t\t * any case, even if `this` is outside the scroll pane.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tscrollIntoView: function(effects, options) {\n\t\t\tif (options !== undefined && _isNode(options)) {\n\t\t\t\tthrow \"scrollIntoView() with 'topNode' option is deprecated since 2014-05-08. Use 'options.topNode' instead.\";\n\t\t\t}\n\t\t\t// The scroll parent is typically the plain tree's <UL> container.\n\t\t\t// For ext-table, we choose the nearest parent that has `position: relative`\n\t\t\t// and `overflow` set.\n\t\t\t// (This default can be overridden by the local or global `scrollParent` option.)\n\t\t\tvar opts = $.extend(\n\t\t\t\t\t{\n\t\t\t\t\t\teffects:\n\t\t\t\t\t\t\teffects === true\n\t\t\t\t\t\t\t\t? { duration: 200, queue: false }\n\t\t\t\t\t\t\t\t: effects,\n\t\t\t\t\t\tscrollOfs: this.tree.options.scrollOfs,\n\t\t\t\t\t\tscrollParent: this.tree.options.scrollParent,\n\t\t\t\t\t\ttopNode: null,\n\t\t\t\t\t},\n\t\t\t\t\toptions\n\t\t\t\t),\n\t\t\t\t$scrollParent = opts.scrollParent,\n\t\t\t\t$container = this.tree.$container,\n\t\t\t\toverflowY = $container.css(\"overflow-y\");\n\n\t\t\tif (!$scrollParent) {\n\t\t\t\tif (this.tree.tbody) {\n\t\t\t\t\t$scrollParent = $container.scrollParent();\n\t\t\t\t} else if (overflowY === \"scroll\" || overflowY === \"auto\") {\n\t\t\t\t\t$scrollParent = $container;\n\t\t\t\t} else {\n\t\t\t\t\t// #922 plain tree in a non-fixed-sized UL scrolls inside its parent\n\t\t\t\t\t$scrollParent = $container.scrollParent();\n\t\t\t\t}\n\t\t\t} else if (!$scrollParent.jquery) {\n\t\t\t\t// Make sure we have a jQuery object\n\t\t\t\t$scrollParent = $($scrollParent);\n\t\t\t}\n\t\t\tif (\n\t\t\t\t$scrollParent[0] === document ||\n\t\t\t\t$scrollParent[0] === document.body\n\t\t\t) {\n\t\t\t\t// `document` may returned by $().scrollParent(), if nothing is found,\n\t\t\t\t// but would not work: (see #894)\n\t\t\t\tthis.debug(\n\t\t\t\t\t\"scrollIntoView(): normalizing scrollParent to 'window':\",\n\t\t\t\t\t$scrollParent[0]\n\t\t\t\t);\n\t\t\t\t$scrollParent = $(window);\n\t\t\t}\n\n\t\t\tvar topNodeY,\n\t\t\t\tnodeY,\n\t\t\t\thorzScrollbarHeight,\n\t\t\t\tcontainerOffsetTop,\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tthat = this,\n\t\t\t\tnodeHeight = $(this.span).height(),\n\t\t\t\ttopOfs = opts.scrollOfs.top || 0,\n\t\t\t\tbottomOfs = opts.scrollOfs.bottom || 0,\n\t\t\t\tcontainerHeight = $scrollParent.height(),\n\t\t\t\tscrollTop = $scrollParent.scrollTop(),\n\t\t\t\t$animateTarget = $scrollParent,\n\t\t\t\tisParentWindow = $scrollParent[0] === window,\n\t\t\t\ttopNode = opts.topNode || null,\n\t\t\t\tnewScrollTop = null;\n\n\t\t\t// this.debug(\"scrollIntoView(), scrollTop=\" + scrollTop, opts.scrollOfs);\n\t\t\t//\t\t_assert($(this.span).is(\":visible\"), \"scrollIntoView node is invisible\"); // otherwise we cannot calc offsets\n\t\t\tif (!$(this.span).is(\":visible\")) {\n\t\t\t\t// We cannot calc offsets for hidden elements\n\t\t\t\tthis.warn(\"scrollIntoView(): node is invisible.\");\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tif (isParentWindow) {\n\t\t\t\tnodeY = $(this.span).offset().top;\n\t\t\t\ttopNodeY =\n\t\t\t\t\ttopNode && topNode.span ? $(topNode.span).offset().top : 0;\n\t\t\t\t$animateTarget = $(\"html,body\");\n\t\t\t} else {\n\t\t\t\t_assert(\n\t\t\t\t\t$scrollParent[0] !== document &&\n\t\t\t\t\t\t$scrollParent[0] !== document.body,\n\t\t\t\t\t\"scrollParent should be a simple element or `window`, not document or body.\"\n\t\t\t\t);\n\n\t\t\t\t(containerOffsetTop = $scrollParent.offset().top),\n\t\t\t\t\t(nodeY =\n\t\t\t\t\t\t$(this.span).offset().top -\n\t\t\t\t\t\tcontainerOffsetTop +\n\t\t\t\t\t\tscrollTop); // relative to scroll parent\n\t\t\t\ttopNodeY = topNode\n\t\t\t\t\t? $(topNode.span).offset().top -\n\t\t\t\t\t containerOffsetTop +\n\t\t\t\t\t scrollTop\n\t\t\t\t\t: 0;\n\t\t\t\thorzScrollbarHeight = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\t$scrollParent.innerHeight() - $scrollParent[0].clientHeight\n\t\t\t\t);\n\t\t\t\tcontainerHeight -= horzScrollbarHeight;\n\t\t\t}\n\n\t\t\t// this.debug(\" scrollIntoView(), nodeY=\" + nodeY + \", containerHeight=\" + containerHeight);\n\t\t\tif (nodeY < scrollTop + topOfs) {\n\t\t\t\t// Node is above visible container area\n\t\t\t\tnewScrollTop = nodeY - topOfs;\n\t\t\t\t// this.debug(\" scrollIntoView(), UPPER newScrollTop=\" + newScrollTop);\n\t\t\t} else if (\n\t\t\t\tnodeY + nodeHeight >\n\t\t\t\tscrollTop + containerHeight - bottomOfs\n\t\t\t) {\n\t\t\t\tnewScrollTop = nodeY + nodeHeight - containerHeight + bottomOfs;\n\t\t\t\t// this.debug(\" scrollIntoView(), LOWER newScrollTop=\" + newScrollTop);\n\t\t\t\t// If a topNode was passed, make sure that it is never scrolled\n\t\t\t\t// outside the upper border\n\t\t\t\tif (topNode) {\n\t\t\t\t\t_assert(\n\t\t\t\t\t\ttopNode.isRootNode() || $(topNode.span).is(\":visible\"),\n\t\t\t\t\t\t\"topNode must be visible\"\n\t\t\t\t\t);\n\t\t\t\t\tif (topNodeY < newScrollTop) {\n\t\t\t\t\t\tnewScrollTop = topNodeY - topOfs;\n\t\t\t\t\t\t// this.debug(\" scrollIntoView(), TOP newScrollTop=\" + newScrollTop);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newScrollTop !== null) {\n\t\t\t\t// this.debug(\" scrollIntoView(), SET newScrollTop=\" + newScrollTop);\n\t\t\t\tif (opts.effects) {\n\t\t\t\t\topts.effects.complete = function() {\n\t\t\t\t\t\tdfd.resolveWith(that);\n\t\t\t\t\t};\n\t\t\t\t\t$animateTarget.stop(true).animate(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tscrollTop: newScrollTop,\n\t\t\t\t\t\t},\n\t\t\t\t\t\topts.effects\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$animateTarget[0].scrollTop = newScrollTop;\n\t\t\t\t\tdfd.resolveWith(this);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdfd.resolveWith(this);\n\t\t\t}\n\t\t\treturn dfd.promise();\n\t\t},\n\n\t\t/**Activate this node.\n\t\t *\n\t\t * The `cell` option requires the ext-table and ext-ariagrid extensions.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to deactivate\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false, cell: null}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tsetActive: function(flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetActive\", this, flag, opts);\n\t\t},\n\t\t/**Expand or collapse this node. Promise is resolved, when lazy loading and animations are done.\n\t\t * @param {boolean} [flag=true] pass false to collapse\n\t\t * @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tsetExpanded: function(flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetExpanded\", this, flag, opts);\n\t\t},\n\t\t/**Set keyboard focus to this node.\n\t\t * @param {boolean} [flag=true] pass false to blur\n\t\t * @see Fancytree#setFocus\n\t\t */\n\t\tsetFocus: function(flag) {\n\t\t\treturn this.tree._callHook(\"nodeSetFocus\", this, flag);\n\t\t},\n\t\t/**Select this node, i.e. check the checkbox.\n\t\t * @param {boolean} [flag=true] pass false to deselect\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, p\n\t\t * propagateDown: null, propagateUp: null, callback: null }\n\t\t */\n\t\tsetSelected: function(flag, opts) {\n\t\t\treturn this.tree._callHook(\"nodeSetSelected\", this, flag, opts);\n\t\t},\n\t\t/**Mark a lazy node as 'error', 'loading', 'nodata', or 'ok'.\n\t\t * @param {string} status 'error'|'empty'|'ok'\n\t\t * @param {string} [message]\n\t\t * @param {string} [details]\n\t\t */\n\t\tsetStatus: function(status, message, details) {\n\t\t\treturn this.tree._callHook(\n\t\t\t\t\"nodeSetStatus\",\n\t\t\t\tthis,\n\t\t\t\tstatus,\n\t\t\t\tmessage,\n\t\t\t\tdetails\n\t\t\t);\n\t\t},\n\t\t/**Rename this node.\n\t\t * @param {string} title\n\t\t */\n\t\tsetTitle: function(title) {\n\t\t\tthis.title = title;\n\t\t\tthis.renderTitle();\n\t\t\tthis.triggerModify(\"rename\");\n\t\t},\n\t\t/**Sort child list by title.\n\t\t * @param {function} [cmp] custom compare function(a, b) that returns -1, 0, or 1 (defaults to sort by title).\n\t\t * @param {boolean} [deep=false] pass true to sort all descendant nodes\n\t\t */\n\t\tsortChildren: function(cmp, deep) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tcl = this.children;\n\n\t\t\tif (!cl) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcmp =\n\t\t\t\tcmp ||\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tvar x = a.title.toLowerCase(),\n\t\t\t\t\t\ty = b.title.toLowerCase();\n\t\t\t\t\treturn x === y ? 0 : x > y ? 1 : -1;\n\t\t\t\t};\n\t\t\tcl.sort(cmp);\n\t\t\tif (deep) {\n\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\tif (cl[i].children) {\n\t\t\t\t\t\tcl[i].sortChildren(cmp, \"$norender$\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (deep !== \"$norender$\") {\n\t\t\t\tthis.render();\n\t\t\t}\n\t\t\tthis.triggerModifyChild(\"sort\");\n\t\t},\n\t\t/** Convert node (or whole branch) into a plain object.\n\t\t *\n\t\t * The result is compatible with node.addChildren().\n\t\t *\n\t\t * @param {boolean} [recursive=false] include child nodes\n\t\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications\n\t\t * @returns {NodeData}\n\t\t */\n\t\ttoDict: function(recursive, callback) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tnode,\n\t\t\t\tdict = {},\n\t\t\t\tself = this;\n\n\t\t\t$.each(NODE_ATTRS, function(i, a) {\n\t\t\t\tif (self[a] || self[a] === false) {\n\t\t\t\t\tdict[a] = self[a];\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!$.isEmptyObject(this.data)) {\n\t\t\t\tdict.data = $.extend({}, this.data);\n\t\t\t\tif ($.isEmptyObject(dict.data)) {\n\t\t\t\t\tdelete dict.data;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (callback) {\n\t\t\t\tcallback(dict, self);\n\t\t\t}\n\t\t\tif (recursive) {\n\t\t\t\tif (this.hasChildren()) {\n\t\t\t\t\tdict.children = [];\n\t\t\t\t\tfor (i = 0, l = this.children.length; i < l; i++) {\n\t\t\t\t\t\tnode = this.children[i];\n\t\t\t\t\t\tif (!node.isStatusNode()) {\n\t\t\t\t\t\t\tdict.children.push(node.toDict(true, callback));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// dict.children = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dict;\n\t\t},\n\t\t/**\n\t\t * Set, clear, or toggle class of node's span tag and .extraClasses.\n\t\t *\n\t\t * @param {string} className class name (separate multiple classes by space)\n\t\t * @param {boolean} [flag] true/false to add/remove class. If omitted, class is toggled.\n\t\t * @returns {boolean} true if a class was added\n\t\t *\n\t\t * @since 2.17\n\t\t */\n\t\ttoggleClass: function(value, flag) {\n\t\t\tvar className,\n\t\t\t\thasClass,\n\t\t\t\trnotwhite = /\\S+/g,\n\t\t\t\tclassNames = value.match(rnotwhite) || [],\n\t\t\t\ti = 0,\n\t\t\t\twasAdded = false,\n\t\t\t\tstatusElem = this[this.tree.statusClassPropName],\n\t\t\t\tcurClasses = \" \" + (this.extraClasses || \"\") + \" \";\n\n\t\t\t// this.info(\"toggleClass('\" + value + \"', \" + flag + \")\", curClasses);\n\t\t\t// Modify DOM element directly if it already exists\n\t\t\tif (statusElem) {\n\t\t\t\t$(statusElem).toggleClass(value, flag);\n\t\t\t}\n\t\t\t// Modify node.extraClasses to make this change persistent\n\t\t\t// Toggle if flag was not passed\n\t\t\twhile ((className = classNames[i++])) {\n\t\t\t\thasClass = curClasses.indexOf(\" \" + className + \" \") >= 0;\n\t\t\t\tflag = flag === undefined ? !hasClass : !!flag;\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (!hasClass) {\n\t\t\t\t\t\tcurClasses += className + \" \";\n\t\t\t\t\t\twasAdded = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\twhile (curClasses.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\tcurClasses = curClasses.replace(\n\t\t\t\t\t\t\t\" \" + className + \" \",\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\tthis.extraClasses = $.trim(curClasses);\n\t\t\t// this.info(\"-> toggleClass('\" + value + \"', \" + flag + \"): '\" + this.extraClasses + \"'\");\n\t\t\treturn wasAdded;\n\t\t},\n\t\t/** Flip expanded status. */\n\t\ttoggleExpanded: function() {\n\t\t\treturn this.tree._callHook(\"nodeToggleExpanded\", this);\n\t\t},\n\t\t/** Flip selection status. */\n\t\ttoggleSelected: function() {\n\t\t\treturn this.tree._callHook(\"nodeToggleSelected\", this);\n\t\t},\n\t\ttoString: function() {\n\t\t\treturn \"FancytreeNode@\" + this.key + \"[title='\" + this.title + \"']\";\n\t\t\t// return \"<FancytreeNode(#\" + this.key + \", '\" + this.title + \"')>\";\n\t\t},\n\t\t/**\n\t\t * Trigger `modifyChild` event on a parent to signal that a child was modified.\n\t\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t\t * @param {FancytreeNode} [childNode]\n\t\t * @param {object} [extra]\n\t\t */\n\t\ttriggerModifyChild: function(operation, childNode, extra) {\n\t\t\tvar data,\n\t\t\t\tmodifyChild = this.tree.options.modifyChild;\n\n\t\t\tif (modifyChild) {\n\t\t\t\tif (childNode && childNode.parent !== this) {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"childNode \" + childNode + \" is not a child of \" + this\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdata = {\n\t\t\t\t\tnode: this,\n\t\t\t\t\ttree: this.tree,\n\t\t\t\t\toperation: operation,\n\t\t\t\t\tchildNode: childNode || null,\n\t\t\t\t};\n\t\t\t\tif (extra) {\n\t\t\t\t\t$.extend(data, extra);\n\t\t\t\t}\n\t\t\t\tmodifyChild({ type: \"modifyChild\" }, data);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Trigger `modifyChild` event on node.parent(!).\n\t\t * @param {string} operation Type of change: 'add', 'remove', 'rename', 'move', 'data', ...\n\t\t * @param {object} [extra]\n\t\t */\n\t\ttriggerModify: function(operation, extra) {\n\t\t\tthis.parent.triggerModifyChild(operation, this, extra);\n\t\t},\n\t\t/** Call fn(node) for all child nodes in hierarchical order (depth-first).<br>\n\t\t * Stop iteration, if fn() returns false. Skip current branch, if fn() returns \"skip\".<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t * Return false to stop iteration, return \"skip\" to skip this node and\n\t\t * its children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisit: function(fn, includeSelf) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tres = true,\n\t\t\t\tchildren = this.children;\n\n\t\t\tif (includeSelf === true) {\n\t\t\t\tres = fn(this);\n\t\t\t\tif (res === false || res === \"skip\") {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (children) {\n\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tres = children[i].visit(fn, true);\n\t\t\t\t\tif (res === false) {\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\treturn res;\n\t\t},\n\t\t/** Call fn(node) for all child nodes and recursively load lazy children.<br>\n\t\t * <b>Note:</b> If you need this method, you probably should consider to review\n\t\t * your architecture! Recursivley loading nodes is a perfect way for lazy\n\t\t * programmers to flood the server with requests ;-)\n\t\t *\n\t\t * @param {function} [fn] optional callback function.\n\t\t * Return false to stop iteration, return \"skip\" to skip this node and\n\t\t * its children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {$.Promise}\n\t\t * @since 2.4\n\t\t */\n\t\tvisitAndLoad: function(fn, includeSelf, _recursion) {\n\t\t\tvar dfd,\n\t\t\t\tres,\n\t\t\t\tloaders,\n\t\t\t\tnode = this;\n\n\t\t\t// node.debug(\"visitAndLoad\");\n\t\t\tif (fn && includeSelf === true) {\n\t\t\t\tres = fn(node);\n\t\t\t\tif (res === false || res === \"skip\") {\n\t\t\t\t\treturn _recursion ? res : _getResolvedPromise();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!node.children && !node.lazy) {\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tdfd = new $.Deferred();\n\t\t\tloaders = [];\n\t\t\t// node.debug(\"load()...\");\n\t\t\tnode.load().done(function() {\n\t\t\t\t// node.debug(\"load()... done.\");\n\t\t\t\tfor (var i = 0, l = node.children.length; i < l; i++) {\n\t\t\t\t\tres = node.children[i].visitAndLoad(fn, true, true);\n\t\t\t\t\tif (res === false) {\n\t\t\t\t\t\tdfd.reject();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (res !== \"skip\") {\n\t\t\t\t\t\tloaders.push(res); // Add promise to the list\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.when.apply(this, loaders).then(function() {\n\t\t\t\t\tdfd.resolve();\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/** Call fn(node) for all parent nodes, bottom-up, including invisible system root.<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisitParents: function(fn, includeSelf) {\n\t\t\t// Visit parent nodes (bottom up)\n\t\t\tif (includeSelf && fn(this) === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar p = this.parent;\n\t\t\twhile (p) {\n\t\t\t\tif (fn(p) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Call fn(node) for all sibling nodes.<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t * Return false to stop iteration.\n\t\t * @param {boolean} [includeSelf=false]\n\t\t * @returns {boolean}\n\t\t */\n\t\tvisitSiblings: function(fn, includeSelf) {\n\t\t\tvar i,\n\t\t\t\tl,\n\t\t\t\tn,\n\t\t\t\tac = this.parent.children;\n\n\t\t\tfor (i = 0, l = ac.length; i < l; i++) {\n\t\t\t\tn = ac[i];\n\t\t\t\tif (includeSelf || n !== this) {\n\t\t\t\t\tif (fn(n) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Write warning to browser console if debugLevel >= 2 (prepending node info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\twarn: function(msg) {\n\t\t\tif (this.tree.options.debugLevel >= 2) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t}\n\t\t},\n\t};\n\n\t/******************************************************************************\n\t * Fancytree\n\t */\n\t/**\n\t * Construct a new tree object.\n\t *\n\t * @class Fancytree\n\t * @classdesc The controller behind a fancytree.\n\t * This class also contains 'hook methods': see {@link Fancytree_Hooks}.\n\t *\n\t * @param {Widget} widget\n\t *\n\t * @property {string} _id Automatically generated unique tree instance ID, e.g. \"1\".\n\t * @property {string} _ns Automatically generated unique tree namespace, e.g. \".fancytree-1\".\n\t * @property {FancytreeNode} activeNode Currently active node or null.\n\t * @property {string} ariaPropName Property name of FancytreeNode that contains the element which will receive the aria attributes.\n\t * Typically \"li\", but \"tr\" for table extension.\n\t * @property {jQueryObject} $container Outer <ul> element (or <table> element for ext-table).\n\t * @property {jQueryObject} $div A jQuery object containing the element used to instantiate the tree widget (`widget.element`)\n\t * @property {object|array} columns Recommended place to store shared column meta data. @since 2.27\n\t * @property {object} data Metadata, i.e. properties that may be passed to `source` in addition to a children array.\n\t * @property {object} ext Hash of all active plugin instances.\n\t * @property {FancytreeNode} focusNode Currently focused node or null.\n\t * @property {FancytreeNode} lastSelectedNode Used to implement selectMode 1 (single select)\n\t * @property {string} nodeContainerAttrName Property name of FancytreeNode that contains the outer element of single nodes.\n\t * Typically \"li\", but \"tr\" for table extension.\n\t * @property {FancytreeOptions} options Current options, i.e. default options + options passed to constructor.\n\t * @property {FancytreeNode} rootNode Invisible system root node.\n\t * @property {string} statusClassPropName Property name of FancytreeNode that contains the element which will receive the status classes.\n\t * Typically \"span\", but \"tr\" for table extension.\n\t * @property {object} types Map for shared type specific meta data, used with node.type attribute. @since 2.27\n\t * @property {object} widget Base widget instance.\n\t */\n\tfunction Fancytree(widget) {\n\t\tthis.widget = widget;\n\t\tthis.$div = widget.element;\n\t\tthis.options = widget.options;\n\t\tif (this.options) {\n\t\t\tif (\n\t\t\t\t$.isFunction(this.options.lazyload) &&\n\t\t\t\t!$.isFunction(this.options.lazyLoad)\n\t\t\t) {\n\t\t\t\tthis.options.lazyLoad = function() {\n\t\t\t\t\tFT.warn(\n\t\t\t\t\t\t\"The 'lazyload' event is deprecated since 2014-02-25. Use 'lazyLoad' (with uppercase L) instead.\"\n\t\t\t\t\t);\n\t\t\t\t\treturn widget.options.lazyload.apply(this, arguments);\n\t\t\t\t};\n\t\t\t}\n\t\t\tif ($.isFunction(this.options.loaderror)) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'loaderror' event was renamed since 2014-07-03. Use 'loadError' (with uppercase E) instead.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.options.fx !== undefined) {\n\t\t\t\tFT.warn(\n\t\t\t\t\t\"The 'fx' option was replaced by 'toggleEffect' since 2014-11-30.\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this.options.removeNode !== undefined) {\n\t\t\t\t$.error(\n\t\t\t\t\t\"The 'removeNode' event was replaced by 'modifyChild' since 2.20 (2016-09-10).\"\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.ext = {}; // Active extension instances\n\t\tthis.types = {};\n\t\tthis.columns = {};\n\t\t// allow to init tree.data.foo from <div data-foo=''>\n\t\tthis.data = _getElementDataAsDict(this.$div);\n\t\t// TODO: use widget.uuid instead?\n\t\tthis._id = $.ui.fancytree._nextId++;\n\t\t// TODO: use widget.eventNamespace instead?\n\t\tthis._ns = \".fancytree-\" + this._id; // append for namespaced events\n\t\tthis.activeNode = null;\n\t\tthis.focusNode = null;\n\t\tthis._hasFocus = null;\n\t\tthis._tempCache = {};\n\t\tthis._lastMousedownNode = null;\n\t\tthis._enableUpdate = true;\n\t\tthis.lastSelectedNode = null;\n\t\tthis.systemFocusElement = null;\n\t\tthis.lastQuicksearchTerm = \"\";\n\t\tthis.lastQuicksearchTime = 0;\n\n\t\tthis.statusClassPropName = \"span\";\n\t\tthis.ariaPropName = \"li\";\n\t\tthis.nodeContainerAttrName = \"li\";\n\n\t\t// Remove previous markup if any\n\t\tthis.$div.find(\">ul.fancytree-container\").remove();\n\n\t\t// Create a node without parent.\n\t\tvar fakeParent = { tree: this },\n\t\t\t$ul;\n\t\tthis.rootNode = new FancytreeNode(fakeParent, {\n\t\t\ttitle: \"root\",\n\t\t\tkey: \"root_\" + this._id,\n\t\t\tchildren: null,\n\t\t\texpanded: true,\n\t\t});\n\t\tthis.rootNode.parent = null;\n\n\t\t// Create root markup\n\t\t$ul = $(\"<ul>\", {\n\t\t\tclass: \"ui-fancytree fancytree-container fancytree-plain\",\n\t\t}).appendTo(this.$div);\n\t\tthis.$container = $ul;\n\t\tthis.rootNode.ul = $ul[0];\n\n\t\tif (this.options.debugLevel == null) {\n\t\t\tthis.options.debugLevel = FT.debugLevel;\n\t\t}\n\t\t// // Add container to the TAB chain\n\t\t// // See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t\t// // #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t\t// this.$container.attr(\"tabindex\", this.options.tabindex);\n\n\t\t// if( this.options.rtl ) {\n\t\t// \tthis.$container.attr(\"DIR\", \"RTL\").addClass(\"fancytree-rtl\");\n\t\t// // }else{\n\t\t// //\tthis.$container.attr(\"DIR\", null).removeClass(\"fancytree-rtl\");\n\t\t// }\n\t\t// if(this.options.aria){\n\t\t// \tthis.$container.attr(\"role\", \"tree\");\n\t\t// \tif( this.options.selectMode !== 1 ) {\n\t\t// \t\tthis.$container.attr(\"aria-multiselectable\", true);\n\t\t// \t}\n\t\t// }\n\t}\n\n\tFancytree.prototype = /** @lends Fancytree# */ {\n\t\t/* Return a context object that can be re-used for _callHook().\n\t\t * @param {Fancytree | FancytreeNode | EventData} obj\n\t\t * @param {Event} originalEvent\n\t\t * @param {Object} extra\n\t\t * @returns {EventData}\n\t\t */\n\t\t_makeHookContext: function(obj, originalEvent, extra) {\n\t\t\tvar ctx, tree;\n\t\t\tif (obj.node !== undefined) {\n\t\t\t\t// obj is already a context object\n\t\t\t\tif (originalEvent && obj.originalEvent !== originalEvent) {\n\t\t\t\t\t$.error(\"invalid args\");\n\t\t\t\t}\n\t\t\t\tctx = obj;\n\t\t\t} else if (obj.tree) {\n\t\t\t\t// obj is a FancytreeNode\n\t\t\t\ttree = obj.tree;\n\t\t\t\tctx = {\n\t\t\t\t\tnode: obj,\n\t\t\t\t\ttree: tree,\n\t\t\t\t\twidget: tree.widget,\n\t\t\t\t\toptions: tree.widget.options,\n\t\t\t\t\toriginalEvent: originalEvent,\n\t\t\t\t\ttypeInfo: tree.types[obj.type] || {},\n\t\t\t\t};\n\t\t\t} else if (obj.widget) {\n\t\t\t\t// obj is a Fancytree\n\t\t\t\tctx = {\n\t\t\t\t\tnode: null,\n\t\t\t\t\ttree: obj,\n\t\t\t\t\twidget: obj.widget,\n\t\t\t\t\toptions: obj.widget.options,\n\t\t\t\t\toriginalEvent: originalEvent,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t$.error(\"invalid args\");\n\t\t\t}\n\t\t\tif (extra) {\n\t\t\t\t$.extend(ctx, extra);\n\t\t\t}\n\t\t\treturn ctx;\n\t\t},\n\t\t/* Trigger a hook function: funcName(ctx, [...]).\n\t\t *\n\t\t * @param {string} funcName\n\t\t * @param {Fancytree|FancytreeNode|EventData} contextObject\n\t\t * @param {any} [_extraArgs] optional additional arguments\n\t\t * @returns {any}\n\t\t */\n\t\t_callHook: function(funcName, contextObject, _extraArgs) {\n\t\t\tvar ctx = this._makeHookContext(contextObject),\n\t\t\t\tfn = this[funcName],\n\t\t\t\targs = Array.prototype.slice.call(arguments, 2);\n\t\t\tif (!$.isFunction(fn)) {\n\t\t\t\t$.error(\"_callHook('\" + funcName + \"') is not a function\");\n\t\t\t}\n\t\t\targs.unshift(ctx);\n\t\t\t// this.debug(\"_hook\", funcName, ctx.node && ctx.node.toString() || ctx.tree.toString(), args);\n\t\t\treturn fn.apply(this, args);\n\t\t},\n\t\t_setExpiringValue: function(key, value, ms) {\n\t\t\tthis._tempCache[key] = {\n\t\t\t\tvalue: value,\n\t\t\t\texpire: Date.now() + (+ms || 50),\n\t\t\t};\n\t\t},\n\t\t_getExpiringValue: function(key) {\n\t\t\tvar entry = this._tempCache[key];\n\t\t\tif (entry && entry.expire > Date.now()) {\n\t\t\t\treturn entry.value;\n\t\t\t}\n\t\t\tdelete this._tempCache[key];\n\t\t\treturn null;\n\t\t},\n\t\t/* Check if current extensions dependencies are met and throw an error if not.\n\t\t *\n\t\t * This method may be called inside the `treeInit` hook for custom extensions.\n\t\t *\n\t\t * @param {string} extension name of the required extension\n\t\t * @param {boolean} [required=true] pass `false` if the extension is optional, but we want to check for order if it is present\n\t\t * @param {boolean} [before] `true` if `name` must be included before this, `false` otherwise (use `null` if order doesn't matter)\n\t\t * @param {string} [message] optional error message (defaults to a descriptve error message)\n\t\t */\n\t\t_requireExtension: function(name, required, before, message) {\n\t\t\tif (before != null) {\n\t\t\t\tbefore = !!before;\n\t\t\t}\n\t\t\tvar thisName = this._local.name,\n\t\t\t\textList = this.options.extensions,\n\t\t\t\tisBefore =\n\t\t\t\t\t$.inArray(name, extList) < $.inArray(thisName, extList),\n\t\t\t\tisMissing = required && this.ext[name] == null,\n\t\t\t\tbadOrder = !isMissing && before != null && before !== isBefore;\n\n\t\t\t_assert(thisName && thisName !== name, \"invalid or same name\");\n\n\t\t\tif (isMissing || badOrder) {\n\t\t\t\tif (!message) {\n\t\t\t\t\tif (isMissing || required) {\n\t\t\t\t\t\tmessage =\n\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\tthisName +\n\t\t\t\t\t\t\t\"' extension requires '\" +\n\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\"'\";\n\t\t\t\t\t\tif (badOrder) {\n\t\t\t\t\t\t\tmessage +=\n\t\t\t\t\t\t\t\t\" to be registered \" +\n\t\t\t\t\t\t\t\t(before ? \"before\" : \"after\") +\n\t\t\t\t\t\t\t\t\" itself\";\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage =\n\t\t\t\t\t\t\t\"If used together, `\" +\n\t\t\t\t\t\t\tname +\n\t\t\t\t\t\t\t\"` must be registered \" +\n\t\t\t\t\t\t\t(before ? \"before\" : \"after\") +\n\t\t\t\t\t\t\t\" `\" +\n\t\t\t\t\t\t\tthisName +\n\t\t\t\t\t\t\t\"`\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$.error(message);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/** Activate node with a given key and fire focus and activate events.\n\t\t *\n\t\t * A previously activated node will be deactivated.\n\t\t * If activeVisible option is set, all parents will be expanded as necessary.\n\t\t * Pass key = false, to deactivate the current node only.\n\t\t * @param {string} key\n\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t\t * @returns {FancytreeNode} activated node (null, if not found)\n\t\t */\n\t\tactivateKey: function(key, opts) {\n\t\t\tvar node = this.getNodeByKey(key);\n\t\t\tif (node) {\n\t\t\t\tnode.setActive(true, opts);\n\t\t\t} else if (this.activeNode) {\n\t\t\t\tthis.activeNode.setActive(false, opts);\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\t\t/** (experimental) Add child status nodes that indicate 'More...', ....\n\t\t * @param {boolean|object} node optional node definition. Pass `false` to remove all paging nodes.\n\t\t * @param {string} [mode='append'] 'child'|firstChild'\n\t\t * @since 2.15\n\t\t */\n\t\taddPagingNode: function(node, mode) {\n\t\t\treturn this.rootNode.addPagingNode(node, mode);\n\t\t},\n\t\t/** (experimental) Modify existing data model.\n\t\t *\n\t\t * @param {Array} patchList array of [key, NodePatch] arrays\n\t\t * @returns {$.Promise} resolved, when all patches have been applied\n\t\t * @see TreePatch\n\t\t */\n\t\tapplyPatch: function(patchList) {\n\t\t\tvar dfd,\n\t\t\t\ti,\n\t\t\t\tp2,\n\t\t\t\tkey,\n\t\t\t\tpatch,\n\t\t\t\tnode,\n\t\t\t\tpatchCount = patchList.length,\n\t\t\t\tdeferredList = [];\n\n\t\t\tfor (i = 0; i < patchCount; i++) {\n\t\t\t\tp2 = patchList[i];\n\t\t\t\t_assert(\n\t\t\t\t\tp2.length === 2,\n\t\t\t\t\t\"patchList must be an array of length-2-arrays\"\n\t\t\t\t);\n\t\t\t\tkey = p2[0];\n\t\t\t\tpatch = p2[1];\n\t\t\t\tnode = key === null ? this.rootNode : this.getNodeByKey(key);\n\t\t\t\tif (node) {\n\t\t\t\t\tdfd = new $.Deferred();\n\t\t\t\t\tdeferredList.push(dfd);\n\t\t\t\t\tnode.applyPatch(patch).always(_makeResolveFunc(dfd, node));\n\t\t\t\t} else {\n\t\t\t\t\tthis.warn(\"could not find node with key '\" + key + \"'\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Return a promise that is resolved, when ALL patches were applied\n\t\t\treturn $.when.apply($, deferredList).promise();\n\t\t},\n\t\t/* TODO: implement in dnd extension\n\t\tcancelDrag: function() {\n\t\t\t\tvar dd = $.ui.ddmanager.current;\n\t\t\t\tif(dd){\n\t\t\t\t\tdd.cancel();\n\t\t\t\t}\n\t\t\t},\n\t\t*/\n\t\t/** Remove all nodes.\n\t\t * @since 2.14\n\t\t */\n\t\tclear: function(source) {\n\t\t\tthis._callHook(\"treeClear\", this);\n\t\t},\n\t\t/** Return the number of nodes.\n\t\t * @returns {integer}\n\t\t */\n\t\tcount: function() {\n\t\t\treturn this.rootNode.countChildren();\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 4 (prepending tree name)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tdebug: function(msg) {\n\t\t\tif (this.options.debugLevel >= 4) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t}\n\t\t},\n\t\t/** Enable (or disable) the tree control.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to disable\n\t\t * @since 2.30\n\t\t */\n\t\tenable: function(flag) {\n\t\t\tif (flag === false) {\n\t\t\t\tthis.widget.disable();\n\t\t\t} else {\n\t\t\t\tthis.widget.enable();\n\t\t\t}\n\t\t},\n\t\t/** Temporarily suppress rendering to improve performance on bulk-updates.\n\t\t *\n\t\t * @param {boolean} flag\n\t\t * @returns {boolean} previous status\n\t\t * @since 2.19\n\t\t */\n\t\tenableUpdate: function(flag) {\n\t\t\tflag = flag !== false; // Confusing use of '!'\n\t\t\t/*jshint -W018 */ if (!!this._enableUpdate === !!flag) {\n\t\t\t\treturn flag;\n\t\t\t}\n\t\t\t/*jshint +W018 */\n\t\t\tthis._enableUpdate = flag;\n\t\t\tif (flag) {\n\t\t\t\tthis.debug(\"enableUpdate(true): redraw \"); //, this._dirtyRoots);\n\t\t\t\tthis.render();\n\t\t\t} else {\n\t\t\t\t// \tthis._dirtyRoots = null;\n\t\t\t\tthis.debug(\"enableUpdate(false)...\");\n\t\t\t}\n\t\t\treturn !flag; // return previous value\n\t\t},\n\t\t/** Expand (or collapse) all parent nodes.\n\t\t *\n\t\t * This convenience method uses `tree.visit()` and `tree.setExpanded()`\n\t\t * internally.\n\t\t *\n\t\t * @param {boolean} [flag=true] pass false to collapse\n\t\t * @param {object} [opts] passed to setExpanded()\n\t\t * @since 2.30\n\t\t */\n\t\texpandAll: function(flag, opts) {\n\t\t\tflag = flag !== false;\n\t\t\tthis.visit(function(node) {\n\t\t\t\tif (\n\t\t\t\t\tnode.hasChildren() !== false &&\n\t\t\t\t\tnode.isExpanded() !== flag\n\t\t\t\t) {\n\t\t\t\t\tnode.setExpanded(flag, opts);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/**Find all nodes that matches condition.\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t * callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode[]} array of nodes (may be empty)\n\t\t * @see FancytreeNode#findAll\n\t\t * @since 2.12\n\t\t */\n\t\tfindAll: function(match) {\n\t\t\treturn this.rootNode.findAll(match);\n\t\t},\n\t\t/**Find first node that matches condition.\n\t\t *\n\t\t * @param {string | function(node)} match title string to search for, or a\n\t\t * callback function that returns `true` if a node is matched.\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t * @see FancytreeNode#findFirst\n\t\t * @since 2.12\n\t\t */\n\t\tfindFirst: function(match) {\n\t\t\treturn this.rootNode.findFirst(match);\n\t\t},\n\t\t/** Find the next visible node that starts with `match`, starting at `startNode`\n\t\t * and wrap-around at the end.\n\t\t *\n\t\t * @param {string|function} match\n\t\t * @param {FancytreeNode} [startNode] defaults to first node\n\t\t * @returns {FancytreeNode} matching node or null\n\t\t */\n\t\tfindNextNode: function(match, startNode, visibleOnly) {\n\t\t\tmatch =\n\t\t\t\ttypeof match === \"string\"\n\t\t\t\t\t? _makeNodeTitleStartMatcher(match)\n\t\t\t\t\t: match;\n\t\t\tstartNode = startNode || this.getFirstChild();\n\n\t\t\tvar stopNode = null,\n\t\t\t\tparentChildren = startNode.parent.children,\n\t\t\t\tmatchingNode = null,\n\t\t\t\twalkVisible = function(parent, idx, fn) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\tgrandParent,\n\t\t\t\t\t\tparentChildren = parent.children,\n\t\t\t\t\t\tsiblingCount = parentChildren.length,\n\t\t\t\t\t\tnode = parentChildren[idx];\n\t\t\t\t\t// visit node itself\n\t\t\t\t\tif (node && fn(node) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// visit descendants\n\t\t\t\t\tif (node && node.children && node.expanded) {\n\t\t\t\t\t\tif (walkVisible(node, 0, fn) === false) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// visit subsequent siblings\n\t\t\t\t\tfor (i = idx + 1; i < siblingCount; i++) {\n\t\t\t\t\t\tif (walkVisible(parent, i, fn) === false) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// visit parent's subsequent siblings\n\t\t\t\t\tgrandParent = parent.parent;\n\t\t\t\t\tif (grandParent) {\n\t\t\t\t\t\treturn walkVisible(\n\t\t\t\t\t\t\tgrandParent,\n\t\t\t\t\t\t\tgrandParent.children.indexOf(parent) + 1,\n\t\t\t\t\t\t\tfn\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// wrap-around: restart with first node\n\t\t\t\t\t\treturn walkVisible(parent, 0, fn);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\twalkVisible(\n\t\t\t\tstartNode.parent,\n\t\t\t\tparentChildren.indexOf(startNode),\n\t\t\t\tfunction(node) {\n\t\t\t\t\t// Stop iteration if we see the start node a second time\n\t\t\t\t\tif (node === stopNode) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tstopNode = stopNode || node;\n\t\t\t\t\t// Ignore nodes hidden by a filter\n\t\t\t\t\tif (!$(node.span).is(\":visible\")) {\n\t\t\t\t\t\tnode.debug(\"quicksearch: skipping hidden node\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Test if we found a match, but search for a second match if this\n\t\t\t\t\t// was the currently active node\n\t\t\t\t\tif (match(node)) {\n\t\t\t\t\t\t// node.debug(\"quicksearch match \" + node.title, startNode);\n\t\t\t\t\t\tmatchingNode = node;\n\t\t\t\t\t\tif (matchingNode !== startNode) {\n\t\t\t\t\t\t\treturn false;\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 matchingNode;\n\t\t},\n\t\t// TODO: fromDict\n\t\t/**\n\t\t * Generate INPUT elements that can be submitted with html forms.\n\t\t *\n\t\t * In selectMode 3 only the topmost selected nodes are considered, unless\n\t\t * `opts.stopOnParents: false` is passed.\n\t\t *\n\t\t * @example\n\t\t * // Generate input elements for active and selected nodes\n\t\t * tree.generateFormElements();\n\t\t * // Generate input elements selected nodes, using a custom `name` attribute\n\t\t * tree.generateFormElements(\"cust_sel\", false);\n\t\t * // Generate input elements using a custom filter\n\t\t * tree.generateFormElements(true, true, { filter: function(node) {\n\t\t * return node.isSelected() && node.data.yes;\n\t\t * }});\n\t\t *\n\t\t * @param {boolean | string} [selected=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID[]')\n\t\t * @param {boolean | string} [active=true] Pass false to disable, pass a string to override the field name (default: 'ft_ID_active')\n\t\t * @param {object} [opts] default { filter: null, stopOnParents: true }\n\t\t */\n\t\tgenerateFormElements: function(selected, active, opts) {\n\t\t\topts = opts || {};\n\n\t\t\tvar nodeList,\n\t\t\t\tselectedName =\n\t\t\t\t\ttypeof selected === \"string\"\n\t\t\t\t\t\t? selected\n\t\t\t\t\t\t: \"ft_\" + this._id + \"[]\",\n\t\t\t\tactiveName =\n\t\t\t\t\ttypeof active === \"string\"\n\t\t\t\t\t\t? active\n\t\t\t\t\t\t: \"ft_\" + this._id + \"_active\",\n\t\t\t\tid = \"fancytree_result_\" + this._id,\n\t\t\t\t$result = $(\"#\" + id),\n\t\t\t\tstopOnParents =\n\t\t\t\t\tthis.options.selectMode === 3 &&\n\t\t\t\t\topts.stopOnParents !== false;\n\n\t\t\tif ($result.length) {\n\t\t\t\t$result.empty();\n\t\t\t} else {\n\t\t\t\t$result = $(\"<div>\", {\n\t\t\t\t\tid: id,\n\t\t\t\t})\n\t\t\t\t\t.hide()\n\t\t\t\t\t.insertAfter(this.$container);\n\t\t\t}\n\t\t\tif (active !== false && this.activeNode) {\n\t\t\t\t$result.append(\n\t\t\t\t\t$(\"<input>\", {\n\t\t\t\t\t\ttype: \"radio\",\n\t\t\t\t\t\tname: activeName,\n\t\t\t\t\t\tvalue: this.activeNode.key,\n\t\t\t\t\t\tchecked: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\tfunction _appender(node) {\n\t\t\t\t$result.append(\n\t\t\t\t\t$(\"<input>\", {\n\t\t\t\t\t\ttype: \"checkbox\",\n\t\t\t\t\t\tname: selectedName,\n\t\t\t\t\t\tvalue: node.key,\n\t\t\t\t\t\tchecked: true,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (opts.filter) {\n\t\t\t\tthis.visit(function(node) {\n\t\t\t\t\tvar res = opts.filter(node);\n\t\t\t\t\tif (res === \"skip\") {\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t\tif (res !== false) {\n\t\t\t\t\t\t_appender(node);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (selected !== false) {\n\t\t\t\tnodeList = this.getSelectedNodes(stopOnParents);\n\t\t\t\t$.each(nodeList, function(idx, node) {\n\t\t\t\t\t_appender(node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Return the currently active node or null.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetActiveNode: function() {\n\t\t\treturn this.activeNode;\n\t\t},\n\t\t/** Return the first top level node if any (not the invisible root node).\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetFirstChild: function() {\n\t\t\treturn this.rootNode.getFirstChild();\n\t\t},\n\t\t/**\n\t\t * Return node that has keyboard focus or null.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetFocusNode: function() {\n\t\t\treturn this.focusNode;\n\t\t},\n\t\t/**\n\t\t * Return current option value.\n\t\t * (Note: this is the preferred variant of `$().fancytree(\"option\", \"KEY\")`)\n\t\t *\n\t\t * @param {string} name option name (may contain '.')\n\t\t * @returns {any}\n\t\t */\n\t\tgetOption: function(optionName) {\n\t\t\treturn this.widget.option(optionName);\n\t\t},\n\t\t/**\n\t\t * Return node with a given key or null if not found.\n\t\t *\n\t\t * @param {string} key\n\t\t * @param {FancytreeNode} [searchRoot] only search below this node\n\t\t * @returns {FancytreeNode | null}\n\t\t */\n\t\tgetNodeByKey: function(key, searchRoot) {\n\t\t\t// Search the DOM by element ID (assuming this is faster than traversing all nodes).\n\t\t\tvar el, match;\n\t\t\t// TODO: use tree.keyMap if available\n\t\t\t// TODO: check opts.generateIds === true\n\t\t\tif (!searchRoot) {\n\t\t\t\tel = document.getElementById(this.options.idPrefix + key);\n\t\t\t\tif (el) {\n\t\t\t\t\treturn el.ftnode ? el.ftnode : null;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Not found in the DOM, but still may be in an unrendered part of tree\n\t\t\tsearchRoot = searchRoot || this.rootNode;\n\t\t\tmatch = null;\n\t\t\tsearchRoot.visit(function(node) {\n\t\t\t\tif (node.key === key) {\n\t\t\t\t\tmatch = node;\n\t\t\t\t\treturn false; // Stop iteration\n\t\t\t\t}\n\t\t\t}, true);\n\t\t\treturn match;\n\t\t},\n\t\t/** Return the invisible system root node.\n\t\t * @returns {FancytreeNode}\n\t\t */\n\t\tgetRootNode: function() {\n\t\t\treturn this.rootNode;\n\t\t},\n\t\t/**\n\t\t * Return an array of selected nodes.\n\t\t * @param {boolean} [stopOnParents=false] only return the topmost selected\n\t\t * node (useful with selectMode 3)\n\t\t * @returns {FancytreeNode[]}\n\t\t */\n\t\tgetSelectedNodes: function(stopOnParents) {\n\t\t\treturn this.rootNode.getSelectedNodes(stopOnParents);\n\t\t},\n\t\t/** Return true if the tree control has keyboard focus\n\t\t * @returns {boolean}\n\t\t */\n\t\thasFocus: function() {\n\t\t\treturn !!this._hasFocus;\n\t\t},\n\t\t/** Write to browser console if debugLevel >= 3 (prepending tree name)\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\tinfo: function(msg) {\n\t\t\tif (this.options.debugLevel >= 3) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t}\n\t\t},\n\t\t/*\n\t\tTODO: isInitializing: function() {\n\t\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" );\n\t\t},\n\t\tTODO: isReloading: function() {\n\t\t\treturn ( this.phase==\"init\" || this.phase==\"postInit\" ) && this.options.persist && this.persistence.cookiesFound;\n\t\t},\n\t\tTODO: isUserEvent: function() {\n\t\t\treturn ( this.phase==\"userEvent\" );\n\t\t},\n\t\t*/\n\n\t\t/**\n\t\t * Make sure that a node with a given ID is loaded, by traversing - and\n\t\t * loading - its parents. This method is meant for lazy hierarchies.\n\t\t * A callback is executed for every node as we go.\n\t\t * @example\n\t\t * // Resolve using node.key:\n\t\t * tree.loadKeyPath(\"/_3/_23/_26/_27\", function(node, status){\n\t\t * if(status === \"loaded\") {\n\t\t * console.log(\"loaded intermediate node \" + node);\n\t\t * }else if(status === \"ok\") {\n\t\t * node.activate();\n\t\t * }\n\t\t * });\n\t\t * // Use deferred promise:\n\t\t * tree.loadKeyPath(\"/_3/_23/_26/_27\").progress(function(data){\n\t\t * if(data.status === \"loaded\") {\n\t\t * console.log(\"loaded intermediate node \" + data.node);\n\t\t * }else if(data.status === \"ok\") {\n\t\t * node.activate();\n\t\t * }\n\t\t * }).done(function(){\n\t\t * ...\n\t\t * });\n\t\t * // Custom path segment resolver:\n\t\t * tree.loadKeyPath(\"/321/431/21/2\", {\n\t\t * matchKey: function(node, key){\n\t\t * return node.data.refKey === key;\n\t\t * },\n\t\t * callback: function(node, status){\n\t\t * if(status === \"loaded\") {\n\t\t * console.log(\"loaded intermediate node \" + node);\n\t\t * }else if(status === \"ok\") {\n\t\t * node.activate();\n\t\t * }\n\t\t * }\n\t\t * });\n\t\t * @param {string | string[]} keyPathList one or more key paths (e.g. '/3/2_1/7')\n\t\t * @param {function | object} optsOrCallback callback(node, status) is called for every visited node ('loading', 'loaded', 'ok', 'error').\n\t\t * Pass an object to define custom key matchers for the path segments: {callback: function, matchKey: function}.\n\t\t * @returns {$.Promise}\n\t\t */\n\t\tloadKeyPath: function(keyPathList, optsOrCallback) {\n\t\t\tvar callback,\n\t\t\t\ti,\n\t\t\t\tpath,\n\t\t\t\tself = this,\n\t\t\t\tdfd = new $.Deferred(),\n\t\t\t\tparent = this.getRootNode(),\n\t\t\t\tsep = this.options.keyPathSeparator,\n\t\t\t\tpathSegList = [],\n\t\t\t\topts = $.extend({}, optsOrCallback);\n\n\t\t\t// Prepare options\n\t\t\tif (typeof optsOrCallback === \"function\") {\n\t\t\t\tcallback = optsOrCallback;\n\t\t\t} else if (optsOrCallback && optsOrCallback.callback) {\n\t\t\t\tcallback = optsOrCallback.callback;\n\t\t\t}\n\t\t\topts.callback = function(ctx, node, status) {\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback.call(ctx, node, status);\n\t\t\t\t}\n\t\t\t\tdfd.notifyWith(ctx, [{ node: node, status: status }]);\n\t\t\t};\n\t\t\tif (opts.matchKey == null) {\n\t\t\t\topts.matchKey = function(node, key) {\n\t\t\t\t\treturn node.key === key;\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Convert array of path strings to array of segment arrays\n\t\t\tif (!$.isArray(keyPathList)) {\n\t\t\t\tkeyPathList = [keyPathList];\n\t\t\t}\n\t\t\tfor (i = 0; i < keyPathList.length; i++) {\n\t\t\t\tpath = keyPathList[i];\n\t\t\t\t// strip leading slash\n\t\t\t\tif (path.charAt(0) === sep) {\n\t\t\t\t\tpath = path.substr(1);\n\t\t\t\t}\n\t\t\t\t// segListMap[path] = { parent: parent, segList: path.split(sep) };\n\t\t\t\tpathSegList.push(path.split(sep));\n\t\t\t\t// targetList.push({ parent: parent, segList: path.split(sep)/* , path: path*/});\n\t\t\t}\n\t\t\t// The timeout forces async behavior always (even if nodes are all loaded)\n\t\t\t// This way a potential progress() event will fire.\n\t\t\tsetTimeout(function() {\n\t\t\t\tself._loadKeyPathImpl(dfd, opts, parent, pathSegList).done(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tdfd.resolve();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}, 0);\n\t\t\treturn dfd.promise();\n\t\t},\n\t\t/*\n\t\t * Resolve a list of paths, relative to one parent node.\n\t\t */\n\t\t_loadKeyPathImpl: function(dfd, opts, parent, pathSegList) {\n\t\t\tvar deferredList,\n\t\t\t\ti,\n\t\t\t\tkey,\n\t\t\t\tnode,\n\t\t\t\tremainMap,\n\t\t\t\ttmpParent,\n\t\t\t\tsegList,\n\t\t\t\tsubDfd,\n\t\t\t\tself = this;\n\n\t\t\tfunction __findChild(parent, key) {\n\t\t\t\t// console.log(\"__findChild\", key, parent);\n\t\t\t\tvar i,\n\t\t\t\t\tl,\n\t\t\t\t\tcl = parent.children;\n\n\t\t\t\tif (cl) {\n\t\t\t\t\tfor (i = 0, l = cl.length; i < l; i++) {\n\t\t\t\t\t\tif (opts.matchKey(cl[i], key)) {\n\t\t\t\t\t\t\treturn cl[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// console.log(\"_loadKeyPathImpl, parent=\", parent, \", pathSegList=\", pathSegList);\n\n\t\t\t// Pass 1:\n\t\t\t// Handle all path segments for nodes that are already loaded.\n\t\t\t// Collect distinct top-most lazy nodes in a map.\n\t\t\t// Note that we can use node.key to de-dupe entries, even if a custom matcher would\n\t\t\t// look for other node attributes.\n\t\t\t// map[node.key] => {node: node, pathList: [list of remaining rest-paths]}\n\t\t\tremainMap = {};\n\n\t\t\tfor (i = 0; i < pathSegList.length; i++) {\n\t\t\t\tsegList = pathSegList[i];\n\t\t\t\t// target = targetList[i];\n\n\t\t\t\t// Traverse and pop path segments (i.e. keys), until we hit a lazy, unloaded node\n\t\t\t\ttmpParent = parent;\n\t\t\t\twhile (segList.length) {\n\t\t\t\t\tkey = segList.shift();\n\t\t\t\t\tnode = __findChild(tmpParent, key);\n\t\t\t\t\tif (!node) {\n\t\t\t\t\t\tthis.warn(\n\t\t\t\t\t\t\t\"loadKeyPath: key not found: \" +\n\t\t\t\t\t\t\t\tkey +\n\t\t\t\t\t\t\t\t\" (parent: \" +\n\t\t\t\t\t\t\t\ttmpParent +\n\t\t\t\t\t\t\t\t\")\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.callback(this, key, \"error\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (segList.length === 0) {\n\t\t\t\t\t\topts.callback(this, node, \"ok\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (!node.lazy || node.hasChildren() !== undefined) {\n\t\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\t\ttmpParent = node;\n\t\t\t\t\t} else {\n\t\t\t\t\t\topts.callback(this, node, \"loaded\");\n\t\t\t\t\t\tkey = node.key; //target.segList.join(sep);\n\t\t\t\t\t\tif (remainMap[key]) {\n\t\t\t\t\t\t\tremainMap[key].pathSegList.push(segList);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tremainMap[key] = {\n\t\t\t\t\t\t\t\tparent: node,\n\t\t\t\t\t\t\t\tpathSegList: [segList],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\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\t// console.log(\"_loadKeyPathImpl AFTER pass 1, remainMap=\", remainMap);\n\n\t\t\t// Now load all lazy nodes and continue iteration for remaining paths\n\t\t\tdeferredList = [];\n\n\t\t\t// Avoid jshint warning 'Don't make functions within a loop.':\n\t\t\tfunction __lazyload(dfd, parent, pathSegList) {\n\t\t\t\t// console.log(\"__lazyload\", parent, \"pathSegList=\", pathSegList);\n\t\t\t\topts.callback(self, parent, \"loading\");\n\t\t\t\tparent\n\t\t\t\t\t.load()\n\t\t\t\t\t.done(function() {\n\t\t\t\t\t\tself._loadKeyPathImpl\n\t\t\t\t\t\t\t.call(self, dfd, opts, parent, pathSegList)\n\t\t\t\t\t\t\t.always(_makeResolveFunc(dfd, self));\n\t\t\t\t\t})\n\t\t\t\t\t.fail(function(errMsg) {\n\t\t\t\t\t\tself.warn(\"loadKeyPath: error loading lazy \" + parent);\n\t\t\t\t\t\topts.callback(self, node, \"error\");\n\t\t\t\t\t\tdfd.rejectWith(self);\n\t\t\t\t\t});\n\t\t\t}\n\t\t\t// remainMap contains parent nodes, each with a list of relative sub-paths.\n\t\t\t// We start loading all of them now, and pass the the list to each loader.\n\t\t\tfor (var nodeKey in remainMap) {\n\t\t\t\tvar remain = remainMap[nodeKey];\n\t\t\t\t// console.log(\"for(): remain=\", remain, \"remainMap=\", remainMap);\n\t\t\t\t// key = remain.segList.shift();\n\t\t\t\t// node = __findChild(remain.parent, key);\n\t\t\t\t// if (node == null) { // #576\n\t\t\t\t// \t// Issue #576, refactored for v2.27:\n\t\t\t\t// \t// The root cause was, that sometimes the wrong parent was used here\n\t\t\t\t// \t// to find the next segment.\n\t\t\t\t// \t// Falling back to getNodeByKey() was a hack that no longer works if a custom\n\t\t\t\t// \t// matcher is used, because we cannot assume that a single segment-key is unique\n\t\t\t\t// \t// throughout the tree.\n\t\t\t\t// \tself.error(\"loadKeyPath: error loading child by key '\" + key + \"' (parent: \" + target.parent + \")\", target);\n\t\t\t\t// \t// \tnode = self.getNodeByKey(key);\n\t\t\t\t// \tcontinue;\n\t\t\t\t// }\n\t\t\t\tsubDfd = new $.Deferred();\n\t\t\t\tdeferredList.push(subDfd);\n\t\t\t\t__lazyload(subDfd, remain.parent, remain.pathSegList);\n\t\t\t}\n\t\t\t// Return a promise that is resolved, when ALL paths were loaded\n\t\t\treturn $.when.apply($, deferredList).promise();\n\t\t},\n\t\t/** Re-fire beforeActivate, activate, and (optional) focus events.\n\t\t * Calling this method in the `init` event, will activate the node that\n\t\t * was marked 'active' in the source data, and optionally set the keyboard\n\t\t * focus.\n\t\t * @param [setFocus=false]\n\t\t */\n\t\treactivate: function(setFocus) {\n\t\t\tvar res,\n\t\t\t\tnode = this.activeNode;\n\n\t\t\tif (!node) {\n\t\t\t\treturn _getResolvedPromise();\n\t\t\t}\n\t\t\tthis.activeNode = null; // Force re-activating\n\t\t\tres = node.setActive(true, { noFocus: true });\n\t\t\tif (setFocus) {\n\t\t\t\tnode.setFocus();\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Reload tree from source and return a promise.\n\t\t * @param [source] optional new source (defaults to initial source data)\n\t\t * @returns {$.Promise}\n\t\t */\n\t\treload: function(source) {\n\t\t\tthis._callHook(\"treeClear\", this);\n\t\t\treturn this._callHook(\"treeLoad\", this, source);\n\t\t},\n\t\t/**Render tree (i.e. create DOM elements for all top-level nodes).\n\t\t * @param {boolean} [force=false] create DOM elemnts, even if parent is collapsed\n\t\t * @param {boolean} [deep=false]\n\t\t */\n\t\trender: function(force, deep) {\n\t\t\treturn this.rootNode.render(force, deep);\n\t\t},\n\t\t/**(De)select all nodes.\n\t\t * @param {boolean} [flag=true]\n\t\t * @since 2.28\n\t\t */\n\t\tselectAll: function(flag) {\n\t\t\tthis.visit(function(node) {\n\t\t\t\tnode.setSelected(flag);\n\t\t\t});\n\t\t},\n\t\t// TODO: selectKey: function(key, select)\n\t\t// TODO: serializeArray: function(stopOnParents)\n\t\t/**\n\t\t * @param {boolean} [flag=true]\n\t\t */\n\t\tsetFocus: function(flag) {\n\t\t\treturn this._callHook(\"treeSetFocus\", this, flag);\n\t\t},\n\t\t/**\n\t\t * Set current option value.\n\t\t * (Note: this is the preferred variant of `$().fancytree(\"option\", \"KEY\", VALUE)`)\n\t\t * @param {string} name option name (may contain '.')\n\t\t * @param {any} new value\n\t\t */\n\t\tsetOption: function(optionName, value) {\n\t\t\treturn this.widget.option(optionName, value);\n\t\t},\n\t\t/**\n\t\t * Return all nodes as nested list of {@link NodeData}.\n\t\t *\n\t\t * @param {boolean} [includeRoot=false] Returns the hidden system root node (and its children)\n\t\t * @param {function} [callback] callback(dict, node) is called for every node, in order to allow modifications\n\t\t * @returns {Array | object}\n\t\t * @see FancytreeNode#toDict\n\t\t */\n\t\ttoDict: function(includeRoot, callback) {\n\t\t\tvar res = this.rootNode.toDict(true, callback);\n\t\t\treturn includeRoot ? res : res.children;\n\t\t},\n\t\t/* Implicitly called for string conversions.\n\t\t * @returns {string}\n\t\t */\n\t\ttoString: function() {\n\t\t\treturn \"Fancytree@\" + this._id;\n\t\t\t// return \"<Fancytree(#\" + this._id + \")>\";\n\t\t},\n\t\t/* _trigger a widget event with additional node ctx.\n\t\t * @see EventData\n\t\t */\n\t\t_triggerNodeEvent: function(type, node, originalEvent, extra) {\n\t\t\t//\t\tthis.debug(\"_trigger(\" + type + \"): '\" + ctx.node.title + \"'\", ctx);\n\t\t\tvar ctx = this._makeHookContext(node, originalEvent, extra),\n\t\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\t\t\tif (res !== false && ctx.result !== undefined) {\n\t\t\t\treturn ctx.result;\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/* _trigger a widget event with additional tree data. */\n\t\t_triggerTreeEvent: function(type, originalEvent, extra) {\n\t\t\t//\t\tthis.debug(\"_trigger(\" + type + \")\", ctx);\n\t\t\tvar ctx = this._makeHookContext(this, originalEvent, extra),\n\t\t\t\tres = this.widget._trigger(type, originalEvent, ctx);\n\n\t\t\tif (res !== false && ctx.result !== undefined) {\n\t\t\t\treturn ctx.result;\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t/** Call fn(node) for all nodes in hierarchical order (depth-first).\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @returns {boolean} false, if the iterator was stopped.\n\t\t */\n\t\tvisit: function(fn) {\n\t\t\treturn this.rootNode.visit(fn, false);\n\t\t},\n\t\t/** Call fn(node) for all nodes in vertical order, top down (or bottom up).<br>\n\t\t * Stop iteration, if fn() returns false.<br>\n\t\t * Return false if iteration was stopped.\n\t\t *\n\t\t * @param {function} fn the callback function.\n\t\t * Return false to stop iteration, return \"skip\" to skip this node and children only.\n\t\t * @param {object} [options]\n\t\t * Defaults:\n\t\t * {start: First top node, reverse: false, includeSelf: true, includeHidden: false}\n\t\t * @returns {boolean}\n\t\t * @since 2.28\n\t\t */\n\t\tvisitRows: function(fn, opts) {\n\t\t\tif (opts && opts.reverse) {\n\t\t\t\tdelete opts.reverse;\n\t\t\t\treturn this._visitRowsUp(fn, opts);\n\t\t\t}\n\t\t\tvar i,\n\t\t\t\tnextIdx,\n\t\t\t\tparent,\n\t\t\t\tres,\n\t\t\t\tsiblings,\n\t\t\t\tsiblingOfs = 0,\n\t\t\t\tskipFirstNode = opts.includeSelf === false,\n\t\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\t\tparent = node.parent;\n\t\t\twhile (parent) {\n\t\t\t\t// visit siblings\n\t\t\t\tsiblings = parent.children;\n\t\t\t\tnextIdx = siblings.indexOf(node) + siblingOfs;\n\n\t\t\t\tfor (i = nextIdx; i < siblings.length; i++) {\n\t\t\t\t\tnode = siblings[i];\n\t\t\t\t\tif (!skipFirstNode && fn(node) === false) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\tskipFirstNode = false;\n\t\t\t\t\t// Dive into node's child nodes\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.children &&\n\t\t\t\t\t\tnode.children.length &&\n\t\t\t\t\t\t(includeHidden || node.expanded)\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Disable warning: Functions declared within loops referencing an outer\n\t\t\t\t\t\t// scoped variable may lead to confusing semantics:\n\t\t\t\t\t\t/*jshint -W083 */\n\t\t\t\t\t\tres = node.visit(function(n) {\n\t\t\t\t\t\t\tif (fn(n) === false) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!includeHidden && n.children && !n.expanded) {\n\t\t\t\t\t\t\t\treturn \"skip\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, false);\n\t\t\t\t\t\t/*jshint +W083 */\n\t\t\t\t\t\tif (res === false) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Visit parent nodes (bottom up)\n\t\t\t\tnode = parent;\n\t\t\t\tparent = parent.parent;\n\t\t\t\tsiblingOfs = 1; //\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\t/* Call fn(node) for all nodes in vertical order, bottom up.\n\t\t */\n\t\t_visitRowsUp: function(fn, opts) {\n\t\t\tvar children,\n\t\t\t\tidx,\n\t\t\t\tparent,\n\t\t\t\tincludeHidden = !!opts.includeHidden,\n\t\t\t\tnode = opts.start || this.rootNode.children[0];\n\n\t\t\twhile (true) {\n\t\t\t\tparent = node.parent;\n\t\t\t\tchildren = parent.children;\n\n\t\t\t\tif (children[0] === node) {\n\t\t\t\t\t// If this is already the first sibling, goto parent\n\t\t\t\t\tnode = parent;\n\t\t\t\t\tchildren = parent.children;\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, goto prev. sibling\n\t\t\t\t\tidx = children.indexOf(node);\n\t\t\t\t\tnode = children[idx - 1];\n\t\t\t\t\t// If the prev. sibling has children, follow down to last descendant\n\t\t\t\t\twhile (\n\t\t\t\t\t\t(includeHidden || node.expanded) &&\n\t\t\t\t\t\tnode.children &&\n\t\t\t\t\t\tnode.children.length\n\t\t\t\t\t) {\n\t\t\t\t\t\tchildren = node.children;\n\t\t\t\t\t\tparent = node;\n\t\t\t\t\t\tnode = children[children.length - 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Skip invisible\n\t\t\t\tif (!includeHidden && !$(node.span).is(\":visible\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (fn(node) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/** Write warning to browser console if debugLevel >= 2 (prepending tree info)\n\t\t *\n\t\t * @param {*} msg string or object or array of such\n\t\t */\n\t\twarn: function(msg) {\n\t\t\tif (this.options.debugLevel >= 2) {\n\t\t\t\tArray.prototype.unshift.call(arguments, this.toString());\n\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t}\n\t\t},\n\t};\n\n\t/**\n\t * These additional methods of the {@link Fancytree} class are 'hook functions'\n\t * that can be used and overloaded by extensions.\n\t * (See <a href=\"https://github.com/mar10/fancytree/wiki/TutorialExtensions\">writing extensions</a>.)\n\t * @mixin Fancytree_Hooks\n\t */\n\t$.extend(\n\t\tFancytree.prototype,\n\t\t/** @lends Fancytree_Hooks# */\n\t\t{\n\t\t\t/** Default handling for mouse click events.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeClick: function(ctx) {\n\t\t\t\tvar activate,\n\t\t\t\t\texpand,\n\t\t\t\t\t// event = ctx.originalEvent,\n\t\t\t\t\ttargetType = ctx.targetType,\n\t\t\t\t\tnode = ctx.node;\n\n\t\t\t\t// this.debug(\"ftnode.onClick(\" + event.type + \"): ftnode:\" + this + \", button:\" + event.button + \", which: \" + event.which, ctx);\n\t\t\t\t// TODO: use switch\n\t\t\t\t// TODO: make sure clicks on embedded <input> doesn't steal focus (see table sample)\n\t\t\t\tif (targetType === \"expander\") {\n\t\t\t\t\tif (node.isLoading()) {\n\t\t\t\t\t\t// #495: we probably got a click event while a lazy load is pending.\n\t\t\t\t\t\t// The 'expanded' state is not yet set, so 'toggle' would expand\n\t\t\t\t\t\t// and trigger lazyLoad again.\n\t\t\t\t\t\t// It would be better to allow to collapse/expand the status node\n\t\t\t\t\t\t// while loading (instead of ignoring), but that would require some\n\t\t\t\t\t\t// more work.\n\t\t\t\t\t\tnode.debug(\"Got 2nd click while loading: ignored\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// Clicking the expander icon always expands/collapses\n\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t} else if (targetType === \"checkbox\") {\n\t\t\t\t\t// Clicking the checkbox always (de)selects\n\t\t\t\t\tthis._callHook(\"nodeToggleSelected\", ctx);\n\t\t\t\t\tif (ctx.options.focusOnSelect) {\n\t\t\t\t\t\t// #358\n\t\t\t\t\t\tthis._callHook(\"nodeSetFocus\", ctx, true);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Honor `clickFolderMode` for\n\t\t\t\t\texpand = false;\n\t\t\t\t\tactivate = true;\n\t\t\t\t\tif (node.folder) {\n\t\t\t\t\t\tswitch (ctx.options.clickFolderMode) {\n\t\t\t\t\t\t\tcase 2: // expand only\n\t\t\t\t\t\t\t\texpand = true;\n\t\t\t\t\t\t\t\tactivate = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 3: // expand and activate\n\t\t\t\t\t\t\t\tactivate = true;\n\t\t\t\t\t\t\t\texpand = true; //!node.isExpanded();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t// else 1 or 4: just activate\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (activate) {\n\t\t\t\t\t\tthis.nodeSetFocus(ctx);\n\t\t\t\t\t\tthis._callHook(\"nodeSetActive\", ctx, true);\n\t\t\t\t\t}\n\t\t\t\t\tif (expand) {\n\t\t\t\t\t\tif (!activate) {\n\t\t\t\t\t\t\t// this._callHook(\"nodeSetFocus\", ctx);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// this._callHook(\"nodeSetExpanded\", ctx, true);\n\t\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Make sure that clicks stop, otherwise <a href='#'> jumps to the top\n\t\t\t\t// if(event.target.localName === \"a\" && event.target.className === \"fancytree-title\"){\n\t\t\t\t// \tevent.preventDefault();\n\t\t\t\t// }\n\t\t\t\t// TODO: return promise?\n\t\t\t},\n\t\t\t/** Collapse all other children of same parent.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object} callOpts\n\t\t\t */\n\t\t\tnodeCollapseSiblings: function(ctx, callOpts) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tvar ac,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tnode = ctx.node;\n\n\t\t\t\tif (node.parent) {\n\t\t\t\t\tac = node.parent.children;\n\t\t\t\t\tfor (i = 0, l = ac.length; i < l; i++) {\n\t\t\t\t\t\tif (ac[i] !== node && ac[i].expanded) {\n\t\t\t\t\t\t\tthis._callHook(\n\t\t\t\t\t\t\t\t\"nodeSetExpanded\",\n\t\t\t\t\t\t\t\tac[i],\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\tcallOpts\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\t/** Default handling for mouse douleclick events.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeDblclick: function(ctx) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tif (\n\t\t\t\t\tctx.targetType === \"title\" &&\n\t\t\t\t\tctx.options.clickFolderMode === 4\n\t\t\t\t) {\n\t\t\t\t\t// this.nodeSetFocus(ctx);\n\t\t\t\t\t// this._callHook(\"nodeSetActive\", ctx, true);\n\t\t\t\t\tthis._callHook(\"nodeToggleExpanded\", ctx);\n\t\t\t\t}\n\t\t\t\t// TODO: prevent text selection on dblclicks\n\t\t\t\tif (ctx.targetType === \"title\") {\n\t\t\t\t\tctx.originalEvent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Default handling for mouse keydown events.\n\t\t\t *\n\t\t\t * NOTE: this may be called with node == null if tree (but no node) has focus.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeKeydown: function(ctx) {\n\t\t\t\t// TODO: return promise?\n\t\t\t\tvar matchNode,\n\t\t\t\t\tstamp,\n\t\t\t\t\tres,\n\t\t\t\t\tfocusNode,\n\t\t\t\t\tevent = ctx.originalEvent,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\twhich = event.which,\n\t\t\t\t\t// #909: Use event.key, to get unicode characters.\n\t\t\t\t\t// We can't use `/\\w/.test(key)`, because that would\n\t\t\t\t\t// only detect plain ascii alpha-numerics. But we still need\n\t\t\t\t\t// to ignore modifier-only, whitespace, cursor-keys, etc.\n\t\t\t\t\tkey = event.key || String.fromCharCode(which),\n\t\t\t\t\tspecialModifiers = !!(\n\t\t\t\t\t\tevent.altKey ||\n\t\t\t\t\t\tevent.ctrlKey ||\n\t\t\t\t\t\tevent.metaKey\n\t\t\t\t\t),\n\t\t\t\t\tisAlnum =\n\t\t\t\t\t\t!MODIFIERS[which] &&\n\t\t\t\t\t\t!SPECIAL_KEYCODES[which] &&\n\t\t\t\t\t\t!specialModifiers,\n\t\t\t\t\t$target = $(event.target),\n\t\t\t\t\thandled = true,\n\t\t\t\t\tactivate = !(event.ctrlKey || !opts.autoActivate);\n\n\t\t\t\t// (node || FT).debug(\"ftnode.nodeKeydown(\" + event.type + \"): ftnode:\" + this + \", charCode:\" + event.charCode + \", keyCode: \" + event.keyCode + \", which: \" + event.which);\n\t\t\t\t// FT.debug( \"eventToString(): \" + FT.eventToString(event) + \", key='\" + key + \"', isAlnum: \" + isAlnum );\n\n\t\t\t\t// Set focus to active (or first node) if no other node has the focus yet\n\t\t\t\tif (!node) {\n\t\t\t\t\tfocusNode = this.getActiveNode() || this.getFirstChild();\n\t\t\t\t\tif (focusNode) {\n\t\t\t\t\t\tfocusNode.setFocus();\n\t\t\t\t\t\tnode = ctx.node = this.focusNode;\n\t\t\t\t\t\tnode.debug(\"Keydown force focus on active node\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\topts.quicksearch &&\n\t\t\t\t\tisAlnum &&\n\t\t\t\t\t!$target.is(\":input:enabled\")\n\t\t\t\t) {\n\t\t\t\t\t// Allow to search for longer streaks if typed in quickly\n\t\t\t\t\tstamp = Date.now();\n\t\t\t\t\tif (stamp - tree.lastQuicksearchTime > 500) {\n\t\t\t\t\t\ttree.lastQuicksearchTerm = \"\";\n\t\t\t\t\t}\n\t\t\t\t\ttree.lastQuicksearchTime = stamp;\n\t\t\t\t\ttree.lastQuicksearchTerm += key;\n\t\t\t\t\t// tree.debug(\"quicksearch find\", tree.lastQuicksearchTerm);\n\t\t\t\t\tmatchNode = tree.findNextNode(\n\t\t\t\t\t\ttree.lastQuicksearchTerm,\n\t\t\t\t\t\ttree.getActiveNode()\n\t\t\t\t\t);\n\t\t\t\t\tif (matchNode) {\n\t\t\t\t\t\tmatchNode.setActive();\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tswitch (FT.eventToString(event)) {\n\t\t\t\t\tcase \"+\":\n\t\t\t\t\tcase \"=\": // 187: '+' @ Chrome, Safari\n\t\t\t\t\t\ttree.nodeSetExpanded(ctx, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"-\":\n\t\t\t\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"space\":\n\t\t\t\t\t\tif (node.isPagingNode()) {\n\t\t\t\t\t\t\ttree._triggerNodeEvent(\"clickPaging\", ctx, event);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tFT.evalOption(\"checkbox\", node, node, opts, false)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// #768\n\t\t\t\t\t\t\ttree.nodeToggleSelected(ctx);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"return\":\n\t\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"home\":\n\t\t\t\t\tcase \"end\":\n\t\t\t\t\tcase \"backspace\":\n\t\t\t\t\tcase \"left\":\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\tcase \"up\":\n\t\t\t\t\tcase \"down\":\n\t\t\t\t\t\tres = node.navigate(event.which, activate);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\thandled = false;\n\t\t\t\t}\n\t\t\t\tif (handled) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// /** Default handling for mouse keypress events. */\n\t\t\t// nodeKeypress: function(ctx) {\n\t\t\t// var event = ctx.originalEvent;\n\t\t\t// },\n\n\t\t\t// /** Trigger lazyLoad event (async). */\n\t\t\t// nodeLazyLoad: function(ctx) {\n\t\t\t// var node = ctx.node;\n\t\t\t// if(this._triggerNodeEvent())\n\t\t\t// },\n\t\t\t/** Load child nodes (async).\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object[]|object|string|$.Promise|function} source\n\t\t\t * @returns {$.Promise} The deferred will be resolved as soon as the (ajax)\n\t\t\t * data was rendered.\n\t\t\t */\n\t\t\tnodeLoadChildren: function(ctx, source) {\n\t\t\t\tvar ajax,\n\t\t\t\t\tdelay,\n\t\t\t\t\tdfd,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\trequestId = Date.now();\n\n\t\t\t\tif ($.isFunction(source)) {\n\t\t\t\t\tsource = source.call(tree, { type: \"source\" }, ctx);\n\t\t\t\t\t_assert(\n\t\t\t\t\t\t!$.isFunction(source),\n\t\t\t\t\t\t\"source callback must not return another function\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (source.url) {\n\t\t\t\t\tif (node._requestId) {\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"Recursive load request #\" +\n\t\t\t\t\t\t\t\trequestId +\n\t\t\t\t\t\t\t\t\" while #\" +\n\t\t\t\t\t\t\t\tnode._requestId +\n\t\t\t\t\t\t\t\t\" is pending.\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t// \tnode.debug(\"Send load request #\" + requestId);\n\t\t\t\t\t}\n\t\t\t\t\t// `source` is an Ajax options object\n\t\t\t\t\tajax = $.extend({}, ctx.options.ajax, source);\n\t\t\t\t\tnode._requestId = requestId;\n\t\t\t\t\tif (ajax.debugDelay) {\n\t\t\t\t\t\t// simulate a slow server\n\t\t\t\t\t\tdelay = ajax.debugDelay;\n\t\t\t\t\t\tdelete ajax.debugDelay; // remove debug option\n\t\t\t\t\t\tif ($.isArray(delay)) {\n\t\t\t\t\t\t\t// random delay range [min..max]\n\t\t\t\t\t\t\tdelay =\n\t\t\t\t\t\t\t\tdelay[0] +\n\t\t\t\t\t\t\t\tMath.random() * (delay[1] - delay[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"nodeLoadChildren waiting debugDelay \" +\n\t\t\t\t\t\t\t\tMath.round(delay) +\n\t\t\t\t\t\t\t\t\" ms ...\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdfd = $.Deferred(function(dfd) {\n\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t$.ajax(ajax)\n\t\t\t\t\t\t\t\t\t.done(function() {\n\t\t\t\t\t\t\t\t\t\tdfd.resolveWith(this, arguments);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.fail(function() {\n\t\t\t\t\t\t\t\t\t\tdfd.rejectWith(this, arguments);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}, delay);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdfd = $.ajax(ajax);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Defer the deferred: we want to be able to reject, even if ajax\n\t\t\t\t\t// resolved ok.\n\t\t\t\t\tsource = new $.Deferred();\n\t\t\t\t\tdfd.done(function(data, textStatus, jqXHR) {\n\t\t\t\t\t\tvar errorObj, res;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(this.dataType === \"json\" ||\n\t\t\t\t\t\t\t\tthis.dataType === \"jsonp\") &&\n\t\t\t\t\t\t\ttypeof data === \"string\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\t\"Ajax request returned a string (did you get the JSON dataType wrong?).\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (node._requestId && node._requestId > requestId) {\n\t\t\t\t\t\t\t// The expected request time stamp is later than `requestId`\n\t\t\t\t\t\t\t// (which was kept as as closure variable to this handler function)\n\t\t\t\t\t\t\t// node.warn(\"Ignored load response for obsolete request #\" + requestId + \" (expected #\" + node._requestId + \")\");\n\t\t\t\t\t\t\tsource.rejectWith(this, [RECURSIVE_REQUEST_ERROR]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t// } else {\n\t\t\t\t\t\t\t// \tnode.debug(\"Response returned for load request #\" + requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// postProcess is similar to the standard ajax dataFilter hook,\n\t\t\t\t\t\t// but it is also called for JSONP\n\t\t\t\t\t\tif (ctx.options.postProcess) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t// The handler may either\n\t\t\t\t\t\t\t\t// - modify `ctx.response` in-place (and leave `ctx.result` undefined)\n\t\t\t\t\t\t\t\t// => res = undefined\n\t\t\t\t\t\t\t\t// - return a replacement in `ctx.result`\n\t\t\t\t\t\t\t\t// => res = <new data>\n\t\t\t\t\t\t\t\t// If res contains an `error` property, an error status is displayed\n\t\t\t\t\t\t\t\tres = tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\"postProcess\",\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\tctx.originalEvent,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tresponse: data,\n\t\t\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\t\t\tdataType: this.dataType,\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} catch (e) {\n\t\t\t\t\t\t\t\tres = {\n\t\t\t\t\t\t\t\t\terror: e,\n\t\t\t\t\t\t\t\t\tmessage: \"\" + e,\n\t\t\t\t\t\t\t\t\tdetails: \"postProcess failed\",\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (res.error) {\n\t\t\t\t\t\t\t\terrorObj = $.isPlainObject(res.error)\n\t\t\t\t\t\t\t\t\t? res.error\n\t\t\t\t\t\t\t\t\t: { message: res.error };\n\t\t\t\t\t\t\t\terrorObj = tree._makeHookContext(\n\t\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\terrorObj\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tsource.rejectWith(this, [errorObj]);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t$.isArray(res) ||\n\t\t\t\t\t\t\t\t($.isPlainObject(res) &&\n\t\t\t\t\t\t\t\t\t$.isArray(res.children))\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Use `ctx.result` if valid\n\t\t\t\t\t\t\t\t// (otherwise use existing data, which may have been modified in-place)\n\t\t\t\t\t\t\t\tdata = res;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tdata &&\n\t\t\t\t\t\t\tdata.hasOwnProperty(\"d\") &&\n\t\t\t\t\t\t\tctx.options.enableAspx\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Process ASPX WebMethod JSON object inside \"d\" property\n\t\t\t\t\t\t\tdata =\n\t\t\t\t\t\t\t\ttypeof data.d === \"string\"\n\t\t\t\t\t\t\t\t\t? $.parseJSON(data.d)\n\t\t\t\t\t\t\t\t\t: data.d;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsource.resolveWith(this, [data]);\n\t\t\t\t\t}).fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\t\tvar errorObj = tree._makeHookContext(node, null, {\n\t\t\t\t\t\t\terror: jqXHR,\n\t\t\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\t\t\tmessage: errorThrown,\n\t\t\t\t\t\t\tdetails: jqXHR.status + \": \" + errorThrown,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsource.rejectWith(this, [errorObj]);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// #383: accept and convert ECMAScript 6 Promise\n\t\t\t\tif (\n\t\t\t\t\t$.isFunction(source.then) &&\n\t\t\t\t\t$.isFunction(source[\"catch\"])\n\t\t\t\t) {\n\t\t\t\t\tdfd = source;\n\t\t\t\t\tsource = new $.Deferred();\n\t\t\t\t\tdfd.then(\n\t\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\t\tsource.resolve(value);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction(reason) {\n\t\t\t\t\t\t\tsource.reject(reason);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif ($.isFunction(source.promise)) {\n\t\t\t\t\t// `source` is a deferred, i.e. ajax request\n\t\t\t\t\t// _assert(!node.isLoading(), \"recursive load\");\n\t\t\t\t\ttree.nodeSetStatus(ctx, \"loading\");\n\n\t\t\t\t\tsource\n\t\t\t\t\t\t.done(function(children) {\n\t\t\t\t\t\t\ttree.nodeSetStatus(ctx, \"ok\");\n\t\t\t\t\t\t\tnode._requestId = null;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.fail(function(error) {\n\t\t\t\t\t\t\tvar ctxErr;\n\n\t\t\t\t\t\t\tif (error === RECURSIVE_REQUEST_ERROR) {\n\t\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\t\"Ignored response for obsolete load request #\" +\n\t\t\t\t\t\t\t\t\t\trequestId +\n\t\t\t\t\t\t\t\t\t\t\" (expected #\" +\n\t\t\t\t\t\t\t\t\t\tnode._requestId +\n\t\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\treturn;\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\terror.node &&\n\t\t\t\t\t\t\t\terror.error &&\n\t\t\t\t\t\t\t\terror.message\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// error is already a context object\n\t\t\t\t\t\t\t\tctxErr = error;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tctxErr = tree._makeHookContext(node, null, {\n\t\t\t\t\t\t\t\t\terror: error, // it can be jqXHR or any custom error\n\t\t\t\t\t\t\t\t\targs: Array.prototype.slice.call(arguments),\n\t\t\t\t\t\t\t\t\tmessage: error\n\t\t\t\t\t\t\t\t\t\t? error.message || error.toString()\n\t\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\tif (ctxErr.message === \"[object Object]\") {\n\t\t\t\t\t\t\t\t\tctxErr.message = \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\"Load children failed (\" + ctxErr.message + \")\",\n\t\t\t\t\t\t\t\tctxErr\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\"loadError\",\n\t\t\t\t\t\t\t\t\tctxErr,\n\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t) !== false\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\ttree.nodeSetStatus(\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\"error\",\n\t\t\t\t\t\t\t\t\tctxErr.message,\n\t\t\t\t\t\t\t\t\tctxErr.details\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} else {\n\t\t\t\t\tif (ctx.options.postProcess) {\n\t\t\t\t\t\t// #792: Call postProcess for non-deferred source\n\t\t\t\t\t\tvar res = tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\"postProcess\",\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tctx.originalEvent,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tresponse: source,\n\t\t\t\t\t\t\t\terror: null,\n\t\t\t\t\t\t\t\tdataType: typeof source,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t$.isArray(res) ||\n\t\t\t\t\t\t\t($.isPlainObject(res) && $.isArray(res.children))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Use `ctx.result` if valid\n\t\t\t\t\t\t\t// (otherwise use existing data, which may have been modified in-place)\n\t\t\t\t\t\t\tsource = res;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// $.when(source) resolves also for non-deferreds\n\t\t\t\treturn $.when(source).done(function(children) {\n\t\t\t\t\tvar metaData, noDataRes;\n\n\t\t\t\t\tif ($.isPlainObject(children)) {\n\t\t\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t\t\t// Copy extra properties to tree.data.foo\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\tnode.isRootNode(),\n\t\t\t\t\t\t\t\"source may only be an object for root nodes (expecting an array of child objects otherwise)\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t$.isArray(children.children),\n\t\t\t\t\t\t\t\"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmetaData = children;\n\t\t\t\t\t\tchildren = children.children;\n\t\t\t\t\t\tdelete metaData.children;\n\t\t\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\t\t\t\t\tif (metaData[attr] !== undefined) {\n\t\t\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\t\t\tdelete metaData[attr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Copy all other attributes to tree.data.NAME\n\t\t\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t\t\t}\n\t\t\t\t\t_assert($.isArray(children), \"expected array of children\");\n\t\t\t\t\tnode._setChildren(children);\n\n\t\t\t\t\tif (tree.options.nodata && children.length === 0) {\n\t\t\t\t\t\tif ($.isFunction(tree.options.nodata)) {\n\t\t\t\t\t\t\tnoDataRes = tree.options.nodata.call(\n\t\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t\t{ type: \"nodata\" },\n\t\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttree.options.nodata === true &&\n\t\t\t\t\t\t\tnode.isRootNode()\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoDataRes = tree.options.strings.nodata;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof tree.options.nodata === \"string\" &&\n\t\t\t\t\t\t\tnode.isRootNode()\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnoDataRes = tree.options.nodata;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (noDataRes) {\n\t\t\t\t\t\t\tnode.setStatus(\"nodata\", noDataRes);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// trigger fancytreeloadchildren\n\t\t\t\t\ttree._triggerNodeEvent(\"loadChildren\", node);\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** [Not Implemented] */\n\t\t\tnodeLoadKeyPath: function(ctx, keyPathList) {\n\t\t\t\t// TODO: implement and improve\n\t\t\t\t// http://code.google.com/p/dynatree/issues/detail?id=222\n\t\t\t},\n\t\t\t/**\n\t\t\t * Remove a single direct child of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {FancytreeNode} childNode dircect child of ctx.node\n\t\t\t */\n\t\t\tnodeRemoveChild: function(ctx, childNode) {\n\t\t\t\tvar idx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\t// opts = ctx.options,\n\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: childNode }),\n\t\t\t\t\tchildren = node.children;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChild()\", node.toString(), childNode.toString());\n\n\t\t\t\tif (children.length === 1) {\n\t\t\t\t\t_assert(childNode === children[0], \"invalid single child\");\n\t\t\t\t\treturn this.nodeRemoveChildren(ctx);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.activeNode &&\n\t\t\t\t\t(childNode === this.activeNode ||\n\t\t\t\t\t\tthis.activeNode.isDescendantOf(childNode))\n\t\t\t\t) {\n\t\t\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis.focusNode &&\n\t\t\t\t\t(childNode === this.focusNode ||\n\t\t\t\t\t\tthis.focusNode.isDescendantOf(childNode))\n\t\t\t\t) {\n\t\t\t\t\tthis.focusNode = null;\n\t\t\t\t}\n\t\t\t\t// TODO: persist must take care to clear select and expand cookies\n\t\t\t\tthis.nodeRemoveMarkup(subCtx);\n\t\t\t\tthis.nodeRemoveChildren(subCtx);\n\t\t\t\tidx = $.inArray(childNode, children);\n\t\t\t\t_assert(idx >= 0, \"invalid child\");\n\t\t\t\t// Notify listeners\n\t\t\t\tnode.triggerModifyChild(\"remove\", childNode);\n\t\t\t\t// Unlink to support GC\n\t\t\t\tchildNode.visit(function(n) {\n\t\t\t\t\tn.parent = null;\n\t\t\t\t}, true);\n\t\t\t\tthis._callHook(\"treeRegisterNode\", this, false, childNode);\n\t\t\t\t// remove from child list\n\t\t\t\tchildren.splice(idx, 1);\n\t\t\t},\n\t\t\t/**Remove HTML markup for all descendents of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveChildMarkup: function(ctx) {\n\t\t\t\tvar node = ctx.node;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChildMarkup()\", node.toString());\n\t\t\t\t// TODO: Unlink attr.ftnode to support GC\n\t\t\t\tif (node.ul) {\n\t\t\t\t\tif (node.isRootNode()) {\n\t\t\t\t\t\t$(node.ul).empty();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(node.ul).remove();\n\t\t\t\t\t\tnode.ul = null;\n\t\t\t\t\t}\n\t\t\t\t\tnode.visit(function(n) {\n\t\t\t\t\t\tn.li = n.ul = null;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t/**Remove all descendants of ctx.node.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveChildren: function(ctx) {\n\t\t\t\tvar subCtx,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\tchildren = node.children;\n\t\t\t\t// opts = ctx.options;\n\n\t\t\t\t// FT.debug(\"nodeRemoveChildren()\", node.toString());\n\t\t\t\tif (!children) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (this.activeNode && this.activeNode.isDescendantOf(node)) {\n\t\t\t\t\tthis.activeNode.setActive(false); // TODO: don't fire events\n\t\t\t\t}\n\t\t\t\tif (this.focusNode && this.focusNode.isDescendantOf(node)) {\n\t\t\t\t\tthis.focusNode = null;\n\t\t\t\t}\n\t\t\t\t// TODO: persist must take care to clear select and expand cookies\n\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t\t// Unlink children to support GC\n\t\t\t\t// TODO: also delete this.children (not possible using visit())\n\t\t\t\tsubCtx = $.extend({}, ctx);\n\t\t\t\tnode.triggerModifyChild(\"remove\", null);\n\t\t\t\tnode.visit(function(n) {\n\t\t\t\t\tn.parent = null;\n\t\t\t\t\ttree._callHook(\"treeRegisterNode\", tree, false, n);\n\t\t\t\t});\n\t\t\t\tif (node.lazy) {\n\t\t\t\t\t// 'undefined' would be interpreted as 'not yet loaded' for lazy nodes\n\t\t\t\t\tnode.children = [];\n\t\t\t\t} else {\n\t\t\t\t\tnode.children = null;\n\t\t\t\t}\n\t\t\t\tif (!node.isRootNode()) {\n\t\t\t\t\tnode.expanded = false; // #449, #459\n\t\t\t\t}\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t},\n\t\t\t/**Remove HTML markup for ctx.node and all its descendents.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRemoveMarkup: function(ctx) {\n\t\t\t\tvar node = ctx.node;\n\t\t\t\t// FT.debug(\"nodeRemoveMarkup()\", node.toString());\n\t\t\t\t// TODO: Unlink attr.ftnode to support GC\n\t\t\t\tif (node.li) {\n\t\t\t\t\t$(node.li).remove();\n\t\t\t\t\tnode.li = null;\n\t\t\t\t}\n\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Create `<li><span>..</span> .. </li>` tags for this node.\n\t\t\t *\n\t\t\t * This method takes care that all HTML markup is created that is required\n\t\t\t * to display this node in its current state.\n\t\t\t *\n\t\t\t * Call this method to create new nodes, or after the strucuture\n\t\t\t * was changed (e.g. after moving this node or adding/removing children)\n\t\t\t * nodeRenderTitle() and nodeRenderStatus() are implied.\n\t\t\t *\n\t\t\t * <code>\n\t\t\t * <li id='KEY' ftnode=NODE>\n\t\t\t * <span class='fancytree-node fancytree-expanded fancytree-has-children fancytree-lastsib fancytree-exp-el fancytree-ico-e'>\n\t\t\t * <span class=\"fancytree-expander\"></span>\n\t\t\t * <span class=\"fancytree-checkbox\"></span> // only present in checkbox mode\n\t\t\t * <span class=\"fancytree-icon\"></span>\n\t\t\t * <a href=\"#\" class=\"fancytree-title\"> Node 1 </a>\n\t\t\t * </span>\n\t\t\t * <ul> // only present if node has children\n\t\t\t * <li id='KEY' ftnode=NODE> child1 ... </li>\n\t\t\t * <li id='KEY' ftnode=NODE> child2 ... </li>\n\t\t\t * </ul>\n\t\t\t * </li>\n\t\t\t * </code>\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [force=false] re-render, even if html markup was already created\n\t\t\t * @param {boolean} [deep=false] also render all descendants, even if parent is collapsed\n\t\t\t * @param {boolean} [collapsed=false] force root node to be collapsed, so we can apply animated expand later\n\t\t\t */\n\t\t\tnodeRender: function(ctx, force, deep, collapsed, _recursive) {\n\t\t\t\t/* This method must take care of all cases where the current data mode\n\t\t\t\t * (i.e. node hierarchy) does not match the current markup.\n\t\t\t\t *\n\t\t\t\t * - node was not yet rendered:\n\t\t\t\t * create markup\n\t\t\t\t * - node was rendered: exit fast\n\t\t\t\t * - children have been added\n\t\t\t\t * - children have been removed\n\t\t\t\t */\n\t\t\t\tvar childLI,\n\t\t\t\t\tchildNode1,\n\t\t\t\t\tchildNode2,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tnext,\n\t\t\t\t\tsubCtx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tfirstTime = false,\n\t\t\t\t\tparent = node.parent,\n\t\t\t\t\tisRootNode = !parent,\n\t\t\t\t\tchildren = node.children,\n\t\t\t\t\tsuccessorLi = null;\n\t\t\t\t// FT.debug(\"nodeRender(\" + !!force + \", \" + !!deep + \")\", node.toString());\n\n\t\t\t\tif (tree._enableUpdate === false) {\n\t\t\t\t\t// tree.debug(\"no render\", tree._enableUpdate);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isRootNode && !parent.ul) {\n\t\t\t\t\t// Calling node.collapse on a deep, unrendered node\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t_assert(isRootNode || parent.ul, \"parent UL must exist\");\n\n\t\t\t\t// Render the node\n\t\t\t\tif (!isRootNode) {\n\t\t\t\t\t// Discard markup on force-mode, or if it is not linked to parent <ul>\n\t\t\t\t\tif (\n\t\t\t\t\t\tnode.li &&\n\t\t\t\t\t\t(force || node.li.parentNode !== node.parent.ul)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (node.li.parentNode === node.parent.ul) {\n\t\t\t\t\t\t\t// #486: store following node, so we can insert the new markup there later\n\t\t\t\t\t\t\tsuccessorLi = node.li.nextSibling;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// May happen, when a top-level node was dropped over another\n\t\t\t\t\t\t\tthis.debug(\n\t\t\t\t\t\t\t\t\"Unlinking \" +\n\t\t\t\t\t\t\t\t\tnode +\n\t\t\t\t\t\t\t\t\t\" (must be child of \" +\n\t\t\t\t\t\t\t\t\tnode.parent +\n\t\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\t//\t this.debug(\"nodeRemoveMarkup...\");\n\t\t\t\t\t\tthis.nodeRemoveMarkup(ctx);\n\t\t\t\t\t}\n\t\t\t\t\t// Create <li><span /> </li>\n\t\t\t\t\t// node.debug(\"render...\");\n\t\t\t\t\tif (!node.li) {\n\t\t\t\t\t\t//\t node.debug(\"render... really\");\n\t\t\t\t\t\tfirstTime = true;\n\t\t\t\t\t\tnode.li = document.createElement(\"li\");\n\t\t\t\t\t\tnode.li.ftnode = node;\n\n\t\t\t\t\t\tif (node.key && opts.generateIds) {\n\t\t\t\t\t\t\tnode.li.id = opts.idPrefix + node.key;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.span = document.createElement(\"span\");\n\t\t\t\t\t\tnode.span.className = \"fancytree-node\";\n\t\t\t\t\t\tif (aria && !node.tr) {\n\t\t\t\t\t\t\t$(node.li).attr(\"role\", \"treeitem\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode.li.appendChild(node.span);\n\n\t\t\t\t\t\t// Create inner HTML for the <span> (expander, checkbox, icon, and title)\n\t\t\t\t\t\tthis.nodeRenderTitle(ctx);\n\n\t\t\t\t\t\t// Allow tweaking and binding, after node was created for the first time\n\t\t\t\t\t\tif (opts.createNode) {\n\t\t\t\t\t\t\topts.createNode.call(\n\t\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t\t{ type: \"createNode\" },\n\t\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// this.nodeRenderTitle(ctx);\n\t\t\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\t\t}\n\t\t\t\t\t// Allow tweaking after node state was rendered\n\t\t\t\t\tif (opts.renderNode) {\n\t\t\t\t\t\topts.renderNode.call(tree, { type: \"renderNode\" }, ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Visit child nodes\n\t\t\t\tif (children) {\n\t\t\t\t\tif (isRootNode || node.expanded || deep === true) {\n\t\t\t\t\t\t// Create a UL to hold the children\n\t\t\t\t\t\tif (!node.ul) {\n\t\t\t\t\t\t\tnode.ul = document.createElement(\"ul\");\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(collapsed === true && !_recursive) ||\n\t\t\t\t\t\t\t\t!node.expanded\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// hide top UL, so we can use an animation to show it later\n\t\t\t\t\t\t\t\tnode.ul.style.display = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (aria) {\n\t\t\t\t\t\t\t\t$(node.ul).attr(\"role\", \"group\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (node.li) {\n\t\t\t\t\t\t\t\t// issue #67\n\t\t\t\t\t\t\t\tnode.li.appendChild(node.ul);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnode.tree.$div.append(node.ul);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Add child markup\n\t\t\t\t\t\tfor (i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: children[i] });\n\t\t\t\t\t\t\tthis.nodeRender(subCtx, force, deep, false, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Remove <li> if nodes have moved to another parent\n\t\t\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\t\t\twhile (childLI) {\n\t\t\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\t\t\tif (childNode2 && childNode2.parent !== node) {\n\t\t\t\t\t\t\t\tnode.debug(\n\t\t\t\t\t\t\t\t\t\"_fixParent: remove missing \" + childNode2,\n\t\t\t\t\t\t\t\t\tchildLI\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tnext = childLI.nextSibling;\n\t\t\t\t\t\t\t\tchildLI.parentNode.removeChild(childLI);\n\t\t\t\t\t\t\t\tchildLI = next;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tchildLI = childLI.nextSibling;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Make sure, that <li> order matches node.children order.\n\t\t\t\t\t\tchildLI = node.ul.firstChild;\n\t\t\t\t\t\tfor (i = 0, l = children.length - 1; i < l; i++) {\n\t\t\t\t\t\t\tchildNode1 = children[i];\n\t\t\t\t\t\t\tchildNode2 = childLI.ftnode;\n\t\t\t\t\t\t\tif (childNode1 !== childNode2) {\n\t\t\t\t\t\t\t\t// node.debug(\"_fixOrder: mismatch at index \" + i + \": \" + childNode1 + \" != \" + childNode2);\n\t\t\t\t\t\t\t\tnode.ul.insertBefore(\n\t\t\t\t\t\t\t\t\tchildNode1.li,\n\t\t\t\t\t\t\t\t\tchildNode2.li\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\tchildLI = childLI.nextSibling;\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} else {\n\t\t\t\t\t// No children: remove markup if any\n\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\t// alert(\"remove child markup for \" + node);\n\t\t\t\t\t\tthis.warn(\"remove child markup for \" + node);\n\t\t\t\t\t\tthis.nodeRemoveChildMarkup(ctx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isRootNode) {\n\t\t\t\t\t// Update element classes according to node state\n\t\t\t\t\t// this.nodeRenderStatus(ctx);\n\t\t\t\t\t// Finally add the whole structure to the DOM, so the browser can render\n\t\t\t\t\tif (firstTime) {\n\t\t\t\t\t\t// #486: successorLi is set, if we re-rendered (i.e. discarded)\n\t\t\t\t\t\t// existing markup, which we want to insert at the same position.\n\t\t\t\t\t\t// (null is equivalent to append)\n\t\t\t\t\t\t//\t\t\t\tparent.ul.appendChild(node.li);\n\t\t\t\t\t\tparent.ul.insertBefore(node.li, successorLi);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Create HTML inside the node's outer <span> (i.e. expander, checkbox,\n\t\t\t * icon, and title).\n\t\t\t *\n\t\t\t * nodeRenderStatus() is implied.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {string} [title] optinal new title\n\t\t\t */\n\t\t\tnodeRenderTitle: function(ctx, title) {\n\t\t\t\t// set node connector images, links and text\n\t\t\t\tvar checkbox,\n\t\t\t\t\tclassName,\n\t\t\t\t\ticon,\n\t\t\t\t\tnodeTitle,\n\t\t\t\t\trole,\n\t\t\t\t\ttabindex,\n\t\t\t\t\ttooltip,\n\t\t\t\t\ticonTooltip,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tlevel = node.getLevel(),\n\t\t\t\t\tares = [];\n\n\t\t\t\tif (title !== undefined) {\n\t\t\t\t\tnode.title = title;\n\t\t\t\t}\n\t\t\t\tif (!node.span || tree._enableUpdate === false) {\n\t\t\t\t\t// Silently bail out if node was not rendered yet, assuming\n\t\t\t\t\t// node.render() will be called as the node becomes visible\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Connector (expanded, expandable or simple)\n\t\t\t\trole =\n\t\t\t\t\taria && node.hasChildren() !== false\n\t\t\t\t\t\t? \" role='button'\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\tif (level < opts.minExpandLevel) {\n\t\t\t\t\tif (!node.lazy) {\n\t\t\t\t\t\tnode.expanded = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (level > 1) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-expander fancytree-expander-fixed'></span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// .. else (i.e. for root level) skip expander/connector alltogether\n\t\t\t\t} else {\n\t\t\t\t\tares.push(\n\t\t\t\t\t\t\"<span \" + role + \" class='fancytree-expander'></span>\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Checkbox mode\n\t\t\t\tcheckbox = FT.evalOption(\"checkbox\", node, node, opts, false);\n\n\t\t\t\tif (checkbox && !node.isStatusNode()) {\n\t\t\t\t\trole = aria ? \" role='checkbox'\" : \"\";\n\t\t\t\t\tclassName = \"fancytree-checkbox\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tcheckbox === \"radio\" ||\n\t\t\t\t\t\t(node.parent && node.parent.radiogroup)\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassName += \" fancytree-radio\";\n\t\t\t\t\t}\n\t\t\t\t\tares.push(\n\t\t\t\t\t\t\"<span \" + role + \" class='\" + className + \"'></span>\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Folder or doctype icon\n\t\t\t\tif (node.data.iconClass !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\t// Handle / warn about backward compatibility\n\t\t\t\t\tif (node.icon) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'iconClass' node option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\"'iconClass' node option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode.icon = node.data.iconClass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If opts.icon is a callback and returns something other than undefined, use that\n\t\t\t\t// else if node.icon is a boolean or string, use that\n\t\t\t\t// else if opts.icon is a boolean or string, use that\n\t\t\t\t// else show standard icon (which may be different for folders or documents)\n\t\t\t\ticon = FT.evalOption(\"icon\", node, node, opts, true);\n\t\t\t\t// if( typeof icon !== \"boolean\" ) {\n\t\t\t\t// \t// icon is defined, but not true/false: must be a string\n\t\t\t\t// \ticon = \"\" + icon;\n\t\t\t\t// }\n\t\t\t\tif (icon !== false) {\n\t\t\t\t\trole = aria ? \" role='presentation'\" : \"\";\n\n\t\t\t\t\ticonTooltip = FT.evalOption(\n\t\t\t\t\t\t\"iconTooltip\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\topts,\n\t\t\t\t\t\tnull\n\t\t\t\t\t);\n\t\t\t\t\ticonTooltip = iconTooltip\n\t\t\t\t\t\t? \" title='\" + _escapeTooltip(iconTooltip) + \"'\"\n\t\t\t\t\t\t: \"\";\n\n\t\t\t\t\tif (typeof icon === \"string\") {\n\t\t\t\t\t\tif (TEST_IMG.test(icon)) {\n\t\t\t\t\t\t\t// node.icon is an image url. Prepend imagePath\n\t\t\t\t\t\t\ticon =\n\t\t\t\t\t\t\t\ticon.charAt(0) === \"/\"\n\t\t\t\t\t\t\t\t\t? icon\n\t\t\t\t\t\t\t\t\t: (opts.imagePath || \"\") + icon;\n\t\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\t\"<img src='\" +\n\t\t\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\t\"' class='fancytree-icon'\" +\n\t\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\t\" alt='' />\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t\ticon +\n\t\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\t\"></span>\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (icon.text) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t(icon.addClass || \"\") +\n\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t\t\tFT.escapeHtml(icon.text) +\n\t\t\t\t\t\t\t\t\"</span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (icon.html) {\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-custom-icon \" +\n\t\t\t\t\t\t\t\t(icon.addClass || \"\") +\n\t\t\t\t\t\t\t\t\"'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t\t\ticon.html +\n\t\t\t\t\t\t\t\t\"</span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// standard icon: theme css will take care of this\n\t\t\t\t\t\tares.push(\n\t\t\t\t\t\t\t\"<span \" +\n\t\t\t\t\t\t\t\trole +\n\t\t\t\t\t\t\t\t\" class='fancytree-icon'\" +\n\t\t\t\t\t\t\t\ticonTooltip +\n\t\t\t\t\t\t\t\t\"></span>\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Node title\n\t\t\t\tnodeTitle = \"\";\n\t\t\t\tif (opts.renderTitle) {\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\topts.renderTitle.call(\n\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t{ type: \"renderTitle\" },\n\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t) || \"\";\n\t\t\t\t}\n\t\t\t\tif (!nodeTitle) {\n\t\t\t\t\ttooltip = FT.evalOption(\"tooltip\", node, node, opts, null);\n\t\t\t\t\tif (tooltip === true) {\n\t\t\t\t\t\ttooltip = node.title;\n\t\t\t\t\t}\n\t\t\t\t\t// if( node.tooltip ) {\n\t\t\t\t\t// \ttooltip = node.tooltip;\n\t\t\t\t\t// } else if ( opts.tooltip ) {\n\t\t\t\t\t// \ttooltip = opts.tooltip === true ? node.title : opts.tooltip.call(tree, node);\n\t\t\t\t\t// }\n\t\t\t\t\ttooltip = tooltip\n\t\t\t\t\t\t? \" title='\" + _escapeTooltip(tooltip) + \"'\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\ttabindex = opts.titlesTabbable ? \" tabindex='0'\" : \"\";\n\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\t\"<span class='fancytree-title'\" +\n\t\t\t\t\t\ttooltip +\n\t\t\t\t\t\ttabindex +\n\t\t\t\t\t\t\">\" +\n\t\t\t\t\t\t(opts.escapeTitles\n\t\t\t\t\t\t\t? FT.escapeHtml(node.title)\n\t\t\t\t\t\t\t: node.title) +\n\t\t\t\t\t\t\"</span>\";\n\t\t\t\t}\n\t\t\t\tares.push(nodeTitle);\n\t\t\t\t// Note: this will trigger focusout, if node had the focus\n\t\t\t\t//$(node.span).html(ares.join(\"\")); // it will cleanup the jQuery data currently associated with SPAN (if any), but it executes more slowly\n\t\t\t\tnode.span.innerHTML = ares.join(\"\");\n\t\t\t\t// Update CSS classes\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\tif (opts.enhanceTitle) {\n\t\t\t\t\tctx.$title = $(\">span.fancytree-title\", node.span);\n\t\t\t\t\tnodeTitle =\n\t\t\t\t\t\topts.enhanceTitle.call(\n\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\t{ type: \"enhanceTitle\" },\n\t\t\t\t\t\t\tctx\n\t\t\t\t\t\t) || \"\";\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Update element classes according to node state.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeRenderStatus: function(ctx) {\n\t\t\t\t// Set classes for current status\n\t\t\t\tvar $ariaElem,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\t//\t\t\tnodeContainer = node[tree.nodeContainerAttrName],\n\t\t\t\t\thasChildren = node.hasChildren(),\n\t\t\t\t\tisLastSib = node.isLastSibling(),\n\t\t\t\t\taria = opts.aria,\n\t\t\t\t\tcn = opts._classNames,\n\t\t\t\t\tcnList = [],\n\t\t\t\t\tstatusElem = node[tree.statusClassPropName];\n\n\t\t\t\tif (!statusElem || tree._enableUpdate === false) {\n\t\t\t\t\t// if this function is called for an unrendered node, ignore it (will be updated on nect render anyway)\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (aria) {\n\t\t\t\t\t$ariaElem = $(node.tr || node.li);\n\t\t\t\t}\n\t\t\t\t// Build a list of class names that we will add to the node <span>\n\t\t\t\tcnList.push(cn.node);\n\t\t\t\tif (tree.activeNode === node) {\n\t\t\t\t\tcnList.push(cn.active);\n\t\t\t\t\t// \t\t$(\">span.fancytree-title\", statusElem).attr(\"tabindex\", \"0\");\n\t\t\t\t\t// \t\ttree.$container.removeAttr(\"tabindex\");\n\t\t\t\t\t// }else{\n\t\t\t\t\t// \t\t$(\">span.fancytree-title\", statusElem).removeAttr(\"tabindex\");\n\t\t\t\t\t// \t\ttree.$container.attr(\"tabindex\", \"0\");\n\t\t\t\t}\n\t\t\t\tif (tree.focusNode === node) {\n\t\t\t\t\tcnList.push(cn.focused);\n\t\t\t\t}\n\t\t\t\tif (node.expanded) {\n\t\t\t\t\tcnList.push(cn.expanded);\n\t\t\t\t}\n\t\t\t\tif (aria) {\n\t\t\t\t\tif (hasChildren !== false) {\n\t\t\t\t\t\t$ariaElem.attr(\"aria-expanded\", Boolean(node.expanded));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$ariaElem.removeAttr(\"aria-expanded\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (node.folder) {\n\t\t\t\t\tcnList.push(cn.folder);\n\t\t\t\t}\n\t\t\t\tif (hasChildren !== false) {\n\t\t\t\t\tcnList.push(cn.hasChildren);\n\t\t\t\t}\n\t\t\t\t// TODO: required?\n\t\t\t\tif (isLastSib) {\n\t\t\t\t\tcnList.push(cn.lastsib);\n\t\t\t\t}\n\t\t\t\tif (node.lazy && node.children == null) {\n\t\t\t\t\tcnList.push(cn.lazy);\n\t\t\t\t}\n\t\t\t\tif (node.partload) {\n\t\t\t\t\tcnList.push(cn.partload);\n\t\t\t\t}\n\t\t\t\tif (node.partsel) {\n\t\t\t\t\tcnList.push(cn.partsel);\n\t\t\t\t}\n\t\t\t\tif (FT.evalOption(\"unselectable\", node, node, opts, false)) {\n\t\t\t\t\tcnList.push(cn.unselectable);\n\t\t\t\t}\n\t\t\t\tif (node._isLoading) {\n\t\t\t\t\tcnList.push(cn.loading);\n\t\t\t\t}\n\t\t\t\tif (node._error) {\n\t\t\t\t\tcnList.push(cn.error);\n\t\t\t\t}\n\t\t\t\tif (node.statusNodeType) {\n\t\t\t\t\tcnList.push(cn.statusNodePrefix + node.statusNodeType);\n\t\t\t\t}\n\t\t\t\tif (node.selected) {\n\t\t\t\t\tcnList.push(cn.selected);\n\t\t\t\t\tif (aria) {\n\t\t\t\t\t\t$ariaElem.attr(\"aria-selected\", true);\n\t\t\t\t\t}\n\t\t\t\t} else if (aria) {\n\t\t\t\t\t$ariaElem.attr(\"aria-selected\", false);\n\t\t\t\t}\n\t\t\t\tif (node.extraClasses) {\n\t\t\t\t\tcnList.push(node.extraClasses);\n\t\t\t\t}\n\t\t\t\t// IE6 doesn't correctly evaluate multiple class names,\n\t\t\t\t// so we create combined class names that can be used in the CSS\n\t\t\t\tif (hasChildren === false) {\n\t\t\t\t\tcnList.push(\n\t\t\t\t\t\tcn.combinedExpanderPrefix + \"n\" + (isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tcnList.push(\n\t\t\t\t\t\tcn.combinedExpanderPrefix +\n\t\t\t\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t\t\t\t(node.lazy && node.children == null ? \"d\" : \"\") +\n\t\t\t\t\t\t\t(isLastSib ? \"l\" : \"\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcnList.push(\n\t\t\t\t\tcn.combinedIconPrefix +\n\t\t\t\t\t\t(node.expanded ? \"e\" : \"c\") +\n\t\t\t\t\t\t(node.folder ? \"f\" : \"\")\n\t\t\t\t);\n\t\t\t\t// node.span.className = cnList.join(\" \");\n\t\t\t\tstatusElem.className = cnList.join(\" \");\n\n\t\t\t\t// TODO: we should not set this in the <span> tag also, if we set it here:\n\t\t\t\t// Maybe most (all) of the classes should be set in LI instead of SPAN?\n\t\t\t\tif (node.li) {\n\t\t\t\t\t// #719: we have to consider that there may be already other classes:\n\t\t\t\t\t$(node.li).toggleClass(cn.lastsib, isLastSib);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Activate node.\n\t\t\t * flag defaults to true.\n\t\t\t * If flag is true, the node is activated (must be a synchronous operation)\n\t\t\t * If flag is false, the node is deactivated (must be a synchronous operation)\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false, noFocus: false}\n\t\t\t * @returns {$.Promise}\n\t\t\t */\n\t\t\tnodeSetActive: function(ctx, flag, callOpts) {\n\t\t\t\t// Handle user click / [space] / [enter], according to clickFolderMode.\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar subCtx,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true,\n\t\t\t\t\tnoFocus = callOpts.noFocus === true,\n\t\t\t\t\tscroll = callOpts.scrollIntoView !== false,\n\t\t\t\t\tisActive = node === tree.activeNode;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\t\t\t\t// node.debug(\"nodeSetActive\", flag);\n\n\t\t\t\tif (isActive === flag) {\n\t\t\t\t\t// Nothing to do\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t} else if (\n\t\t\t\t\tflag &&\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeActivate\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\t// Callback returned false\n\t\t\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t\t\t}\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (tree.activeNode) {\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\ttree.activeNode !== node,\n\t\t\t\t\t\t\t\"node was active (inconsistency)\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsubCtx = $.extend({}, ctx, { node: tree.activeNode });\n\t\t\t\t\t\ttree.nodeSetActive(subCtx, false);\n\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\ttree.activeNode === null,\n\t\t\t\t\t\t\t\"deactivate was out of sync?\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (opts.activeVisible) {\n\t\t\t\t\t\t// If no focus is set (noFocus: true) and there is no focused node, this node is made visible.\n\t\t\t\t\t\t// scroll = noFocus && tree.focusNode == null;\n\t\t\t\t\t\t// #863: scroll by default (unless `scrollIntoView: false` was passed)\n\t\t\t\t\t\tnode.makeVisible({ scrollIntoView: scroll });\n\t\t\t\t\t}\n\t\t\t\t\ttree.activeNode = node;\n\t\t\t\t\ttree.nodeRenderStatus(ctx);\n\t\t\t\t\tif (!noFocus) {\n\t\t\t\t\t\ttree.nodeSetFocus(ctx);\n\t\t\t\t\t}\n\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\"activate\",\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_assert(\n\t\t\t\t\t\ttree.activeNode === node,\n\t\t\t\t\t\t\"node was not active (inconsistency)\"\n\t\t\t\t\t);\n\t\t\t\t\ttree.activeNode = null;\n\t\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\"deactivate\",\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t},\n\t\t\t/** Expand or collapse node, return Deferred.promise.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to {noAnimation: false, noEvents: false}\n\t\t\t * @returns {$.Promise} The deferred will be resolved as soon as the (lazy)\n\t\t\t * data was retrieved, rendered, and the expand animation finshed.\n\t\t\t */\n\t\t\tnodeSetExpanded: function(ctx, flag, callOpts) {\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar _afterLoad,\n\t\t\t\t\tdfd,\n\t\t\t\t\ti,\n\t\t\t\t\tl,\n\t\t\t\t\tparents,\n\t\t\t\t\tprevAC,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoAnimation = callOpts.noAnimation === true,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// node.debug(\"nodeSetExpanded(\" + flag + \")\");\n\n\t\t\t\tif ((node.expanded && flag) || (!node.expanded && !flag)) {\n\t\t\t\t\t// Nothing to do\n\t\t\t\t\t// node.debug(\"nodeSetExpanded(\" + flag + \"): nothing to do\");\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t} else if (flag && !node.lazy && !node.hasChildren()) {\n\t\t\t\t\t// Prevent expanding of empty nodes\n\t\t\t\t\t// return _getRejectedPromise(node, [\"empty\"]);\n\t\t\t\t\treturn _getResolvedPromise(node);\n\t\t\t\t} else if (!flag && node.getLevel() < opts.minExpandLevel) {\n\t\t\t\t\t// Prevent collapsing locked levels\n\t\t\t\t\treturn _getRejectedPromise(node, [\"locked\"]);\n\t\t\t\t} else if (\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeExpand\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\t// Callback returned false\n\t\t\t\t\treturn _getRejectedPromise(node, [\"rejected\"]);\n\t\t\t\t}\n\t\t\t\t// If this node inside a collpased node, no animation and scrolling is needed\n\t\t\t\tif (!noAnimation && !node.isVisible()) {\n\t\t\t\t\tnoAnimation = callOpts.noAnimation = true;\n\t\t\t\t}\n\n\t\t\t\tdfd = new $.Deferred();\n\n\t\t\t\t// Auto-collapse mode: collapse all siblings\n\t\t\t\tif (flag && !node.expanded && opts.autoCollapse) {\n\t\t\t\t\tparents = node.getParentList(false, true);\n\t\t\t\t\tprevAC = opts.autoCollapse;\n\t\t\t\t\ttry {\n\t\t\t\t\t\topts.autoCollapse = false;\n\t\t\t\t\t\tfor (i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\t\t// TODO: should return promise?\n\t\t\t\t\t\t\tthis._callHook(\n\t\t\t\t\t\t\t\t\"nodeCollapseSiblings\",\n\t\t\t\t\t\t\t\tparents[i],\n\t\t\t\t\t\t\t\tcallOpts\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} finally {\n\t\t\t\t\t\topts.autoCollapse = prevAC;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger expand/collapse after expanding\n\t\t\t\tdfd.done(function() {\n\t\t\t\t\tvar lastChild = node.getLastChild();\n\n\t\t\t\t\tif (flag && opts.autoScroll && !noAnimation && lastChild) {\n\t\t\t\t\t\t// Scroll down to last child, but keep current node visible\n\t\t\t\t\t\tlastChild\n\t\t\t\t\t\t\t.scrollIntoView(true, { topNode: node })\n\t\t\t\t\t\t\t.always(function() {\n\t\t\t\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\tflag ? \"expand\" : \"collapse\",\n\t\t\t\t\t\t\t\t\t\tctx\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} else {\n\t\t\t\t\t\tif (!noEvents) {\n\t\t\t\t\t\t\tctx.tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\tflag ? \"expand\" : \"collapse\",\n\t\t\t\t\t\t\t\tctx\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\t// vvv Code below is executed after loading finished:\n\t\t\t\t_afterLoad = function(callback) {\n\t\t\t\t\tvar cn = opts._classNames,\n\t\t\t\t\t\tisVisible,\n\t\t\t\t\t\tisExpanded,\n\t\t\t\t\t\teffect = opts.toggleEffect;\n\n\t\t\t\t\tnode.expanded = flag;\n\t\t\t\t\t// Create required markup, but make sure the top UL is hidden, so we\n\t\t\t\t\t// can animate later\n\t\t\t\t\ttree._callHook(\"nodeRender\", ctx, false, false, true);\n\n\t\t\t\t\t// Hide children, if node is collapsed\n\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\tisVisible = node.ul.style.display !== \"none\";\n\t\t\t\t\t\tisExpanded = !!node.expanded;\n\t\t\t\t\t\tif (isVisible === isExpanded) {\n\t\t\t\t\t\t\tnode.warn(\n\t\t\t\t\t\t\t\t\"nodeSetExpanded: UL.style.display already set\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (!effect || noAnimation) {\n\t\t\t\t\t\t\tnode.ul.style.display =\n\t\t\t\t\t\t\t\tnode.expanded || !parent ? \"\" : \"none\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t\t\t// has position: absolute.\n\t\t\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t\t\t// See #716, #717\n\t\t\t\t\t\t\t$(node.li).addClass(cn.animating); // #717\n\n\t\t\t\t\t\t\tif (!$.isFunction($(node.ul)[effect.effect])) {\n\t\t\t\t\t\t\t\t// The UI toggle() effect works with the ext-wide extension,\n\t\t\t\t\t\t\t\t// while jQuery.animate() has problems when the title span\n\t\t\t\t\t\t\t\t// has positon: absolute.\n\t\t\t\t\t\t\t\t// Since jQuery UI 1.12, the blind effect requires the parent\n\t\t\t\t\t\t\t\t// element to have 'position: relative'.\n\t\t\t\t\t\t\t\t// See #716, #717\n\t\t\t\t\t\t\t\t// tree.debug(\"use specified effect (\" + effect.effect + \") with the jqueryui.toggle method\");\n\n\t\t\t\t\t\t\t\t// try to stop an animation that might be already in progress\n\t\t\t\t\t\t\t\t$(node.ul).stop(true, true); //< does not work after resetLazy has been called for a node whose animation wasn't complete and effect was \"blind\"\n\n\t\t\t\t\t\t\t\t// dirty fix to remove a defunct animation (effect: \"blind\") after resetLazy has been called\n\t\t\t\t\t\t\t\t$(node.ul)\n\t\t\t\t\t\t\t\t\t.parent()\n\t\t\t\t\t\t\t\t\t.find(\".ui-effects-placeholder\")\n\t\t\t\t\t\t\t\t\t.remove();\n\n\t\t\t\t\t\t\t\t$(node.ul).toggle(\n\t\t\t\t\t\t\t\t\teffect.effect,\n\t\t\t\t\t\t\t\t\teffect.options,\n\t\t\t\t\t\t\t\t\teffect.duration,\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t// node.debug(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\t\t\t\tcallback();\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\ttree.debug(\n\t\t\t\t\t\t\t\t\t\"use jquery.\" + effect.effect + \" method\"\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t$(node.ul)[effect.effect]({\n\t\t\t\t\t\t\t\t\tduration: effect.duration,\n\t\t\t\t\t\t\t\t\talways: function() {\n\t\t\t\t\t\t\t\t\t\t// node.debug(\"fancytree-animating end: \" + node.li.className);\n\t\t\t\t\t\t\t\t\t\t$(this).removeClass(cn.animating); // #716\n\t\t\t\t\t\t\t\t\t\t$(node.li).removeClass(cn.animating); // #717\n\t\t\t\t\t\t\t\t\t\tcallback();\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\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback();\n\t\t\t\t};\n\t\t\t\t// ^^^ Code above is executed after loading finshed.\n\n\t\t\t\t// Load lazy nodes, if any. Then continue with _afterLoad()\n\t\t\t\tif (flag && node.lazy && node.hasChildren() === undefined) {\n\t\t\t\t\t// node.debug(\"nodeSetExpanded: load start...\");\n\t\t\t\t\tnode.load()\n\t\t\t\t\t\t.done(function() {\n\t\t\t\t\t\t\t// node.debug(\"nodeSetExpanded: load done\");\n\t\t\t\t\t\t\tif (dfd.notifyWith) {\n\t\t\t\t\t\t\t\t// requires jQuery 1.6+\n\t\t\t\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t_afterLoad(function() {\n\t\t\t\t\t\t\t\tdfd.resolveWith(node);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.fail(function(errMsg) {\n\t\t\t\t\t\t\t_afterLoad(function() {\n\t\t\t\t\t\t\t\tdfd.rejectWith(node, [\n\t\t\t\t\t\t\t\t\t\"load failed (\" + errMsg + \")\",\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\tvar source = tree._triggerNodeEvent(\"lazyLoad\", node, ctx.originalEvent);\n\t\t\t\t\t_assert(typeof source !== \"boolean\", \"lazyLoad event must return source in data.result\");\n\t\t\t\t\tnode.debug(\"nodeSetExpanded: load start...\");\n\t\t\t\t\tthis._callHook(\"nodeLoadChildren\", ctx, source).done(function(){\n\t\t\t\t\t\tnode.debug(\"nodeSetExpanded: load done\");\n\t\t\t\t\t\tif(dfd.notifyWith){ // requires jQuery 1.6+\n\t\t\t\t\t\t\tdfd.notifyWith(node, [\"loaded\"]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_afterLoad.call(tree);\n\t\t\t\t\t}).fail(function(errMsg){\n\t\t\t\t\t\tdfd.rejectWith(node, [\"load failed (\" + errMsg + \")\"]);\n\t\t\t\t\t});\n\t\t\t\t\t*/\n\t\t\t\t} else {\n\t\t\t\t\t_afterLoad(function() {\n\t\t\t\t\t\tdfd.resolveWith(node);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// node.debug(\"nodeSetExpanded: returns\");\n\t\t\t\treturn dfd.promise();\n\t\t\t},\n\t\t\t/** Focus or blur this node.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t */\n\t\t\tnodeSetFocus: function(ctx, flag) {\n\t\t\t\t// ctx.node.debug(\"nodeSetFocus(\" + flag + \")\");\n\t\t\t\tvar ctx2,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\tnode = ctx.node,\n\t\t\t\t\topts = tree.options,\n\t\t\t\t\t// et = ctx.originalEvent && ctx.originalEvent.type,\n\t\t\t\t\tisInput = ctx.originalEvent\n\t\t\t\t\t\t? $(ctx.originalEvent.target).is(\":input\")\n\t\t\t\t\t\t: false;\n\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// (node || tree).debug(\"nodeSetFocus(\" + flag + \"), event: \" + et + \", isInput: \"+ isInput);\n\t\t\t\t// Blur previous node if any\n\t\t\t\tif (tree.focusNode) {\n\t\t\t\t\tif (tree.focusNode === node && flag) {\n\t\t\t\t\t\t// node.debug(\"nodeSetFocus(\" + flag + \"): nothing to do\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tctx2 = $.extend({}, ctx, { node: tree.focusNode });\n\t\t\t\t\ttree.focusNode = null;\n\t\t\t\t\tthis._triggerNodeEvent(\"blur\", ctx2);\n\t\t\t\t\tthis._callHook(\"nodeRenderStatus\", ctx2);\n\t\t\t\t}\n\t\t\t\t// Set focus to container and node\n\t\t\t\tif (flag) {\n\t\t\t\t\tif (!this.hasFocus()) {\n\t\t\t\t\t\tnode.debug(\"nodeSetFocus: forcing container focus\");\n\t\t\t\t\t\tthis._callHook(\"treeSetFocus\", ctx, true, {\n\t\t\t\t\t\t\tcalledByNode: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tnode.makeVisible({ scrollIntoView: false });\n\t\t\t\t\ttree.focusNode = node;\n\t\t\t\t\tif (opts.titlesTabbable) {\n\t\t\t\t\t\tif (!isInput) {\n\t\t\t\t\t\t\t// #621\n\t\t\t\t\t\t\t$(node.span)\n\t\t\t\t\t\t\t\t.find(\".fancytree-title\")\n\t\t\t\t\t\t\t\t.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We cannot set KB focus to a node, so use the tree container\n\t\t\t\t\t\t// #563, #570: IE scrolls on every call to .focus(), if the container\n\t\t\t\t\t\t// is partially outside the viewport. So do it only, when absolutely\n\t\t\t\t\t\t// neccessary:\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t$(document.activeElement).closest(\n\t\t\t\t\t\t\t\t\".fancytree-container\"\n\t\t\t\t\t\t\t).length === 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t$(tree.$container).focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (opts.aria) {\n\t\t\t\t\t\t// Set active descendant to node's span ID (create one, if needed)\n\t\t\t\t\t\t$(tree.$container).attr(\n\t\t\t\t\t\t\t\"aria-activedescendant\",\n\t\t\t\t\t\t\t$(node.tr || node.li)\n\t\t\t\t\t\t\t\t.uniqueId()\n\t\t\t\t\t\t\t\t.attr(\"id\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// \"ftal_\" + opts.idPrefix + node.key);\n\t\t\t\t\t}\n\t\t\t\t\t// $(node.span).find(\".fancytree-title\").focus();\n\t\t\t\t\tthis._triggerNodeEvent(\"focus\", ctx);\n\t\t\t\t\t// if( opts.autoActivate ){\n\t\t\t\t\t// \ttree.nodeSetActive(ctx, true);\n\t\t\t\t\t// }\n\t\t\t\t\tif (opts.autoScroll) {\n\t\t\t\t\t\tnode.scrollIntoView();\n\t\t\t\t\t}\n\t\t\t\t\tthis._callHook(\"nodeRenderStatus\", ctx);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** (De)Select node, return new status (sync).\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t * @param {object} [opts] additional options. Defaults to {noEvents: false,\n\t\t\t * propagateDown: null, propagateUp: null,\n\t\t\t * callback: null,\n\t\t\t * }\n\t\t\t * @returns {boolean} previous status\n\t\t\t */\n\t\t\tnodeSetSelected: function(ctx, flag, callOpts) {\n\t\t\t\tcallOpts = callOpts || {};\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\topts = ctx.options,\n\t\t\t\t\tnoEvents = callOpts.noEvents === true,\n\t\t\t\t\tparent = node.parent;\n\n\t\t\t\t// flag defaults to true\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// node.debug(\"nodeSetSelected(\" + flag + \")\", ctx);\n\n\t\t\t\t// Cannot (de)select unselectable nodes directly (only by propagation or\n\t\t\t\t// by setting the `.selected` property)\n\t\t\t\tif (FT.evalOption(\"unselectable\", node, node, opts, false)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remember the user's intent, in case down -> up propagation prevents\n\t\t\t\t// applying it to node.selected\n\t\t\t\tnode._lastSelectIntent = flag; // Confusing use of '!'\n\n\t\t\t\t// Nothing to do?\n\t\t\t\t/*jshint -W018 */ if (!!node.selected === flag) {\n\t\t\t\t\tif (opts.selectMode === 3 && node.partsel && !flag) {\n\t\t\t\t\t\t// If propagation prevented selecting this node last time, we still\n\t\t\t\t\t\t// want to allow to apply setSelected(false) now\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn flag;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/*jshint +W018 */\n\n\t\t\t\tif (\n\t\t\t\t\t!noEvents &&\n\t\t\t\t\tthis._triggerNodeEvent(\n\t\t\t\t\t\t\"beforeSelect\",\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\tctx.originalEvent\n\t\t\t\t\t) === false\n\t\t\t\t) {\n\t\t\t\t\treturn !!node.selected;\n\t\t\t\t}\n\t\t\t\tif (flag && opts.selectMode === 1) {\n\t\t\t\t\t// single selection mode (we don't uncheck all tree nodes, for performance reasons)\n\t\t\t\t\tif (tree.lastSelectedNode) {\n\t\t\t\t\t\ttree.lastSelectedNode.setSelected(false);\n\t\t\t\t\t}\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t} else if (\n\t\t\t\t\topts.selectMode === 3 &&\n\t\t\t\t\tparent &&\n\t\t\t\t\t!parent.radiogroup &&\n\t\t\t\t\t!node.radiogroup\n\t\t\t\t) {\n\t\t\t\t\t// multi-hierarchical selection mode\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t\tnode.fixSelection3AfterClick(callOpts);\n\t\t\t\t} else if (parent && parent.radiogroup) {\n\t\t\t\t\tnode.visitSiblings(function(n) {\n\t\t\t\t\t\tn._changeSelectStatusAttrs(flag && n === node);\n\t\t\t\t\t}, true);\n\t\t\t\t} else {\n\t\t\t\t\t// default: selectMode: 2, multi selection mode\n\t\t\t\t\tnode.selected = flag;\n\t\t\t\t}\n\t\t\t\tthis.nodeRenderStatus(ctx);\n\t\t\t\ttree.lastSelectedNode = flag ? node : null;\n\t\t\t\tif (!noEvents) {\n\t\t\t\t\ttree._triggerNodeEvent(\"select\", ctx);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Show node status (ok, loading, error, nodata) using styles and a dummy child node.\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param status\n\t\t\t * @param message\n\t\t\t * @param details\n\t\t\t * @since 2.3\n\t\t\t */\n\t\t\tnodeSetStatus: function(ctx, status, message, details) {\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\ttree = ctx.tree;\n\n\t\t\t\tfunction _clearStatusNode() {\n\t\t\t\t\t// Remove dedicated dummy node, if any\n\t\t\t\t\tvar firstChild = node.children ? node.children[0] : null;\n\t\t\t\t\tif (firstChild && firstChild.isStatusNode()) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// I've seen exceptions here with loadKeyPath...\n\t\t\t\t\t\t\tif (node.ul) {\n\t\t\t\t\t\t\t\tnode.ul.removeChild(firstChild.li);\n\t\t\t\t\t\t\t\tfirstChild.li = null; // avoid leaks (DT issue 215)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\tif (node.children.length === 1) {\n\t\t\t\t\t\t\tnode.children = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.children.shift();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfunction _setStatusNode(data, type) {\n\t\t\t\t\t// Create/modify the dedicated dummy node for 'loading...' or\n\t\t\t\t\t// 'error!' status. (only called for direct child of the invisible\n\t\t\t\t\t// system root)\n\t\t\t\t\tvar firstChild = node.children ? node.children[0] : null;\n\t\t\t\t\tif (firstChild && firstChild.isStatusNode()) {\n\t\t\t\t\t\t$.extend(firstChild, data);\n\t\t\t\t\t\tfirstChild.statusNodeType = type;\n\t\t\t\t\t\ttree._callHook(\"nodeRenderTitle\", firstChild);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode._setChildren([data]);\n\t\t\t\t\t\tnode.children[0].statusNodeType = type;\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t}\n\t\t\t\t\treturn node.children[0];\n\t\t\t\t}\n\n\t\t\t\tswitch (status) {\n\t\t\t\t\tcase \"ok\":\n\t\t\t\t\t\t_clearStatusNode();\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"loading\":\n\t\t\t\t\t\tif (!node.parent) {\n\t\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\t\ttree.options.strings.loading +\n\t\t\t\t\t\t\t\t\t\t(message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t\t\t\t\t\t// icon: true, // needed for 'loding' icon\n\t\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnode._isLoading = true;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"error\":\n\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t\ttree.options.strings.loadError +\n\t\t\t\t\t\t\t\t\t(message ? \" (\" + message + \")\" : \"\"),\n\t\t\t\t\t\t\t\t// icon: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = { message: message, details: details };\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"nodata\":\n\t\t\t\t\t\t_setStatusNode(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: message || tree.options.strings.noData,\n\t\t\t\t\t\t\t\t// icon: false,\n\t\t\t\t\t\t\t\tcheckbox: false,\n\t\t\t\t\t\t\t\ttooltip: details,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstatus\n\t\t\t\t\t\t);\n\t\t\t\t\t\tnode._isLoading = false;\n\t\t\t\t\t\tnode._error = null;\n\t\t\t\t\t\tnode.renderStatus();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t$.error(\"invalid node status \" + status);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/**\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeToggleExpanded: function(ctx) {\n\t\t\t\treturn this.nodeSetExpanded(ctx, !ctx.node.expanded);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\tnodeToggleSelected: function(ctx) {\n\t\t\t\tvar node = ctx.node,\n\t\t\t\t\tflag = !node.selected;\n\n\t\t\t\t// In selectMode: 3 this node may be unselected+partsel, even if\n\t\t\t\t// setSelected(true) was called before, due to `unselectable` children.\n\t\t\t\t// In this case, we now toggle as `setSelected(false)`\n\t\t\t\tif (\n\t\t\t\t\tnode.partsel &&\n\t\t\t\t\t!node.selected &&\n\t\t\t\t\tnode._lastSelectIntent === true\n\t\t\t\t) {\n\t\t\t\t\tflag = false;\n\t\t\t\t\tnode.selected = true; // so it is not considered 'nothing to do'\n\t\t\t\t}\n\t\t\t\tnode._lastSelectIntent = flag;\n\t\t\t\treturn this.nodeSetSelected(ctx, flag);\n\t\t\t},\n\t\t\t/** Remove all nodes.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeClear: function(ctx) {\n\t\t\t\tvar tree = ctx.tree;\n\t\t\t\ttree.activeNode = null;\n\t\t\t\ttree.focusNode = null;\n\t\t\t\ttree.$div.find(\">ul.fancytree-container\").empty();\n\t\t\t\t// TODO: call destructors and remove reference loops\n\t\t\t\ttree.rootNode.children = null;\n\t\t\t},\n\t\t\t/** Widget was created (called only once, even it re-initialized).\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeCreate: function(ctx) {},\n\t\t\t/** Widget was destroyed.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeDestroy: function(ctx) {\n\t\t\t\tthis.$div.find(\">ul.fancytree-container\").remove();\n\t\t\t\tthis.$source &&\n\t\t\t\t\tthis.$source.removeClass(\"fancytree-helper-hidden\");\n\t\t\t},\n\t\t\t/** Widget was (re-)initialized.\n\t\t\t * @param {EventData} ctx\n\t\t\t */\n\t\t\ttreeInit: function(ctx) {\n\t\t\t\tvar tree = ctx.tree,\n\t\t\t\t\topts = tree.options;\n\n\t\t\t\t//this.debug(\"Fancytree.treeInit()\");\n\t\t\t\t// Add container to the TAB chain\n\t\t\t\t// See http://www.w3.org/TR/wai-aria-practices/#focus_activedescendant\n\t\t\t\t// #577: Allow to set tabindex to \"0\", \"-1\" and \"\"\n\t\t\t\ttree.$container.attr(\"tabindex\", opts.tabindex);\n\n\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\t\t\tif (opts[attr] !== undefined) {\n\t\t\t\t\t\ttree.info(\"Move option \" + attr + \" to tree\");\n\t\t\t\t\t\ttree[attr] = opts[attr];\n\t\t\t\t\t\tdelete opts[attr];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (opts.rtl) {\n\t\t\t\t\ttree.$container\n\t\t\t\t\t\t.attr(\"DIR\", \"RTL\")\n\t\t\t\t\t\t.addClass(\"fancytree-rtl\");\n\t\t\t\t} else {\n\t\t\t\t\ttree.$container\n\t\t\t\t\t\t.removeAttr(\"DIR\")\n\t\t\t\t\t\t.removeClass(\"fancytree-rtl\");\n\t\t\t\t}\n\t\t\t\tif (opts.aria) {\n\t\t\t\t\ttree.$container.attr(\"role\", \"tree\");\n\t\t\t\t\tif (opts.selectMode !== 1) {\n\t\t\t\t\t\ttree.$container.attr(\"aria-multiselectable\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.treeLoad(ctx);\n\t\t\t},\n\t\t\t/** Parse Fancytree from source, as configured in the options.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {object} [source] optional new source (use last data otherwise)\n\t\t\t */\n\t\t\ttreeLoad: function(ctx, source) {\n\t\t\t\tvar metaData,\n\t\t\t\t\ttype,\n\t\t\t\t\t$ul,\n\t\t\t\t\ttree = ctx.tree,\n\t\t\t\t\t$container = ctx.widget.element,\n\t\t\t\t\tdfd,\n\t\t\t\t\t// calling context for root node\n\t\t\t\t\trootCtx = $.extend({}, ctx, { node: this.rootNode });\n\n\t\t\t\tif (tree.rootNode.children) {\n\t\t\t\t\tthis.treeClear(ctx);\n\t\t\t\t}\n\t\t\t\tsource = source || this.options.source;\n\n\t\t\t\tif (!source) {\n\t\t\t\t\ttype = $container.data(\"type\") || \"html\";\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase \"html\":\n\t\t\t\t\t\t\t$ul = $container.find(\">ul:first\");\n\t\t\t\t\t\t\t$ul.addClass(\n\t\t\t\t\t\t\t\t\"ui-fancytree-source fancytree-helper-hidden\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tsource = $.ui.fancytree.parseHtml($ul);\n\t\t\t\t\t\t\t// allow to init tree.data.foo from <ul data-foo=''>\n\t\t\t\t\t\t\tthis.data = $.extend(\n\t\t\t\t\t\t\t\tthis.data,\n\t\t\t\t\t\t\t\t_getElementDataAsDict($ul)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"json\":\n\t\t\t\t\t\t\tsource = $.parseJSON($container.text());\n\t\t\t\t\t\t\t// $container already contains the <ul>, but we remove the plain (json) text\n\t\t\t\t\t\t\t// $container.empty();\n\t\t\t\t\t\t\t$container\n\t\t\t\t\t\t\t\t.contents()\n\t\t\t\t\t\t\t\t.filter(function() {\n\t\t\t\t\t\t\t\t\treturn this.nodeType === 3;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.remove();\n\t\t\t\t\t\t\tif ($.isPlainObject(source)) {\n\t\t\t\t\t\t\t\t// We got {foo: 'abc', children: [...]}\n\t\t\t\t\t\t\t\t_assert(\n\t\t\t\t\t\t\t\t\t$.isArray(source.children),\n\t\t\t\t\t\t\t\t\t\"if an object is passed as source, it must contain a 'children' array (all other properties are added to 'tree.data')\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tmetaData = source;\n\t\t\t\t\t\t\t\tsource = source.children;\n\t\t\t\t\t\t\t\tdelete metaData.children;\n\t\t\t\t\t\t\t\t// Copy some attributes to tree.data\n\t\t\t\t\t\t\t\t$.each(TREE_ATTRS, function(i, attr) {\n\t\t\t\t\t\t\t\t\tif (metaData[attr] !== undefined) {\n\t\t\t\t\t\t\t\t\t\ttree[attr] = metaData[attr];\n\t\t\t\t\t\t\t\t\t\tdelete metaData[attr];\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\t// Copy extra properties to tree.data.foo\n\t\t\t\t\t\t\t\t$.extend(tree.data, metaData);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t$.error(\"Invalid data-type: \" + type);\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof source === \"string\") {\n\t\t\t\t\t// TODO: source is an element ID\n\t\t\t\t\t$.error(\"Not implemented\");\n\t\t\t\t}\n\n\t\t\t\t// Trigger fancytreeinit after nodes have been loaded\n\t\t\t\tdfd = this.nodeLoadChildren(rootCtx, source)\n\t\t\t\t\t.done(function() {\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t\tif (ctx.options.selectMode === 3) {\n\t\t\t\t\t\t\ttree.rootNode.fixSelection3FromEndNodes();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tree.activeNode && tree.options.activeVisible) {\n\t\t\t\t\t\t\ttree.activeNode.makeVisible();\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttree._triggerTreeEvent(\"init\", null, { status: true });\n\t\t\t\t\t})\n\t\t\t\t\t.fail(function() {\n\t\t\t\t\t\ttree.render();\n\t\t\t\t\t\ttree._triggerTreeEvent(\"init\", null, { status: false });\n\t\t\t\t\t});\n\t\t\t\treturn dfd;\n\t\t\t},\n\t\t\t/** Node was inserted into or removed from the tree.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} add\n\t\t\t * @param {FancytreeNode} node\n\t\t\t */\n\t\t\ttreeRegisterNode: function(ctx, add, node) {},\n\t\t\t/** Widget got focus.\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {boolean} [flag=true]\n\t\t\t */\n\t\t\ttreeSetFocus: function(ctx, flag, callOpts) {\n\t\t\t\tvar targetNode;\n\n\t\t\t\tflag = flag !== false;\n\n\t\t\t\t// this.debug(\"treeSetFocus(\" + flag + \"), callOpts: \", callOpts, this.hasFocus());\n\t\t\t\t// this.debug(\" focusNode: \" + this.focusNode);\n\t\t\t\t// this.debug(\" activeNode: \" + this.activeNode);\n\t\t\t\tif (flag !== this.hasFocus()) {\n\t\t\t\t\tthis._hasFocus = flag;\n\t\t\t\t\tif (!flag && this.focusNode) {\n\t\t\t\t\t\t// Node also looses focus if widget blurs\n\t\t\t\t\t\tthis.focusNode.setFocus(false);\n\t\t\t\t\t} else if (flag && (!callOpts || !callOpts.calledByNode)) {\n\t\t\t\t\t\t$(this.$container).focus();\n\t\t\t\t\t}\n\t\t\t\t\tthis.$container.toggleClass(\"fancytree-treefocus\", flag);\n\t\t\t\t\tthis._triggerTreeEvent(flag ? \"focusTree\" : \"blurTree\");\n\t\t\t\t\tif (flag && !this.activeNode) {\n\t\t\t\t\t\t// #712: Use last mousedowned node ('click' event fires after focusin)\n\t\t\t\t\t\ttargetNode =\n\t\t\t\t\t\t\tthis._lastMousedownNode || this.getFirstChild();\n\t\t\t\t\t\ttargetNode && targetNode.setFocus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Widget option was set using `$().fancytree(\"option\", \"KEY\", VALUE)`.\n\t\t\t *\n\t\t\t * Note: `key` may reference a nested option, e.g. 'dnd5.scroll'.\n\t\t\t * In this case `value`contains the complete, modified `dnd5` option hash.\n\t\t\t * We can check for changed values like\n\t\t\t * if( value.scroll !== tree.options.dnd5.scroll ) {...}\n\t\t\t *\n\t\t\t * @param {EventData} ctx\n\t\t\t * @param {string} key option name\n\t\t\t * @param {any} value option value\n\t\t\t */\n\t\t\ttreeSetOption: function(ctx, key, value) {\n\t\t\t\tvar tree = ctx.tree,\n\t\t\t\t\tcallDefault = true,\n\t\t\t\t\tcallCreate = false,\n\t\t\t\t\tcallRender = false;\n\n\t\t\t\tswitch (key) {\n\t\t\t\t\tcase \"aria\":\n\t\t\t\t\tcase \"checkbox\":\n\t\t\t\t\tcase \"icon\":\n\t\t\t\t\tcase \"minExpandLevel\":\n\t\t\t\t\tcase \"tabindex\":\n\t\t\t\t\t\t// tree._callHook(\"treeCreate\", tree);\n\t\t\t\t\t\tcallCreate = true;\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"escapeTitles\":\n\t\t\t\t\tcase \"tooltip\":\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"rtl\":\n\t\t\t\t\t\tif (value === false) {\n\t\t\t\t\t\t\ttree.$container\n\t\t\t\t\t\t\t\t.removeAttr(\"DIR\")\n\t\t\t\t\t\t\t\t.removeClass(\"fancytree-rtl\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttree.$container\n\t\t\t\t\t\t\t\t.attr(\"DIR\", \"RTL\")\n\t\t\t\t\t\t\t\t.addClass(\"fancytree-rtl\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"source\":\n\t\t\t\t\t\tcallDefault = false;\n\t\t\t\t\t\ttree._callHook(\"treeLoad\", tree, value);\n\t\t\t\t\t\tcallRender = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttree.debug(\n\t\t\t\t\t\"set option \" +\n\t\t\t\t\t\tkey +\n\t\t\t\t\t\t\"=\" +\n\t\t\t\t\t\tvalue +\n\t\t\t\t\t\t\" <\" +\n\t\t\t\t\t\ttypeof value +\n\t\t\t\t\t\t\">\"\n\t\t\t\t);\n\t\t\t\tif (callDefault) {\n\t\t\t\t\tif (this.widget._super) {\n\t\t\t\t\t\t// jQuery UI 1.9+\n\t\t\t\t\t\tthis.widget._super.call(this.widget, key, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// jQuery UI <= 1.8, we have to manually invoke the _setOption method from the base widget\n\t\t\t\t\t\t$.Widget.prototype._setOption.call(\n\t\t\t\t\t\t\tthis.widget,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (callCreate) {\n\t\t\t\t\ttree._callHook(\"treeCreate\", tree);\n\t\t\t\t}\n\t\t\t\tif (callRender) {\n\t\t\t\t\ttree.render(true, false); // force, not-deep\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t);\n\n\t/*******************************************************************************\n\t * jQuery UI widget boilerplate\n\t */\n\n\t/**\n\t * The plugin (derrived from <a href=\" http://api.jqueryui.com/jQuery.widget/\">jQuery.Widget</a>).<br>\n\t * This constructor is not called directly. Use `$(selector).fancytree({})`\n\t * to initialize the plugin instead.<br>\n\t * <pre class=\"sh_javascript sunlight-highlight-javascript\">// Access widget methods and members:\n\t * var tree = $(\"#tree\").fancytree(\"getTree\");\n\t * var node = $(\"#tree\").fancytree(\"getActiveNode\", \"1234\");\n\t * </pre>\n\t *\n\t * @mixin Fancytree_Widget\n\t */\n\n\t$.widget(\n\t\t\"ui.fancytree\",\n\t\t/** @lends Fancytree_Widget# */\n\t\t{\n\t\t\t/**These options will be used as defaults\n\t\t\t * @type {FancytreeOptions}\n\t\t\t */\n\t\t\toptions: {\n\t\t\t\tactiveVisible: true,\n\t\t\t\tajax: {\n\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\tcache: false, // false: Append random '_' argument to the request url to prevent caching.\n\t\t\t\t\t// timeout: 0, // >0: Make sure we get an ajax error if server is unreachable\n\t\t\t\t\tdataType: \"json\", // Expect json format and pass json object to callbacks.\n\t\t\t\t},\n\t\t\t\taria: true,\n\t\t\t\tautoActivate: true,\n\t\t\t\tautoCollapse: false,\n\t\t\t\tautoScroll: false,\n\t\t\t\tcheckbox: false,\n\t\t\t\tclickFolderMode: 4,\n\t\t\t\tdebugLevel: null, // 0..4 (null: use global setting $.ui.fancytree.debugInfo)\n\t\t\t\tdisabled: false, // TODO: required anymore?\n\t\t\t\tenableAspx: true,\n\t\t\t\tescapeTitles: false,\n\t\t\t\textensions: [],\n\t\t\t\t// fx: { height: \"toggle\", duration: 200 },\n\t\t\t\t// toggleEffect: { effect: \"drop\", options: {direction: \"left\"}, duration: 200 },\n\t\t\t\t// toggleEffect: { effect: \"slide\", options: {direction: \"up\"}, duration: 200 },\n\t\t\t\t//toggleEffect: { effect: \"blind\", options: {direction: \"vertical\", scale: \"box\"}, duration: 200 },\n\t\t\t\ttoggleEffect: { effect: \"slideToggle\", duration: 200 }, //< \"toggle\" or \"slideToggle\" to use jQuery instead of jQueryUI for toggleEffect animation\n\t\t\t\tgenerateIds: false,\n\t\t\t\ticon: true,\n\t\t\t\tidPrefix: \"ft_\",\n\t\t\t\tfocusOnSelect: false,\n\t\t\t\tkeyboard: true,\n\t\t\t\tkeyPathSeparator: \"/\",\n\t\t\t\tminExpandLevel: 1,\n\t\t\t\tnodata: true, // (bool, string, or callback) display message, when no data available\n\t\t\t\tquicksearch: false,\n\t\t\t\trtl: false,\n\t\t\t\tscrollOfs: { top: 0, bottom: 0 },\n\t\t\t\tscrollParent: null,\n\t\t\t\tselectMode: 2,\n\t\t\t\tstrings: {\n\t\t\t\t\tloading: \"Loading...\", // … would be escaped when escapeTitles is true\n\t\t\t\t\tloadError: \"Load error!\",\n\t\t\t\t\tmoreData: \"More...\",\n\t\t\t\t\tnoData: \"No data.\",\n\t\t\t\t},\n\t\t\t\ttabindex: \"0\",\n\t\t\t\ttitlesTabbable: false,\n\t\t\t\ttooltip: false,\n\t\t\t\t_classNames: {\n\t\t\t\t\tnode: \"fancytree-node\",\n\t\t\t\t\tfolder: \"fancytree-folder\",\n\t\t\t\t\tanimating: \"fancytree-animating\",\n\t\t\t\t\tcombinedExpanderPrefix: \"fancytree-exp-\",\n\t\t\t\t\tcombinedIconPrefix: \"fancytree-ico-\",\n\t\t\t\t\thasChildren: \"fancytree-has-children\",\n\t\t\t\t\tactive: \"fancytree-active\",\n\t\t\t\t\tselected: \"fancytree-selected\",\n\t\t\t\t\texpanded: \"fancytree-expanded\",\n\t\t\t\t\tlazy: \"fancytree-lazy\",\n\t\t\t\t\tfocused: \"fancytree-focused\",\n\t\t\t\t\tpartload: \"fancytree-partload\",\n\t\t\t\t\tpartsel: \"fancytree-partsel\",\n\t\t\t\t\tradio: \"fancytree-radio\",\n\t\t\t\t\t// radiogroup: \"fancytree-radiogroup\",\n\t\t\t\t\tunselectable: \"fancytree-unselectable\",\n\t\t\t\t\tlastsib: \"fancytree-lastsib\",\n\t\t\t\t\tloading: \"fancytree-loading\",\n\t\t\t\t\terror: \"fancytree-error\",\n\t\t\t\t\tstatusNodePrefix: \"fancytree-statusnode-\",\n\t\t\t\t},\n\t\t\t\t// events\n\t\t\t\tlazyLoad: null,\n\t\t\t\tpostProcess: null,\n\t\t\t},\n\t\t\t/* Set up the widget, Called on first $().fancytree() */\n\t\t\t_create: function() {\n\t\t\t\tthis.tree = new Fancytree(this);\n\n\t\t\t\tthis.$source =\n\t\t\t\t\tthis.source || this.element.data(\"type\") === \"json\"\n\t\t\t\t\t\t? this.element\n\t\t\t\t\t\t: this.element.find(\">ul:first\");\n\t\t\t\t// Subclass Fancytree instance with all enabled extensions\n\t\t\t\tvar extension,\n\t\t\t\t\textName,\n\t\t\t\t\ti,\n\t\t\t\t\topts = this.options,\n\t\t\t\t\textensions = opts.extensions,\n\t\t\t\t\tbase = this.tree;\n\n\t\t\t\tfor (i = 0; i < extensions.length; i++) {\n\t\t\t\t\textName = extensions[i];\n\t\t\t\t\textension = $.ui.fancytree._extensions[extName];\n\t\t\t\t\tif (!extension) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"Could not apply extension '\" +\n\t\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\t\"' (it is not registered, did you forget to include it?)\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Add extension options as tree.options.EXTENSION\n\t\t\t\t\t//\t\t\t_assert(!this.tree.options[extName], \"Extension name must not exist as option name: \" + extName);\n\n\t\t\t\t\t// console.info(\"extend \" + extName, extension.options, this.tree.options[extName])\n\t\t\t\t\t// issue #876: we want to replace custom array-options, not merge them\n\t\t\t\t\tthis.tree.options[extName] = _simpleDeepMerge(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\textension.options,\n\t\t\t\t\t\tthis.tree.options[extName]\n\t\t\t\t\t);\n\t\t\t\t\t// this.tree.options[extName] = $.extend(true, {}, extension.options, this.tree.options[extName]);\n\n\t\t\t\t\t// console.info(\"extend \" + extName + \" =>\", this.tree.options[extName])\n\t\t\t\t\t// console.info(\"extend \" + extName + \" org default =>\", extension.options)\n\n\t\t\t\t\t// Add a namespace tree.ext.EXTENSION, to hold instance data\n\t\t\t\t\t_assert(\n\t\t\t\t\t\tthis.tree.ext[extName] === undefined,\n\t\t\t\t\t\t\"Extension name must not exist as Fancytree.ext attribute: '\" +\n\t\t\t\t\t\t\textName +\n\t\t\t\t\t\t\t\"'\"\n\t\t\t\t\t);\n\t\t\t\t\t// this.tree[extName] = extension;\n\t\t\t\t\tthis.tree.ext[extName] = {};\n\t\t\t\t\t// Subclass Fancytree methods using proxies.\n\t\t\t\t\t_subclassObject(this.tree, base, extension, extName);\n\t\t\t\t\t// current extension becomes base for the next extension\n\t\t\t\t\tbase = extension;\n\t\t\t\t}\n\t\t\t\t//\n\t\t\t\tif (opts.icons !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\tif (opts.icon !== true) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'icons' tree option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\t\"'icons' tree option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.icon = opts.icons;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.iconClass !== undefined) {\n\t\t\t\t\t// 2015-11-16\n\t\t\t\t\tif (opts.icon) {\n\t\t\t\t\t\t$.error(\n\t\t\t\t\t\t\t\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' only instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\t\"'iconClass' tree option is deprecated since v2.14.0: use 'icon' instead\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\topts.icon = opts.iconClass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (opts.tabbable !== undefined) {\n\t\t\t\t\t// 2016-04-04\n\t\t\t\t\topts.tabindex = opts.tabbable ? \"0\" : \"-1\";\n\t\t\t\t\tthis.tree.warn(\n\t\t\t\t\t\t\"'tabbable' tree option is deprecated since v2.17.0: use 'tabindex='\" +\n\t\t\t\t\t\t\topts.tabindex +\n\t\t\t\t\t\t\t\"' instead\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t//\n\t\t\t\tthis.tree._callHook(\"treeCreate\", this.tree);\n\t\t\t\t// Note: 'fancytreecreate' event is fired by widget base class\n\t\t\t\t// this.tree._triggerTreeEvent(\"create\");\n\t\t\t},\n\n\t\t\t/* Called on every $().fancytree() */\n\t\t\t_init: function() {\n\t\t\t\tthis.tree._callHook(\"treeInit\", this.tree);\n\t\t\t\t// TODO: currently we call bind after treeInit, because treeInit\n\t\t\t\t// might change tree.$container.\n\t\t\t\t// It would be better, to move event binding into hooks altogether\n\t\t\t\tthis._bind();\n\t\t\t},\n\n\t\t\t/* Use the _setOption method to respond to changes to options. */\n\t\t\t_setOption: function(key, value) {\n\t\t\t\treturn this.tree._callHook(\n\t\t\t\t\t\"treeSetOption\",\n\t\t\t\t\tthis.tree,\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue\n\t\t\t\t);\n\t\t\t},\n\n\t\t\t/** Use the destroy method to clean up any modifications your widget has made to the DOM */\n\t\t\tdestroy: function() {\n\t\t\t\tthis._unbind();\n\t\t\t\tthis.tree._callHook(\"treeDestroy\", this.tree);\n\t\t\t\t// In jQuery UI 1.8, you must invoke the destroy method from the base widget\n\t\t\t\t$.Widget.prototype.destroy.call(this);\n\t\t\t\t// TODO: delete tree and nodes to make garbage collect easier?\n\t\t\t\t// TODO: In jQuery UI 1.9 and above, you would define _destroy instead of destroy and not call the base method\n\t\t\t},\n\n\t\t\t// -------------------------------------------------------------------------\n\n\t\t\t/* Remove all event handlers for our namespace */\n\t\t\t_unbind: function() {\n\t\t\t\tvar ns = this.tree._ns;\n\t\t\t\tthis.element.off(ns);\n\t\t\t\tthis.tree.$container.off(ns);\n\t\t\t\t$(document).off(ns);\n\t\t\t},\n\t\t\t/* Add mouse and kyboard handlers to the container */\n\t\t\t_bind: function() {\n\t\t\t\tvar that = this,\n\t\t\t\t\topts = this.options,\n\t\t\t\t\ttree = this.tree,\n\t\t\t\t\tns = tree._ns;\n\t\t\t\t// selstartEvent = ( $.support.selectstart ? \"selectstart\" : \"mousedown\" )\n\n\t\t\t\t// Remove all previuous handlers for this tree\n\t\t\t\tthis._unbind();\n\n\t\t\t\t//alert(\"keydown\" + ns + \"foc=\" + tree.hasFocus() + tree.$container);\n\t\t\t\t// tree.debug(\"bind events; container: \", tree.$container);\n\t\t\t\ttree.$container\n\t\t\t\t\t.on(\"focusin\" + ns + \" focusout\" + ns, function(event) {\n\t\t\t\t\t\tvar node = FT.getNode(event),\n\t\t\t\t\t\t\tflag = event.type === \"focusin\";\n\n\t\t\t\t\t\tif (!flag && node && $(event.target).is(\"a\")) {\n\t\t\t\t\t\t\t// #764\n\t\t\t\t\t\t\tnode.debug(\n\t\t\t\t\t\t\t\t\"Ignored focusout on embedded <a> element.\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// tree.treeOnFocusInOut.call(tree, event);\n\t\t\t\t\t\t// tree.debug(\"Tree container got event \" + event.type, node, event, FT.getEventTarget(event));\n\t\t\t\t\t\tif (flag) {\n\t\t\t\t\t\t\tif (tree._getExpiringValue(\"focusin\")) {\n\t\t\t\t\t\t\t\t// #789: IE 11 may send duplicate focusin events\n\t\t\t\t\t\t\t\ttree.debug(\"Ignored double focusin.\");\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttree._setExpiringValue(\"focusin\", true, 50);\n\n\t\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\t\t// #789: IE 11 may send focusin before mousdown(?)\n\t\t\t\t\t\t\t\tnode = tree._getExpiringValue(\"mouseDownNode\");\n\t\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\t\ttree.debug(\n\t\t\t\t\t\t\t\t\t\t\"Reconstruct mouse target for focusin from recent event.\"\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\tif (node) {\n\t\t\t\t\t\t\t// For example clicking into an <input> that is part of a node\n\t\t\t\t\t\t\ttree._callHook(\n\t\t\t\t\t\t\t\t\"nodeSetFocus\",\n\t\t\t\t\t\t\t\ttree._makeHookContext(node, event),\n\t\t\t\t\t\t\t\tflag\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttree.tbody &&\n\t\t\t\t\t\t\t\t$(event.target).parents(\n\t\t\t\t\t\t\t\t\t\"table.fancytree-container > thead\"\n\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// #767: ignore events in the table's header\n\t\t\t\t\t\t\t\ttree.debug(\n\t\t\t\t\t\t\t\t\t\"Ignore focus event outside table body.\",\n\t\t\t\t\t\t\t\t\tevent\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\ttree._callHook(\"treeSetFocus\", tree, flag);\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\t.on(\"selectstart\" + ns, \"span.fancytree-title\", function(\n\t\t\t\t\t\tevent\n\t\t\t\t\t) {\n\t\t\t\t\t\t// prevent mouse-drags to select text ranges\n\t\t\t\t\t\t// tree.debug(\"<span title> got event \" + event.type);\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t})\n\t\t\t\t\t.on(\"keydown\" + ns, function(event) {\n\t\t\t\t\t\t// TODO: also bind keyup and keypress\n\t\t\t\t\t\t// tree.debug(\"got event \" + event.type + \", hasFocus:\" + tree.hasFocus());\n\t\t\t\t\t\t// if(opts.disabled || opts.keyboard === false || !tree.hasFocus() ){\n\t\t\t\t\t\tif (opts.disabled || opts.keyboard === false) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar res,\n\t\t\t\t\t\t\tnode = tree.focusNode, // node may be null\n\t\t\t\t\t\t\tctx = tree._makeHookContext(node || tree, event),\n\t\t\t\t\t\t\tprevPhase = tree.phase;\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\t\t\t\t// If a 'fancytreekeydown' handler returns false, skip the default\n\t\t\t\t\t\t\t// handling (implemented by tree.nodeKeydown()).\n\t\t\t\t\t\t\tif (node) {\n\t\t\t\t\t\t\t\tres = tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\"keydown\",\n\t\t\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\t\t\tevent\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\tres = tree._triggerTreeEvent(\"keydown\", event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (res === \"preventNav\") {\n\t\t\t\t\t\t\t\tres = true; // prevent keyboard navigation, but don't prevent default handling of embedded input controls\n\t\t\t\t\t\t\t} else if (res !== false) {\n\t\t\t\t\t\t\t\tres = tree._callHook(\"nodeKeydown\", ctx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttree.phase = prevPhase;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on(\"mousedown\" + ns, function(event) {\n\t\t\t\t\t\tvar et = FT.getEventTarget(event);\n\t\t\t\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\t\t\t\t// #712: Store the clicked node, so we can use it when we get a focusin event\n\t\t\t\t\t\t// ('click' event fires after focusin)\n\t\t\t\t\t\t// tree.debug(\"event(\" + event.type + \"): node: \", et.node);\n\t\t\t\t\t\ttree._lastMousedownNode = et ? et.node : null;\n\t\t\t\t\t\t// #789: Store the node also for a short period, so we can use it\n\t\t\t\t\t\t// in a *resulting* focusin event\n\t\t\t\t\t\ttree._setExpiringValue(\n\t\t\t\t\t\t\t\"mouseDownNode\",\n\t\t\t\t\t\t\ttree._lastMousedownNode\n\t\t\t\t\t\t);\n\t\t\t\t\t})\n\t\t\t\t\t.on(\"click\" + ns + \" dblclick\" + ns, function(event) {\n\t\t\t\t\t\tif (opts.disabled) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar ctx,\n\t\t\t\t\t\t\tet = FT.getEventTarget(event),\n\t\t\t\t\t\t\tnode = et.node,\n\t\t\t\t\t\t\ttree = that.tree,\n\t\t\t\t\t\t\tprevPhase = tree.phase;\n\n\t\t\t\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\t\t\t\tif (!node) {\n\t\t\t\t\t\t\treturn true; // Allow bubbling of other events\n\t\t\t\t\t\t}\n\t\t\t\t\t\tctx = tree._makeHookContext(node, event);\n\t\t\t\t\t\t// that.tree.debug(\"event(\" + event.type + \"): node: \", node);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\ttree.phase = \"userEvent\";\n\t\t\t\t\t\t\tswitch (event.type) {\n\t\t\t\t\t\t\t\tcase \"click\":\n\t\t\t\t\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\t\t\t\t\tif (node.isPagingNode()) {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\ttree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\t\t\"clickPaging\",\n\t\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t\t\t) === true\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\treturn tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\"click\",\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t) === false\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: tree._callHook(\"nodeClick\", ctx);\n\t\t\t\t\t\t\t\tcase \"dblclick\":\n\t\t\t\t\t\t\t\t\tctx.targetType = et.type;\n\t\t\t\t\t\t\t\t\treturn tree._triggerNodeEvent(\n\t\t\t\t\t\t\t\t\t\t\"dblclick\",\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tevent\n\t\t\t\t\t\t\t\t\t) === false\n\t\t\t\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t\t\t\t: tree._callHook(\"nodeDblclick\", ctx);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttree.phase = prevPhase;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t/** Return the active node or null.\n\t\t\t * @returns {FancytreeNode}\n\t\t\t */\n\t\t\tgetActiveNode: function() {\n\t\t\t\treturn this.tree.activeNode;\n\t\t\t},\n\t\t\t/** Return the matching node or null.\n\t\t\t * @param {string} key\n\t\t\t * @returns {FancytreeNode}\n\t\t\t */\n\t\t\tgetNodeByKey: function(key) {\n\t\t\t\treturn this.tree.getNodeByKey(key);\n\t\t\t},\n\t\t\t/** Return the invisible system root node.\n\t\t\t * @returns {FancytreeNode}\n\t\t\t */\n\t\t\tgetRootNode: function() {\n\t\t\t\treturn this.tree.rootNode;\n\t\t\t},\n\t\t\t/** Return the current tree instance.\n\t\t\t * @returns {Fancytree}\n\t\t\t */\n\t\t\tgetTree: function() {\n\t\t\t\treturn this.tree;\n\t\t\t},\n\t\t}\n\t);\n\n\t// $.ui.fancytree was created by the widget factory. Create a local shortcut:\n\tFT = $.ui.fancytree;\n\n\t/**\n\t * Static members in the `$.ui.fancytree` namespace.<br>\n\t * <br>\n\t * <pre class=\"sh_javascript sunlight-highlight-javascript\">// Access static members:\n\t * var node = $.ui.fancytree.getNode(element);\n\t * alert($.ui.fancytree.version);\n\t * </pre>\n\t *\n\t * @mixin Fancytree_Static\n\t */\n\t$.extend(\n\t\t$.ui.fancytree,\n\t\t/** @lends Fancytree_Static# */\n\t\t{\n\t\t\t/** @type {string} */\n\t\t\tversion: \"2.30.2\", // Set to semver by 'grunt release'\n\t\t\t/** @type {string} */\n\t\t\tbuildType: \"production\", // Set to 'production' by 'grunt build'\n\t\t\t/** @type {int} */\n\t\t\tdebugLevel: 3, // Set to 3 by 'grunt build'\n\t\t\t// Used by $.ui.fancytree.debug() and as default for tree.options.debugLevel\n\n\t\t\t_nextId: 1,\n\t\t\t_nextNodeKey: 1,\n\t\t\t_extensions: {},\n\t\t\t// focusTree: null,\n\n\t\t\t/** Expose class object as $.ui.fancytree._FancytreeClass */\n\t\t\t_FancytreeClass: Fancytree,\n\t\t\t/** Expose class object as $.ui.fancytree._FancytreeNodeClass */\n\t\t\t_FancytreeNodeClass: FancytreeNode,\n\t\t\t/* Feature checks to provide backwards compatibility */\n\t\t\tjquerySupports: {\n\t\t\t\t// http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t\t\t\tpositionMyOfs: isVersionAtLeast($.ui.version, 1, 9),\n\t\t\t},\n\t\t\t/** Throw an error if condition fails (debug method).\n\t\t\t * @param {boolean} cond\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tassert: function(cond, msg) {\n\t\t\t\treturn _assert(cond, msg);\n\t\t\t},\n\t\t\t/** Create a new Fancytree instance on a target element.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | string} el Target DOM element or selector\n\t\t\t * @param {FancytreeOptions} [opts] Fancytree options\n\t\t\t * @returns {Fancytree} new tree instance\n\t\t\t * @example\n\t\t\t * var tree = $.ui.fancytree.createTree(\"#tree\", {\n\t\t\t * source: {url: \"my/webservice\"}\n\t\t\t * }); // Create tree for this matching element\n\t\t\t *\n\t\t\t * @since 2.25\n\t\t\t */\n\t\t\tcreateTree: function(el, opts) {\n\t\t\t\tvar tree = $(el)\n\t\t\t\t\t.fancytree(opts)\n\t\t\t\t\t.fancytree(\"getTree\");\n\t\t\t\treturn tree;\n\t\t\t},\n\t\t\t/** Return a function that executes *fn* at most every *timeout* ms.\n\t\t\t * @param {integer} timeout\n\t\t\t * @param {function} fn\n\t\t\t * @param {boolean} [invokeAsap=false]\n\t\t\t * @param {any} [ctx]\n\t\t\t */\n\t\t\tdebounce: function(timeout, fn, invokeAsap, ctx) {\n\t\t\t\tvar timer;\n\t\t\t\tif (arguments.length === 3 && typeof invokeAsap !== \"boolean\") {\n\t\t\t\t\tctx = invokeAsap;\n\t\t\t\t\tinvokeAsap = false;\n\t\t\t\t}\n\t\t\t\treturn function() {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\tctx = ctx || this;\n\t\t\t\t\tinvokeAsap && !timer && fn.apply(ctx, args);\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\ttimer = setTimeout(function() {\n\t\t\t\t\t\tinvokeAsap || fn.apply(ctx, args);\n\t\t\t\t\t\ttimer = null;\n\t\t\t\t\t}, timeout);\n\t\t\t\t};\n\t\t\t},\n\t\t\t/** Write message to console if debugLevel >= 4\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tdebug: function(msg) {\n\t\t\t\t/*jshint expr:true */\n\t\t\t\t$.ui.fancytree.debugLevel >= 4 &&\n\t\t\t\t\tconsoleApply(\"log\", arguments);\n\t\t\t},\n\t\t\t/** Write error message to console if debugLevel >= 1.\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\terror: function(msg) {\n\t\t\t\t$.ui.fancytree.debugLevel >= 1 &&\n\t\t\t\t\tconsoleApply(\"error\", arguments);\n\t\t\t},\n\t\t\t/** Convert <, >, &, ", ', / to the equivalent entities.\n\t\t\t *\n\t\t\t * @param {string} s\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tescapeHtml: function(s) {\n\t\t\t\treturn (\"\" + s).replace(REX_HTML, function(s) {\n\t\t\t\t\treturn ENTITY_MAP[s];\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** Make jQuery.position() arguments backwards compatible, i.e. if\n\t\t\t * jQuery UI version <= 1.8, convert\n\t\t\t * { my: \"left+3 center\", at: \"left bottom\", of: $target }\n\t\t\t * to\n\t\t\t * { my: \"left center\", at: \"left bottom\", of: $target, offset: \"3 0\" }\n\t\t\t *\n\t\t\t * See http://jqueryui.com/upgrade-guide/1.9/#deprecated-offset-option-merged-into-my-and-at\n\t\t\t * and http://jsfiddle.net/mar10/6xtu9a4e/\n\t\t\t *\n\t\t\t * @param {object} opts\n\t\t\t * @returns {object} the (potentially modified) original opts hash object\n\t\t\t */\n\t\t\tfixPositionOptions: function(opts) {\n\t\t\t\tif (opts.offset || (\"\" + opts.my + opts.at).indexOf(\"%\") >= 0) {\n\t\t\t\t\t$.error(\n\t\t\t\t\t\t\"expected new position syntax (but '%' is not supported)\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (!$.ui.fancytree.jquerySupports.positionMyOfs) {\n\t\t\t\t\tvar // parse 'left+3 center' into ['left+3 center', 'left', '+3', 'center', undefined]\n\t\t\t\t\t\tmyParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(\n\t\t\t\t\t\t\topts.my\n\t\t\t\t\t\t),\n\t\t\t\t\t\tatParts = /(\\w+)([+-]?\\d+)?\\s+(\\w+)([+-]?\\d+)?/.exec(\n\t\t\t\t\t\t\topts.at\n\t\t\t\t\t\t),\n\t\t\t\t\t\t// convert to numbers\n\t\t\t\t\t\tdx =\n\t\t\t\t\t\t\t(myParts[2] ? +myParts[2] : 0) +\n\t\t\t\t\t\t\t(atParts[2] ? +atParts[2] : 0),\n\t\t\t\t\t\tdy =\n\t\t\t\t\t\t\t(myParts[4] ? +myParts[4] : 0) +\n\t\t\t\t\t\t\t(atParts[4] ? +atParts[4] : 0);\n\n\t\t\t\t\topts = $.extend({}, opts, {\n\t\t\t\t\t\t// make a copy and overwrite\n\t\t\t\t\t\tmy: myParts[1] + \" \" + myParts[3],\n\t\t\t\t\t\tat: atParts[1] + \" \" + atParts[3],\n\t\t\t\t\t});\n\t\t\t\t\tif (dx || dy) {\n\t\t\t\t\t\topts.offset = \"\" + dx + \" \" + dy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn opts;\n\t\t\t},\n\t\t\t/** Return a {node: FancytreeNode, type: TYPE} object for a mouse event.\n\t\t\t *\n\t\t\t * @param {Event} event Mouse event, e.g. click, ...\n\t\t\t * @returns {object} Return a {node: FancytreeNode, type: TYPE} object\n\t\t\t * TYPE: 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t\t\t */\n\t\t\tgetEventTarget: function(event) {\n\t\t\t\tvar $target,\n\t\t\t\t\ttree,\n\t\t\t\t\ttcn = event && event.target ? event.target.className : \"\",\n\t\t\t\t\tres = { node: this.getNode(event.target), type: undefined };\n\t\t\t\t// We use a fast version of $(res.node).hasClass()\n\t\t\t\t// See http://jsperf.com/test-for-classname/2\n\t\t\t\tif (/\\bfancytree-title\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"title\";\n\t\t\t\t} else if (/\\bfancytree-expander\\b/.test(tcn)) {\n\t\t\t\t\tres.type =\n\t\t\t\t\t\tres.node.hasChildren() === false\n\t\t\t\t\t\t\t? \"prefix\"\n\t\t\t\t\t\t\t: \"expander\";\n\t\t\t\t\t// }else if( /\\bfancytree-checkbox\\b/.test(tcn) || /\\bfancytree-radio\\b/.test(tcn) ){\n\t\t\t\t} else if (/\\bfancytree-checkbox\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"checkbox\";\n\t\t\t\t} else if (/\\bfancytree(-custom)?-icon\\b/.test(tcn)) {\n\t\t\t\t\tres.type = \"icon\";\n\t\t\t\t} else if (/\\bfancytree-node\\b/.test(tcn)) {\n\t\t\t\t\t// Somewhere near the title\n\t\t\t\t\tres.type = \"title\";\n\t\t\t\t} else if (event && event.target) {\n\t\t\t\t\t$target = $(event.target);\n\t\t\t\t\tif ($target.is(\"ul[role=group]\")) {\n\t\t\t\t\t\t// #nnn: Clicking right to a node may hit the surrounding UL\n\t\t\t\t\t\ttree = res.node && res.node.tree;\n\t\t\t\t\t\t(tree || FT).debug(\"Ignoring click on outer UL.\");\n\t\t\t\t\t\tres.node = null;\n\t\t\t\t\t} else if ($target.closest(\".fancytree-title\").length) {\n\t\t\t\t\t\t// #228: clicking an embedded element inside a title\n\t\t\t\t\t\tres.type = \"title\";\n\t\t\t\t\t} else if ($target.closest(\".fancytree-checkbox\").length) {\n\t\t\t\t\t\t// E.g. <svg> inside checkbox span\n\t\t\t\t\t\tres.type = \"checkbox\";\n\t\t\t\t\t} else if ($target.closest(\".fancytree-expander\").length) {\n\t\t\t\t\t\tres.type = \"expander\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\t/** Return a string describing the affected node region for a mouse event.\n\t\t\t *\n\t\t\t * @param {Event} event Mouse event, e.g. click, mousemove, ...\n\t\t\t * @returns {string} 'title' | 'prefix' | 'expander' | 'checkbox' | 'icon' | undefined\n\t\t\t */\n\t\t\tgetEventTargetType: function(event) {\n\t\t\t\treturn this.getEventTarget(event).type;\n\t\t\t},\n\t\t\t/** Return a FancytreeNode instance from element, event, or jQuery object.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | Event} el\n\t\t\t * @returns {FancytreeNode} matching node or null\n\t\t\t */\n\t\t\tgetNode: function(el) {\n\t\t\t\tif (el instanceof FancytreeNode) {\n\t\t\t\t\treturn el; // el already was a FancytreeNode\n\t\t\t\t} else if (el instanceof $) {\n\t\t\t\t\tel = el[0]; // el was a jQuery object: use the DOM element\n\t\t\t\t} else if (el.originalEvent !== undefined) {\n\t\t\t\t\tel = el.target; // el was an Event\n\t\t\t\t}\n\t\t\t\twhile (el) {\n\t\t\t\t\tif (el.ftnode) {\n\t\t\t\t\t\treturn el.ftnode;\n\t\t\t\t\t}\n\t\t\t\t\tel = el.parentNode;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t/** Return a Fancytree instance, from element, index, event, or jQueryObject.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject | Event | integer | string} [el]\n\t\t\t * @returns {Fancytree} matching tree or null\n\t\t\t * @example\n\t\t\t * $.ui.fancytree.getTree(); // Get first Fancytree instance on page\n\t\t\t * $.ui.fancytree.getTree(1); // Get second Fancytree instance on page\n\t\t\t * $.ui.fancytree.getTree(\"#tree\"); // Get tree for this matching element\n\t\t\t *\n\t\t\t * @since 2.13\n\t\t\t */\n\t\t\tgetTree: function(el) {\n\t\t\t\tvar widget;\n\n\t\t\t\tif (el instanceof Fancytree) {\n\t\t\t\t\treturn el; // el already was a Fancytree\n\t\t\t\t}\n\t\t\t\tif (el === undefined) {\n\t\t\t\t\tel = 0; // get first tree\n\t\t\t\t}\n\t\t\t\tif (typeof el === \"number\") {\n\t\t\t\t\tel = $(\".fancytree-container\").eq(el); // el was an integer: return nth instance\n\t\t\t\t} else if (typeof el === \"string\") {\n\t\t\t\t\tel = $(el).eq(0); // el was a selector: use first match\n\t\t\t\t} else if (el instanceof $) {\n\t\t\t\t\tel = el.eq(0); // el was a jQuery object: use the first DOM element\n\t\t\t\t} else if (el.originalEvent !== undefined) {\n\t\t\t\t\tel = $(el.target); // el was an Event\n\t\t\t\t}\n\t\t\t\tel = el.closest(\":ui-fancytree\");\n\t\t\t\twidget = el.data(\"ui-fancytree\") || el.data(\"fancytree\"); // the latter is required by jQuery <= 1.8\n\t\t\t\treturn widget ? widget.tree : null;\n\t\t\t},\n\t\t\t/** Return an option value that has a default, but may be overridden by a\n\t\t\t * callback or a node instance attribute.\n\t\t\t *\n\t\t\t * Evaluation sequence:<br>\n\t\t\t *\n\t\t\t * If tree.options.<optionName> is a callback that returns something, use that.<br>\n\t\t\t * Else if node.<optionName> is defined, use that.<br>\n\t\t\t * Else if tree.options.<optionName> is a value, use that.<br>\n\t\t\t * Else use `defaultValue`.\n\t\t\t *\n\t\t\t * @param {string} optionName name of the option property (on node and tree)\n\t\t\t * @param {FancytreeNode} node passed to the callback\n\t\t\t * @param {object} nodeObject where to look for the local option property, e.g. `node` or `node.data`\n\t\t\t * @param {object} treeOption where to look for the tree option, e.g. `tree.options` or `tree.options.dnd5`\n\t\t\t * @param {any} [defaultValue]\n\t\t\t * @returns {any}\n\t\t\t *\n\t\t\t * @example\n\t\t\t * // Check for node.foo, tree,options.foo(), and tree.options.foo:\n\t\t\t * $.ui.fancytree.evalOption(\"foo\", node, node, tree.options);\n\t\t\t * // Check for node.data.bar, tree,options.qux.bar(), and tree.options.qux.bar:\n\t\t\t * $.ui.fancytree.evalOption(\"bar\", node, node.data, tree.options.qux);\n\t\t\t *\n\t\t\t * @since 2.22\n\t\t\t */\n\t\t\tevalOption: function(\n\t\t\t\toptionName,\n\t\t\t\tnode,\n\t\t\t\tnodeObject,\n\t\t\t\ttreeOptions,\n\t\t\t\tdefaultValue\n\t\t\t) {\n\t\t\t\tvar ctx,\n\t\t\t\t\tres,\n\t\t\t\t\ttree = node.tree,\n\t\t\t\t\ttreeOpt = treeOptions[optionName],\n\t\t\t\t\tnodeOpt = nodeObject[optionName];\n\n\t\t\t\tif ($.isFunction(treeOpt)) {\n\t\t\t\t\tctx = {\n\t\t\t\t\t\tnode: node,\n\t\t\t\t\t\ttree: tree,\n\t\t\t\t\t\twidget: tree.widget,\n\t\t\t\t\t\toptions: tree.widget.options,\n\t\t\t\t\t\ttypeInfo: tree.types[node.type] || {},\n\t\t\t\t\t};\n\t\t\t\t\tres = treeOpt.call(tree, { type: optionName }, ctx);\n\t\t\t\t\tif (res == null) {\n\t\t\t\t\t\tres = nodeOpt;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tres = nodeOpt != null ? nodeOpt : treeOpt;\n\t\t\t\t}\n\t\t\t\tif (res == null) {\n\t\t\t\t\tres = defaultValue; // no option set at all: return default\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t},\n\t\t\t/** Set expander, checkbox, or node icon, supporting string and object format.\n\t\t\t *\n\t\t\t * @param {Element | jQueryObject} span\n\t\t\t * @param {string} baseClass\n\t\t\t * @param {string | object} icon\n\t\t\t * @since 2.27\n\t\t\t */\n\t\t\tsetSpanIcon: function(span, baseClass, icon) {\n\t\t\t\tvar $span = $(span);\n\n\t\t\t\tif (typeof icon === \"string\") {\n\t\t\t\t\t$span.attr(\"class\", baseClass + \" \" + icon);\n\t\t\t\t} else {\n\t\t\t\t\t// support object syntax: { text: ligature, addClasse: classname }\n\t\t\t\t\tif (icon.text) {\n\t\t\t\t\t\t$span.text(\"\" + icon.text);\n\t\t\t\t\t} else if (icon.html) {\n\t\t\t\t\t\tspan.innerHTML = icon.html;\n\t\t\t\t\t}\n\t\t\t\t\t$span.attr(\n\t\t\t\t\t\t\"class\",\n\t\t\t\t\t\tbaseClass + \" \" + (icon.addClass || \"\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t/** Convert a keydown or mouse event to a canonical string like 'ctrl+a',\n\t\t\t * 'ctrl+shift+f2', 'shift+leftdblclick'.\n\t\t\t *\n\t\t\t * This is especially handy for switch-statements in event handlers.\n\t\t\t *\n\t\t\t * @param {event}\n\t\t\t * @returns {string}\n\t\t\t *\n\t\t\t * @example\n\n\t\t\tswitch( $.ui.fancytree.eventToString(event) ) {\n\t\t\t\tcase \"-\":\n\t\t\t\t\ttree.nodeSetExpanded(ctx, false);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"shift+return\":\n\t\t\t\t\ttree.nodeSetActive(ctx, true);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"down\":\n\t\t\t\t\tres = node.navigate(event.which, activate);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\thandled = false;\n\t\t\t}\n\t\t\tif( handled ){\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\t*/\n\t\t\teventToString: function(event) {\n\t\t\t\t// Poor-man's hotkeys. See here for a complete implementation:\n\t\t\t\t// https://github.com/jeresig/jquery.hotkeys\n\t\t\t\tvar which = event.which,\n\t\t\t\t\tet = event.type,\n\t\t\t\t\ts = [];\n\n\t\t\t\tif (event.altKey) {\n\t\t\t\t\ts.push(\"alt\");\n\t\t\t\t}\n\t\t\t\tif (event.ctrlKey) {\n\t\t\t\t\ts.push(\"ctrl\");\n\t\t\t\t}\n\t\t\t\tif (event.metaKey) {\n\t\t\t\t\ts.push(\"meta\");\n\t\t\t\t}\n\t\t\t\tif (event.shiftKey) {\n\t\t\t\t\ts.push(\"shift\");\n\t\t\t\t}\n\n\t\t\t\tif (et === \"click\" || et === \"dblclick\") {\n\t\t\t\t\ts.push(MOUSE_BUTTONS[event.button] + et);\n\t\t\t\t} else {\n\t\t\t\t\tif (!IGNORE_KEYCODES[which]) {\n\t\t\t\t\t\ts.push(\n\t\t\t\t\t\t\tSPECIAL_KEYCODES[which] ||\n\t\t\t\t\t\t\t\tString.fromCharCode(which).toLowerCase()\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn s.join(\"+\");\n\t\t\t},\n\t\t\t/** Write message to console if debugLevel >= 3\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\tinfo: function(msg) {\n\t\t\t\t/*jshint expr:true */\n\t\t\t\t$.ui.fancytree.debugLevel >= 3 &&\n\t\t\t\t\tconsoleApply(\"info\", arguments);\n\t\t\t},\n\t\t\t/* @deprecated: use eventToString(event) instead.\n\t\t\t */\n\t\t\tkeyEventToString: function(event) {\n\t\t\t\tthis.warn(\n\t\t\t\t\t\"keyEventToString() is deprecated: use eventToString()\"\n\t\t\t\t);\n\t\t\t\treturn this.eventToString(event);\n\t\t\t},\n\t\t\t/** Return a wrapped handler method, that provides `this._super`.\n\t\t\t *\n\t\t\t * @example\n\t\t\t\t// Implement `opts.createNode` event to add the 'draggable' attribute\n\t\t\t\t$.ui.fancytree.overrideMethod(ctx.options, \"createNode\", function(event, data) {\n\t\t\t\t\t// Default processing if any\n\t\t\t\t\tthis._super.apply(this, arguments);\n\t\t\t\t\t// Add 'draggable' attribute\n\t\t\t\t\tdata.node.span.draggable = true;\n\t\t\t\t});\n\t\t\t *\n\t\t\t * @param {object} instance\n\t\t\t * @param {string} methodName\n\t\t\t * @param {function} handler\n\t\t\t * @param {object} [context] optional context\n\t\t\t */\n\t\t\toverrideMethod: function(instance, methodName, handler, context) {\n\t\t\t\tvar prevSuper,\n\t\t\t\t\t_super = instance[methodName] || $.noop;\n\n\t\t\t\tinstance[methodName] = function() {\n\t\t\t\t\tvar self = context || this;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tprevSuper = self._super;\n\t\t\t\t\t\tself._super = _super;\n\t\t\t\t\t\treturn handler.apply(self, arguments);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tself._super = prevSuper;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\t\t\t/**\n\t\t\t * Parse tree data from HTML <ul> markup\n\t\t\t *\n\t\t\t * @param {jQueryObject} $ul\n\t\t\t * @returns {NodeData[]}\n\t\t\t */\n\t\t\tparseHtml: function($ul) {\n\t\t\t\t// TODO: understand this:\n\t\t\t\t/*jshint validthis:true */\n\t\t\t\tvar classes,\n\t\t\t\t\tclassName,\n\t\t\t\t\textraClasses,\n\t\t\t\t\ti,\n\t\t\t\t\tiPos,\n\t\t\t\t\tl,\n\t\t\t\t\ttmp,\n\t\t\t\t\ttmp2,\n\t\t\t\t\t$children = $ul.find(\">li\"),\n\t\t\t\t\tchildren = [];\n\n\t\t\t\t$children.each(function() {\n\t\t\t\t\tvar allData,\n\t\t\t\t\t\tlowerCaseAttr,\n\t\t\t\t\t\t$li = $(this),\n\t\t\t\t\t\t$liSpan = $li.find(\">span:first\", this),\n\t\t\t\t\t\t$liA = $liSpan.length ? null : $li.find(\">a:first\"),\n\t\t\t\t\t\td = { tooltip: null, data: {} };\n\n\t\t\t\t\tif ($liSpan.length) {\n\t\t\t\t\t\td.title = $liSpan.html();\n\t\t\t\t\t} else if ($liA && $liA.length) {\n\t\t\t\t\t\t// If a <li><a> tag is specified, use it literally and extract href/target.\n\t\t\t\t\t\td.title = $liA.html();\n\t\t\t\t\t\td.data.href = $liA.attr(\"href\");\n\t\t\t\t\t\td.data.target = $liA.attr(\"target\");\n\t\t\t\t\t\td.tooltip = $liA.attr(\"title\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If only a <li> tag is specified, use the trimmed string up to\n\t\t\t\t\t\t// the next child <ul> tag.\n\t\t\t\t\t\td.title = $li.html();\n\t\t\t\t\t\tiPos = d.title.search(/<ul/i);\n\t\t\t\t\t\tif (iPos >= 0) {\n\t\t\t\t\t\t\td.title = d.title.substring(0, iPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\td.title = $.trim(d.title);\n\n\t\t\t\t\t// Make sure all fields exist\n\t\t\t\t\tfor (i = 0, l = CLASS_ATTRS.length; i < l; i++) {\n\t\t\t\t\t\td[CLASS_ATTRS[i]] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\t// Initialize to `true`, if class is set and collect extraClasses\n\t\t\t\t\tclasses = this.className.split(\" \");\n\t\t\t\t\textraClasses = [];\n\t\t\t\t\tfor (i = 0, l = classes.length; i < l; i++) {\n\t\t\t\t\t\tclassName = classes[i];\n\t\t\t\t\t\tif (CLASS_ATTR_MAP[className]) {\n\t\t\t\t\t\t\td[className] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\textraClasses.push(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\td.extraClasses = extraClasses.join(\" \");\n\n\t\t\t\t\t// Parse node options from ID, title and class attributes\n\t\t\t\t\ttmp = $li.attr(\"title\");\n\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\td.tooltip = tmp; // overrides <a title='...'>\n\t\t\t\t\t}\n\t\t\t\t\ttmp = $li.attr(\"id\");\n\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\td.key = tmp;\n\t\t\t\t\t}\n\t\t\t\t\t// Translate hideCheckbox -> checkbox:false\n\t\t\t\t\tif ($li.attr(\"hideCheckbox\")) {\n\t\t\t\t\t\td.checkbox = false;\n\t\t\t\t\t}\n\t\t\t\t\t// Add <li data-NAME='...'> as node.data.NAME\n\t\t\t\t\tallData = _getElementDataAsDict($li);\n\t\t\t\t\tif (allData && !$.isEmptyObject(allData)) {\n\t\t\t\t\t\t// #507: convert data-hidecheckbox (lower case) to hideCheckbox\n\t\t\t\t\t\tfor (lowerCaseAttr in NODE_ATTR_LOWERCASE_MAP) {\n\t\t\t\t\t\t\tif (allData.hasOwnProperty(lowerCaseAttr)) {\n\t\t\t\t\t\t\t\tallData[\n\t\t\t\t\t\t\t\t\tNODE_ATTR_LOWERCASE_MAP[lowerCaseAttr]\n\t\t\t\t\t\t\t\t] =\n\t\t\t\t\t\t\t\t\tallData[lowerCaseAttr];\n\t\t\t\t\t\t\t\tdelete allData[lowerCaseAttr];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #56: Allow to set special node.attributes from data-...\n\t\t\t\t\t\tfor (i = 0, l = NODE_ATTRS.length; i < l; i++) {\n\t\t\t\t\t\t\ttmp = NODE_ATTRS[i];\n\t\t\t\t\t\t\ttmp2 = allData[tmp];\n\t\t\t\t\t\t\tif (tmp2 != null) {\n\t\t\t\t\t\t\t\tdelete allData[tmp];\n\t\t\t\t\t\t\t\td[tmp] = tmp2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// All other data-... goes to node.data...\n\t\t\t\t\t\t$.extend(d.data, allData);\n\t\t\t\t\t}\n\t\t\t\t\t// Recursive reading of child nodes, if LI tag contains an UL tag\n\t\t\t\t\t$ul = $li.find(\">ul:first\");\n\t\t\t\t\tif ($ul.length) {\n\t\t\t\t\t\td.children = $.ui.fancytree.parseHtml($ul);\n\t\t\t\t\t} else {\n\t\t\t\t\t\td.children = d.lazy ? undefined : null;\n\t\t\t\t\t}\n\t\t\t\t\tchildren.push(d);\n\t\t\t\t\t// FT.debug(\"parse \", d, children);\n\t\t\t\t});\n\t\t\t\treturn children;\n\t\t\t},\n\t\t\t/** Add Fancytree extension definition to the list of globally available extensions.\n\t\t\t *\n\t\t\t * @param {object} definition\n\t\t\t */\n\t\t\tregisterExtension: function(definition) {\n\t\t\t\t_assert(\n\t\t\t\t\tdefinition.name != null,\n\t\t\t\t\t\"extensions must have a `name` property.\"\n\t\t\t\t);\n\t\t\t\t_assert(\n\t\t\t\t\tdefinition.version != null,\n\t\t\t\t\t\"extensions must have a `version` property.\"\n\t\t\t\t);\n\t\t\t\t$.ui.fancytree._extensions[definition.name] = definition;\n\t\t\t},\n\t\t\t/** Inverse of escapeHtml().\n\t\t\t *\n\t\t\t * @param {string} s\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tunescapeHtml: function(s) {\n\t\t\t\tvar e = document.createElement(\"div\");\n\t\t\t\te.innerHTML = s;\n\t\t\t\treturn e.childNodes.length === 0\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: e.childNodes[0].nodeValue;\n\t\t\t},\n\t\t\t/** Write warning message to console if debugLevel >= 2.\n\t\t\t * @param {string} msg\n\t\t\t */\n\t\t\twarn: function(msg) {\n\t\t\t\t$.ui.fancytree.debugLevel >= 2 &&\n\t\t\t\t\tconsoleApply(\"warn\", arguments);\n\t\t\t},\n\t\t}\n\t);\n\n\t// Value returned by `require('jquery.fancytree')`\n\treturn $.ui.fancytree;\n}); // End of closure\n","/**\n * Admin modules\n */\n\nlet WP_Smush = WP_Smush || {};\nwindow.WP_Smush = WP_Smush;\n\n/**\n * IE polyfill for includes.\n *\n * @since 3.1.0\n */\nif (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > this.length) {\n return false;\n } else {\n return this.indexOf(search, start) !== -1;\n }\n };\n}\n\nrequire( './modules/helpers' );\nrequire( './modules/admin' );\nrequire( './modules/bulk-smush' );\nrequire( './modules/onboarding' );\nrequire( './modules/directory-smush' );\nrequire( './smush/cdn' );\nrequire( './smush/lazy-load' );\n\n/**\n * Notice scripts.\n *\n * Notices are used in the following functions:\n *\n * @used-by WP_Smushit::smush_updated()\n * @used-by WP_Smush_S3::3_support_required_notice()\n * @used-by WP_Smush_View::installation_notice()\n *\n * @todo should this be moved out in a separate file like common.scss?\n */\nrequire( './modules/notice' );","/**\n * Helpers functions.\n *\n * @since 2.9.0 Moved from admin.js\n */\n\n( function( $ ) {\n\t'use strict';\n\n\tWP_Smush.helpers = {\n\n\t\tinit: () => {},\n\n\t\t/**\n\t\t * Convert bytes to human readable form.\n\t\t *\n\t\t * @param a Bytes\n\t\t * @param b Number of digits\n\t\t * @returns {*} Formatted Bytes\n\t\t */\n\t\tformatBytes: ( a, b ) => {\n\t\t\tconst thresh = 1024,\n\t\t\t\t units = ['KB', 'MB', 'GB', 'TB', 'PB'];\n\n\t\t\tif ( Math.abs( a ) < thresh ) {\n\t\t\t\treturn a + ' B';\n\t\t\t}\n\n\t\t\tlet u = -1;\n\n\t\t\tdo {\n\t\t\t\ta /= thresh;\n\t\t\t\t++u;\n\t\t\t} while ( Math.abs( a ) >= thresh && u < units.length - 1 );\n\n\t\t\treturn a.toFixed( b ) + ' ' + units[u];\n\t\t},\n\n\t\t/**\n\t\t * Get size from a string.\n\t\t *\n\t\t * @param formatted_size Formatter string\n\t\t * @returns {*} Formatted Bytes\n\t\t */\n\t\tgetSizeFromString: ( formatted_size ) => {\n\t\t\treturn formatted_size.replace( /[a-zA-Z]/g, '' ).trim();\n\t\t},\n\n\t\t/**\n\t\t * Get type from formatted string.\n\t\t *\n\t\t * @param formatted_size Formatted string\n\t\t * @returns {*} Formatted Bytes\n\t\t */\n\t\tgetFormatFromString: ( formatted_size ) => {\n\t\t\treturn formatted_size.replace( /[0-9.]/g, '' ).trim();\n\t\t},\n\n\t\t/**\n\t\t * Stackoverflow: http://stackoverflow.com/questions/1726630/formatting-a-number-with-exactly-two-decimals-in-javascript\n\t\t * @param num\n\t\t * @param decimals\n\t\t * @returns {number}\n\t\t */\n\t\tprecise_round: ( num, decimals ) => {\n\t\t\tconst sign = num >= 0 ? 1 : -1;\n\t\t\t// Keep the percentage below 100.\n\t\t\tnum = num > 100 ? 100 : num;\n\t\t\treturn (Math.round( (num * Math.pow( 10, decimals )) + (sign * 0.001) ) / Math.pow( 10, decimals ));\n\t\t},\n\n\t\t/**\n\t\t * Finds y value of given object.\n\t\t *\n\t\t * @param obj\n\t\t * @returns {*[]}\n\t\t */\n\t\tfindPos: ( obj ) => {\n\t\t\tlet cur_top = 0;\n\n\t\t\tif ( obj.offsetParent ) {\n\t\t\t\tdo {\n\t\t\t\t\tcur_top += obj.offsetTop;\n\t\t\t\t} while ( obj = obj.offsetParent );\n\n\t\t\t\treturn [cur_top];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Checks for the specified param in URL.\n\t\t *\n\t\t * @param arg\n\t\t * @returns {*}\n\t\t */\n\t\tgeturlparam: ( arg ) => {\n\t\t\tconst sPageURL = window.location.search.substring( 1 );\n\t\t\tconst sURLVariables = sPageURL.split( '&' );\n\n\t\t\tfor ( let i = 0; i < sURLVariables.length; i++ ) {\n\t\t\t\tconst sParameterName = sURLVariables[i].split( '=' );\n\t\t\t\tif ( sParameterName[0] === arg ) {\n\t\t\t\t\treturn sParameterName[1];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset settings.\n\t\t *\n\t\t * @since 3.2.0\n\t\t */\n\t\tresetSettings: () => {\n\t\t\tconst xhr = new XMLHttpRequest();\n\t\t\txhr.open('POST', ajaxurl+'?action=reset_settings', true);\n\t\t\txhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\t\t\txhr.onload = () => {\n\t\t\t\tif (200 === xhr.status ) {\n\t\t\t\t\tconst res = JSON.parse(xhr.response);\n\t\t\t\t\tif ( 'undefined' !== typeof res.success && res.success ) {\n\t\t\t\t\t\twindow.location.href = wp_smush_msgs.smush_url;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('Request failed. Returned status of ' + xhr.status);\n\t\t\t\t}\n\t\t\t};\n\t\t\txhr.send('_ajax_nonce='+smush_vars.nonce.get_smush_status);\n\t\t}\n\n\t};\n\n\tWP_Smush.helpers.init();\n\n}( jQuery ));\n","import Smush from '../smush/smush';\n\nlet remove_element = function ( el, timeout ) {\n\tif ( typeof timeout === 'undefined' ) {\n\t\ttimeout = 100;\n\t}\n\tel.fadeTo( timeout, 0, function () {\n\t\tel.slideUp( timeout, function () {\n\t\t\tel.remove();\n\t\t} );\n\t} );\n};\n\njQuery( function ( $ ) {\n\t'use strict';\n\n\t/** Disable the action links **/\n\tvar disable_links = function ( c_element ) {\n\n\t\tvar parent = c_element.parent();\n\t\t//reduce parent opacity\n\t\tparent.css( {'opacity': '0.5'} );\n\t\t//Disable Links\n\t\tparent.find( 'a' ).attr( 'disabled', 'disabled' );\n\t};\n\n\t/** Enable the Action Links **/\n\tvar enable_links = function ( c_element ) {\n\n\t\tvar parent = c_element.parent();\n\n\t\t//reduce parent opacity\n\t\tparent.css( {'opacity': '1'} );\n\t\t//Disable Links\n\t\tparent.find( 'a' ).removeAttr( 'disabled' );\n\t};\n\t/**\n\t * Restore image request with a specified action for Media Library / NextGen Gallery\n\t * @param e\n\t * @param current_button\n\t * @param smush_action\n\t * @returns {boolean}\n\t */\n\tvar process_smush_action = function ( e, current_button, smush_action, action ) {\n\n\t\t//If disabled\n\t\tif ( 'disabled' == current_button.attr( 'disabled' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\te.preventDefault();\n\n\t\t//Remove Error\n\t\t$( '.wp-smush-error' ).remove();\n\n\t\t//Hide stats\n\t\t$( '.smush-stats-wrapper' ).hide();\n\n\t\tvar mode = 'grid';\n\t\tif ( 'smush_restore_image' == smush_action ) {\n\t\t\tif ( $( document ).find( 'div.media-modal.wp-core-ui' ).length > 0 ) {\n\t\t\t\tmode = 'grid';\n\t\t\t} else {\n\t\t\t\tmode = window.location.search.indexOf( 'item' ) > -1 ? 'grid' : 'list';\n\t\t\t}\n\t\t}\n\n\t\t//Get the image ID and nonce\n\t\tvar params = {\n\t\t\taction: smush_action,\n\t\t\tattachment_id: current_button.data( 'id' ),\n\t\t\tmode: mode,\n\t\t\t_nonce: current_button.data( 'nonce' )\n\t\t};\n\n\t\t//Reduce the opacity of stats and disable the click\n\t\tdisable_links( current_button );\n\n\t\tSmush.progress_bar( current_button, wp_smush_msgs[action], 'show' );\n\n\t\t//Restore the image\n\t\t$.post( ajaxurl, params, function ( r ) {\n\n\t\t\tSmush.progress_bar( current_button, wp_smush_msgs[action], 'hide' );\n\n\t\t\t//reset all functionality\n\t\t\tenable_links( current_button );\n\n\t\t\tif ( r.success && 'undefined' != typeof(r.data.button) ) {\n\t\t\t\t//Replace in immediate parent for nextgen\n\t\t\t\tif ( 'undefined' != typeof (this.data) && this.data.indexOf( 'nextgen' ) > -1 ) {\n\t\t\t\t\t//Show the smush button, and remove stats and restore option\n\t\t\t\t\tcurrent_button.parent().html( r.data.button );\n\t\t\t\t} else {\n\t\t\t\t\t//Show the smush button, and remove stats and restore option\n\t\t\t\t\tcurrent_button.parents().eq( 1 ).html( r.data.button );\n\t\t\t\t}\n\n\t\t\t\tif ( 'undefined' != typeof (r.data) && 'restore' === action ) {\n\t\t\t\t\tSmush.update_image_stats( r.data.new_size );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( r.data.message ) {\n\t\t\t\t\t//show error\n\t\t\t\t\tcurrent_button.parent().append( r.data.message );\n\t\t\t\t}\n\t\t\t}\n\t\t} )\n\t};\n\n\t/**\n\t * Validates the Resize Width and Height against the Largest Thumbnail Width and Height\n\t *\n\t * @param wrapper_div jQuery object for the whole setting row wrapper div\n\t * @param width_only Whether to validate only width\n\t * @param height_only Validate only Height\n\t * @returns {boolean} All Good or not\n\t *\n\t */\n\tvar validate_resize_settings = function ( wrapper_div, width_only, height_only ) {\n\t\tvar resize_checkbox = wrapper_div.find( '#wp-smush-resize, #wp-smush-resize-quick-setup' );\n\n\t\tif ( !height_only ) {\n\t\t\tvar width_input = wrapper_div.find( '#wp-smush-resize_width, #quick-setup-resize_width' );\n\t\t\tvar width_error_note = wrapper_div.find( '.sui-notice-info.wp-smush-update-width' );\n\t\t}\n\t\tif ( !width_only ) {\n\t\t\tvar height_input = wrapper_div.find( '#wp-smush-resize_height, #quick-setup-resize_height' );\n\t\t\tvar height_error_note = wrapper_div.find( '.sui-notice-info.wp-smush-update-height' );\n\t\t}\n\n\t\tvar width_error = false;\n\t\tvar height_error = false;\n\n\t\t//If resize settings is not enabled, return true\n\t\tif ( !resize_checkbox.is( ':checked' ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t//Check if we have localised width and height\n\t\tif ( 'undefined' == typeof (wp_smushit_data.resize_sizes) || 'undefined' == typeof (wp_smushit_data.resize_sizes.width) ) {\n\t\t\t//Rely on server validation\n\t\t\treturn true;\n\t\t}\n\n\t\t//Check for width\n\t\tif ( !height_only && 'undefined' != typeof width_input && parseInt( wp_smushit_data.resize_sizes.width ) > parseInt( width_input.val() ) ) {\n\t\t\twidth_input.parent().addClass( 'sui-form-field-error' );\n\t\t\twidth_error_note.show( 'slow' );\n\t\t\twidth_error = true;\n\t\t} else {\n\t\t\t//Remove error class\n\t\t\twidth_input.parent().removeClass( 'sui-form-field-error' );\n\t\t\twidth_error_note.hide();\n\t\t\tif ( height_input.hasClass( 'error' ) ) {\n\t\t\t\theight_error_note.show( 'slow' );\n\t\t\t}\n\t\t}\n\n\t\t//Check for height\n\t\tif ( !width_only && 'undefined' != typeof height_input && parseInt( wp_smushit_data.resize_sizes.height ) > parseInt( height_input.val() ) ) {\n\t\t\theight_input.parent().addClass( 'sui-form-field-error' );\n\t\t\t//If we are not showing the width error already\n\t\t\tif ( !width_error ) {\n\t\t\t\theight_error_note.show( 'slow' );\n\t\t\t}\n\t\t\theight_error = true;\n\t\t} else {\n\t\t\t//Remove error class\n\t\t\theight_input.parent().removeClass( 'sui-form-field-error' );\n\t\t\theight_error_note.hide();\n\t\t\tif ( width_input.hasClass( 'error' ) ) {\n\t\t\t\twidth_error_note.show( 'slow' );\n\t\t\t}\n\t\t}\n\n\t\tif ( width_error || height_error ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\n\t};\n\n\t/**\n\t * Update the progress bar width if we have images that needs to be resmushed\n\t * @param unsmushed_count\n\t * @returns {boolean}\n\t */\n\tvar update_progress_bar_resmush = function ( unsmushed_count ) {\n\n\t\tif ( 'undefined' == typeof unsmushed_count ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar smushed_count = wp_smushit_data.count_total - unsmushed_count;\n\n\t\t//Update the Progress Bar Width\n\t\t// get the progress bar\n\t\tvar $progress_bar = jQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' );\n\t\tif ( $progress_bar.length < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar width = ( smushed_count / wp_smushit_data.count_total ) * 100;\n\n\t\t// increase progress\n\t\t$progress_bar.css( 'width', width + '%' );\n\t};\n\n\tlet run_re_check = function ( process_settings ) {\n\t\tconst button = $( '.wp-smush-scan' );\n\n\t\t// Empty the button text and add loader class.\n\t\tbutton.text( '' ).addClass( 'sui-button-onload sui-icon-loader sui-loading' ).blur();\n\n\t\t// Check if type is set in data attributes.\n\t\tlet scan_type = button.data( 'type' );\n\t\tscan_type = 'undefined' == typeof scan_type ? 'media' : scan_type;\n\n\t\t// Remove the Skip resmush attribute from button.\n\t\t$( 'button.wp-smush-all' ).removeAttr( 'data-smush' );\n\n\t\t// Remove notices.\n\t\tconst notices = $( '.sui-notice-top.sui-notice-success' );\n\t\tnotices.slideUp( 100, function () {\n\t\t\tnotices.remove();\n\t\t} );\n\n\t\t// Disable Bulk smush button and itself.\n\t\t$( '.wp-smush-all' ).attr( 'disabled', 'disabled' );\n\n\t\t// Hide Settings changed Notice.\n\t\t$( '.wp-smush-settings-changed' ).hide();\n\n\t\t// Ajax params.\n\t\tconst params = {\n\t\t\taction: 'scan_for_resmush',\n\t\t\ttype: scan_type,\n\t\t\tget_ui: true,\n\t\t\tprocess_settings: process_settings,\n\t\t\twp_smush_options_nonce: jQuery( '#wp_smush_options_nonce' ).val()\n\t\t};\n\n\t\t// Send ajax request and get ids if any.\n\t\t$.get( ajaxurl, params, function ( r ) {\n\t\t\t// Check if we have the ids, initialize the local variable.\n\t\t\tif ( 'undefined' != typeof r.data ) {\n\t\t\t\t// Update Resmush id list.\n\t\t\t\tif ( 'undefined' != typeof r.data.resmush_ids ) {\n\t\t\t\t\twp_smushit_data.resmush = r.data.resmush_ids;\n\n\t\t\t\t\t// Update wp_smushit_data ( Smushed count, Smushed Percent, Image count, Super smush count, resize savings, conversion savings ).\n\t\t\t\t\tif ( 'undefinied' !== typeof wp_smushit_data ) {\n\t\t\t\t\t\twp_smushit_data.count_smushed = 'undefined' != typeof r.data.count_smushed ? r.data.count_smushed : wp_smushit_data.count_smushed;\n\t\t\t\t\t\twp_smushit_data.count_supersmushed = 'undefined' != typeof r.data.count_supersmushed ? r.data.count_supersmushed : wp_smushit_data.count_supersmushed;\n\t\t\t\t\t\twp_smushit_data.count_images = 'undefined' != typeof r.data.count_image ? r.data.count_image : wp_smushit_data.count_images;\n\t\t\t\t\t\twp_smushit_data.size_before = 'undefined' != typeof r.data.size_before ? r.data.size_before : wp_smushit_data.size_before;\n\t\t\t\t\t\twp_smushit_data.size_after = 'undefined' != typeof r.data.size_after ? r.data.size_after : wp_smushit_data.size_after;\n\t\t\t\t\t\twp_smushit_data.savings_resize = 'undefined' != typeof r.data.savings_resize ? r.data.savings_resize : wp_smushit_data.savings_resize;\n\t\t\t\t\t\twp_smushit_data.savings_conversion = 'undefined' != typeof r.data.savings_conversion ? r.data.savings_conversion : wp_smushit_data.savings_conversion;\n\t\t\t\t\t\twp_smushit_data.count_resize = 'undefined' != typeof r.data.count_resize ? r.data.count_resize : wp_smushit_data.count_resize;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'nextgen' === scan_type ) {\n\t\t\t\t\t\twp_smushit_data.bytes = parseInt( wp_smushit_data.size_before ) - parseInt( wp_smushit_data.size_after )\n\t\t\t\t\t}\n\n\t\t\t\t\tlet smush_percent = ( wp_smushit_data.count_smushed / wp_smushit_data.count_total ) * 100;\n\t\t\t\t\tsmush_percent = WP_Smush.helpers.precise_round( smush_percent, 1 );\n\n\t\t\t\t\t// Update it in stats bar.\n\t\t\t\t\t$( '.wp-smush-images-percent' ).html( smush_percent );\n\n\t\t\t\t\t// Hide the Existing wrapper.\n\t\t\t\t\tconst notices = $( '.bulk-smush-wrapper .sui-notice' );\n\t\t\t\t\tif ( notices.length > 0 ) {\n\t\t\t\t\t\tnotices.hide();\n\t\t\t\t\t\t$( '.wp-smush-pagespeed-recommendation' ).hide();\n\t\t\t\t\t}\n\t\t\t\t\t// Remove existing Re-Smush notices.\n\t\t\t\t\t$( '.wp-smush-resmush-notice' ).remove();\n\n\t\t\t\t\t// Show Bulk wrapper.\n\t\t\t\t\t$( '.wp-smush-bulk-wrapper' ).show();\n\n\t\t\t\t\tif ( 'undefined' !== typeof r.data.count ) {\n\t\t\t\t\t\tupdate_progress_bar_resmush( r.data.count );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If content is received, Prepend it.\n\t\t\t\tif ( 'undefined' !== typeof r.data.content ) {\n\t\t\t\t\t$( '.bulk-smush-wrapper .sui-box-body' ).prepend( r.data.content );\n\t\t\t\t}\n\t\t\t\t// If we have any notice to show.\n\t\t\t\tif ( 'undefined' !== typeof r.data.notice ) {\n\t\t\t\t\t$( '.wp-smush-page-header' ).after( r.data.notice );\n\t\t\t\t}\n\t\t\t\t// Hide errors.\n\t\t\t\t$( 'div.smush-final-log' ).hide();\n\n\t\t\t\t// Hide Super Smush notice if it's enabled in media settings.\n\t\t\t\tif ( 'undefined' !== typeof r.data.super_smush && r.data.super_smush ) {\n\t\t\t\t\tconst enable_lossy = jQuery( '.wp-smush-enable-lossy' );\n\t\t\t\t\tif ( enable_lossy.length > 0 ) {\n\t\t\t\t\t\tenable_lossy.remove();\n\t\t\t\t\t}\n\t\t\t\t\tif ( 'undefined' !== r.data.super_smush_stats ) {\n\t\t\t\t\t\t$( '.super-smush-attachments .wp-smush-stats' ).html( r.data.super_smush_stats );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tSmush.update_stats( scan_type );\n\t\t\t}\n\t\t} ).always( function () {\n\t\t\t// Hide the progress bar.\n\t\t\tjQuery( '.bulk-smush-wrapper .wp-smush-bulk-progress-bar-wrapper' ).hide();\n\n\t\t\t// Add check complete status to button.\n\t\t\tbutton.text( wp_smush_msgs.resmush_complete )\n\t\t\t\t.removeClass( 'sui-button-onload sui-icon-loader sui-loading' )\n\t\t\t\t.addClass( 'smush-button-check-success' );\n\n\t\t\t// Remove success message from button.\n\t\t\tsetTimeout( function () {\n\t\t\t\tbutton.removeClass( 'smush-button-check-success' ).text( wp_smush_msgs.resmush_check );\n\t\t\t}, 2000 );\n\n\t\t\t$( '.wp-smush-all' ).removeAttr( 'disabled' );\n\n\t\t\t// If wp-smush-re-check-message is there, remove it.\n\t\t\tconst reCheckMessage = $( '.wp-smush-re-check-message' );\n\t\t\tif ( reCheckMessage.length ) {\n\t\t\t\tremove_element( reCheckMessage );\n\t\t\t}\n\t\t} );\n\t};\n\n\t// Scroll the element to top of the page.\n\tvar goToByScroll = function ( selector ) {\n\t\t// Scroll if element found.\n\t\tif ( $( selector ).length > 0 ) {\n\t\t\t$( 'html, body' ).animate( {\n\t\t\t\t\tscrollTop: $( selector ).offset().top - 100\n\t\t\t\t}, 'slow'\n\t\t\t);\n\t\t}\n\t};\n\n\tvar update_cummulative_stats = function ( stats ) {\n\t\t//Update Directory Smush Stats\n\t\tif ( 'undefined' != typeof ( stats.dir_smush ) ) {\n\t\t\tvar stats_human = $( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-human' );\n\t\t\tvar stats_percent = $( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-percent' );\n\n\t\t\t// Do not replace if 0 savings.\n\t\t\tif ( stats.dir_smush.bytes > 0 ) {\n\t\t\t\t// Hide selector.\n\t\t\t\t$( 'li.smush-dir-savings .wp-smush-stats-label-message' ).hide();\n\t\t\t\t//Update Savings in bytes\n\t\t\t\tif ( stats_human.length > 0 ) {\n\t\t\t\t\tstats_human.html( stats.dir_smush.human );\n\t\t\t\t} else {\n\t\t\t\t\tvar span = '<span class=\"wp-smush-stats-human\">' + stats.dir_smush.bytes + '</span>';\n\t\t\t\t}\n\n\t\t\t\t//Percentage section\n\t\t\t\tif ( stats.dir_smush.percent > 0 ) {\n\t\t\t\t\t// Show size and percentage separator.\n\t\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats span.wp-smush-stats-sep' ).removeClass( 'sui-hidden' );\n\t\t\t\t\t//Update Optimisation percentage\n\t\t\t\t\tif ( stats_percent.length > 0 ) {\n\t\t\t\t\t\tstats_percent.html( stats.dir_smush.percent + '%' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar span = '<span class=\"wp-smush-stats-percent\">' + stats.dir_smush.percent + '%' + '</span>';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//Update Combined stats\n\t\tif ( 'undefined' != typeof ( stats.combined_stats ) && stats.combined_stats.length > 0 ) {\n\t\t\tvar c_stats = stats.combined_stats;\n\n\t\t\tvar smush_percent = ( c_stats.smushed / c_stats.total_count ) * 100;\n\t\t\tsmush_percent = WP_Smush.helpers.precise_round( smush_percent, 1 );\n\n\t\t\t//Smushed Percent\n\t\t\tif ( smush_percent ) {\n\t\t\t\t$( 'div.wp-smush-count-total span.wp-smush-images-percent' ).html( smush_percent );\n\t\t\t}\n\t\t\t//Update Total Attachment Count\n\t\t\tif ( c_stats.total_count ) {\n\t\t\t\t$( 'span.wp-smush-count-total span.wp-smush-total-optimised' ).html( c_stats.total_count );\n\t\t\t}\n\t\t\t//Update Savings and Percent\n\t\t\tif ( c_stats.savings ) {\n\t\t\t\t$( 'span.wp-smush-savings span.wp-smush-stats-human' ).html( c_stats.savings );\n\t\t\t}\n\t\t\tif ( c_stats.percent ) {\n\t\t\t\t$( 'span.wp-smush-savings span.wp-smush-stats-percent' ).html( c_stats.percent );\n\t\t\t}\n\t\t}\n\t};\n\n\t//Remove span tag from URL\n\tfunction removeSpan( url ) {\n\t\tvar url = url.slice( url.indexOf( '?' ) + 1 ).split( '&' );\n\t\tfor ( var i = 0; i < url.length; i++ ) {\n\t\t\tvar urlparam = decodeURI( url[i] ).split( /=(.+)/ )[1];\n\t\t\treturn urlparam.replace( /<(?:.|\\n)*?>/gm, '' );\n\t\t}\n\t}\n\n\t/**\n\t * Handle the Smush Stats link click\n\t */\n\t$( 'body' ).on( 'click', 'a.smush-stats-details', function ( e ) {\n\n\t\t//If disabled\n\t\tif ( 'disabled' == $( this ).attr( 'disabled' ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\t//Replace the `+` with a `-`\n\t\tvar slide_symbol = $( this ).find( '.stats-toggle' );\n\t\t$( this ).parents().eq( 1 ).find( '.smush-stats-wrapper' ).slideToggle();\n\t\tslide_symbol.text( slide_symbol.text() == '+' ? '-' : '+' );\n\n\n\t} );\n\n\t/** Handle smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-send:not(.wp-smush-resmush)', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\tnew Smush( $( this ), false );\n\t} );\n\n\t/** Handle show in bulk smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-remove-skipped', function( e ) {\n\t\te.preventDefault();\n\n\t\t// Send Ajax request to remove the image from the skip list.\n\t\t$.post( ajaxurl, {\n\t\t\taction: 'remove_from_skip_list',\n\t\t\tid: $(this).attr('data-id')\n\t\t} );\n\n\t\tremove_element( $(this) );\n\t} );\n\n\t/** Handle NextGen Gallery smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-nextgen-send', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\t\tnew Smush( $( this ), false, 'nextgen' );\n\t} );\n\n\t/** Handle NextGen Gallery Bulk smush button click **/\n\t$( 'body' ).on( 'click', '.wp-smush-nextgen-bulk', function ( e ) {\n\t\t// prevent the default action\n\t\te.preventDefault();\n\n\t\t//Check for ids, if there is none (Unsmushed or lossless), don't call smush function\n\t\tif ( 'undefined' === typeof wp_smushit_data ||\n\t\t\t( wp_smushit_data.unsmushed.length === 0 && wp_smushit_data.resmush.length === 0 )\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tjQuery( '.wp-smush-all, .wp-smush-scan' ).attr( 'disabled', 'disabled' );\n\t\t$( \".wp-smush-notice.wp-smush-remaining\" ).hide();\n\t\tnew Smush( $( this ), true, 'nextgen' );\n\t} );\n\n\t/** Restore: Media Library **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-restore', function ( e ) {\n\t\tconst current_button = $( this );\n\t\tprocess_smush_action( e, current_button, 'smush_restore_image', 'restore' );\n\t\t// Change the class oa parent div ( Level 2 )\n\t\tconst parent = current_button.parents().eq( 1 );\n\t\tif ( parent.hasClass( 'smushed' ) ) {\n\t\t\tparent.removeClass( 'smushed' ).addClass( 'unsmushed' );\n\t\t}\n\t} );\n\n\t/** Resmush: Media Library **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-resmush', function ( e ) {\n\t\tprocess_smush_action( e, $( this ), 'smush_resmush_image', 'smushing' );\n\t} );\n\n\t/** Restore: NextGen Gallery **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-nextgen-restore', function ( e ) {\n\t\tprocess_smush_action( e, $( this ), 'smush_restore_nextgen_image', 'restore' );\n\t} );\n\n\t/** Resmush: NextGen Gallery **/\n\t$( 'body' ).on( 'click', '.wp-smush-action.wp-smush-nextgen-resmush', function ( e ) {\n\t\tprocess_smush_action( e, $( this ), 'smush_resmush_nextgen_image', 'smushing' );\n\t} );\n\n\t//Scan For resmushing images\n\t$( '.wp-smush-scan' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\trun_re_check( false );\n\t} );\n\n\t//Dismiss Welcome notice\n\t//@todo: Use it for popup\n\t$( '#wp-smush-welcome-box .smush-dismiss-welcome' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this ).parents().eq( 1 );\n\t\tremove_element( $el );\n\n\t\t//Send a ajax request to save the dismissed notice option\n\t\tvar param = {\n\t\t\taction: 'dismiss_welcome_notice'\n\t\t};\n\t\t$.post( ajaxurl, param );\n\t} );\n\n\t//Remove Notice\n\t$( 'body' ).on( 'click', '.wp-smush-notice .icon-fi-close', function ( e ) {\n\t\te.preventDefault();\n\t\tvar $el = $( this ).parent();\n\t\tremove_element( $el );\n\t} );\n\n\t/**\n\t* Parse remove data change.\n\t*/\n\t$('input[name=wp-smush-keep_data]').on('change', function (e) {\n\t\tconst otherClass = 'keep_data-true' === e.target.id ? 'keep_data-false' : 'keep_data-true';\n\t\te.target.parentNode.classList.add('active');\n\t\tdocument.getElementById(otherClass).parentNode.classList.remove('active');\n\t});\n\n\t// On Click Update Settings. Check for change in settings.\n\t$( 'button#wp-smush-save-settings' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tlet setting_type = '';\n\t\tconst setting_input = $( 'input[name=\"setting-type\"]' );\n\t\t// Check if setting type is set in the form.\n\t\tif ( setting_input.length > 0 ) {\n\t\t\tsetting_type = setting_input.val();\n\t\t}\n\n\t\t// Show the spinner.\n\t\tconst self = $( this );\n\t\tself.parent().find( 'span.sui-icon-loader.sui-loading' ).removeClass( 'sui-hidden' );\n\n\t\t// Save settings if in network admin.\n\t\tif ( '' != setting_type && 'network' == setting_type ) {\n\t\t\t// Ajax param.\n\t\t\tlet param = {\n\t\t\t\taction: 'save_settings',\n wp_smush_options_nonce: $( '#wp_smush_options_nonce' ).val()\n\t\t\t};\n\n\t\t\tparam = jQuery.param( param ) + '&' + jQuery( 'form#wp-smush-settings-form' ).serialize();\n\n\t\t\t// Send ajax, Update Settings, And Check For resmush.\n\t\t\tjQuery.post( ajaxurl, param ).done( function () {\n\t\t\t\tjQuery( 'form#wp-smush-settings-form' ).submit();\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t} else {\n\t\t\t$( '.wp-smush-hex-notice' ).hide();\n\n\t\t\t// Update text.\n\t\t\tself.attr( 'disabled', 'disabled' ).addClass( 'button-grey' );\n\n\t\t\t// Update save button text.\n\t\t\tif ( 'undefined' !== typeof self.attr( 'data-msg' ) && self.attr( 'data-msg' ).length > 0 ) {\n\t\t\t\tself.html( self.attr( 'data-msg' ) );\n\t\t\t} else {\n\t\t\t\tself.html( wp_smush_msgs.checking );\n\t\t\t}\n\n\t\t\t// Check if type is set in data attributes.\n\t\t\tlet scan_type = self.data( 'type' );\n\t\t\tscan_type = 'undefined' === typeof scan_type ? 'media' : scan_type;\n\n\t\t\t// Ajax param.\n\t\t\tlet param = {\n\t\t\t\taction: 'scan_for_resmush',\n\t\t\t\twp_smush_options_nonce: jQuery( '#wp_smush_options_nonce' ).val(),\n\t\t\t\ttype: scan_type\n\t\t\t};\n\n\t\t\tparam = jQuery.param( param ) + '&' + jQuery( 'form#wp-smush-settings-form' ).serialize();\n\n\t\t\t// Send ajax, Update Settings, And Check For resmush.\n\t\t\tjQuery.post( ajaxurl, param ).done( function () {\n\t\t\t\tjQuery( 'form#wp-smush-settings-form' ).submit();\n\t\t\t\treturn true;\n\t\t\t} );\n\t\t}\n\t} );\n\n\t// On re-Smush click.\n\t$( 'body' ).on( 'click', '.wp-smush-skip-resmush', function ( e ) {\n\t\te.preventDefault();\n\n\t\tconst self = jQuery( this ),\n\t\t\t container = self.parents().eq( 1 ),\n\t\t\t el = self.parent();\n\n\t\t// Remove Parent div.\n\t\tremove_element( el );\n\n\t\t// Remove Settings Notice.\n\t\t$( '.sui-notice-top.sui-notice-success' ).remove();\n\n\t\t// Set button attribute to skip re-smush ids.\n\t\tcontainer.find( '.wp-smush-all' ).attr( 'data-smush', 'skip_resmush' );\n\n\t\t// Update Smushed count.\n\t\twp_smushit_data.count_smushed = parseInt( wp_smushit_data.count_smushed ) + wp_smushit_data.resmush.length;\n\t\twp_smushit_data.count_supersmushed = parseInt( wp_smushit_data.count_supersmushed ) + wp_smushit_data.resmush.length;\n\n\t\t// Update stats.\n\t\tif ( wp_smushit_data.count_smushed === wp_smushit_data.count_total ) {\n\t\t\t// Show all done notice.\n\t\t\t$( '.wp-smush-notice.wp-smush-all-done, .wp-smush-pagespeed-recommendation' ).show();\n\n\t\t\t// Hide Smush button.\n\t\t\t$( '.wp-smush-bulk-wrapper ' ).hide()\n\t\t}\n\n\t\t// Remove re-Smush notice.\n\t\t$( '.wp-smush-resmush-notice' ).remove();\n\n\t\tlet type = $( '.wp-smush-scan' ).data( 'type' );\n\t\ttype = 'undefined' === typeof type ? 'media' : type;\n\n\t\tconst smushed_count = 'undefined' !== typeof wp_smushit_data.count_smushed ? wp_smushit_data.count_smushed : 0;\n\n\t\tlet smush_percent = ( smushed_count / wp_smushit_data.count_total ) * 100;\n\t\tsmush_percent = WP_Smush.helpers.precise_round( smush_percent, 1 );\n\n\t\t$( '.wp-smush-images-percent' ).html( smush_percent );\n\n\t\t// Update the progress bar width. Get the progress bar.\n\t\tconst progress_bar = jQuery( '.bulk-smush-wrapper .wp-smush-progress-inner' );\n\t\tif ( progress_bar.length < 1 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Increase progress.\n\t\tprogress_bar.css( 'width', smush_percent + '%' );\n\n\t\t// Show the default bulk smush notice.\n\t\t$( '.wp-smush-bulk-wrapper' ).show();\n\t\t$( '.wp-smush-bulk-wrapper .sui-notice' ).show();\n\n\t\tconst params = {\n\t\t\taction: 'delete_resmush_list',\n\t\t\ttype: type\n\t\t};\n\n\t\t//Delete resmush list, @todo: update stats from the ajax response\n\t\t$.post( ajaxurl, params, function ( res ) {\n\t\t\t// Remove the whole li element on success\n\t\t\tif ( res.success && 'undefined' !== typeof res.data.stats ) {\n\t\t\t\tconst stats = res.data.stats;\n\t\t\t\t// Update wp_smushit_data ( Smushed count, Smushed Percent, Image count, Super smush count, resize savings, conversion savings )\n\t\t\t\tif ( 'undefinied' != typeof wp_smushit_data ) {\n\t\t\t\t\twp_smushit_data.count_images = 'undefined' !== typeof stats.count_images ? parseInt( wp_smushit_data.count_images ) + stats.count_images : wp_smushit_data.count_images;\n\t\t\t\t\twp_smushit_data.size_before = 'undefined' !== typeof stats.size_before ? parseInt( wp_smushit_data.size_before ) + stats.size_before : wp_smushit_data.size_before;\n\t\t\t\t\twp_smushit_data.size_after = 'undefined' !== typeof stats.size_after ? parseInt( wp_smushit_data.size_after ) + stats.size_after : wp_smushit_data.size_after;\n\t\t\t\t\twp_smushit_data.savings_resize = 'undefined' !== typeof stats.savings_resize ? parseInt( wp_smushit_data.savings_resize ) + stats.savings_resize : wp_smushit_data.savings_resize;\n\t\t\t\t\twp_smushit_data.savings_conversion = 'undefined' !== typeof stats.savings_conversion ? parseInt( wp_smushit_data.savings_conversion ) + stats.savings_conversion : wp_smushit_data.savings_conversion;\n\n\t\t\t\t\t// Add directory smush stats.\n\t\t\t\t\tif ( 'undefined' !== typeof ( wp_smushit_data.savings_dir_smush ) && 'undefined' !== typeof ( wp_smushit_data.savings_dir_smush.orig_size ) ) {\n\t\t\t\t\t\twp_smushit_data.size_before = 'undefined' !== typeof wp_smushit_data.savings_dir_smush ? parseInt( wp_smushit_data.size_before ) + parseInt( wp_smushit_data.savings_dir_smush.orig_size ) : wp_smushit_data.size_before;\n\t\t\t\t\t\twp_smushit_data.size_after = 'undefined' !== typeof wp_smushit_data.savings_dir_smush ? parseInt( wp_smushit_data.size_after ) + parseInt( wp_smushit_data.savings_dir_smush.image_size ) : wp_smushit_data.size_after;\n\t\t\t\t\t}\n\n\t\t\t\t\twp_smushit_data.count_resize = 'undefined' !== typeof stats.count_resize ? parseInt( wp_smushit_data.count_resize ) + stats.count_resize : wp_smushit_data.count_resize;\n\t\t\t\t}\n\t\t\t\t// Smush notice.\n\t\t\t\tconst remainingCountDiv = $( '.bulk-smush-wrapper .wp-smush-remaining-count' );\n\t\t\t\tif ( remainingCountDiv.length && 'undefined' !== typeof wp_smushit_data.unsmushed ) {\n\t\t\t\t\tremainingCountDiv.html( wp_smushit_data.unsmushed.length );\n\t\t\t\t}\n\n\t\t\t\t// If no images left, hide the notice, show all success notice.\n\t\t\t\tif ( 'undefined' !== typeof wp_smushit_data.unsmushed || wp_smushit_data.unsmushed.length === 0 ) {\n\t\t\t\t\t$( '.wp-smush-bulk-wrapper .sui-notice' ).hide();\n\t\t\t\t\t$( '.sui-notice-success.wp-smush-all-done' ).show();\n\t\t\t\t}\n\n\t\t\t\tSmush.update_stats();\n\t\t\t}\n\t\t} );\n\t} );\n\n\t/**\n\t * Enable resize in settings and scroll.\n\t */\n\tvar scroll_and_enable_resize = function () {\n\t\t// Enable resize, show resize settings.\n\t\t$( '#wp-smush-resize' ).prop( 'checked', true ).focus();\n\t\t$( 'div.wp-smush-resize-settings-wrap' ).show();\n\n\t\t// Scroll down to settings area.\n\t\tgoToByScroll( \"#column-wp-smush-resize\" );\n\t}\n\n\t/**\n\t * Enable super smush in settings and scroll.\n\t */\n\tvar scroll_and_enable_lossy = function () {\n\t\t// Enable super smush.\n\t\t$( '#wp-smush-lossy' ).prop( 'checked', true ).focus();\n\n\t\t// Scroll down to settings area.\n\t\tgoToByScroll( \"#column-wp-smush-lossy\" );\n\t}\n\n\t// Enable super smush on clicking link from stats area.\n\t$( 'a.wp-smush-lossy-enable' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tscroll_and_enable_lossy();\n\t} );\n\n\t// Enable resize on clicking link from stats area.\n\t$( '.wp-smush-resize-enable' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\n\t\tscroll_and_enable_resize();\n\t} );\n\n\t// If settings string is found in url, enable and scroll.\n\tif ( window.location.hash ) {\n\t\tvar setting_hash = window.location.hash.substring( 1 );\n\t\t// Enable and scroll to resize settings.\n\t\tif ( 'enable-resize' === setting_hash ) {\n\t\t\tscroll_and_enable_resize();\n\t\t} else if ( 'enable-lossy' === setting_hash ) {\n\t\t\t// Enable and scroll to lossy settings.\n\t\t\tscroll_and_enable_lossy();\n\t\t}\n\t}\n\n\t//Trigger Bulk\n\t$( 'body' ).on( 'click', '.wp-smush-trigger-bulk', function ( e ) {\n\t\te.preventDefault();\n\t\t//Induce Setting button save click\n\t\t$( 'button.wp-smush-all' ).click();\n\t\t$( 'span.sui-notice-dismiss' ).click();\n\t} );\n\n\t//Trigger Bulk\n\t$( 'body' ).on( 'click', '#bulk-smush-top-notice-close', function ( e ) {\n\t\te.preventDefault();\n $( this ).parent().parent().slideUp( 'slow' );\n\t} );\n\n\t//Allow the checkboxes to be Keyboard Accessible\n\t$( '.wp-smush-setting-row .toggle-checkbox' ).focus( function () {\n\t\t//If Space is pressed\n\t\t$( this ).keypress( function ( e ) {\n\t\t\tif ( e.keyCode == 32 ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t$( this ).find( '.toggle-checkbox' ).click();\n\t\t\t}\n\t\t} );\n\t} );\n\n\t// Re-Validate Resize Width And Height.\n\t$( 'body' ).on( 'blur', '.wp-smush-resize-input', function () {\n\n\t\tvar self = $( this );\n\n\t\tvar wrapper_div = self.parents().eq( 4 );\n\n\t\t// Initiate the check.\n\t\tvalidate_resize_settings( wrapper_div, false, false ); // run the validation.\n\t} );\n\n\t// Handle Resize Checkbox toggle, to show/hide width, height settings.\n\t$( 'body' ).on( 'click', '#wp-smush-resize, #wp-smush-resize-quick-setup', function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-resize-settings-wrap' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle Automatic Smush Checkbox toggle, to show/hide image size settings.\n\t$( 'body' ).on( 'click', '#wp-smush-auto', function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-image-size-list' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle auto detect checkbox toggle, to show/hide highlighting notice.\n\t$( 'body' ).on( 'click', '#wp-smush-detection', function () {\n\t\tvar self = $( this );\n\t\tvar notice_wrap = $( '.smush-highlighting-notice' );\n\t\tvar warning_wrap = $( '.smush-highlighting-warning' );\n\n\t\t// Setting enabled.\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\t// Highlighting is already active and setting not saved.\n\t\t\tif ( notice_wrap.length > 0 ) {\n\t\t\t\tnotice_wrap.show();\n\t\t\t} else {\n\t\t\t\twarning_wrap.show();\n\t\t\t}\n\t\t} else {\n\t\t\tnotice_wrap.hide();\n\t\t\twarning_wrap.hide();\n\t\t}\n\t} );\n\n\t// Handle PNG to JPG Checkbox toggle, to show/hide Transparent image conversion settings.\n\t$( '#wp-smush-png_to_jpg' ).click( function () {\n\t\tvar self = $( this );\n\t\tvar settings_wrap = $( '.wp-smush-png_to_jpg-wrap' );\n\n\t\tif ( self.is( ':checked' ) ) {\n\t\t\tsettings_wrap.show();\n\t\t} else {\n\t\t\tsettings_wrap.hide();\n\t\t}\n\t} );\n\n\t//Handle, Change event in Enable Networkwide settings\n\t$( '#wp-smush-networkwide' ).on( 'click', function ( e ) {\n\t\tif ( $( this ).is( ':checked' ) ) {\n\t\t\t$( '.network-settings-wrapper' ).show();\n\t\t} else {\n\t\t\t$( '.network-settings-wrapper' ).hide();\n\t\t}\n\t} );\n\n\t//Handle Re-check button functionality\n\t$( \"#wp-smush-revalidate-member\" ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\t//Ajax Params\n\t\tvar params = {\n\t\t\taction: 'smush_show_warning',\n\t\t};\n\t\tvar link = $( this );\n\t\tvar parent = link.parents().eq( 1 );\n\t\tparent.addClass( 'loading-notice' );\n\t\t$.get( ajaxurl, params, function ( r ) {\n\t\t\t//remove the warning\n\t\t\tparent.removeClass( 'loading-notice' ).addClass( \"loaded-notice\" );\n\t\t\tif ( 0 == r ) {\n\t\t\t\tparent.attr( 'data-message', wp_smush_msgs.membership_valid );\n\t\t\t\tremove_element( parent, 1000 );\n\t\t\t} else {\n\t\t\t\tparent.attr( 'data-message', wp_smush_msgs.membership_invalid );\n\t\t\t\tsetTimeout( function remove_loader() {\n\t\t\t\t\tparent.removeClass( 'loaded-notice' );\n\t\t\t\t}, 1000 )\n\t\t\t}\n\t\t} );\n\t} );\n\n\t//Initiate Re-check if the variable is set\n\tif ( 'undefined' != typeof (wp_smush_run_re_check) && 1 == wp_smush_run_re_check && $( '.wp-smush-scan' ).length > 0 ) {\n\t\trun_re_check( false );\n\t}\n\n\tif ( $( 'li.smush-dir-savings' ).length > 0 ) {\n\t\t// Update Directory Smush, as soon as the page loads.\n\t\tvar stats_param = {\n\t\t\taction: 'get_dir_smush_stats'\n\t\t};\n\t\t$.get( ajaxurl, stats_param, function ( r ) {\n\n\t\t\t//Hide the spinner\n\t\t\t$( 'li.smush-dir-savings .sui-icon-loader' ).hide();\n\n\t\t\t//If there are no errors, and we have a message to display\n\t\t\tif ( !r.success && 'undefined' != typeof ( r.data.message ) ) {\n\t\t\t\t$( 'div.wp-smush-scan-result div.content' ).prepend( r.data.message );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t//If there is no value in r\n\t\t\tif ( 'undefined' == typeof ( r.data) || 'undefined' == typeof ( r.data.dir_smush ) ) {\n\t\t\t\t//Append the text\n\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats' ).append( wp_smush_msgs.ajax_error );\n\t\t\t\t$( 'li.smush-dir-savings span.wp-smush-stats span' ).hide();\n\n\t\t\t} else {\n\t\t\t\t//Update the stats\n\t\t\t\tupdate_cummulative_stats( r.data );\n\t\t\t}\n\n\t\t} );\n\t}\n\t//Close Directory smush modal, if pressed esc\n\t$( document ).keyup( function ( e ) {\n\t\tif ( e.keyCode === 27 ) {\n\t\t\tvar modal = $( 'div.dev-overlay.wp-smush-list-dialog, div.dev-overlay.wp-smush-get-pro' );\n\t\t\t//If the Directory dialog is not visible\n\t\t\tif ( !modal.is( ':visible' ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodal.find( 'div.close' ).click();\n\n\t\t}\n\t} );\n\n\t//Dismiss Smush recommendation\n\t$( 'span.dismiss-recommendation' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar parent = $( this ).parent();\n\t\t//remove div and save preference in db\n\t\tparent.hide( 'slow', function () {\n\t\t\tparent.remove();\n\t\t} );\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: {\n\t\t\t\t'action': 'hide_pagespeed_suggestion'\n\t\t\t}\n\t\t} );\n\t} )\n\n\t//Remove API message\n\t$( 'div.wp-smush-api-message i.icon-fi-close' ).on( 'click', function ( e ) {\n\t\te.preventDefault();\n\t\tvar parent = $( this ).parent();\n\t\t//remove div and save preference in db\n\t\tparent.hide( 'slow', function () {\n\t\t\tparent.remove();\n\t\t} );\n\t\t$.ajax( {\n\t\t\ttype: 'POST',\n\t\t\turl: ajaxurl,\n\t\t\tdata: {\n\t\t\t\t'action': 'hide_api_message'\n\t\t\t}\n\t\t} );\n\t} );\n\n} );\n","/**\n * Bulk Smush functionality.\n *\n * @since 2.9.0 Moved from admin.js\n */\n\nimport Smush from '../smush/smush';\n\n( function( $ ) {\n\t'use strict';\n\n\tWP_Smush.bulk = {\n\n\t\tinit: () => {\n\n\t\t\t/**\n\t\t\t * Handle the Bulk Smush/Bulk re-Smush button click.\n\t\t\t */\n\t\t\t$( 'button.wp-smush-all' ).on( 'click', function( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t$( '.sui-notice-top.sui-notice-success' ).remove();\n\n\t\t\t\t// Remove limit exceeded styles.\n\t\t\t\tconst progress = $( '.wp-smush-bulk-progress-bar-wrapper' );\n\t\t\t\tprogress.removeClass( 'wp-smush-exceed-limit' );\n\t\t\t\tprogress.find( '.sui-progress-block .wp-smush-all' ).addClass('sui-hidden');\n\t\t\t\tprogress.find( '.sui-progress-block .wp-smush-cancel-bulk' ).removeClass('sui-hidden');\n\n\t\t\t\t// Disable re-Smush and scan button.\n\t\t\t\t// TODO: refine what is disabled.\n\t\t\t\t$( '.wp-resmush.wp-smush-action, .wp-smush-scan, .wp-smush-all:not(.sui-progress-close), a.wp-smush-lossy-enable, button.wp-smush-resize-enable, button#wp-smush-save-settings' ).attr( 'disabled', 'disabled' );\n\n\t\t\t\t// Check for IDs, if there is none (unsmushed or lossless), don't call Smush function.\n\t\t\t\t/** @var {array} wp_smushit_data.unsmushed */\n\t\t\t\tif ( 'undefined' === typeof wp_smushit_data ||\n\t\t\t\t\t( 0 === wp_smushit_data.unsmushed.length && 0 === wp_smushit_data.resmush.length )\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t$( '.wp-smush-remaining' ).hide();\n\n\t\t\t\t// Show loader.\n\t\t\t\t$( '.sui-summary-smush .smush-stats-icon' )\n\t\t\t\t\t.removeClass( 'sui-icon-info sui-warning' )\n\t\t\t\t\t.addClass( 'sui-icon-loader sui-loading' );\n\n\t\t\t\tnew Smush( $( this ), true );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Ignore file from bulk Smush.\n\t\t\t *\n\t\t\t * @since 2.9.0\n\t\t\t */\n\t\t\t$( 'body' ).on( 'click', '.smush-ignore-image', function() {\n\t\t\t\t$(this).attr( 'disabled', true );\n\t\t\t\t$(this).attr( 'data-tooltip' );\n\t\t\t\t$(this).removeClass( 'sui-tooltip' );\n\n\t\t\t\t$.post( ajaxurl, {\n\t\t\t\t\taction: 'ignore_bulk_image',\n\t\t\t\t\tid: $(this).attr( 'data-id' )\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t};\n\n\tWP_Smush.bulk.init();\n\n}( jQuery ));\n","/**\n * Modals JavaScript code.\n */\n\n( function () {\n 'use strict';\n\n /**\n * Onboarding modal.\n *\n * @since 3.1\n */\n WP_Smush.onboarding = {\n membership: 'free', // Assume free by default.\n modal: document.getElementById('smush-onboarding-dialog'),\n settings: {\n first: true,\n last: false,\n slide: 'start',\n value: false\n },\n selection: {\n 'auto': true,\n 'lossy': true,\n 'strip_exif': true,\n 'original': false,\n 'usage': true\n },\n contentContainer: document.getElementById('smush-onboarding-content'),\n onboardingSlides: [ 'start', 'auto', 'lossy', 'strip_exif', 'original', 'usage' ],\n touchX: null,\n touchY: null,\n\n /**\n * Init module.\n */\n init: function() {\n if ( ! this.modal ) {\n return;\n }\n\n this.membership = document.getElementById('smush-onboarding').dataset.type;\n\n if ( 'pro' !== this.membership ) {\n this.onboardingSlides = [ 'start', 'auto', 'strip_exif', 'usage' ];\n this.selection.lossy = false;\n }\n\n this.renderTemplate();\n\n // Skip setup.\n const skipButton = this.modal.querySelector('.smush-onboarding-skip-link');\n if ( skipButton ) {\n skipButton.addEventListener('click', this.skipSetup);\n }\n\n // Show the modal.\n SUI.dialogs['smush-onboarding-dialog'].show();\n },\n\n /**\n * Get swipe coordinates.\n *\n * @param e\n */\n handleTouchStart: function(e) {\n const firstTouch = e.touches[0];\n this.touchX = firstTouch.clientX;\n this.touchY = firstTouch.clientY;\n },\n\n /**\n * Process swipe left/right.\n *\n * @param e\n */\n handleTouchMove: function(e) {\n if ( ! this.touchX || ! this.touchY ) {\n return;\n }\n\n const xUp = e.touches[0].clientX,\n yUp = e.touches[0].clientY,\n xDiff = this.touchX - xUp,\n yDiff = this.touchY - yUp;\n\n if ( Math.abs(xDiff) > Math.abs(yDiff) ) {\n if ( xDiff > 0 ) {\n if ( false === WP_Smush.onboarding.settings.last ) {\n WP_Smush.onboarding.next(null, 'next');\n }\n } else {\n if ( false === WP_Smush.onboarding.settings.first ) {\n WP_Smush.onboarding.next(null, 'prev');\n }\n }\n }\n\n this.touchX = null;\n this.touchY = null;\n },\n\n /**\n * Update the template, register new listeners.\n *\n * @param {string} directionClass Accepts: fadeInRight, fadeInLeft.\n */\n renderTemplate: function(directionClass) {\n // Grab the selected value.\n const input = this.modal.querySelector('input[type=\"checkbox\"]');\n if ( input ) {\n this.selection[input.id] = input.checked;\n }\n\n const template = WP_Smush.onboarding.template('smush-onboarding');\n const content = template(this.settings);\n\n if ( content ) {\n this.contentContainer.innerHTML = content;\n\n if ( 'undefined' === typeof directionClass ) {\n this.contentContainer.classList.add('loaded');\n } else {\n this.contentContainer.classList.remove('loaded');\n this.contentContainer.classList.add(directionClass);\n setTimeout( () => {\n this.contentContainer.classList.add('loaded');\n this.contentContainer.classList.remove(directionClass);\n }, 600 );\n }\n }\n\n this.modal.addEventListener('touchstart', this.handleTouchStart, false);\n this.modal.addEventListener('touchmove', this.handleTouchMove, false);\n\n this.bindSubmit();\n },\n\n /**\n * Catch \"Finish setup wizard\" button click.\n */\n bindSubmit: function() {\n const submitButton = this.modal.querySelector('button[type=\"submit\"]');\n const self = this;\n\n if ( submitButton ) {\n submitButton.addEventListener('click', function(e) {\n e.preventDefault();\n\n // Because we are not rendering the template, we need to update the last element value.\n const input = self.modal.querySelector('input[type=\"checkbox\"]');\n if ( input ) {\n self.selection[input.id] = input.checked;\n }\n\n const _nonce = document.getElementById('_wpnonce');\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=smush_setup', true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n xhr.onload = () => {\n if (200 === xhr.status) {\n WP_Smush.onboarding.showScanDialog();\n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send('smush_settings='+JSON.stringify(self.selection)+'&_ajax_nonce='+_nonce.value);\n });\n }\n },\n\n /**\n * Handle navigation.\n *\n * @param e\n * @param whereTo\n */\n next: function(e, whereTo = null) {\n const index = this.onboardingSlides.indexOf(this.settings.slide);\n let newIndex = 0;\n\n if ( ! whereTo ) {\n newIndex = null !== e && e.classList.contains('next') ? index + 1 : index - 1;\n } else {\n newIndex = 'next' === whereTo ? index + 1 : index - 1;\n }\n\n const directionClass = null !== e && e.classList.contains('next') ? 'fadeInRight' : 'fadeInLeft';\n\n this.settings = {\n first: 0 === newIndex,\n last: newIndex + 1 === this.onboardingSlides.length, // length !== index\n slide: this.onboardingSlides[newIndex],\n value: this.selection[this.onboardingSlides[newIndex]]\n };\n\n this.renderTemplate(directionClass);\n },\n\n /**\n * Handle circle navigation.\n *\n * @param target\n */\n goTo: function(target) {\n const newIndex = this.onboardingSlides.indexOf(target);\n\n this.settings = {\n first: 0 === newIndex,\n last: newIndex + 1 === this.onboardingSlides.length, // length !== index\n slide: target,\n value: this.selection[target]\n };\n\n this.renderTemplate();\n },\n\n /**\n * Skip onboarding experience.\n */\n skipSetup: () => {\n const _nonce = document.getElementById('_wpnonce');\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=skip_smush_setup&_ajax_nonce='+_nonce.value);\n xhr.onload = () => {\n if (200 === xhr.status) {\n WP_Smush.onboarding.showScanDialog();\n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send();\n },\n\n /**\n * Show checking files dialog.\n */\n showScanDialog: () => {\n SUI.dialogs['smush-onboarding-dialog'].hide();\n SUI.dialogs['checking-files-dialog'].show();\n\n const nonce = document.getElementById('wp_smush_options_nonce');\n\n setTimeout(() => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=scan_for_resmush', true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n xhr.onload = () => {\n const elem = document.querySelector('#smush-onboarding-dialog');\n elem.parentNode.removeChild(elem);\n SUI.dialogs['checking-files-dialog'].hide();\n\n if (200 === xhr.status) {\n setTimeout( function() {\n location.reload();\n }, 1000\n );\n \n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send('type=media&get_ui=false&process_settings=false&wp_smush_options_nonce='+nonce.value);\n }, 3000);\n }\n };\n\n /**\n * Template function (underscores based).\n *\n * @type {Function}\n */\n WP_Smush.onboarding.template = _.memoize(id => {\n let compiled,\n options = {\n evaluate: /<#([\\s\\S]+?)#>/g,\n interpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n escape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n variable: 'data'\n };\n\n return data => {\n _.templateSettings = options;\n compiled = compiled || _.template(document.getElementById(id).innerHTML);\n return compiled(data);\n };\n });\n\n window.addEventListener('load', () => WP_Smush.onboarding.init());\n\n}());","/*! jQuery UI - v1.12.1 - 2018-05-20\n* http://jqueryui.com\n* Includes: widget.js, position.js, keycode.js, scroll-parent.js, unique-id.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n;(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine( [ \"jquery\" ], factory );\n\t} else if ( typeof module === \"object\" && module.exports ) {\n\t\t// Node/CommonJS\n\t\tmodule.exports = factory(require(\"jquery\"));\n\t} else {\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = $.cleanData || ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = $.widget || function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = $.Widget || function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = $.position || {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n}));\n","/**\n * CDN functionality.\n *\n * @since 3.0\n */\n( function() {\n\t'use strict';\n\n\tWP_Smush.CDN = {\n\t\tcdnEnableButton: document.getElementById('smush-enable-cdn'),\n\t\tcdnDisableButton: document.getElementById('smush-cancel-cdn'),\n\t\tcdnStatsBox: document.querySelector('.smush-cdn-stats'),\n\n\t\tinit: function () {\n\t\t\t/**\n\t\t\t * Handle \"Get Started\" button click on disabled CDN page.\n\t\t\t */\n\t\t\tif ( this.cdnEnableButton ) {\n\t\t\t\tthis.cdnEnableButton.addEventListener('click', (e) => {\n\t\t\t\t\te.currentTarget.classList.add('sui-button-onload');\n\n\t\t\t\t\t// Force repaint of the spinner.\n\t\t\t\t\tconst loader = e.currentTarget.querySelector('.sui-icon-loader');\n\t\t\t\t\tloader.style.display = 'none';\n\t\t\t\t\tloader.offsetHeight;\n\t\t\t\t\tloader.style.display = 'flex';\n\n\t\t\t\t\tthis.toggle_cdn(true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Handle \"Deactivate' button click on CDN page.\n\t\t\t */\n\t\t\tif ( this.cdnDisableButton ) {\n\t\t\t\tthis.cdnDisableButton.addEventListener('click', (e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.toggle_cdn(false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.updateStatsBox();\n\t\t},\n\n\t\t/**\n\t\t * Toggle CDN.\n\t\t *\n\t\t * @since 3.0\n\t\t *\n\t\t * @param enable\n\t\t */\n\t\ttoggle_cdn: function ( enable ) {\n\t\t\tconst nonceField = document.getElementsByName('wp_smush_options_nonce');\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=smush_toggle_cdn', true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n xhr.onload = () => {\n if (200 === xhr.status ) {\n const res = JSON.parse(xhr.response);\n if ( 'undefined' !== typeof res.success && res.success ) {\n location.reload();\n } else if ( 'undefined' !== typeof res.data.message ) {\n this.showNotice( res.data.message );\n }\n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send('param='+enable+'&_ajax_nonce='+nonceField[0].value);\n\t\t},\n\n\t\t/**\n\t\t * Show message (notice).\n\t\t *\n\t\t * @since 3.0\n\t\t *\n\t\t * @param {string} message\n\t\t */\n\t\tshowNotice: function ( message ) {\n\t\t\tif ( 'undefined' === typeof message ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst notice = document.getElementById('wp-smush-ajax-notice');\n\n\t\t\tnotice.classList.add('sui-notice-error');\n\t\t\tnotice.innerHTML = `<p>${message}</p>`;\n\n\t\t\tif ( this.cdnEnableButton ) {\n\t\t\t\tthis.cdnEnableButton.classList.remove('sui-button-onload');\n\t\t\t}\n\n\t\t\tnotice.style.display = 'block';\n\t\t\tsetTimeout( () => { notice.style.display = 'none' }, 5000 );\n\t\t},\n\n\t\t/**\n\t\t * Update the CDN stats box in summary meta box. Only fetch new data when on CDN page.\n\t\t *\n\t\t * @since 3.0\n\t\t */\n\t\tupdateStatsBox: function () {\n\t\t\tif ( 'undefined' === typeof this.cdnStatsBox || ! this.cdnStatsBox ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only fetch the new stats, when user is on CDN page.\n\t\t\tif ( ! window.location.search.includes('view=cdn') ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.toggleElements();\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=get_cdn_stats', true);\n xhr.onload = () => {\n if (200 === xhr.status ) {\n const res = JSON.parse(xhr.response);\n if ( 'undefined' !== typeof res.success && res.success ) {\n /**\n * TODO: It's possible to parse the res variable and update the latest stats during the update,\n * but is it really needed?\n */\n this.toggleElements();\n } else if ( 'undefined' !== typeof res.data.message ) {\n this.showNotice( res.data.message );\n }\n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send();\n\t\t},\n\n /**\n\t\t * Show/hide elements during status update in the updateStatsBox()\n\t\t *\n\t\t * @since 3.1 Moved out from updateStatsBox()\n */\n\t\ttoggleElements: function() {\n const spinner = this.cdnStatsBox.querySelector('.sui-icon-loader');\n const elements = this.cdnStatsBox.querySelectorAll('.wp-smush-stats > :not(.sui-icon-loader)');\n\n for (let i = 0; i < elements.length; i++) {\n elements[i].classList.toggle('sui-hidden');\n }\n\n spinner.classList.toggle('sui-hidden');\n }\n\n\t};\n\n\tWP_Smush.CDN.init();\n\n}());\n","/**\n * Lazy loading functionality.\n *\n * @since 3.0\n */\n( function() {\n 'use strict';\n\n WP_Smush.Lazyload = {\n lazyloadEnableButton: document.getElementById('smush-enable-lazyload'),\n lazyloadDisableButton: document.getElementById('smush-cancel-lazyload'),\n\n init: function () {\n /**\n * Handle \"Activate\" button click on disabled Lazyload page.\n */\n if ( this.lazyloadEnableButton ) {\n this.lazyloadEnableButton.addEventListener('click', (e) => {\n e.currentTarget.classList.add('sui-button-onload');\n\n // Force repaint of the spinner.\n const loader = e.currentTarget.querySelector('.sui-icon-loader');\n loader.style.display = 'none';\n loader.offsetHeight;\n loader.style.display = 'flex';\n\n this.toggle_lazy_load(true);\n });\n }\n\n /**\n * Handle \"Deactivate' button click on Lazyload page.\n */\n if ( this.lazyloadDisableButton ) {\n this.lazyloadDisableButton.addEventListener('click', (e) => {\n e.preventDefault();\n this.toggle_lazy_load(false);\n });\n }\n },\n\n /**\n * Toggle lazy loading.\n *\n * @since 3.2.0\n *\n * @param enable\n */\n toggle_lazy_load: function ( enable ) {\n const nonceField = document.getElementsByName('wp_smush_options_nonce');\n\n const xhr = new XMLHttpRequest();\n xhr.open('POST', ajaxurl+'?action=smush_toggle_lazy_load', true);\n xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n xhr.onload = () => {\n if (200 === xhr.status ) {\n const res = JSON.parse(xhr.response);\n if ( 'undefined' !== typeof res.success && res.success ) {\n location.reload();\n } else if ( 'undefined' !== typeof res.data.message ) {\n this.showNotice( res.data.message );\n }\n } else {\n console.log('Request failed. Returned status of ' + xhr.status);\n }\n };\n xhr.send('param='+enable+'&_ajax_nonce='+nonceField[0].value);\n },\n\n /**\n * Show message (notice).\n *\n * @since 3.0\n *\n * @param {string} message\n */\n showNotice: function ( message ) {\n if ( 'undefined' === typeof message ) {\n return;\n }\n\n const notice = document.getElementById('wp-smush-ajax-notice');\n\n notice.classList.add('sui-notice-error');\n notice.innerHTML = `<p>${message}</p>`;\n\n if ( this.cdnEnableButton ) {\n this.cdnEnableButton.classList.remove('sui-button-onload');\n }\n\n notice.style.display = 'block';\n setTimeout( () => { notice.style.display = 'none' }, 5000 );\n }\n\n };\n\n WP_Smush.Lazyload.init();\n\n}());\n","/**\n * Created by umeshkumar on 12/05/16.\n */\njQuery(function () {\n\tvar el_notice = jQuery(\".smush-notice\"),\n\t\tbtn_act = el_notice.find(\".smush-notice-act\"),\n\t\tbtn_dismiss = el_notice.find(\".smush-notice-dismiss\");\n\tel_notice.fadeIn(500);\n\n\t// Hide the notice after a CTA button was clicked\n\tfunction remove_notice() {\n\t\tel_notice.fadeTo(100, 0, function () {\n\t\t\tel_notice.slideUp(100, function () {\n\t\t\t\tel_notice.remove();\n\t\t\t});\n\t\t});\n\t}\n\n\tbtn_act.click(function (ev) {\n\t\tremove_notice();\n\t\tnotify_wordpress(btn_act.data(\"msg\"));\n\t});\n\n\tbtn_dismiss.click(function (ev) {\n\t\tremove_notice();\n\t\tnotify_wordpress(btn_act.data(\"msg\"));\n\t});\n\n\t// Notify WordPress about the users choice and close the message.\n\tfunction notify_wordpress(message) {\n\t\tel_notice.attr(\"data-message\", message);\n\t\tel_notice.addClass(\"loading\");\n\n\t\t//Send a ajax request to save the dismissed notice option\n\t\tvar param = {\n\t\t\taction: 'dismiss_upgrade_notice'\n\t\t};\n\t\tjQuery.post(ajaxurl, param);\n\t}\n\n\t// Store the preference in db.\n\tfunction send_dismiss_request( action ) {\n\t\tvar param = {\n\t\t\taction: action\n\t\t};\n\t\tjQuery.post(ajaxurl, param);\n\t}\n\n\t// Dismiss the update notice.\n\tjQuery('.wp-smush-update-info').on('click', '.notice-dismiss', function (e) {\n\t\te.preventDefault();\n\t\tel_notice = jQuery(this);\n\t\tremove_notice();\n\t\tsend_dismiss_request( 'dismiss_update_info' );\n\t});\n\n\t// Dismiss S3 support alert.\n\tjQuery('div.wp-smush-s3support-alert').on('click', '.sui-notice-dismiss > a', function (e) {\n\t\tel_notice = jQuery(this);\n\t\tremove_notice();\n\t\tsend_dismiss_request( 'dismiss_s3support_alert' );\n\t});\n\n});","/**\n * Directory scanner module that will Smush images in the Directory Smush modal.\n *\n * @since 2.8.1\n *\n * @param totalSteps\n * @param currentStep\n * @returns {{scan: scan, cancel: (function(): (*|$.promise|{})), getProgress: getProgress, onFinishStep: onFinishStep, onFinish: onFinish}}\n * @constructor\n */\n\nconst DirectoryScanner = ( totalSteps, currentStep ) => {\n\ttotalSteps = parseInt( totalSteps );\n\tcurrentStep = parseInt( currentStep );\n\n\tlet cancelling = false,\n\t\tfailedItems = 0;\n\n\tlet obj = {\n\t\tscan: function() {\n\t\t\tlet remainingSteps = totalSteps - currentStep;\n\t\t\tif ( currentStep !== 0 ) {\n\t\t\t\t// Scan started on a previous page load.\n\t\t\t\tstep( remainingSteps );\n\t\t\t} else {\n\t\t\t\t$.post( ajaxurl, { action: 'directory_smush_start' },\n\t\t\t\t\t() => step( remainingSteps ) );\n\t\t\t}\n\t\t},\n\n\t\tcancel: function() {\n\t\t\tcancelling = true;\n\t\t\treturn $.post( ajaxurl, { action: 'directory_smush_cancel' } );\n\t\t},\n\n\t\tgetProgress: function() {\n\t\t\tif ( cancelling ) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst remainingSteps = totalSteps - currentStep;\n\t\t\treturn Math.min( Math.round( ( parseInt( ( totalSteps - remainingSteps ) ) * 100 ) / totalSteps ), 99 );\n\t\t},\n\n\t\tonFinishStep: function( progress ) {\n\t\t\t$( '.wp-smush-progress-dialog .sui-progress-state-text' ).html( ( currentStep - failedItems ) + '/' + totalSteps + ' ' + wp_smush_msgs.progress_smushed );\n\t\t\tWP_Smush.directory.updateProgressBar( progress );\n\t\t},\n\n\t\tonFinish: function() {\n\t\t\tWP_Smush.directory.updateProgressBar( 100 );\n\t\t\twindow.location.href = wp_smush_msgs.directory_url + '&scan=done';\n\t\t},\n\n\t\tlimitReached: function() {\n\t\t\tlet dialog = $( '#wp-smush-progress-dialog' );\n\n\t\t\tdialog.addClass( 'wp-smush-exceed-limit' );\n\t\t\tdialog.find( '#cancel-directory-smush' ).attr( 'data-tooltip', wp_smush_msgs.bulk_resume );\n\t\t\tdialog.find( '.sui-icon-close' ).removeClass( 'sui-icon-close' ).addClass( 'sui-icon-play' );\n\t\t\tdialog.find( '#cancel-directory-smush' ).attr( 'id', 'cancel-directory-smush-disabled' );\n\t\t},\n\n\t\tresume: function() {\n\t\t\tlet dialog = $( '#wp-smush-progress-dialog' );\n\t\t\tlet resume = dialog.find( '#cancel-directory-smush-disabled' );\n\n\t\t\tdialog.removeClass( 'wp-smush-exceed-limit' );\n\t\t\tdialog.find( '.sui-icon-play' ).removeClass( 'sui-icon-play' ).addClass( 'sui-icon-close' );\n resume.attr( 'data-tooltip', 'Cancel' );\n resume.attr( 'id', 'cancel-directory-smush' );\n\n\t\t\tobj.scan();\n\t\t}\n\t};\n\n\t/**\n\t * Execute a scan step recursively\n\t *\n\t * Private to avoid overriding\n\t *\n\t * @param remainingSteps\n\t */\n\tconst step = function( remainingSteps ) {\n\t\tif ( remainingSteps >= 0 ) {\n\t\t\tcurrentStep = totalSteps - remainingSteps;\n\t\t\t$.post( ajaxurl, {\n\t\t\t\taction: 'directory_smush_check_step',\n\t\t\t\tstep: currentStep\n\t\t\t}, ( response ) => {\n\t\t\t\t// We're good - continue on.\n\t\t\t\tif ( 'undefined' !== typeof response.success && response.success ) {\n\t\t\t\t\tcurrentStep++;\n\t\t\t\t\tremainingSteps = remainingSteps - 1;\n\t\t\t\t\tobj.onFinishStep( obj.getProgress() );\n\t\t\t\t\tstep( remainingSteps );\n\t\t\t\t} else if ( 'undefined' !== typeof response.data.error && 'dir_smush_limit_exceeded' === response.data.error ) {\n\t\t\t\t\t// Limit reached. Stop.\n\t\t\t\t\tobj.limitReached();\n\t\t\t\t} else {\n\t\t\t\t\t// Error? never mind, continue, but count them.\n\t\t\t\t\tfailedItems++;\n\t\t\t\t\tcurrentStep++;\n\t\t\t\t\tremainingSteps = remainingSteps - 1;\n\t\t\t\t\tobj.onFinishStep( obj.getProgress() );\n\t\t\t\t\tstep( remainingSteps );\n\t\t\t\t}\n\t\t\t} );\n\t\t} else {\n\t\t\t$.post( ajaxurl, {\n\t\t\t\taction: 'directory_smush_finish',\n\t\t\t\titems: ( totalSteps - failedItems ),\n\t\t\t\tfailed: failedItems,\n\t\t\t}, ( response ) => obj.onFinish( response ) );\n\t\t}\n\t};\n\n\treturn obj;\n};\n\nexport default DirectoryScanner;","/**\n * Directory Smush module JavaScript code.\n *\n * @since 2.8.1 Separated from admin.js into dedicated file.\n */\n\nimport { createTree } from 'jquery.fancytree';\nimport Scanner from '../smush/directory-scanner';\n\n( function( $ ) {\n\t'use strict';\n\n\tWP_Smush.directory = {\n\t\tselected: [],\n\t\ttree: [],\n\t\twp_smush_msgs: [],\n\n\t\tinit: function () {\n\t\t\tconst self = this;\n\n\t\t\tlet progress_dialog = $( '#wp-smush-progress-dialog'),\n\t\t\t\ttotalSteps = 0,\n\t\t\t\tcurrentScanStep = 0;\n\n\t\t\t// Make sure directory smush vars are set.\n\t\t\tif ( typeof wp_smushit_data.dir_smush !== 'undefined' ) {\n\t\t\t\ttotalSteps = wp_smushit_data.dir_smush.totalSteps;\n\t\t\t\tcurrentScanStep = wp_smushit_data.dir_smush.currentScanStep;\n\t\t\t}\n\n\t\t\t// Init image scanner.\n\t\t\tthis.scanner = new Scanner( totalSteps, currentScanStep );\n\n\t\t\t/**\n\t\t\t * Smush translation strings.\n\t\t\t *\n\t\t\t * @var {array} wp_smush_msgs\n\t\t\t */\n\t\t\tif ( wp_smush_msgs ) {\n\t\t\t\tthis.wp_smush_msgs = wp_smush_msgs;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Folder select: Choose Folder in Directory Smush tab clicked.\n\t\t\t */\n\t\t\t$( 'div.sui-wrap' ).on( 'click', 'button.wp-smush-browse', function ( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t// Hide all the notices.\n\t\t\t\t$( 'div.wp-smush-scan-result div.wp-smush-notice' ).hide();\n\n\t\t\t\t// If disabled, do not process.\n\t\t\t\tif ( $( this ).attr( 'disabled' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Disable buttons.\n\t\t\t\t$( this ).attr( 'disabled', 'disabled' );\n\n\t\t\t\t// Remove notice.\n\t\t\t\t$( 'div.wp-smush-info' ).remove();\n\n\t\t\t\tself.showSmushDialog();\n\n\t\t\t\t// Display file tree for directory Smush.\n\t\t\t\tself.initFileTree();\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Stats section: Directory Link\n\t\t\t */\n\t\t\t$( 'body' ).on( 'click', 'a.wp-smush-dir-link', function ( e ) {\n\t\t\t\tif ( $( 'div.sui-wrap button.wp-smush-browse' ).length > 0 ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tSUI.dialogs[\"wp-smush-list-dialog\"].show();\n\t\t\t\t\t//Display File tree for Directory Smush\n\t\t\t\t\tself.initFileTree();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Smush images: Smush in Choose Directory modal clicked\n\t\t\t */\n\t\t\t$( '.wp-smush-select-dir' ).on( 'click', function ( e ) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\t// If disabled, do not process\n\t\t\t\tif ( $( this ).attr( 'disabled' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst button = $( this );\n\n\t\t\t\t$( 'div.wp-smush-list-dialog div.sui-box-body' ).css( { 'opacity': '0.8' } );\n\t\t\t\t$( 'div.wp-smush-list-dialog div.sui-box-body a' ).unbind( 'click' );\n\n\t\t\t\t// Disable button\n\t\t\t\tbutton.attr( 'disabled', 'disabled' );\n\n\t\t\t\tlet spinner = button.parent().find( '.add-dir-loader' );\n\t\t\t\t// Display the spinner\n\t\t\t\tspinner.addClass( 'sui-icon-loader sui-loading' );\n\n\t\t\t\tconst selectedFolders = self.tree.getSelectedNodes(),\n\t\t\t\t abs_path = $( 'input[name=\"wp-smush-base-path\"]' ).val(); // Absolute path.\n\n\t\t\t\tlet paths = [];\n\t\t\t\tselectedFolders.forEach( function ( folder ) {\n\t\t\t\t\tpaths.push( abs_path + '/' + folder.key );\n\t\t\t\t});\n\n\t\t\t\t// Send a ajax request to get a list of all the image files\n\t\t\t\tconst param = {\n\t\t\t\t\taction: 'image_list',\n\t\t\t\t\tsmush_path: paths,\n\t\t\t\t\timage_list_nonce: $( 'input[name=\"image_list_nonce\"]' ).val()\n\t\t\t\t};\n\n\t\t\t\t$.get( ajaxurl, param, function ( response ) {\n\t\t\t\t\t// Close the dialog.\n\t\t\t\t\tSUI.dialogs['wp-smush-list-dialog'].hide();\n\n\t\t\t\t\t// TODO: check for errors.\n\t\t\t\t\tself.scanner = new Scanner( response.data, 0 );\n\t\t\t\t\tself.showProgressDialog( response.data );\n\t\t\t\t\tself.scanner.scan();\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * On dialog close make browse button active.\n\t\t\t */\n\t\t\t$( '#wp-smush-list-dialog' ).on( 'click', '.sui-dialog-close', function () {\n\t\t\t\t$( '.wp-smush-browse' ).removeAttr( 'disabled' );\n\n\t\t\t\t// Close the dialog.\n\t\t\t\tSUI.dialogs['wp-smush-list-dialog'].hide();\n\n\t\t\t\t$( '.wp-smush-select-dir, button.wp-smush-browse, a.wp-smush-dir-link' ).removeAttr( 'disabled' );\n\n\t\t\t\t// Reset the opacity for content and scan button\n\t\t\t\t$( '.wp-smush-select-dir, .wp-smush-list-dialog .sui-box-body' ).css( {'opacity': '1'} );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Cancel scan.\n\t\t\t */\n\t\t\tprogress_dialog.on( 'click', '#cancel-directory-smush, .sui-dialog-close, .wp-smush-cancel-dir', function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\t// Display the spinner\n\t\t\t\t$( this ).parent().find( '.add-dir-loader' ).addClass( 'sui-icon-loader sui-loading' );\n\t\t\t\tself.scanner.cancel().done( () => window.location.href = self.wp_smush_msgs.directory_url );\n\t\t\t} );\n\n\t\t\t/**\n\t\t\t * Continue scan.\n\t\t\t */\n\t\t\tprogress_dialog.on( 'click', '.sui-icon-play, .wp-smush-resume-scan', function ( e ) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.scanner.resume();\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Get directory list using Ajax.\n\t\t *\n\t\t * @param {string} node Node for which to get the directory list.\n\t\t *\n\t\t * @returns {string}\n\t\t */\n\t\tgetDirectoryList: function ( node = '' ) {\n\t\t\tlet res = '';\n\n\t\t\t$.ajax( {\n\t\t\t\ttype: \"GET\",\n\t\t\t\turl: ajaxurl,\n\t\t\t\tdata: {\n\t\t\t\t\taction: 'smush_get_directory_list',\n\t\t\t\t\tlist_nonce: jQuery( 'input[name=\"list_nonce\"]' ).val(),\n\t\t\t\t\tdir: node\n\t\t\t\t},\n\t\t\t\tsuccess: function ( response ) {\n\t\t\t\t\tres = response.data;\n\t\t\t\t},\n\t\t\t\tasync: false\n\t\t\t} );\n\n\t\t\t// Update the button text.\n\t\t\t$( 'button.wp-smush-select-dir' ).html( self.wp_smush_msgs.add_dir );\n\n\t\t\treturn res;\n\t\t},\n\n\t\t/**\n\t\t * Init fileTree.\n\t\t */\n\t\tinitFileTree: function () {\n\t\t\tconst self = this;\n\n\t\t\tlet smushButton = $( 'button.wp-smush-select-dir' );\n\n\t\t\tself.tree = createTree('.wp-smush-list-dialog .content', {\n\t\t\t\tautoCollapse: true, // Automatically collapse all siblings, when a node is expanded\n\t\t\t\tclickFolderMode: 3, // 1:activate, 2:expand, 3:activate and expand, 4:activate (dblclick expands)\n\t\t\t\tcheckbox: true, // Show checkboxes\n\t\t\t\tdebugLevel: 0, // 0:quiet, 1:errors, 2:warnings, 3:infos, 4:debug\n\t\t\t\tselectMode: 3, // 1:single, 2:multi, 3:multi-hier\n\t\t\t\ttabindex: '0', // Whole tree behaves as one single control\n\t\t\t\tkeyboard: true, // Support keyboard navigation\n\t\t\t\tquicksearch: true, // Navigate to next node by typing the first letters\n\t\t\t\tsource: self.getDirectoryList,\n\t\t\t\tlazyLoad: ( event, data ) => data.result = self.getDirectoryList( data.node.key ),\n\t\t\t\tloadChildren: ( event, data ) => data.node.fixSelection3AfterClick(), // Apply parent's state to new child nodes:\n\t\t\t\tselect: () => smushButton.attr( 'disabled', !+self.tree.getSelectedNodes().length ),\n\t\t\t\tinit: () => smushButton.attr( 'disabled', true ),\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Show directory list popup and focus on close button.\n\t\t */\n\t\tshowSmushDialog: function () {\n\t\t\t// Shows the available directories.\n\t\t\tSUI.dialogs['wp-smush-list-dialog'].show();\n\t\t\t$( '.wp-smush-list-dialog div.close' ).focus();\n\t\t},\n\n\t\t/**\n\t\t * Show progress dialog.\n\t\t *\n\t\t * @param {int} items Number of items in the scan.\n\t\t */\n\t\tshowProgressDialog: function ( items ) {\n\t\t\t// Update items status and show the progress dialog..\n\t\t\t$( '.wp-smush-progress-dialog .sui-progress-state-text' ).html( '0/' + items + ' ' + self.wp_smush_msgs.progress_smushed );\n\t\t\tSUI.dialogs['wp-smush-progress-dialog'].show();\n\t\t\t$( '.wp-smush-progress-dialog div.close' ).focus();\n\t\t},\n\n\t\t/**\n\t\t * Update progress bar during directory smush.\n\t\t *\n\t\t * @param {int} progress Current progress in percent.\n\t\t * @param {boolean} cancel Cancel status.\n\t\t */\n\t\tupdateProgressBar: function ( progress, cancel = false ) {\n\t\t\tif ( progress > 100 ) {\n\t\t\t\tprogress = 100;\n\t\t\t}\n\n\t\t\t// Update progress bar\n\t\t\t$( '.sui-progress-block .sui-progress-text span' ).text( progress + '%' );\n\t\t\t$( '.sui-progress-block .sui-progress-bar span' ).width( progress + '%' );\n\n\t\t\tif ( progress >= 90 ) {\n\t\t\t\t$( '.sui-progress-state .sui-progress-state-text' ).text( 'Finalizing...' );\n\t\t\t}\n\n\t\t\tif ( cancel ) {\n\t\t\t\t$( '.sui-progress-state .sui-progress-state-text' ).text( 'Cancelling...' );\n\t\t\t}\n\t\t},\n\n\t};\n\n\tWP_Smush.directory.init();\n\n}( jQuery ));\n"],"sourceRoot":""}