"Fossies" - the Fresh Open Source Software Archive

Member "4.6.1/public/assets/javascripts/vendors~tablesorter-9608cb1d1ca489254ec5.chunk.js.map" (8 Apr 2021, 438344 Bytes) of package /linux/www/studip-4.6.1.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 {"version":3,"sources":["webpack:///./node_modules/tablesorter/dist/js/jquery.tablesorter.js","webpack:///./node_modules/tablesorter/dist/js/extras/jquery.tablesorter.pager.min.js","webpack:///./node_modules/tablesorter/dist/js/jquery.tablesorter.widgets.js"],"names":["jQuery","$","ts","tablesorter","version","parsers","widgets","defaults","theme","widthFixed","showProcessing","headerTemplate","onRenderTemplate","onRenderHeader","cancelSelection","tabIndex","dateFormat","sortMultiSortKey","sortResetKey","usNumberFormat","delayInit","serverSideSorting","resort","headers","ignoreCase","sortForce","sortList","sortAppend","sortStable","sortInitialOrder","sortLocaleCompare","sortReset","sortRestart","emptyTo","stringTo","duplicateSpan","textExtraction","textAttribute","textSorter","numberSorter","initWidgets","widgetClass","widgetOptions","zebra","initialized","tableClass","cssAsc","cssDesc","cssNone","cssHeader","cssHeaderRow","cssProcessing","cssChildRow","cssInfoBlock","cssNoSort","cssIgnoreRow","cssIcon","cssIconNone","cssIconAsc","cssIconDesc","cssIconDisabled","pointerClick","pointerDown","pointerUp","selectorHeaders","selectorSort","selectorRemove","debug","headerList","empties","strings","globalize","imgAttr","css","table","cssHasChild","childRow","colgroup","header","headerRow","headerIn","icon","processing","sortAsc","sortDesc","sortNone","language","sortDisabled","nextAsc","nextDesc","nextNone","regex","templateContent","templateIcon","templateName","spaces","nonWord","formElements","chunk","chunks","hex","comma","digitNonUS","digitNegativeTest","digitNegativeReplace","digitTest","digitReplace","string","max","min","emptymin","emptymax","zero","none","top","bottom","keyCodes","enter","dates","instanceMethods","setup","c","tHead","tBodies","length","hasInitialized","tmp","$table","meta","metadata","isProcessing","config","data","console","group","Date","supportsDataObject","fn","jquery","split","parseInt","toLowerCase","last","clickedIndex","test","attr","namespace","replace","Math","random","toString","slice","addClass","$headers","find","children","$tbodies","id","widgetInit","buildHeaders","fixColumnWidth","addWidgetFromClass","applyWidgetOptions","setupParsers","totalRows","validateOptions","buildCache","bindEvents","bindMethods","sortlist","applyWidget","sortOn","setHeadersCss","unbind","bind","e","clearTimeout","timerProcessing","type","setTimeout","log","benchmark","groupEnd","triggerHandler","warn","error","events","join","callback","stopPropagation","this","isApplyingWidgets","updateAll","update","updateHeaders","cell","updateCell","$row","addRows","isUpdating","list","init","appendCache","isFunction","updateCache","applyWidgetId","all","dontapply","refreshWidgets","name","refreshing","removeWidget","removeClasses","destroy","extend","originalSettings","core","downTarget","getClosest","nodeName","add","filter","external","$cell","temp","$target","target","which","button","match","preventDefault","hasClass","parents","isEmptyObject","cache","index","$headerIndexed","initSort","$temp","timer","indx","headerContent","sortVars","columns","computeColumnIndex","map","elem","configHeaders","column","template","$elem","getColumnData","html","apply","getOrder","getData","count","order","lockedOrder","sortedBy","not","scope","role","updateHeader","addInstanceMethods","methods","rows","span","colIndex","noParser","parser","extractor","time","tbody","len","tbodyIndex","debugOutput","extractors","getParserById","emptyToBottom","detectParserForColumn","text","empty","colSpan","addParser","rowIndex","cellIndex","cur","$node","row","node","nodeValue","keepLooking","className","indexOf","cells","getElementText","is","extract","trim","textContent","getParsedText","txt","val","format","$tbody","cols","$cells","cacheTime","rowData","prevRowData","colMax","cacheIndex","hasParser","normalized","child","raw","prev","abs","getColumnText","rowFilter","tbodyLen","rowLen","parsed","result","hasCallback","allColumns","eq","updateColumnSort","$el","removeClass","aria","$extras","$sorted","end","i","include","col","isValueInArray","setColumnAriaLabel","selector","closest","$header","nextSort","vars","removeAttr","isDisabled","setColumnSort","updateHeaderSortCount","dir","primary","inArray","commonUpdate","resortComplete","remove","icell","tbcache","checkResort","valid","append","$curTbody","appendTime","appender","processTbody","pager","removeRows","ajax","event","arry","headerIndx","notMultiSort","th","each","splice","isArray","multisort","sortTime","sorter","sortLen","sort","a","b","sortIndex","num","x","y","getSortType","sortNatural","aNum","bNum","aFloat","bFloat","isNaN","parseFloat","sortNaturalAsc","sortNaturalDesc","sortText","getTextValue","n","charCodeAt","sortNumericAsc","sortNumericDesc","sortNumeric","addWidget","widget","getWidgetById","hasWidget","wo","options","RegExp","applied","names","timerReady","grep","priority","doAll","curWidgets","diff","getTime","arguments","obj","formatFloat","str","isDigit","$rows","j","k","l","rowSpan","firstAvailCol","matrix","matrixrow","Array","setAttribute","checkColumnCount","el","parentElement","push","overallWidth","percent","$colgroup","width","prepend","configHeader","key","cl4ss","getCell","toggle","$tb","getIt","before","detach","holdr","insertAfter","clearTableBody","characterEquivalents","replaceAccents","chr","acc","characterRegex","characterRegexArray","setting","setting2","typ","ignore","orig","restoreHeaders","$t","$h","$r","$f","removeData","toggleClass","settings","buildTable","window","logs","arg","date","now","toLocaleLowerCase","nondigit","currencyReplace","currencyTest","urlProtocolTest","urlProtocolReplace","dash","isoDate","isFinite","percentTest","dateReplace","usLongDateTest1","usLongDateTest2","shortDateTest","shortDateReplace","shortDateXXY","shortDateYMD","convertFormat","dateString","timeTest","timeMatch","timePart","p","parserMetadataName","$visibleRows","isEven","toRemove","M","T","tablesorterPager","container","ajaxUrl","customAjaxUrl","t","ajaxError","ajaxObject","dataType","processAjaxOnInit","ajaxProcessing","output","updateArrows","page","pageReset","size","maxOptionSize","savePages","storageKey","fixedHeight","countChildRows","cssFirst","cssPrev","cssNext","cssLast","cssGoto","cssPageDisplay","cssPageSize","cssErrorRow","cssDisabled","totalPages","filteredRows","filteredPages","ajaxCounter","currentFilters","startRow","endRow","$size","h","s","r","o","g","I","$container","ariaDisabled","w","regexRows","initializing","d","f","A","ceil","N","ajaxData","floor","R","storage","z","height","regexFiltered","style","display","F","P","u","v","m","showError","total","$sticky","clone","q","E","C","rowsCopy","disabled","S","O","L","D","U","prototype","concat","filter_initialized","url","optAjaxUrl","initialRows","encodeURIComponent","document","success","oldAjaxSuccess","filtered","H","show","setSize","filter_filteredRow","equalFilters","lastSearch","hide","filter_serversideFiltering","construct","pager_css","errorRow","pager_ajaxError","status","statusText","click","appendTo","fixedUrl","storage_fixedUrl","storage_group","storage_page","storage_storageType","storage_tableId","storage_useSessionStorage","value","cookieIndex","cookies","hasStorage","values","storageType","charAt","session","useSessionStorage","location","pathname","setItem","removeItem","parseJSON","cookie","JSON","hasOwnProperty","stringify","setTime","toGMTString","themes","caption","active","hover","icons","iconSortNone","iconSortAsc","iconSortDesc","filterRow","footerRow","footerCells","even","odd","wrapper","hdr","$icon","$tfoot","oldtheme","oldremove","oldIconRmv","hasOldTheme","themesAll","iconRmv","appliedTheme","uitheme_applied","$this","wrapInner","one","jui","columns_thead","columns_tfoot","tsf","tsfRegex","tscss","tskeyCodes","filterDisabled","filterRowHide","backSpace","escape","space","left","down","filter_cellFilter","filter_childRows","filter_childByColumn","filter_childWithSibs","filter_columnAnyMatch","filter_columnFilters","filter_cssFilter","filter_defaultAttrib","filter_defaultFilter","filter_excludeFilter","filter_external","filter_filterLabel","filter_formatter","filter_functions","filter_hideEmpty","filter_hideFilters","filter_ignoreCase","filter_liveSearch","filter_matchType","filter_onlyAvail","filter_placeholder","search","select","filter_reset","filter_resetOnEsc","filter_saveFilters","filter_searchDelay","filter_searchFiltered","filter_selectSource","filter_selectSourceSeparator","filter_startsWith","filter_useParsedData","undelegate","exact","operators","query","wild01","wild0More","quote","isNeg1","isNeg2","types","or","orTest","iFilter","orSplit","filterMatched","data2","nestedFilters","parseFilter","isMatch","processTypes","and","andTest","andSplit","matches","filter_regexCache","exec","isRegex","operTest","iExact","cachedValue","savedSearch","gtTest","gteTest","ltTest","lteTest","notMatch","notTest","anyMatch","rowArray","range","toTest","range1","range2","toSplit","wild","wildOrTest","wildTest","fuzzy","fuzzyTest","patternIndx","pattern","to","processStr","prefix","suffix","fxn","noSelect","filter_searchTimer","filter_initTimer","filter_formatterCount","filter_formatterInit","filter_anyColumnSelector","filter_multipleColumnSelector","alreadyFiltered","iQuery","igQuery","exactTest","buildRow","buildDefault","filter_$externalFilters","searching","lastCombinedFilter","delegate","buildSelect","bindSearch","hideFilters","completeInit","filterInitComplete","filters","setDefaults","setFilters","formatterUpdated","completed","findRows","processFilters","encode","mode","decodeURIComponent","saved","$filters","getFilters","$filter","makeSelect","ffxn","cellFilter","buildFilter","getColumnElm","parent","internal","$ext","filter_$anyMatch","liveSearch","fallback","eventType","skipFirst","checkFilters","filter1","filter2","f1","f2","filterArray","hideFiltersCheck","String","activeElement","defaultFilter","mask","maskLen","getLatestSearch","$input","findRange","ignoreRanges","ranges","start","singles","$elements","multipleColumns","targets","excludeMatch","matchedOn","matchType","columnIndex","processRow","showRow","hasAnyMatchInput","anyMatchFlag","anyMatchFilter","cacheArray","rawArray","get","iAnyMatchFilter","noAnyMatch","childRowText","excludeFilter","defaultColFilter","functions","norm_rows","showParent","notFiltered","searchFiltered","injected","res","storedFilters","defaultAnyFilter","getOptionSource","onlyAvail","source","getOptions","processOptions","cts","parsedTxt","validColumn","direction","childLen","updating","option","currentValue","getRaw","$column","trigger","getStickyOffset","stickyHeaders_offset","sticky","stickyVis","stickyHide","stickyWrap","addHeaderResizeEvent","disable","checkSizes","triggerEvent","sizes","resize_flag","offsetWidth","offsetHeight","clearInterval","resize_timer","setInterval","stickyHeaders","stickyHeaders_appendTo","stickyHeaders_attachTo","stickyHeaders_xScroll","stickyHeaders_yScroll","stickyHeaders_filteredToTop","stickyHeaders_cloneId","stickyHeaders_addResizeEvent","stickyHeaders_includeCaption","stickyHeaders_zIndex","$stickyCells","$attach","$yScroll","$xScroll","stickyOffset","$nestedSticky","nestedStickyTop","$stickyTable","wrap","$stickyWrap","position","padding","visibility","zIndex","$stickyThead","laststate","setWidth","$orig","$clone","border","outerWidth","getComputedStyle","getLeftPosition","yWindow","offset","scrollLeft","resizeHeader","scrollSticky","resizing","scrollTop","isWindow","yScroll","attachTop","captionHeight","tableHeight","isVisible","state","needsUpdating","cssSettings","margin","resizer","after","$td","scrollTo","focus","next","resizableContainer","resizableHandle","resizableNoSelect","resizableStorage","resizable","storedSizes","$parent","marginTop","resizable_vars","useStorage","$wrap","mouseXPosition","$next","overflow","resizableReset","tableWidth","fullWidth","setWidths","updateStoredSizes","$resizable_container","insertBefore","bindings","$extra","$col","setHandlePosition","startPosition","$handles","handleCenter","scrollerWrap","resizable_includeFooter","resizable_addLastColumn","checkVisibleColumns","toggleTextSelection","shiftKey","resizable_targetLast","nextAll","pageX","resizable_throttle","mouseMove","stopResize","allowClick","tar","leftEdge","resizable_widths","thisWidget","getStoredSortList","stored","sortListChanged","saveSort"],"mappings":"8EAAA,UAAmE,EAAO,CAAC,WAAkB,0BAAP,EAA6J,SAASA,GAi2F5P,OA50FC,SAAYC,GACZ,aACA,IAAIC,EAAKD,EAAEE,YAAc,CAExBC,QAAU,SAEVC,QAAU,GACVC,QAAU,GACVC,SAAW,CAGVC,MAAmB,UACnBC,YAAmB,EACnBC,gBAAmB,EAEnBC,eAAmB,YACnBC,iBAAmB,KACnBC,eAAmB,KAGnBC,iBAAmB,EACnBC,UAAmB,EACnBC,WAAmB,WACnBC,iBAAmB,WACnBC,aAAmB,UACnBC,gBAAmB,EACnBC,WAAmB,EACnBC,mBAAmB,EACnBC,QAAmB,EAGnBC,QAAmB,GACnBC,YAAmB,EACnBC,UAAmB,KACnBC,SAAmB,GACnBC,WAAmB,KACnBC,YAAmB,EAEnBC,iBAAmB,MACnBC,mBAAmB,EACnBC,WAAmB,EACnBC,aAAmB,EAEnBC,QAAmB,SACnBC,SAAmB,MACnBC,eAAmB,EACnBC,eAAmB,QACnBC,cAAmB,YACnBC,WAAmB,KACnBC,aAAmB,KAGnBC,aAAmB,EACnBC,YAAmB,gBACnBnC,QAAmB,GACnBoC,cAAmB,CAClBC,MAAQ,CAAE,OAAQ,QAInBC,YAAmB,KAGnBC,WAAmB,GACnBC,OAAmB,GACnBC,QAAmB,GACnBC,QAAmB,GACnBC,UAAmB,GACnBC,aAAmB,GACnBC,cAAmB,GAEnBC,YAAmB,uBACnBC,aAAmB,uBACnBC,UAAmB,qBACnBC,aAAmB,wBAEnBC,QAAmB,mBACnBC,YAAmB,GACnBC,WAAmB,GACnBC,YAAmB,GACnBC,gBAAmB,GAGnBC,aAAmB,QACnBC,YAAmB,YACnBC,UAAmB,UAGnBC,gBAAmB,yBACnBC,aAAmB,SACnBC,eAAmB,aAGnBC,OAAmB,EAGnBC,WAAY,GACZC,QAAS,GACTC,QAAS,GACTjE,QAAS,GAGTkE,UAAW,EACXC,QAAS,GAQVC,IAAM,CACLC,MAAa,cACbC,YAAa,0BACbC,SAAa,uBACbC,SAAa,uBACbC,OAAa,qBACbC,UAAa,wBACbC,SAAa,2BACbC,KAAa,mBACbC,WAAa,yBACbC,QAAa,wBACbC,SAAa,yBACbC,SAAa,8BAIdC,SAAW,CACVH,QAAe,2BACfC,SAAe,4BACfC,SAAe,oBACfE,aAAe,sBACfC,QAAe,sCACfC,SAAe,sCACfC,SAAe,+BAGhBC,MAAQ,CACPC,gBAAkB,eAClBC,aAAkB,YAClBC,aAAkB,YAClBC,OAAkB,OAClBC,QAAkB,MAClBC,aAAkB,kCAKlBC,MAAS,uEAETC,OAAS,cACTC,IAAS,iBAGTC,MAAuB,KACvBC,WAAuB,WACvBC,kBAAuB,iBACvBC,qBAAuB,mBAGvBC,UAAe,mBACfC,aAAe,aAKhBC,OAAS,CACRC,IAAW,EACXC,KAAY,EACZC,SAAW,EACXC,UAAY,EACZC,KAAW,EACXC,KAAW,EACX,KAAW,EACXC,KAAW,EACXC,QAAW,GAGZC,SAAW,CACVC,MAAQ,IAITC,MAAQ,GAGRC,gBAAkB,GASlBC,MAAQ,SAAU9C,EAAO+C,GAExB,GAAM/C,GAAUA,EAAMgD,OAAkC,IAAzBhD,EAAMiD,QAAQC,SAAyC,IAAzBlD,EAAMmD,eAAnE,CAWA,IAiBmCzH,EAjB/B0H,EAAM,GACTC,EAAS9H,EAAGyE,GACZsD,EAAO/H,EAAEgI,SAEVvD,EAAMmD,gBAAiB,EAEvBnD,EAAMwD,cAAe,EAErBxD,EAAMyD,OAASV,EAEfxH,EAAEmI,KAAM1D,EAAO,cAAe+C,GACzBvH,EAAGiE,MAAMsD,EAAG,UAChBY,QAASA,QAAQC,MAAQ,QAAU,OAAS,6BAA+BpI,EAAGE,SAC9EH,EAAEmI,KAAM1D,EAAO,oBAAqB,IAAI6D,OAIzCd,EAAEe,qBAAiCpI,EAG/BH,EAAEwI,GAAGC,OAAOC,MAAO,MAFb,GAAMC,SAAUxI,EAAS,GAAK,IACf,EAAfA,EAAS,IAAgC,IAAjBA,EAAS,IAA6C,GAAhCwI,SAAUxI,EAAS,GAAK,KAGhFqH,EAAExF,QAAUwF,EAAExF,QAAQ4G,cACtBpB,EAAEvF,SAAWuF,EAAEvF,SAAS2G,cACxBpB,EAAEqB,KAAO,CAAEpH,SAAW,GAAIqH,cAAgB,GAEpC,gBAAgBC,KAAMjB,EAAOkB,KAAM,YACxCnB,EAAoB,KAAZL,EAAEjH,MAAe,gBAAkBiH,EAAEjH,MAAQ,IAIhDiH,EAAEyB,UAIPzB,EAAEyB,UAAY,IAAMzB,EAAEyB,UAAUC,QAASjJ,EAAGyF,MAAMK,QAAS,IAH3DyB,EAAEyB,UAAY,eAAiBE,KAAKC,SAASC,SAAU,IAAKC,MAAO,GAMpE9B,EAAE/C,MAAQA,EACV+C,EAAEM,OAASA,EAGTyB,SAAUtJ,EAAGuE,IAAIC,MAAQ,IAAM+C,EAAE5E,WAAaiF,EAAM,IAAML,EAAEyB,UAAUK,MAAM,IAC5EN,KAAM,OAAQ,QAChBxB,EAAEgC,SAAW1B,EAAO2B,KAAMjC,EAAEzD,iBAE5ByD,EAAEM,OAAO4B,WAAWA,SAAU,MAAOV,KAAM,OAAQ,OACnDxB,EAAEmC,SAAW7B,EAAO4B,SAAU,cAAgBlC,EAAEpE,aAAe,KAAM4F,KAAK,CACzE,YAAc,SACd,gBAAkB,QAEdxB,EAAEM,OAAO4B,SAAU,WAAY/B,UACnCE,EAAML,EAAEM,OAAO4B,SAAU,WAAa,IAC5BE,KAAO/B,EAAI+B,GAAKpC,EAAEyB,UAAUK,MAAO,GAAM,WACnD9B,EAAEM,OAAOkB,KAAM,kBAAmBnB,EAAI+B,KAEvCpC,EAAEqC,WAAa,GAEfrC,EAAErF,eAAiBqF,EAAEM,OAAOkB,KAAM,yBAA4BxB,EAAErF,gBAAkB,QAElFlC,EAAG6J,aAActC,GAGjBvH,EAAG8J,eAAgBtF,GAEnBxE,EAAG+J,mBAAoBvF,GAEvBxE,EAAGgK,mBAAoBxF,GAEvBxE,EAAGiK,aAAc1C,GAEjBA,EAAE2C,UAAY,EAEV3C,EAAEtD,OACLjE,EAAGmK,gBAAiB5C,GAIfA,EAAErG,WAAclB,EAAGoK,WAAY7C,GAErCvH,EAAGqK,WAAY7F,EAAO+C,EAAEgC,UAAU,GAClCvJ,EAAGsK,YAAa/C,GAGXA,EAAEe,yBAAwD,IAA3BT,EAAOK,OAAOqC,SACjDhD,EAAE/F,SAAWqG,EAAOK,OAAOqC,SAChBzC,GAAUD,EAAOE,YAAcF,EAAOE,WAAWwC,WAC5DhD,EAAE/F,SAAWqG,EAAOE,WAAWwC,UAGhCvK,EAAGwK,YAAahG,GAAO,GAEE,EAApB+C,EAAE/F,SAASkG,OACf1H,EAAGyK,OAAQlD,EAAGA,EAAE/F,SAAU,IAAK+F,EAAEjF,cAEjCtC,EAAG0K,cAAenD,GACbA,EAAEjF,aAENtC,EAAGwK,YAAahG,GAAO,IAKpB+C,EAAE/G,gBACNqH,EACC8C,OAAQ,YAAcpD,EAAEyB,UAAY,WAAazB,EAAEyB,WACnD4B,KAAM,YAAcrD,EAAEyB,UAAY,WAAazB,EAAEyB,UAAW,SAAU6B,GACtEC,aAAcvD,EAAEwD,iBAChB/K,EAAGgI,aAAcxD,GACD,cAAXqG,EAAEG,OACNzD,EAAEwD,gBAAkBE,WAAY,WAC/BjL,EAAGgI,aAAcxD,GAAO,IACtB,QAMNA,EAAMmD,gBAAiB,EACvBnD,EAAMwD,cAAe,EAChBhI,EAAGiE,MAAMsD,EAAG,UAChBY,QAAQ+C,IAAK,+BAAiClL,EAAGmL,UAAWpL,EAAEmI,KAAM1D,EAAO,uBACtExE,EAAGiE,MAAMsD,EAAG,SAAWY,QAAQiD,UAAajD,QAAQiD,YAE1DvD,EAAOwD,eAAgB,0BAA2B7G,GACpB,mBAAlB+C,EAAE7E,aACb6E,EAAE7E,YAAa8B,QAxIVxE,EAAGiE,MAAMsD,EAAG,UACX/C,EAAMmD,eACVQ,QAAQmD,KAAM,qEAEdnD,QAAQoD,MAAO,oDAAqD/G,KAwIxE8F,YAAc,SAAU/C,GACvB,IAAIM,EAASN,EAAEM,OACdmB,EAAYzB,EAAEyB,UACdwC,EAAS,6LAEQ/C,MAAO,KACtBgD,KAAMzC,EAAY,KAErBnB,EACC8C,OAAQa,EAAOvC,QAASjJ,EAAGyF,MAAMI,OAAQ,MACzC+E,KAAM,YAAc5B,EAAW,SAAU6B,EAAGa,GAC5Cb,EAAEc,kBAEF3L,EAAG6B,UAAW+J,KAAK3D,OAAQ,SAAUzD,GAChCA,EAAMqH,kBAGTZ,WAAY,WACXjL,EAAGwK,YAAahG,EAAO,GAAIkH,IACzB,KAEH1L,EAAGwK,YAAahG,EAAO,GAAIkH,OAI7Bd,KAAM,YAAc5B,EAAW,SAAU6B,EAAGzJ,EAAQsK,GACpDb,EAAEc,kBACF3L,EAAG8L,UAAWF,KAAK3D,OAAQ7G,EAAQsK,KAEnCd,KAAM,SAAW5B,EAAY,cAAgBA,EAAW,SAAU6B,EAAGzJ,EAAQsK,GAC7Eb,EAAEc,kBACF3L,EAAG+L,OAAQH,KAAK3D,OAAQ7G,EAAQsK,KAEhCd,KAAM,gBAAkB5B,EAAW,SAAU6B,EAAGa,GAChDb,EAAEc,kBACF3L,EAAGgM,cAAeJ,KAAK3D,OAAQyD,KAE/Bd,KAAM,aAAe5B,EAAW,SAAU6B,EAAGoB,EAAM7K,EAAQsK,GAC3Db,EAAEc,kBACF3L,EAAGkM,WAAYN,KAAK3D,OAAQgE,EAAM7K,EAAQsK,KAE1Cd,KAAM,UAAY5B,EAAW,SAAU6B,EAAGsB,EAAM/K,EAAQsK,GACxDb,EAAEc,kBACF3L,EAAGoM,QAASR,KAAK3D,OAAQkE,EAAM/K,EAAQsK,KAEvCd,KAAM,iBAAmB5B,EAAW,WACpC4C,KAAKS,YAAa,IAElBzB,KAAM,SAAW5B,EAAW,SAAU6B,EAAGyB,EAAMZ,EAAUa,GACzD1B,EAAEc,kBACF3L,EAAGyK,OAAQmB,KAAK3D,OAAQqE,EAAMZ,EAAUa,KAExC3B,KAAM,cAAgB5B,EAAW,SAAU6B,EAAGa,EAAUa,GACxD1B,EAAEc,kBACF3L,EAAGwM,YAAaZ,KAAK3D,OAAQsE,GACxBxM,EAAE0M,WAAYf,IAClBA,EAAUE,QAIXhB,KAAM,cAAgB5B,EAAW,SAAU6B,EAAGa,EAAUhC,GACxDmB,EAAEc,kBACF3L,EAAG0M,YAAad,KAAK3D,OAAQyD,EAAUhC,KAEvCkB,KAAM,gBAAkB5B,EAAW,SAAU6B,EAAGlB,GAChDkB,EAAEc,kBACF3L,EAAG2M,cAAef,KAAMjC,KAExBiB,KAAM,eAAiB5B,EAAW,SAAU6B,EAAGa,GAC/Cb,EAAEc,kBAEF3L,EAAGwK,YAAaoB,MAAM,EAAOF,KAE7Bd,KAAM,iBAAmB5B,EAAW,SAAU6B,EAAG+B,EAAKC,GACtDhC,EAAEc,kBACF3L,EAAG8M,eAAgBlB,KAAMgB,EAAKC,KAE9BjC,KAAM,eAAiB5B,EAAW,SAAU6B,EAAGkC,EAAMC,GACrDnC,EAAEc,kBACF3L,EAAGiN,aAAcrB,KAAMmB,EAAMC,KAE7BpC,KAAM,UAAY5B,EAAW,SAAU6B,EAAGqC,EAAexB,GACzDb,EAAEc,kBACF3L,EAAGmN,QAASvB,KAAMsB,EAAexB,KAEjCd,KAAM,mBAAqB5B,EAAW,SAAU6B,GAChDA,EAAEc,kBAEF3L,EAAGiN,aAAcrB,MAAM,GAAM,GAC7B,IAAIhE,EAAM7H,EAAEqN,QAAQ,EAAM,GAAI7F,EAAE8F,mBAGhC9F,EAAIxH,EAAEqN,QAAQ,EAAM,GAAIpN,EAAGK,SAAUuH,IACnCyF,iBAAmBzF,EACrBgE,KAAKjE,gBAAiB,EAEtB3H,EAAGsH,MAAOsE,KAAMrE,MAIlB8C,WAAa,SAAU7F,EAAO+E,EAAU+D,GAEvC,IAAI1F,EACHL,GAFD/C,EAAQzE,EAAGyE,GAAS,IAETyD,OACVe,EAAYzB,EAAEyB,UACduE,EAAa,MACA,IAATD,IACJ/D,EAASD,SAAUN,EAAUK,MAAO,GAAM,mBAC1CzB,EAAM5H,EAAGwN,WAAYjE,EAAU,UACtB7B,QAAgC,UAAtBE,EAAK,GAAI6F,UAAwB7F,EAAK,KAAQpD,GAChEzE,EAAG6H,EAAK,IAAM0B,SAAUN,EAAUK,MAAO,GAAM,iBAGjDzB,GAAQL,EAAE3D,YAAc,IAAM2D,EAAE1D,UAAY,IAAM0D,EAAE5D,aAAe,gBACjEsF,QAASjJ,EAAGyF,MAAMI,OAAQ,KAC1B4C,MAAO,KACPgD,KAAMzC,EAAY,KAEpBO,EAECC,KAAMjC,EAAExD,cACR2J,IAAKnE,EAASoE,OAAQpG,EAAExD,eACxB4G,OAAQ/C,GACRgD,KAAMhD,EAAK,SAAUiD,EAAG+C,GACxB,IAAIC,EAAO5B,EAAM6B,EAChBC,EAAUhO,EAAG8K,EAAEmD,QAEfhD,EAAO,IAAMH,EAAEG,KAAO,IAEvB,KAAmC,KAA1BH,EAAEoD,OAASpD,EAAEqD,UAAmBlD,EAAKmD,MAAO,IAAM5G,EAAE5D,aAAe,qBAEhE,YAATqH,GAAsBH,EAAEoD,QAAUjO,EAAGkH,SAASC,OAE9C6D,EAAKmD,MAAO,IAAM5G,EAAE5D,aAAe,WAA4B,IAAZkH,EAAEoD,OAInDjD,EAAKmD,MAAO,IAAM5G,EAAE1D,UAAY,MAAS0J,IAAe1C,EAAEmD,SAAuB,IAAbJ,GAAzE,CAIA,GAAK5C,EAAKmD,MAAO,IAAM5G,EAAE3D,YAAc,KAMtC,OALA2J,EAAa1C,EAAEmD,YAII,OADnBF,EAAOC,EAAQvF,OAAOC,MAAO,MAClB,IAAeqF,EAAM,GAAM,GAAMjD,EAAEuD,kBAM/C,GAHAb,EAAa,KACbM,EAAQ7N,EAAGwN,WAAYzN,EAAG6L,MAAQ,IAAM5L,EAAGuE,IAAIK,QAE1C5E,EAAGyF,MAAMM,aAAa+C,KAAM+B,EAAEmD,OAAOP,WAEzCM,EAAQM,SAAU9G,EAAEnE,YAA6D,EAA9C2K,EAAQO,QAAS,IAAM/G,EAAEnE,WAAYsE,QAExEmG,EAAMQ,SAAU,iBAEqB,EAArCN,EAAQO,QAAS,UAAW5G,OAC5B,OAAQH,EAAE3G,gBAEN2G,EAAErG,WAAalB,EAAGuO,cAAehH,EAAEiH,QACvCxO,EAAGoK,WAAY7C,GAGhBA,EAAEqB,KAAKC,aAAegF,EAAM9E,KAAM,gBAAmB8E,EAAMY,SAC3DxC,EAAO1E,EAAEmH,eAAgBnH,EAAEqB,KAAKC,cAAe,MACjCoD,EAAK5G,cAClBrF,EAAG2O,SAAUpH,EAAG0E,EAAMpB,MAGnBtD,EAAE3G,iBAEN2I,EACER,KAAM,eAAgB,MACtB6B,KAAM,eAAe,GACrBrG,IAAI,CACJ,cAAgB,OAChB,cAAkB,UAKtBsF,aAAe,SAAUtC,GACxB,IAAIqH,EAAO7J,EAAM8J,EAAOC,EA+ExB,IA9EAvH,EAAErD,WAAa,GACfqD,EAAEwH,cAAgB,GAClBxH,EAAEyH,SAAW,GACRhP,EAAGiE,MAAMsD,EAAG,UAChBsH,EAAQ,IAAIxG,MAIbd,EAAE0H,QAAUjP,EAAGkP,mBAAoB3H,EAAEM,OAAO4B,SAAU,gBAAiBA,SAAU,OAEjF1E,EAAOwC,EAAEjE,QACR,cAAiBiE,EAAEjE,UAAYtD,EAAGuE,IAAIQ,KAAO/E,EAAGuE,IAAIQ,KAAOwC,EAAEjE,QAAU,IAAMtD,EAAGuE,IAAIQ,MAAS,SAC7F,GAEDwC,EAAEgC,SAAWxJ,EAAGA,EAAEoP,IAAK5H,EAAEM,OAAO2B,KAAMjC,EAAEzD,iBAAmB,SAAUsL,EAAMX,GAC1E,IAAIY,EAAezK,EAAQ0K,EAAQC,EAAU3H,EAC5C4H,EAAQzP,EAAGqP,GAEZ,IAAKpP,EAAGwN,WAAYgC,EAAO,MAAOnB,SAAU9G,EAAElE,cAwD9C,MAtDM,WAAWyF,KAAMsG,EAAK3B,YAC3B7F,EAAM5H,EAAGwN,WAAYgC,EAAO,UAC5BA,EAAMzG,KAAM,cAAenB,EAAImB,KAAM,iBAGtCsG,EAAgBrP,EAAGyP,cAAelI,EAAE/C,MAAO+C,EAAElG,QAASoN,GAAO,GAE7DlH,EAAEwH,cAAeN,GAAUe,EAAME,OAEP,KAArBnI,EAAE9G,gBAA0B+O,EAAMhG,KAAM,IAAMxJ,EAAGuE,IAAIO,UAAW4C,SAEpE6H,EAAWhI,EAAE9G,eACXwI,QAASjJ,EAAGyF,MAAMC,gBAAiB8J,EAAME,QACzCzG,QAASjJ,EAAGyF,MAAME,aAAc6J,EAAMhG,KAAM,IAAMxJ,EAAGuE,IAAIQ,MAAO2C,OAAS,GAAK3C,GAC3EwC,EAAE7G,mBACNkE,EAAS2C,EAAE7G,iBAAiBiP,MAAOH,EAAO,CAAEf,EAAOc,MAElB,iBAAX3K,IACrB2K,EAAW3K,GAGb4K,EAAME,KAAM,eAAiB1P,EAAGuE,IAAIO,SAAW,KAAOyK,EAAW,WAE7DhI,EAAE5G,gBACN4G,EAAE5G,eAAegP,MAAOH,EAAO,CAAEf,EAAOlH,EAAGA,EAAEM,SAE9CyH,EAAS5G,SAAU8G,EAAMzG,KAAM,eAAiB,IAChDqG,EAAKE,OAASA,EACd1H,EAAM5H,EAAG4P,SAAU5P,EAAG6P,QAASL,EAAOH,EAAe,qBAAwB9H,EAAE5F,kBAE/E4F,EAAEyH,SAAUM,GAAW,CACtBQ,OAAS,EACTC,MAAQnI,EACLL,EAAE1F,UAAY,CAAE,EAAG,EAAG,GAAM,CAAE,EAAG,GACjC0F,EAAE1F,UAAY,CAAE,EAAG,EAAG,GAAM,CAAE,EAAG,GACpCmO,aAAc,EACdC,SAAW,SAGQ,KADpBrI,EAAM5H,EAAG6P,QAASL,EAAOH,EAAe,iBAAmB,KAChB,IAARzH,IAClCL,EAAEyH,SAAUM,GAASU,aAAc,EACnCzI,EAAEyH,SAAUM,GAASS,MAAQ/P,EAAG4P,SAAUhI,GAAQ,CAAE,EAAG,GAAM,CAAE,EAAG,IAGnEL,EAAErD,WAAYuK,GAAUW,EACxBI,EAAMlG,SAAUtJ,EAAGuE,IAAIK,OAAS,IAAM2C,EAAExE,WAExC/C,EAAGwN,WAAYgC,EAAO,MACpBlG,SAAUtJ,EAAGuE,IAAIM,UAAY,IAAM0C,EAAEvE,cACrC+F,KAAM,OAAQ,OAEXxB,EAAE1G,UACN2O,EAAMzG,KAAM,WAAY,GAElBqG,KAGR7H,EAAEmH,eAAiB,GACbI,EAAO,EAAGA,EAAOvH,EAAE0H,QAASH,IAE5B9O,EAAGuO,cAAehH,EAAEyH,SAAUF,MAClCvH,EAAEyH,SAAUF,GAAS,IAGtBF,EAAQrH,EAAEgC,SAASoE,OAAQ,iBAAmBmB,EAAO,MAGrDvH,EAAEmH,eAAgBI,GAASF,EAAMlH,OAChCkH,EAAMsB,IAAK,iBAAkBxI,OAC5BkH,EAAMsB,IAAK,iBAAkBvC,OAAQ,SACrCiB,EAAMjB,OAAQ,SACf5N,IAEFwH,EAAEM,OAAO2B,KAAMjC,EAAEzD,iBAAkBiF,KAAK,CACvCoH,MAAO,MACPC,KAAO,iBAGRpQ,EAAGqQ,aAAc9I,GACZvH,EAAGiE,MAAMsD,EAAG,UAChBY,QAAQ+C,IAAK,iBAAmBlL,EAAGmL,UAAW0D,IAC9C1G,QAAQ+C,IAAK3D,EAAEgC,YAMjB+G,mBAAqB,SAAUC,GAC9BxQ,EAAEqN,OAAQpN,EAAGqH,gBAAiBkJ,IAS/BtG,aAAe,SAAU1C,EAAGmC,GAC3B,IAAI8G,EAAMlE,EAAMmE,EAAM/J,EAAKgK,EAAU5B,EAAMlK,EAAQyK,EAClDsB,EAAUC,EAAQC,EAAWC,EAAMC,EAAOC,EAC1CxM,EAAQ+C,EAAE/C,MACVyM,EAAa,EACbhN,EAAQjE,EAAGiE,MAAMsD,EAAG,QACpB2J,EAAc,GAKf,GAHA3J,EAAEmC,SAAWnC,EAAEM,OAAO4B,SAAU,cAAgBlC,EAAEpE,aAAe,KAGpD,KADb6N,GADAD,OAA4B,IAAbrH,EAA2BnC,EAAEmC,SAAWA,GAC3ChC,QAEX,OAAOzD,EAAQkE,QAAQmD,KAAM,uDAA0D,GASxF,IARYrH,IACX6M,EAAO,IAAIzI,KACXF,QAASA,QAAQC,MAAQ,QAAU,OAAS,sCAE7CkE,EAAO,CACN6E,WAAY,GACZhR,QAAS,IAEF8Q,EAAaD,GAAM,CAE1B,IADAR,EAAOO,EAAOE,GAAaT,MACjB9I,OAGT,IAFAgJ,EAAW,EACXhK,EAAMa,EAAE0H,QACFH,EAAO,EAAGA,EAAOpI,EAAKoI,IAAS,CAEpC,IADAlK,EAAS2C,EAAEmH,eAAgBgC,KACZ9L,EAAO8C,SAGrB2H,EAAgBrP,EAAGyP,cAAejL,EAAO+C,EAAElG,QAASqP,GAEpDG,EAAY7Q,EAAGoR,cAAepR,EAAG6P,QAASjL,EAAQyK,EAAe,cACjEuB,EAAS5Q,EAAGoR,cAAepR,EAAG6P,QAASjL,EAAQyK,EAAe,WAC9DsB,EAA6D,UAAlD3Q,EAAG6P,QAASjL,EAAQyK,EAAe,UAE9C9H,EAAEpD,QAAQuM,IACT1Q,EAAG6P,QAASjL,EAAQyK,EAAe,UACnC9H,EAAExF,UAAawF,EAAE8J,cAAgB,SAAW,QAAU1I,cAEvDpB,EAAEnD,QAAQsM,IACT1Q,EAAG6P,QAASjL,EAAQyK,EAAe,WACnC9H,EAAEvF,UACF,OAAQ2G,cACJgI,IACJC,EAAS5Q,EAAGoR,cAAe,cAI3BP,EAFKA,IAEO,EAGZD,EADKA,GACI5Q,EAAGsR,sBAAuB/J,EAAGiJ,GAAO,EAAGE,GAE5CzM,IACJiN,EAAa,IAAMR,EAAW,KAAO9L,EAAO2M,QAAW,CACtDX,OAASA,EAAOjH,GAChBkH,UAAYA,EAAYA,EAAUlH,GAAK,OACvClD,OAASc,EAAEnD,QAASsM,GACpBc,MAASjK,EAAEpD,QAASuM,KAGtBpE,EAAKnM,QAASuQ,GAAaE,EAC3BtE,EAAK6E,WAAYT,GAAaG,EAElB,GADZJ,EAAO7L,EAAQ,GAAI6M,QAAU,IAI5B,IAFAf,GAAYD,EACZ/J,GAAO+J,EACY,EAAXA,EAAO,GAEdnE,EAAKnM,QAASuQ,EAAWD,GAASG,EAClCtE,EAAK6E,WAAYT,EAAWD,GAASI,EACrCJ,IAIHC,IAGFO,GAAgB3E,EAAKnM,QAAe,OAAI6Q,EAAM,EAE1C/M,IACEjE,EAAGuO,cAAe2C,GAGvB/I,QAAQmD,KAAM,0BAFdnD,QAASA,QAAQ3D,MAAQ,QAAU,OAAS0M,GAI7C/I,QAAQ+C,IAAK,8BAAgClL,EAAGmL,UAAW2F,IACtD3I,QAAQiD,UAAajD,QAAQiD,YAEnC7D,EAAEpH,QAAUmM,EAAKnM,QACjBoH,EAAE4J,WAAa7E,EAAK6E,YAGrBO,UAAY,SAAUd,GACrB,IAAI9B,EACHkC,EAAMhR,EAAGG,QAAQuH,OACjBgG,GAAM,EACP,IAAMoB,EAAO,EAAGA,EAAOkC,EAAKlC,IACtB9O,EAAGG,QAAS2O,GAAOnF,GAAGhB,gBAAkBiI,EAAOjH,GAAGhB,gBACtD+E,GAAM,GAGHA,IACJ1N,EAAGG,QAASH,EAAGG,QAAQuH,QAAWkJ,IAIpCQ,cAAgB,SAAUrE,GAEzB,GAAa,SAARA,EAAoB,OAAO,EAChC,IAAI+B,EACHkC,EAAMhR,EAAGG,QAAQuH,OAClB,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAC3B,GAAK9O,EAAGG,QAAS2O,GAAOnF,GAAGhB,gBAAoBoE,EAAK3D,WAAaT,cAChE,OAAO3I,EAAGG,QAAS2O,GAGrB,OAAO,GAGRwC,sBAAwB,SAAU/J,EAAGiJ,EAAMmB,EAAUC,GAOpD,IANA,IAAIC,EAAKC,EAAOC,EACfjD,EAAO9O,EAAGG,QAAQuH,OAClBsK,GAAO,EACPC,EAAY,GACZhO,EAAQjE,EAAGiE,MAAMsD,EAAG,QACpB2K,GAAc,EACO,KAAdD,GAAoBC,IAE3BH,EAAMvB,IADNmB,KAGYA,EAAW,GACjBI,EAAII,UAAUC,QAASpS,EAAGqD,cAAiB,IAC/C2O,EAAOxB,EAAMmB,GAAWU,MAAOT,GAC/BK,EAAYjS,EAAGsS,eAAgB/K,EAAGyK,EAAMJ,GACxCE,EAAQ/R,EAAGiS,GACN/N,GACJkE,QAAQ+C,IAAK,sCAAwCyG,EAAW,aAC/DC,EAAY,MAAQK,EAAY,MAInCC,GAAc,EAGhB,KAAkB,KAARpD,GAGT,IAFA+C,EAAM7R,EAAGG,QAAS2O,KAEK,SAAX+C,EAAIlI,IAAiBkI,EAAIU,IAAMV,EAAIU,GAAIN,EAAW1K,EAAE/C,MAAOwN,EAAMF,GAC5E,OAAOD,EAIT,OAAO7R,EAAGoR,cAAe,SAG1BkB,eAAiB,SAAU/K,EAAGyK,EAAMJ,GACnC,IAAMI,EAAS,MAAO,GACtB,IAAIpK,EACH4K,EAAUjL,EAAErF,gBAAkB,GAG9B4P,EAAQE,EAAKxJ,OAASwJ,EAAOjS,EAAGiS,GACjC,MAAwB,iBAAZQ,EAGM,UAAZA,QAA0E,KAA1C5K,EAAMkK,EAAM/I,KAAMxB,EAAEpF,gBACjDpC,EAAE0S,KAAM7K,GAET7H,EAAE0S,KAAMT,EAAKU,aAAeZ,EAAMP,QAEjB,mBAAZiB,EACJzS,EAAE0S,KAAMD,EAASV,EAAO,GAAKvK,EAAE/C,MAAOoN,IACmC,mBAA5DhK,EAAM5H,EAAGyP,cAAelI,EAAE/C,MAAOgO,EAASZ,IACvD7R,EAAE0S,KAAM7K,EAAKkK,EAAO,GAAKvK,EAAE/C,MAAOoN,IAIpC7R,EAAE0S,KAAMX,EAAO,GAAIY,aAAeZ,EAAMP,SAIhDoB,cAAgB,SAAUpL,EAAG0E,EAAMyE,EAAUkC,QACxB,IAARA,IACXA,EAAM5S,EAAGsS,eAAgB/K,EAAG0E,EAAMyE,IAGnC,IAAImC,EAAM,GAAKD,EACdhC,EAASrJ,EAAEpH,QAASuQ,GACpBG,EAAYtJ,EAAE4J,WAAYT,GAe3B,OAdKE,IAECC,GAAyC,mBAArBA,EAAUiC,SAClCF,EAAM/B,EAAUiC,OAAQF,EAAKrL,EAAE/C,MAAOyH,EAAMyE,IAI7CmC,EAAoB,cAAdjC,EAAOjH,GAAqB,GAEjCiH,EAAOkC,OAAQ,GAAKF,EAAKrL,EAAE/C,MAAOyH,EAAMyE,GACpCnJ,EAAEjG,YAA6B,iBAARuR,IAC3BA,EAAMA,EAAIlK,gBAGLkK,GASRzI,WAAa,SAAU7C,EAAGmE,EAAUhC,GACnC,IAAI8E,EAAOqE,EAAKD,EAAKjB,EAAUjB,EAAUO,EAAY8B,EAAQ5G,EAC5D6G,EAAMC,EAAQhH,EAAMiH,EAAWhJ,EAAWiJ,EAASC,EACnDC,EAAQ5C,EAAM6C,EAAYC,EAAW7M,EAAKsK,EAAKvC,EAC/CjK,EAAQ+C,EAAE/C,MACVrE,EAAUoH,EAAEpH,QACZ8D,EAAQjE,EAAGiE,MAAMsD,EAAG,QAOrB,GALAA,EAAEmC,SAAWnC,EAAEM,OAAO4B,SAAU,cAAgBlC,EAAEpE,aAAe,KACjE4P,OAA6B,IAAbrJ,EAA2BnC,EAAEmC,SAAWA,EACxDnC,EAAEiH,MAAQ,GACVjH,EAAE2C,UAAY,GAER/J,EACL,OAAO8D,EAAQkE,QAAQmD,KAAM,gDAAmD,GASjF,IAPKrH,IACJiP,EAAY,IAAI7K,MAGZd,EAAE/G,gBACNR,EAAGgI,aAAcxD,GAAO,GAEnByM,EAAa,EAAGA,EAAa8B,EAAOrL,OAAQuJ,IAAe,CAQhE,IAPAoC,EAAS,GACT7E,EAAQjH,EAAEiH,MAAOyC,GAAe,CAC/BuC,WAAY,IAIbtJ,EAAc6I,EAAQ9B,IAAgB8B,EAAQ9B,GAAaT,KAAK9I,QAAY,EACtEiK,EAAW,EAAGA,EAAWzH,IAAayH,EAW3C,GAVAwB,EAAU,CAGTM,MAAO,GACPC,IAAK,IAINV,EAAO,KADP7G,EAAOpM,EAAGgT,EAAQ9B,GAAaT,KAAMmB,KAG3BtD,SAAU9G,EAAEvD,eAAeqF,MAAM,IAK3C,GAAK8C,EAAKkC,SAAU9G,EAAErE,cAA8B,IAAbyO,EAetC,IAdAX,EAAMxC,EAAMgF,WAAW9L,OAAS,GAChC0L,EAAc5E,EAAMgF,WAAYxC,GAAOzJ,EAAE0H,UAC7B9C,KAAOiH,EAAYjH,KAAKuB,IAAKvB,GAEnCA,EAAKwH,OAAOtF,SAAU9G,EAAErE,cAC7BiJ,EAAKwH,OAAOrK,SAAUtJ,EAAGuE,IAAIE,aAG9BwO,EAAS9G,EAAK1C,SAAU,UACxBuH,EAAMoC,EAAYK,MAAM/L,OACxB0L,EAAYK,MAAOzC,GAAQ,GAE3BsC,EAAa,EACb5M,EAAMa,EAAE0H,QACFyB,EAAW,EAAGA,EAAWhK,EAAKgK,KACnCzE,EAAOgH,EAAQvC,MAEd0C,EAAYK,MAAOzC,GAAON,GAAa1Q,EAAG2S,cAAepL,EAAG0E,EAAMyE,GAEtD,GADZD,EAAOwC,EAAQvC,GAAWe,QAAU,KAEnC6B,GAAc7C,EACd/J,GAAO+J,IAGT6C,QAzBF,CAkCA,IAJAH,EAAQhH,KAAOA,EACfgH,EAAQpD,MAAQ4B,EAChB2B,EAAa,EACb5M,EAAMa,EAAE0H,QACFyB,EAAW,EAAGA,EAAWhK,IAAOgK,EAAW,CAEhD,IADAzE,EAAOE,EAAM,GAAIkG,MAAO3B,KACX4C,EAAa/L,EAAE0H,YAC3BsE,OAA6C,IAA1BpT,EAASmT,KACTrP,GAClBkE,QAAQmD,KAAM,4BAA8BqG,EAAW,aAAejB,EACrE,uBAAyB3Q,EAAEkM,GAAMsF,OAAS,6BAE5CsB,EAAM7S,EAAGsS,eAAgB/K,EAAG0E,EAAMqH,GAClCH,EAAQO,IAAKJ,GAAeT,EAE5BD,EAAM5S,EAAG2S,cAAepL,EAAG0E,EAAMqH,EAAYT,GAC7CG,EAAMM,GAAeV,EAChBW,GAAoE,aAArDpT,EAASmT,GAAatI,MAAQ,IAAKrC,gBAEtD0K,EAAQC,GAAepK,KAAKxC,IAAKwC,KAAK0K,IAAKhB,IAAS,EAAGS,EAAQC,IAAgB,IAIpE,GADZ7C,EAAOxE,EAAKwF,QAAU,IACN,CAEf,IADAhD,EAAQ,EACAA,GAASgC,GAIhBmC,EAAMrL,EAAEtF,eAA2B,IAAVwM,EACxBoE,EAC4B,iBAArBtL,EAAErF,gBACRlC,EAAGsS,eAAgB/K,EAAG0E,EAAMqH,EAAa7E,IACzC,GACF0E,EAAQO,IAAKJ,EAAa7E,GAAUmE,EACpCI,EAAMM,EAAa7E,GAAUmE,EAC7BnE,IAED6E,GAAc7C,EACd/J,GAAO+J,EAGT6C,IAGDN,EAAMzL,EAAE0H,SAAYkE,EACpB3E,EAAMgF,WAAYhF,EAAMgF,WAAW9L,QAAWsL,EAE/CxE,EAAM6E,OAASA,EAEf9L,EAAE2C,WAAasE,EAAMgF,WAAW9L,OAMjC,GAHKH,EAAE/G,gBACNR,EAAGgI,aAAcxD,GAEbP,EAAQ,CAMZ,IALA+M,EAAM9H,KAAKvC,IAAK,EAAGY,EAAEiH,MAAO,GAAIgF,WAAW9L,QAC3CS,QAASA,QAAQC,MAAQ,QAAU,OAAS,sBAAwBb,EAAE2C,UACrE,kBAAoB8G,EAAM,qBAAuBzJ,EAAE0H,QAAU,WAC7DjP,EAAGmL,UAAW+H,IACfL,EAAM,GACAnC,EAAW,EAAGA,EAAWnJ,EAAE0H,QAASyB,IACzC,IAAM4C,EAAa,EAAGA,EAAatC,EAAKsC,IACjCT,EAAK,QAAUS,KACpBT,EAAK,QAAUS,GAAe,IAE/BT,EAAK,QAAUS,GAAc/L,EAAEmH,eAAgBgC,GAAWa,QACzDhK,EAAEiH,MAAO,GAAIgF,WAAYF,GAAc5C,GAG1CvI,QAASA,QAAQ3D,MAAQ,QAAU,OAASqO,GACvC1K,QAAQiD,UAAajD,QAAQiD,WAE9BrL,EAAE0M,WAAYf,IAClBA,EAAUlH,IAIZqP,cAAgB,SAAUrP,EAAO8K,EAAQ5D,EAAUoI,GAElD,IAAI7C,EAAYU,EAAUnD,EAAOuD,EAAKgC,EAAUC,EAAQN,EAAKO,EAAQpG,EAAOqG,EAC3EC,EAAkC,mBAAbzI,EACrB0I,EAAwB,QAAX9E,EACbpH,EAAO,CAAEwL,IAAM,GAAIO,OAAQ,GAAIpG,MAAO,IACtCtG,GALD/C,EAAQzE,EAAGyE,GAAQ,IAKRyD,OACX,IAAKjI,EAAGuO,cAAehH,GAIhB,CAEN,IADAwM,EAAWxM,EAAEmC,SAAShC,OAChBuJ,EAAa,EAAGA,EAAa8C,EAAU9C,IAG5C,IADA+C,GADAxF,EAAQjH,EAAEiH,MAAOyC,GAAauC,YACf9L,OACTiK,EAAW,EAAGA,EAAWqC,EAAQrC,IACtCI,EAAMvD,EAAOmD,GACRmC,IAAc/B,EAAKxK,EAAE0H,SAAU9C,KAAKoG,GAAIuB,KAG7CI,GAAS,EACTD,EAAS,EAAiBlC,EAAI1I,MAAO,EAAG9B,EAAE0H,SAAY8C,EAAKzC,GAC3DyC,EAAMA,EAAKxK,EAAE0H,SACbyE,EAAM,EAAiB3B,EAAI2B,IAAM3B,EAAI2B,IAAKpE,GAC1CzB,EAAQ,EAAiBkE,EAAI5F,KAAK1C,WAAasI,EAAI5F,KAAK1C,WAAW4K,GAAI/E,GAClE6E,IACJD,EAASxI,EAAS,CACjBuF,WAAaA,EACbU,SAAWA,EACXsC,OAASA,EACTP,IAAMA,EACNvH,KAAO4F,EAAI5F,KACX0B,MAAQA,MAGM,IAAXqG,IACJhM,EAAK+L,OAAQ/L,EAAK+L,OAAOvM,QAAWuM,EACpC/L,EAAKwL,IAAKxL,EAAKwL,IAAIhM,QAAWgM,EAC9BxL,EAAK2F,MAAO3F,EAAK2F,MAAMnG,QAAWmG,IAKrC,OAAO3F,EApCFlI,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQmD,KAAM,sDA6CjBZ,cAAgB,SAAUnD,GAQL,SAAnB+M,EAA4BC,EAAK9F,GAChC8F,EACEC,YAAazN,GACbuC,SAAU/E,EAAKkK,IACf1F,KAAM,YAAa0L,EAAMhG,IACzBjF,KAAM,IAAMxJ,EAAGuE,IAAIQ,MACnByP,YAAalR,EAAS,IACtBgG,SAAUhG,EAASmL,IAdvB,IAAIK,EAAMQ,EACThD,EAAO/E,EAAE/F,SACTwP,EAAM1E,EAAK5E,OACXX,EAAO/G,EAAGuE,IAAIY,SAAW,IAAMoC,EAAEzE,QACjCyB,EAAM,CAAEvE,EAAGuE,IAAIU,QAAU,IAAMsC,EAAE3E,OAAQ5C,EAAGuE,IAAIW,SAAW,IAAMqC,EAAE1E,SACnES,EAAU,CAAEiE,EAAE/D,WAAY+D,EAAE9D,YAAa8D,EAAEhE,aAC3CkR,EAAO,CAAE,YAAa,cAWtBC,EAAUnN,EAAEM,OACV2B,KAAM,YACNC,SAAU,UACViE,IAAK3N,EAAGwH,EAAEyB,UAAY,mBACtBwL,YAAajQ,EAAIkH,KAAM,MAEzBkJ,EAAUpN,EAAEgC,SACVmE,IAAK3N,EAAG,SAAWwH,EAAEyB,UAAY,mBACjCwL,YAAajQ,EAAIkH,KAAM,MACvBnC,SAAUvC,GACVgC,KAAM,YAAa,QACnBS,KAAM,IAAMxJ,EAAGuE,IAAIQ,MACnByP,YAAalR,EAAQmI,KAAM,MAC3BmJ,MAaH,IAXAD,EACEzE,IAAK,iBACL1G,KAAM,IAAMxJ,EAAGuE,IAAIQ,MACnBuE,SAAUhG,EAAS,IAEhBiE,EAAE7D,iBACNiR,EACEhH,OAAQ,iBACRnE,KAAM,IAAMxJ,EAAGuE,IAAIQ,MACnBuE,SAAU/B,EAAE7D,iBAEToL,EAAO,EAAGA,EAAOkC,EAAKlC,IAE3B,GAA2B,IAAtBxC,EAAMwC,GAAQ,GAAY,CAoB9B,IAHA6F,GAbAA,EAAUpN,EAAEgC,SAASoE,OAAQ,SAAUkH,GAMtC,IAJA,IAAIC,GAAU,EACbP,EAAMhN,EAAEgC,SAAS8K,GAAIQ,GACrBE,EAAMrM,SAAU6L,EAAIxL,KAAM,eAAiB,IAC3C6L,EAAMG,EAAM/U,EAAGwN,WAAY+G,EAAK,UAAW,GAAG9C,QACvCsD,EAAMH,EAAKG,IAClBD,IAAUA,IAAUA,IAAmD,EAAxC9U,EAAGgV,eAAgBD,EAAKxN,EAAE/F,WAE1D,OAAOsT,KAKN5E,IAAK,iBACLvC,OAAQ,iBAAmBrB,EAAMwC,GAAQ,GAAM,MAAiB,IAARkC,EAAY,QAAU,MACnEtJ,OACZ,IAAM4H,EAAS,EAAGA,EAASqF,EAAQjN,OAAQ4H,IACpCqF,EAASrF,GAASjK,cACvBiP,EAAkBK,EAAQN,GAAI/E,GAAUhD,EAAMwC,GAAQ,IAKpD4F,EAAQhN,QACZ4M,EAAkBI,EAAQ/G,OAAQ,iBAAmBrB,EAAMwC,GAAQ,GAAM,MAAQxC,EAAMwC,GAAQ,IAMlG,IADAkC,EAAMzJ,EAAEgC,SAAS7B,OACXoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAC3B9O,EAAGiV,mBAAoB1N,EAAGA,EAAEgC,SAAS8K,GAAIvF,KAI3CtB,WAAa,SAAU+G,EAAKW,GAE3B,OAAKnV,EAAEwI,GAAG4M,QACFZ,EAAIY,QAASD,GAEdX,EAAIhC,GAAI2C,GACdX,EACAA,EAAIjG,QAAS4G,GAAWvH,OAAQ,WAIlCsH,mBAAqB,SAAU1N,EAAG6N,EAASC,GAC1C,GAAKD,EAAQ1N,OAAS,CACrB,IAAI4H,EAAS5G,SAAU0M,EAAQrM,KAAM,eAAiB,IACrDuM,EAAO/N,EAAEyH,SAAUM,GACnB1H,EAAMwN,EAAQ/G,SAAUrO,EAAGuE,IAAIU,SAC9B,UACAmQ,EAAQ/G,SAAUrO,EAAGuE,IAAIW,UAAa,WAAa,WACpD0N,EAAM7S,EAAE0S,KAAM2C,EAAQ7D,QAAW,KAAOvR,EAAGoF,SAAUwC,GACjDwN,EAAQ/G,SAAU,kBAAiC,IAAbgH,EAC1CzC,GAAO5S,EAAGoF,SAASC,cAEnBuC,GAAQ0N,EAAKxF,MAAQ,GAAMwF,EAAKvF,MAAMrI,OACtC2N,EAAWC,EAAKvF,MAAOnI,GAEvBgL,GAAO5S,EAAGoF,SAAuB,IAAbiQ,EAAiB,UAAyB,IAAbA,EAAiB,WAAa,aAEhFD,EAAQrM,KAAM,aAAc6J,GACxB0C,EAAKrF,SACRmF,EAAQrM,KAAM,gBAAiBuM,EAAKrF,UAEpCmF,EAAQG,WAAW,mBAKtBlF,aAAe,SAAU9I,GACxB,IAAIkH,EAAO+G,EAAYJ,EAASL,EAC/BvQ,EAAQ+C,EAAE/C,MACVwM,EAAMzJ,EAAEgC,SAAS7B,OAClB,IAAM+G,EAAQ,EAAGA,EAAQuC,EAAKvC,IAC7B2G,EAAU7N,EAAEgC,SAAS8K,GAAI5F,GACzBsG,EAAM/U,EAAGyP,cAAejL,EAAO+C,EAAElG,QAASoN,GAAO,GAEjD+G,EAAsD,UAAzCxV,EAAG6P,QAASuF,EAASL,EAAK,WAAmE,UAAzC/U,EAAG6P,QAASuF,EAASL,EAAK,UAC3F/U,EAAGyV,cAAelO,EAAG6N,EAASI,IAIhCC,cAAgB,SAAUlO,EAAG6N,EAASI,GACrC,IAAI7L,EAAKpC,EAAE/C,MAAMmF,GACjByL,EAAS,GAAI/P,aAAemQ,EAC5BJ,EAASI,EAAa,WAAa,eAAiB,gBAClDzM,KAAM,gBAAiB,GAAKyM,GAEzBjO,EAAE1G,WACD2U,EACJJ,EAAQG,WAAY,YAEpBH,EAAQrM,KAAM,WAAY,MAIvBY,IACC6L,EACJJ,EAAQG,WAAY,iBAEpBH,EAAQrM,KAAM,gBAAiBY,KAKlC+L,sBAAwB,SAAUnO,EAAG+E,GACpC,IAAIyI,EAAKY,EAAKvN,EAAO0G,EAAM8G,EAAS9H,EAAM+E,EAAK9C,EAC9CvO,EAAW8K,GAAQ/E,EAAE/F,SACrBwP,EAAMxP,EAASkG,OAEhB,IADAH,EAAE/F,SAAW,GACPsN,EAAO,EAAGA,EAAOkC,EAAKlC,IAK3B,GAJA+D,EAAMrR,EAAUsN,IAEhBiG,EAAMrM,SAAUmK,EAAK,GAAK,KAEftL,EAAE0H,QAAU,CAkBtB,OAdM1H,EAAEyH,SAAU+F,GAAMhF,QAEtBA,EADI/P,EAAG4P,SAAUrI,EAAE5F,kBACX4F,EAAE1F,UAAY,CAAE,EAAG,EAAG,GAAM,CAAE,EAAG,GAEjC0F,EAAE1F,UAAY,CAAE,EAAG,EAAG,GAAM,CAAE,EAAG,GAE1C0F,EAAEyH,SAAU+F,GAAMhF,MAAQA,EAC1BxI,EAAEyH,SAAU+F,GAAMjF,MAAQ,GAG3BC,EAAQxI,EAAEyH,SAAU+F,GAAMhF,MAE1B4F,GADAA,GAAQ,GAAK9C,EAAK,IAAM1E,MAAO,iBACnBwH,EAAK,GAAM,IAGtB,IAAK,IAAM,IAAK,IACfA,EAAM,EACN,MACD,IAAK,IAEJA,EAAMC,GAAW,EACjB,MACD,IAAK,IAGJD,EAAe,KAFf7H,EAAOiC,GAAS6F,GAAW,GAAM7F,EAAMrI,SAEpB,EAAa,IAAToG,EAAa,EAAI,EACxC,MACD,IAAK,IACJ6H,EAAM5F,IAAWxI,EAAEyH,SAAU+F,GAAMjF,MAAUC,EAAMrI,QACnD,MACD,QACCiO,EAAM,EAGRC,EAAmB,IAAT9G,EAAa6G,EAAMC,EAC7BxN,EAAQ,CAAE2M,EAAKrM,SAAUiN,EAAK,KAAQ,GACtCpO,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAWU,EAClCuN,EAAM5V,EAAE8V,QAASzN,EAAO,GAAK2H,GAC7BxI,EAAEyH,SAAU+F,GAAMjF,MAAe,GAAP6F,EAAWA,EAAMvN,EAAO,GAAM2H,EAAMrI,SAKjEoE,UAAY,SAAUvE,EAAGnG,EAAQsK,GAChC,IAAIlH,EAAQ+C,EAAE/C,MACdA,EAAM6H,YAAa,EACnBrM,EAAG8M,eAAgBtI,GAAO,GAAM,GAChCxE,EAAG6J,aAActC,GACjBvH,EAAGqK,WAAY7F,EAAO+C,EAAEgC,UAAU,GAClCvJ,EAAGsK,YAAa/C,GAChBvH,EAAG8V,aAAcvO,EAAGnG,EAAQsK,IAG7BK,OAAS,SAAUxE,EAAGnG,EAAQsK,GACjBnE,EAAE/C,MACR6H,YAAa,EAEnBrM,EAAGqQ,aAAc9I,GACjBvH,EAAG8V,aAAcvO,EAAGnG,EAAQsK,IAI7BM,cAAgB,SAAUzE,EAAGmE,GAC5BnE,EAAE/C,MAAM6H,YAAa,EACrBrM,EAAG6J,aAActC,GACjBvH,EAAGqK,WAAY9C,EAAE/C,MAAO+C,EAAEgC,UAAU,GACpCvJ,EAAG+V,eAAgBxO,EAAGmE,IAGvBQ,WAAa,SAAU3E,EAAG0E,EAAM7K,EAAQsK,GAGvC,GAAK3L,EAAGkM,GAAOkJ,QAAS,MAAO9G,SAAU9G,EAAErE,aAC1CiF,QAAQmD,KAAK,uGADd,CAIA,GAAKtL,EAAGuO,cAAehH,EAAEiH,OAIxB,OAFAxO,EAAGqQ,aAAc9I,QACjBvH,EAAG8V,aAAcvO,EAAGnG,EAAQsK,GAG7BnE,EAAE/C,MAAM6H,YAAa,EACrB9E,EAAEM,OAAO2B,KAAMjC,EAAEvD,gBAAiBgS,SAElC,IAAIpO,EAAKkH,EAAMiD,EAAKkE,EAAOzH,EAAOwC,EACjCtH,EAAWnC,EAAEmC,SACbmE,EAAQ9N,EAAGkM,GAGXgF,EAAavH,EAAS+E,MAAOzO,EAAGwN,WAAYK,EAAO,UACnDqI,EAAU3O,EAAEiH,MAAOyC,GACnB9E,EAAOnM,EAAGwN,WAAYK,EAAO,MAG9B,GAFA5B,EAAO4B,EAAO,GAETnE,EAAShC,QAAwB,GAAduJ,EAAkB,CAIzC,GAHAc,EAAMrI,EAAS2K,GAAIpD,GAAazH,KAAM,MAAO0G,IAAK,IAAM3I,EAAErE,aAAcuL,MAAOtC,GAC/EqC,EAAQ0H,EAAQ1C,WAAYzB,IAC5Bf,EAAM7E,EAAM,GAAIkG,MAAM3K,UACTH,EAAE0H,QAId,IADArH,GAAM,EACAkH,EAFNmH,EAAQ,EAEQnH,EAAOkC,EAAKlC,IACrBlH,GAAOuE,EAAM,GAAIkG,MAAOvD,KAAW7C,EAGxCrE,GAAM,EAFNqO,GAAS9J,EAAM,GAAIkG,MAAOvD,GAAO2C,aAMnCwE,EAAQpI,EAAMY,QAEf7G,EAAM5H,EAAGsS,eAAgB/K,EAAG0E,EAAMgK,GAClCzH,EAAOjH,EAAE0H,SAAUyE,IAAKuC,GAAUrO,EAClCA,EAAM5H,EAAG2S,cAAepL,EAAG0E,EAAMgK,EAAOrO,GACxC4G,EAAOyH,GAAUrO,EACwC,aAAlDL,EAAEpH,QAAS8V,GAAQjL,MAAQ,IAAKrC,gBAEtCuN,EAAQ7C,OAAQ4C,GAAU/M,KAAKxC,IAAKwC,KAAK0K,IAAKhM,IAAS,EAAGsO,EAAQ7C,OAAQ4C,IAAW,KAGzE,KADbrO,EAAiB,cAAXxG,EAAyBA,EAASmG,EAAEnG,QAGzCpB,EAAGmW,YAAa5O,EAAGK,EAAK8D,GAIxB1L,EAAG+V,eAAgBxO,EAAGmE,QAGlB1L,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQoD,MAAO,uEAEhBhE,EAAE/C,MAAM6H,YAAa,IAIvBD,QAAU,SAAU7E,EAAG4E,EAAM/K,EAAQsK,GACpC,IAAIkH,EAAKC,EAAK5B,EAAYU,EAAUnB,EAAMoB,EAAWZ,EAAKjB,EACzDuD,EAAYH,EAASd,EAAOpG,EAAMwE,EAElC2F,EAAwB,iBAATjK,GAA2C,IAAtB5E,EAAEmC,SAAShC,QAAgB,MAAMoB,KAAMqD,GAAQ,IACnF3H,EAAQ+C,EAAE/C,MACX,GAAK4R,EACJjK,EAAOpM,EAAGoM,GACV5E,EAAEmC,SAAS2M,OAAQlK,QACb,KACLA,GAEEA,aAAgBpM,GAEjBC,EAAGwN,WAAYrB,EAAM,SAAW,KAAQ5E,EAAE/C,OAM5C,OAJKxE,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQoD,MAAO,iLAGT,EAGR,GADA/G,EAAM6H,YAAa,EACdrM,EAAGuO,cAAehH,EAAEiH,OAExBxO,EAAGqQ,aAAc9I,GACjBvH,EAAG8V,aAAcvO,EAAGnG,EAAQsK,OACtB,CAQN,IAPA8E,EAAOrE,EAAKwB,OAAQ,MAAO5E,KAAM,OAAQ,OAAQrB,OACjDuJ,EAAa1J,EAAEmC,SAAS+E,MAAOtC,EAAKmC,QAAS,SAAUX,OAAQ,WAEvDpG,EAAEpH,SAAWoH,EAAEpH,QAAQuH,QAC9B1H,EAAGiK,aAAc1C,GAGZoK,EAAW,EAAGA,EAAWnB,EAAMmB,IAAa,CAYjD,IAXA2B,EAAa,EACbtC,EAAM7E,EAAMwF,GAAWU,MAAM3K,OAC7BqI,EAAQxI,EAAEiH,MAAOyC,GAAauC,WAAW9L,OACzC2K,EAAQ,GACRc,EAAU,CACTM,MAAQ,GACRC,IAAM,GACNvH,KAAOA,EAAKkI,GAAI1C,GAChB5B,MAAQA,GAGH6B,EAAY,EAAGA,EAAYZ,EAAKY,IACrC3F,EAAOE,EAAMwF,GAAWU,MAAOT,GAC/BgB,EAAM5S,EAAGsS,eAAgB/K,EAAG0E,EAAMqH,GAClCH,EAAQO,IAAKJ,GAAeV,EAC5BC,EAAM7S,EAAG2S,cAAepL,EAAG0E,EAAMqH,EAAYV,GAC7CP,EAAOiB,GAAeT,EACwC,aAAvDtL,EAAEpH,QAASmT,GAAatI,MAAQ,IAAKrC,gBAE3CpB,EAAEiH,MAAOyC,GAAaoC,OAAQC,GAC7BpK,KAAKxC,IAAKwC,KAAK0K,IAAKf,IAAS,EAAGtL,EAAEiH,MAAOyC,GAAaoC,OAAQC,IAAgB,IAGpE,GADZ7C,EAAOxE,EAAKwF,QAAU,KAErB6B,GAAc7C,GAEf6C,IAGDjB,EAAO9K,EAAE0H,SAAYkE,EAErB5L,EAAEiH,MAAOyC,GAAauC,WAAYzD,GAAUsC,EAG7CrS,EAAGmW,YAAa5O,EAAGnG,EAAQsK,KAI7BgB,YAAc,SAAUnF,EAAGmE,EAAUhC,GAE5BnC,EAAEpH,SAAWoH,EAAEpH,QAAQuH,QAC9B1H,EAAGiK,aAAc1C,EAAGmC,GAGrB1J,EAAGoK,WAAY7C,EAAGmE,EAAUhC,IAK7B8C,YAAc,SAAUjF,EAAGgF,GAC1B,IAAI0H,EAAQ/J,EAAW6I,EAAQuD,EAAW3E,EAAUV,EAAYsF,EAC/D/R,EAAQ+C,EAAE/C,MACVkF,EAAWnC,EAAEmC,SACb8G,EAAO,GACPhC,EAAQjH,EAAEiH,MAEX,GAAKxO,EAAGuO,cAAeC,GAEtB,OAAOjH,EAAEiP,SAAWjP,EAAEiP,SAAUhS,EAAOgM,GACtChM,EAAM6H,WAAa9E,EAAEM,OAAOwD,eAAgB,iBAAkB7G,GAAU,GAK1E,IAHKxE,EAAGiE,MAAMsD,EAAG,UAChBgP,EAAa,IAAIlO,MAEZ4I,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,IAEnD,IADA8B,EAASrJ,EAAS2K,GAAIpD,IACVvJ,OAAS,CAKpB,IAHA4O,EAAYtW,EAAGyW,aAAcjS,EAAOuO,GAAQ,GAE5C7I,GADA+J,EAASzF,EAAOyC,GAAauC,YACV9L,OACbiK,EAAW,EAAGA,EAAWzH,EAAWyH,IACzCnB,EAAKA,EAAK9I,QAAUuM,EAAQtC,GAAYpK,EAAE0H,SAAU9C,KAE9C5E,EAAEiP,YAAcjP,EAAEmP,OAAUnP,EAAEmP,MAAMC,YAAepP,EAAEmP,MAAME,OAChEN,EAAUD,OAAQpC,EAAQtC,GAAYpK,EAAE0H,SAAU9C,MAIpDnM,EAAGyW,aAAcjS,EAAO8R,GAAW,GAGhC/O,EAAEiP,UACNjP,EAAEiP,SAAUhS,EAAOgM,GAEfxQ,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQ+C,IAAK,gBAAkBlL,EAAGmL,UAAWoL,IAGxChK,GAAShF,EAAEiP,UAChBxW,EAAGwK,YAAahG,GAEZA,EAAM6H,YACV9E,EAAEM,OAAOwD,eAAgB,iBAAkB7G,IAI7CsR,aAAe,SAAUvO,EAAGnG,EAAQsK,GAEnCnE,EAAEM,OAAO2B,KAAMjC,EAAEvD,gBAAiBgS,SAElChW,EAAGiK,aAAc1C,GAEjBvH,EAAGoK,WAAY7C,GACfvH,EAAGmW,YAAa5O,EAAGnG,EAAQsK,IAS5BiD,SAAW,SAAUpH,EAAG0E,EAAM4K,GAC7B,GAAKtP,EAAE/C,MAAM6H,WAEZ,OAAOpB,WAAY,WAClBjL,EAAG2O,SAAUpH,EAAG0E,EAAM4K,IACpB,IAGJ,IAAIC,EAAMhI,EAAMiI,EAAYpB,EAAK7H,EAAMlG,EAAKwN,EAC3C4B,GAAgBH,EAAOtP,EAAExG,kBACzByD,EAAQ+C,EAAE/C,MACVwM,EAAMzJ,EAAEgC,SAAS7B,OACjBuP,EAAKjX,EAAGwN,WAAYzN,EAAGkM,GAAQ,UAC/B8I,EAAMrM,SAAUuO,EAAGlO,KAAM,eAAiB,IAC1CkH,EAA0B,YAAf4G,EAAM7L,KAAqB,OAAS6L,EAAM7L,KACrD+E,EAAQxI,EAAEyH,SAAU+F,GAAMhF,MAQ3B,GAPAkH,EAAKA,EAAG,GAER1P,EAAEM,OAAOwD,eAAgB,YAAa7G,GAEtCoD,GAAQL,EAAEyH,SAAU+F,GAAMjF,MAAQ,GAAMC,EAAMrI,OAC9CH,EAAEyH,SAAU+F,GAAMjF,MAAQ+G,EAAOtP,EAAEvG,cAAiB,EAAI4G,EAEnDL,EAAEzF,YACN,IAAMiV,EAAa,EAAGA,EAAa/F,EAAK+F,IACvC3B,EAAU7N,EAAEgC,SAAS8K,GAAI0C,GAGpBhC,KAFLnN,EAAMc,SAAU0M,EAAQrM,KAAM,eAAiB,OAEzBiO,GAAgB5B,EAAQ/G,SAAUrO,EAAGuE,IAAIY,aAC9DoC,EAAEyH,SAAUpH,GAAMkI,OAAS,GAK9B,GAAKkH,EAAe,CAOnB,GANAjX,EAAEmX,KAAM3P,EAAEyH,SAAU,SAAU6F,GAC7BtN,EAAEyH,SAAU6F,GAAI5E,SAAW,KAG5B1I,EAAE/F,SAAW,GACb+F,EAAEqB,KAAKpH,SAAW,GACG,OAAhB+F,EAAEhG,UAEN,IADAuV,EAAOvP,EAAEhG,UACHuN,EAAO,EAAGA,EAAOgI,EAAKpP,OAAQoH,IAC9BgI,EAAMhI,GAAQ,KAAQiG,IAC1BxN,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAWoP,EAAMhI,GACxCvH,EAAEyH,SAAU8H,EAAMhI,GAAQ,IAAMmB,SAAW,aAM9C,IADA0F,EAAM5F,EAAOxI,EAAEyH,SAAU+F,GAAMjF,QACpB,IACVvI,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAW,CAAEqN,EAAKY,GACzCpO,EAAEyH,SAAU+F,GAAM9E,SAAWA,EAEX,EAAbgH,EAAGxF,SACP,IAAM3C,EAAO,EAAGA,EAAOmI,EAAGxF,QAAS3C,IAClCvH,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAW,CAAEqN,EAAMjG,EAAM6G,GAEhDpO,EAAEyH,SAAU+F,EAAMjG,GAAOgB,MAAQ/P,EAAE8V,QAASF,EAAK5F,GACjDxI,EAAEyH,SAAU+F,EAAMjG,GAAOmB,SAAWA,OAUvC,GAHA1I,EAAE/F,SAAWzB,EAAEqN,OAAQ,GAAI7F,EAAEqB,KAAKpH,UAGW,GAAxCxB,EAAGgV,eAAgBD,EAAKxN,EAAE/F,UAG9B,IADA+F,EAAEyH,SAAU+F,GAAM9E,SAAWA,EACvBnB,EAAO,EAAGA,EAAOvH,EAAE/F,SAASkG,OAAQoH,KACzClH,EAAML,EAAE/F,SAAUsN,IACR,KAAQiG,IAEjBnN,EAAK,GAAMmI,EAAOxI,EAAEyH,SAAU+F,GAAMjF,OACpB,IAAXlI,EAAI,KACRL,EAAE/F,SAAS2V,OAAQrI,EAAM,GACzBvH,EAAEyH,SAAU+F,GAAMjF,OAAS,SAQ9B,GAFA6F,EAAM5F,EAAOxI,EAAEyH,SAAU+F,GAAMjF,OAC/BvI,EAAEyH,SAAU+F,GAAM9E,SAAWA,EACxB0F,EAAM,IACVpO,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAW,CAAEqN,EAAKY,GAEvB,EAAbsB,EAAGxF,SACP,IAAM3C,EAAO,EAAGA,EAAOmI,EAAGxF,QAAS3C,IAClCvH,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAW,CAAEqN,EAAMjG,EAAM6G,GAEhDpO,EAAEyH,SAAU+F,EAAMjG,GAAOgB,MAAQ/P,EAAE8V,QAASF,EAAK5F,GACjDxI,EAAEyH,SAAU+F,EAAMjG,GAAOmB,SAAWA,EAQzC,GADA1I,EAAEqB,KAAKpH,SAAWzB,EAAEqN,OAAQ,GAAI7F,EAAE/F,UAC7B+F,EAAE/F,SAASkG,QAAUH,EAAE9F,aAC3BqV,EAAO/W,EAAEqX,QAAS7P,EAAE9F,YAAe8F,EAAE9F,WAAa8F,EAAE9F,WAAY8F,EAAE/F,SAAU,GAAK,KAC3ExB,EAAGuO,cAAeuI,IACvB,IAAMhI,EAAO,EAAGA,EAAOgI,EAAKpP,OAAQoH,IACnC,GAAKgI,EAAMhI,GAAQ,KAAQiG,GAAO/U,EAAGgV,eAAgB8B,EAAMhI,GAAQ,GAAKvH,EAAE/F,UAAa,EAAI,CAG1F,GADAsM,GAAS,IADT6H,EAAMmB,EAAMhI,GAAQ,KACAX,MAAO,gBAG1B,OADAvG,EAAML,EAAE/F,SAAU,GAAK,GACdsM,EAAM,IACd,IAAK,IACJ6H,EAAM,EACN,MACD,IAAK,IACJA,EAAM/N,EACN,MACD,IAAK,IACJ+N,EAAc,IAAR/N,EAAY,EAAI,EACtB,MACD,IAAK,IACJ+N,GAAQ/N,EAAM,GAAMmI,EAAMrI,OAC1B,MACD,QACCiO,EAAM,EAITpO,EAAE/F,SAAU+F,EAAE/F,SAASkG,QAAW,CAAEoP,EAAMhI,GAAQ,GAAK6G,GACvDpO,EAAEyH,SAAU8H,EAAMhI,GAAQ,IAAMmB,SAAW,aAM/C1I,EAAEM,OAAOwD,eAAgB,YAAa7G,GAEtCyG,WAAY,WAEXjL,EAAG0K,cAAenD,GAClBvH,EAAGqX,UAAW9P,GACdvH,EAAGwM,YAAajF,GAChBA,EAAEM,OAAOwD,eAAgB,gBAAiB7G,GAC1C+C,EAAEM,OAAOwD,eAAgB,UAAW7G,IAClC,IAIJ6S,UAAY,SAAU9P,GACrB,IAAI0J,EAAYqG,EAAUjE,EAAczL,EACvCpD,EAAQ+C,EAAE/C,MACV+S,EAAS,GACT5B,EAAM,EACNvT,EAAamF,EAAEnF,YAAc,GAC7BZ,EAAW+F,EAAE/F,SACbgW,EAAUhW,EAASkG,OACnBsJ,EAAMzJ,EAAEmC,SAAShC,OAClB,IAAKH,EAAEpG,oBAAqBnB,EAAGuO,cAAehH,EAAEiH,OAAhD,CAMA,GAFKxO,EAAGiE,MAAMsD,EAAG,UAAY+P,EAAW,IAAIjP,MAEjB,iBAAfjG,EAEX,IADAiR,EAAS9L,EAAE0H,QACHoE,KAEa,mBADpBzL,EAAM5H,EAAGyP,cAAejL,EAAOpC,EAAYiR,MAE1CkE,EAAQlE,GAAWzL,GAItB,IAAMqJ,EAAa,EAAGA,EAAaD,EAAKC,IACvCoC,EAAS9L,EAAEiH,MAAOyC,GAAaoC,OACxB9L,EAAEiH,MAAOyC,GAAauC,WAExBiE,KAAM,SAAUC,EAAGC,GACvB,IAAIC,EAAWC,EAAK9C,EAAKhF,EAAO0H,EAAMK,EAAGC,EAEzC,IAAMH,EAAY,EAAGA,EAAYJ,EAASI,IAAc,CAMvD,GALA7C,EAAMvT,EAAUoW,GAAa,GAC7B7H,EAAQvO,EAAUoW,GAAa,GAE/BjC,EAAgB,IAAV5F,EAEDxI,EAAE7F,YAAcgW,EAAG3C,KAAU4C,EAAG5C,IAAqB,IAAZyC,EAC7C,OAAOE,EAAGnQ,EAAE0H,SAAUc,MAAQ4H,EAAGpQ,EAAE0H,SAAUc,MAgC9C,GAlBC0H,GAVDI,EAAM,KAAK/O,KAAM9I,EAAGgY,YAAazQ,EAAEpH,QAAS4U,MAChCxN,EAAEnD,QAAS2Q,IAGrB8C,EADiD,kBAApC7X,EAAGyG,OAAQc,EAAEnD,QAAS2Q,KAC3BY,EAAM,GAAK,IAAQ3V,EAAGyG,OAAQc,EAAEnD,QAAS2Q,KAAW,EAAI,GAExDxN,EAAEnD,QAAS2Q,IAAU/U,EAAGyG,OAAQc,EAAEnD,QAAS2Q,KAAe,EAI5DxN,EAAElF,aAAekF,EAAElF,aAAcqV,EAAG3C,GAAO4C,EAAG5C,GAAOY,EAAKtC,EAAQ0B,GAAOvQ,GAC/ExE,EAAI,eAAkB2V,EAAM,MAAQ,SAAY+B,EAAG3C,GAAO4C,EAAG5C,GAAO8C,EAAKxE,EAAQ0B,GAAOA,EAAKxN,KAG9FuQ,EAAInC,EAAM+B,EAAIC,EACdI,EAAIpC,EAAMgC,EAAID,EAEa,mBAAftV,EAEJA,EAAY0V,EAAG/C,GAAOgD,EAAGhD,GAAOY,EAAKZ,EAAKvQ,GACb,mBAAlB+S,EAAQxC,GAEnBwC,EAAQxC,GAAO+C,EAAG/C,GAAOgD,EAAGhD,GAAOY,EAAKZ,EAAKvQ,GAG7CxE,EAAI,eAAkB2V,EAAM,MAAQ,SAAY+B,EAAG3C,IAAS,GAAI4C,EAAG5C,IAAS,GAAIA,EAAKxN,IAGhF,OAAOkQ,EAEtB,OAAOC,EAAGnQ,EAAE0H,SAAUc,MAAQ4H,EAAGpQ,EAAE0H,SAAUc,QAG1C/P,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQ+C,IAAK,iBAAmB1J,EAAS4H,WAAapJ,EAAGmL,UAAWmM,MAItEvB,eAAiB,SAAUxO,EAAGmE,GACxBnE,EAAE/C,MAAM6H,YACZ9E,EAAEM,OAAOwD,eAAgB,iBAAkB9D,EAAE/C,OAEzCzE,EAAE0M,WAAYf,IAClBA,EAAUnE,EAAE/C,QAId2R,YAAc,SAAU5O,EAAGnG,EAAQsK,GAClC,IAAIlK,EAAWzB,EAAEqX,QAAShW,GAAWA,EAASmG,EAAE/F,UAKjC,UAHY,IAAXJ,EAAyBmG,EAAEnG,OAASA,IAG3BmG,EAAEpG,mBAAsBoG,EAAE/C,MAAMwD,cAYxDhI,EAAG+V,eAAgBxO,EAAGmE,GACtB1L,EAAGwK,YAAajD,EAAE/C,OAAO,IAZpBhD,EAASkG,OACb1H,EAAGyK,OAAQlD,EAAG/F,EAAU,WACvBxB,EAAG+V,eAAgBxO,EAAGmE,KACpB,GAEH1L,EAAG6B,UAAW0F,EAAG,WAChBvH,EAAG+V,eAAgBxO,EAAGmE,GACtB1L,EAAGwK,YAAajD,EAAE/C,OAAO,MAS7BiG,OAAS,SAAUlD,EAAG+E,EAAMZ,EAAUa,GACrC,IAAIuC,EACHtK,EAAQ+C,EAAE/C,MAEX,IADA+C,EAAEM,OAAOwD,eAAgB,YAAa7G,GACjCsK,EAAO,EAAGA,EAAOvH,EAAE0H,QAASH,IAChCvH,EAAEyH,SAAUF,GAAOmB,UAA8C,EAAnCjQ,EAAGgV,eAAgBlG,EAAMxC,GAAc,SAAW,GAGjFtM,EAAG0V,sBAAuBnO,EAAG+E,GAE7BtM,EAAG0K,cAAenD,GAEbA,EAAErG,WAAalB,EAAGuO,cAAehH,EAAEiH,QACvCxO,EAAGoK,WAAY7C,GAEhBA,EAAEM,OAAOwD,eAAgB,YAAa7G,GAEtCxE,EAAGqX,UAAW9P,GACdvH,EAAGwM,YAAajF,EAAGgF,GACnBhF,EAAEM,OAAOwD,eAAgB,gBAAiB7G,GAC1C+C,EAAEM,OAAOwD,eAAgB,UAAW7G,GACpCxE,EAAGwK,YAAahG,GACXzE,EAAE0M,WAAYf,IAClBA,EAAUlH,IAIZ3C,UAAY,SAAU0F,EAAGmE,GAExB,IAAIoD,EACJ,IAFAvH,EAAE/F,SAAW,GAERsN,EAAO,EAAGA,EAAOvH,EAAE0H,QAASH,IAChCvH,EAAEyH,SAAUF,GAAOgB,OAAS,EAC5BvI,EAAEyH,SAAUF,GAAOmB,SAAW,GAE/BjQ,EAAG0K,cAAenD,GAClBvH,EAAGqX,UAAW9P,GACdvH,EAAGwM,YAAajF,GACXxH,EAAE0M,WAAYf,IAClBA,EAAUnE,EAAE/C,QAIdwT,YAAc,SAAU7X,EAASmP,GAChC,OAASnP,GAAWA,EAASmP,IAAanP,EAASmP,GAAStE,MAAa,IAG1E4E,SAAW,SAAUiD,GAEpB,MAAS,MAAM/J,KAAM+J,IAAiB,IAARA,GAI/BoF,YAAc,SAAUP,EAAGC,GAC1B,GAAKD,IAAMC,EAAM,OAAO,EACxBD,GAAMA,GAAK,IAAKtO,WAChBuO,GAAMA,GAAK,IAAKvO,WAChB,IAAI8O,EAAMC,EAAMC,EAAQC,EAAQvJ,EAAMpI,EACrCjB,EAAQzF,EAAGyF,MAEZ,GAAKA,EAAMS,IAAI4C,KAAM6O,GAAM,CAG1B,IAFAO,EAAOxP,SAAUgP,EAAEvJ,MAAO1I,EAAMS,KAAO,MACvCiS,EAAOzP,SAAUiP,EAAExJ,MAAO1I,EAAMS,KAAO,KAClB,OAAQ,EAC7B,GAAYiS,EAAPD,EAAgB,OAAO,EAO7B,IAJAA,EAAOR,EAAEzO,QAASxD,EAAMO,MAAO,YAAaiD,QAASxD,EAAMQ,OAAQ,IAAKwC,MAAO,OAC/E0P,EAAOR,EAAE1O,QAASxD,EAAMO,MAAO,YAAaiD,QAASxD,EAAMQ,OAAQ,IAAKwC,MAAO,OAC/E/B,EAAMwC,KAAKxC,IAAKwR,EAAKxQ,OAAQyQ,EAAKzQ,QAE5BoH,EAAO,EAAGA,EAAOpI,EAAKoI,IAAS,CAKpC,GAHAsJ,EAASE,MAAOJ,EAAMpJ,IAAWoJ,EAAMpJ,IAAU,EAAIyJ,WAAYL,EAAMpJ,KAAY,EACnFuJ,EAASC,MAAOH,EAAMrJ,IAAWqJ,EAAMrJ,IAAU,EAAIyJ,WAAYJ,EAAMrJ,KAAY,EAE9EwJ,MAAOF,KAAaE,MAAOD,GAAa,OAAOC,MAAOF,GAAW,GAAK,EAM3E,UAJYA,UAAkBC,IAC7BD,GAAU,GACVC,GAAU,IAEND,EAASC,EAAW,OAAQ,EACjC,GAAcA,EAATD,EAAoB,OAAO,EAEjC,OAAO,GAGRI,eAAiB,SAAUd,EAAGC,EAAG5C,EAAKxN,GACrC,GAAKmQ,IAAMC,EAAM,OAAO,EACxB,IAAInG,EAAQxR,EAAGyG,OAAUc,EAAEpD,QAAS4Q,IAASxN,EAAExF,SAC/C,MAAW,KAAN2V,GAAsB,IAAVlG,EAAwC,kBAAVA,EAAwBA,GAAS,EAAI,GAAOA,IAAU,EAC1F,KAANmG,GAAsB,IAAVnG,EAAwC,kBAAVA,EAAwBA,EAAQ,GAAK,EAAMA,GAAS,EAC5FxR,EAAGiY,YAAaP,EAAGC,IAG3Bc,gBAAkB,SAAUf,EAAGC,EAAG5C,EAAKxN,GACtC,GAAKmQ,IAAMC,EAAM,OAAO,EACxB,IAAInG,EAAQxR,EAAGyG,OAAUc,EAAEpD,QAAS4Q,IAASxN,EAAExF,SAC/C,MAAW,KAAN2V,GAAsB,IAAVlG,EAAwC,kBAAVA,EAAwBA,GAAS,EAAI,EAAMA,GAAS,EACxF,KAANmG,GAAsB,IAAVnG,EAAwC,kBAAVA,EAAwBA,EAAQ,GAAK,GAAOA,IAAU,EAC9FxR,EAAGiY,YAAaN,EAAGD,IAI3BgB,SAAW,SAAUhB,EAAGC,GACvB,OAAWA,EAAJD,EAAQ,EAAMA,EAAIC,GAAK,EAAI,GAMnCgB,aAAe,SAAU9F,EAAKgF,EAAKnR,GAClC,GAAKA,EAAM,CAEV,IAAIoI,EACHkC,EAAM6B,EAAMA,EAAInL,OAAS,EACzBkR,EAAIlS,EAAMmR,EACX,IAAM/I,EAAO,EAAGA,EAAOkC,EAAKlC,IAC3B8J,GAAK/F,EAAIgG,WAAY/J,GAEtB,OAAO+I,EAAMe,EAEd,OAAO,GAGRE,eAAiB,SAAUpB,EAAGC,EAAGE,EAAKnR,EAAKqO,EAAKxN,GAC/C,GAAKmQ,IAAMC,EAAM,OAAO,EACxB,IAAInG,EAAQxR,EAAGyG,OAAUc,EAAEpD,QAAS4Q,IAASxN,EAAExF,SAC/C,MAAW,KAAN2V,GAAsB,IAAVlG,EAAwC,kBAAVA,EAAwBA,GAAS,EAAI,GAAOA,IAAU,EAC1F,KAANmG,GAAsB,IAAVnG,EAAwC,kBAAVA,EAAwBA,EAAQ,GAAK,EAAMA,GAAS,GAC9F8G,MAAOZ,KAAQA,EAAI1X,EAAG2Y,aAAcjB,EAAGG,EAAKnR,IAC5C4R,MAAOX,KAAQA,EAAI3X,EAAG2Y,aAAchB,EAAGE,EAAKnR,IAC1CgR,EAAIC,IAGZoB,gBAAkB,SAAUrB,EAAGC,EAAGE,EAAKnR,EAAKqO,EAAKxN,GAChD,GAAKmQ,IAAMC,EAAM,OAAO,EACxB,IAAInG,EAAQxR,EAAGyG,OAAUc,EAAEpD,QAAS4Q,IAASxN,EAAExF,SAC/C,MAAW,KAAN2V,GAAsB,IAAVlG,EAAwC,kBAAVA,EAAwBA,GAAS,EAAI,EAAMA,GAAS,EACxF,KAANmG,GAAsB,IAAVnG,EAAwC,kBAAVA,EAAwBA,EAAQ,GAAK,GAAOA,IAAU,GAChG8G,MAAOZ,KAAQA,EAAI1X,EAAG2Y,aAAcjB,EAAGG,EAAKnR,IAC5C4R,MAAOX,KAAQA,EAAI3X,EAAG2Y,aAAchB,EAAGE,EAAKnR,IAC1CiR,EAAID,IAGZsB,YAAc,SAAUtB,EAAGC,GAC1B,OAAOD,EAAIC,GASZsB,UAAY,SAAUC,GAChBA,EAAOvP,KAAO3J,EAAGuO,cAAevO,EAAGmZ,cAAeD,EAAOvP,MAC7DxB,QAAQmD,KAAM,IAAM4N,EAAOvP,GAAK,uCAEjC3J,EAAGI,QAASJ,EAAGI,QAAQsH,QAAWwR,GAGnCE,UAAY,SAAUvR,EAAQkF,GAE7B,OADAlF,EAAS9H,EAAG8H,IACEH,QAAUG,EAAQ,GAAII,QAAUJ,EAAQ,GAAII,OAAO2B,WAAYmD,KAAU,GAGxFoM,cAAgB,SAAUpM,GACzB,IAAI+B,EAAMoK,EACTlI,EAAMhR,EAAGI,QAAQsH,OAClB,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAE3B,IADAoK,EAASlZ,EAAGI,QAAS0O,KACNoK,EAAOvP,IAAMuP,EAAOvP,GAAGhB,gBAAkBoE,EAAKpE,cAC5D,OAAOuQ,GAKVlP,mBAAqB,SAAUxF,GAC9B,IAAIsK,EAAMoK,EAAQG,EACjB9R,EAAI/C,EAAMyD,OACV+I,EAAMzJ,EAAEnH,QAAQsH,OACjB,GAAKsJ,EACJ,IAAMlC,EAAO,EAAGA,EAAOkC,EAAKlC,KAC3BoK,EAASlZ,EAAGmZ,cAAe5R,EAAEnH,QAAS0O,MACvBoK,EAAOI,UACrBD,EAAKtZ,EAAEqN,QAAQ,EAAM,GAAI8L,EAAOI,SAChC/R,EAAE/E,cAAgBzC,EAAEqN,QAAQ,EAAMiM,EAAI9R,EAAE/E,eAExCzC,EAAEqN,QAAQ,EAAMpN,EAAGK,SAASmC,cAAe0W,EAAOI,WAMtDvP,mBAAqB,SAAUvF,GAC9B,IAAIwM,EAAKlC,EACRvH,EAAI/C,EAAMyD,OAIVxC,EAAQ,IAAM8B,EAAEhF,YAAY0G,QAASjJ,EAAGyF,MAAMG,aAAc,WAAc,IAC1ErD,EAAc,IAAIgX,OAAQ9T,EAAO,KAGjCrF,GAAYoE,EAAM2N,WAAa,IAAK1J,MAAOzI,EAAGyF,MAAMI,QACrD,GAAKzF,EAAQsH,OAEZ,IADAsJ,EAAM5Q,EAAQsH,OACRoH,EAAO,EAAGA,EAAOkC,EAAKlC,IACtB1O,EAAS0O,GAAOX,MAAO5L,KAC3BgF,EAAEnH,QAASmH,EAAEnH,QAAQsH,QAAWtH,EAAS0O,GAAO7F,QAAS1G,EAAa,QAM1EoK,cAAgB,SAAUnI,EAAOmF,EAAI4C,GAEpC,IAAIiN,EAAS1I,EAAM/D,EAClBxF,GAFD/C,EAAQzE,EAAEyE,GAAO,IAENyD,OACVoR,EAAK9R,EAAE/E,cACPyB,EAAQjE,EAAGiE,MAAMsD,EAAG,QACpB2R,EAASlZ,EAAGmZ,cAAexP,GACvBuP,IACJnM,EAAOmM,EAAOvP,GACd6P,GAAU,EAELzZ,EAAE8V,QAAS9I,EAAMxF,EAAEnH,SAAY,IACnCmH,EAAEnH,QAASmH,EAAEnH,QAAQsH,QAAWqF,GAE5B9I,IAAU6M,EAAO,IAAIzI,OAErBkE,GAAWhF,EAAEqC,WAAYmD,KAE7BxF,EAAEqC,WAAYmD,IAAS,EAClBvI,EAAMmD,gBAEV3H,EAAGgK,mBAAoBxF,GAEI,mBAAhB0U,EAAO3M,OAClBiN,GAAU,EACLvV,GACJkE,QAASA,QAAQC,MAAQ,QAAU,OAAS,gBAAkB2E,EAAO,WAEtEmM,EAAO3M,KAAM/H,EAAO0U,EAAQ3R,EAAG8R,KAG3B9M,GAAiC,mBAAlB2M,EAAOpG,SAC3B0G,GAAU,EACLvV,GACJkE,QAASA,QAAQC,MAAQ,QAAU,OAAS,YAAc2E,EAAO,WAElEmM,EAAOpG,OAAQtO,EAAO+C,EAAG8R,GAAI,IAEzBpV,GACCuV,IACJrR,QAAQ+C,IAAK,cAAiBqB,EAAO,gBAAkB,aAAgBQ,EAAO,UAAY/M,EAAGmL,UAAW2F,IACnG3I,QAAQiD,UAAajD,QAAQiD,cAMtCZ,YAAc,SAAUhG,EAAO+H,EAAMb,GAEpC,IAAIoD,EAAMkC,EAAKyI,EAAOP,EAAQpI,EAC7BvJ,GAFD/C,EAAQzE,EAAGyE,GAAS,IAETyD,OACVhE,EAAQjE,EAAGiE,MAAMsD,EAAG,QACpBnH,EAAU,GAEX,IAAc,IAATmM,IAAkB/H,EAAMmD,iBAAoBnD,EAAMqH,oBAAqBrH,EAAM6H,WAAlF,CAOA,GAJKpI,IAAU6M,EAAO,IAAIzI,MAC1BrI,EAAG+J,mBAAoBvF,GAEvBsG,aAAcvD,EAAEmS,YACXnS,EAAEnH,QAAQsH,OAAS,CASvB,IARAlD,EAAMqH,mBAAoB,EAE1BtE,EAAEnH,QAAUL,EAAE4Z,KAAMpS,EAAEnH,QAAS,SAAUyS,EAAKpE,GAC7C,OAAO1O,EAAE8V,QAAShD,EAAKtL,EAAEnH,WAAcqO,IAGxCuC,GADAyI,EAAQlS,EAAEnH,SAAW,IACTsH,OAENoH,EAAO,EAAGA,EAAOkC,EAAKlC,KAC3BoK,EAASlZ,EAAGmZ,cAAeM,EAAO3K,MACnBoK,EAAOvP,IAEfuP,EAAOU,WAAaV,EAAOU,SAAW,IAC5CxZ,EAAS0O,GAASoK,GACPjV,GACXkE,QAAQmD,KAAM,IAAMmO,EAAO3K,GAAS,2DAYtC,IARA1O,EAAQqX,KAAM,SAAUC,EAAGC,GAC1B,OAAOD,EAAEkC,SAAWjC,EAAEiC,UAAY,EAAIlC,EAAEkC,WAAajC,EAAEiC,SAAW,EAAI,IAGvE5I,EAAM5Q,EAAQsH,OACTzD,GACJkE,QAASA,QAAQC,MAAQ,QAAU,OAAS,UAAamE,EAAO,eAAiB,YAAe,YAE3FuC,EAAO,EAAGA,EAAOkC,EAAKlC,KAC3BoK,EAAS9Y,EAAS0O,KACHoK,EAAOvP,IACrB3J,EAAG2M,cAAenI,EAAO0U,EAAOvP,GAAI4C,GAGjCtI,GAASkE,QAAQiD,UAAajD,QAAQiD,WAE5C7D,EAAEmS,WAAazO,WAAY,WAC1BzG,EAAMqH,mBAAoB,EAC1B9L,EAAEmI,KAAM1D,EAAO,wBAAyB,IAAI6D,MAC5Cd,EAAEM,OAAOwD,eAAgB,qBAEnBkB,GAA4B,mBAAbb,GACpBA,EAAUlH,GAENP,IACJiV,EAAS3R,EAAEnH,QAAQsH,OACnBS,QAAQ+C,IAAK,eACD,IAATqB,EAAgB,gBAAkB,aAAgB2M,EACpD,WAAyB,IAAXA,EAAe,IAAM,IAAOlZ,EAAGmL,UAAW2F,MAExD,MAGJ7D,aAAe,SAAUzI,EAAOuI,EAAMC,GAErC,IAAIyB,EAAOyK,EAAQpK,EAAMkC,EACxBzJ,GAFD/C,EAAQzE,EAAGyE,GAAS,IAETyD,OAEX,IAAc,IAAT8E,EAGJ,IAFAA,EAAO,GACPiE,EAAMhR,EAAGI,QAAQsH,OACXoH,EAAO,EAAGA,EAAOkC,EAAKlC,KAC3BoK,EAASlZ,EAAGI,QAAS0O,KACNoK,EAAOvP,KACrBoD,EAAMA,EAAKrF,QAAWwR,EAAOvP,SAM/BoD,GAAShN,EAAEqX,QAASrK,GAASA,EAAKtB,KAAM,KAAQsB,GAAQ,IAAKpE,cAAcF,MAAO,UAGnF,IADAuI,EAAMjE,EAAKrF,OACL+G,EAAQ,EAAGA,EAAQuC,EAAKvC,IAC7ByK,EAASlZ,EAAGmZ,cAAepM,EAAM0B,IAGpB,IAFbK,EAAO/O,EAAE8V,QAAS9I,EAAM0B,GAASlH,EAAEnH,YAEF,IAAf4M,GACjBzF,EAAEnH,QAAQ+W,OAAQrI,EAAM,GAEpBoK,GAAUA,EAAOlD,SAChBhW,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQ+C,KAAO8B,EAAa,aAAe,YAAe,KAAOD,EAAM0B,GAAU,YAElFyK,EAAOlD,OAAQxR,EAAO+C,EAAGA,EAAE/E,cAAewK,GAC1CzF,EAAEqC,WAAYmD,EAAM0B,KAAY,GAGlClH,EAAEM,OAAOwD,eAAgB,kBAAmB7G,IAG7CsI,eAAiB,SAAUtI,EAAOqV,EAAOhN,GAQ5B,SAAXnB,EAAqBlH,GACpBzE,EAAGyE,GAAQ6G,eAAgB,mBAP7B,IAAIyD,EAAMoK,EAETY,GAHDtV,EAAQzE,EAAGyE,GAAS,IAETyD,OACK7H,QACfA,EAAUJ,EAAGI,QACb4Q,EAAM5Q,EAAQsH,OACd4E,EAAO,GAKR,IAAMwC,EAAO,EAAGA,EAAOkC,EAAKlC,KAC3BoK,EAAS9Y,EAAS0O,KACHoK,EAAOvP,KAAQkQ,GAAS9Z,EAAE8V,QAASqD,EAAOvP,GAAImQ,GAAe,KAC3ExN,EAAMA,EAAK5E,QAAWwR,EAAOvP,IAG/B3J,EAAGiN,aAAczI,EAAO8H,EAAKb,KAAM,MAAO,IACvB,IAAdoB,GAEJ7M,EAAGwK,YAAahG,EAAOqV,IAAS,EAAOnO,GAClCmO,GAEJ7Z,EAAGwK,YAAahG,GAAO,EAAOkH,IAG/BA,EAAUlH,IAUZ2G,UAAY,SAAU4O,GACrB,MAAS,OAAS,IAAI1R,MAAO2R,UAAYD,EAAKC,WAAc,QAG7D9O,IAAM,WACL/C,QAAQ+C,IAAK+O,YAEdhW,MAAQ,SAASsD,EAAGwF,GACnB,OAAOxF,KACM,IAAZA,EAAEtD,OACiB,iBAAZsD,EAAEtD,QAA+C,EAAzBsD,EAAEtD,MAAMmO,QAAQrF,KAKjDwB,cAAgB,SAAU2L,GAEzB,IAAM,IAAInN,KAAQmN,EACjB,OAAO,EAER,OAAO,GAGRlF,eAAiB,SAAU1F,EAAQwH,GAClC,IAAIhI,EACHkC,EAAM8F,GAAQA,EAAKpP,QAAU,EAC9B,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAC3B,GAAKgI,EAAMhI,GAAQ,KAAQQ,EAC1B,OAAOR,EAGT,OAAQ,GAGTqL,YAAc,SAAUC,EAAK5V,GAC5B,MAAoB,iBAAR4V,GAA4B,KAARA,EAAsBA,GAOrDA,GAJW5V,GAASA,EAAMyD,QAAyC,IAAhCzD,EAAMyD,OAAOhH,oBAC9B,IAAVuD,GAAwBA,GAG1B4V,EAAInR,QAASjJ,EAAGyF,MAAMU,MAAO,IAI7BiU,EAAInR,QAASjJ,EAAGyF,MAAMW,WAAY,IAAK6C,QAASjJ,EAAGyF,MAAMU,MAAO,KAElEnG,EAAGyF,MAAMY,kBAAkByC,KAAMsR,KAErCA,EAAMA,EAAInR,QAASjJ,EAAGyF,MAAMa,qBAAsB,QAEnDuR,EAAMU,WAAY6B,GAEX9B,MAAOT,GAAQ9X,EAAE0S,KAAM2H,GAAQvC,GAjBtC,IAAIA,GAoBLwC,QAAU,SAAUD,GAEnB,OAAO9B,MAAO8B,GACbpa,EAAGyF,MAAMc,UAAUuC,KAAMsR,EAAIhR,WAAWH,QAASjJ,EAAGyF,MAAMe,aAAc,KAChE,KAAR4T,GAMFlL,mBAAqB,SAAUoL,EAAO/S,GACrC,IAAIsN,EAAG0F,EAAGC,EAAGC,EAAGxO,EAAMoG,EAAOV,EAAU+I,EAASjJ,EAASkJ,EAExD1L,EAAU1H,GAAKA,EAAE0H,SAAW,EAC5B2L,EAAS,GACTC,EAAY,IAAIC,MAAO7L,GACxB,IAAM4F,EAAI,EAAGA,EAAIyF,EAAM5S,OAAQmN,IAE9B,IADAxC,EAAQiI,EAAOzF,GAAIxC,MACbkI,EAAI,EAAGA,EAAIlI,EAAM3K,OAAQ6S,IAAM,CASpC,IAPA5I,EAAWkD,EACX6F,GAFAzO,EAAOoG,EAAOkI,IAECG,SAAW,EAC1BjJ,EAAUxF,EAAKwF,SAAW,OACS,IAAvBmJ,EAAQjJ,KACnBiJ,EAAQjJ,GAAa,IAGhB6I,EAAI,EAAGA,EAAII,EAAQjJ,GAAWjK,OAAS,EAAG8S,IAC/C,QAAwC,IAA5BI,EAAQjJ,GAAY6I,GAAsB,CACrDG,EAAgBH,EAChB,MAcF,IAVKvL,GAAWhD,EAAK2F,YAAc+I,IAEvB1O,EAAK8O,aAGhB9O,EAAK8O,aAAc,cAAeJ,GAGlC5a,EAAGkM,GAAOlD,KAAM,cAAe4R,IAE1BH,EAAI7I,EAAU6I,EAAI7I,EAAW+I,EAASF,IAK3C,SAJ4B,IAAhBI,EAAQJ,KACnBI,EAAQJ,GAAM,IAEfK,EAAYD,EAAQJ,GACdC,EAAIE,EAAeF,EAAIE,EAAgBlJ,EAASgJ,IACrDI,EAAWJ,GAAM,IAMrB,OADAza,EAAGgb,iBAAiBV,EAAOM,EAAQC,EAAUnT,QACtCmT,EAAUnT,QAGlBsT,iBAAmB,SAASV,EAAOM,EAAQ3L,GAG1C,IAAI4F,EAAG7D,EACNoF,GAAQ,EACR/D,EAAQ,GACT,IAAMwC,EAAI,EAAGA,EAAI+F,EAAOlT,OAAQmN,IAG/B,GAAK+F,EAAO/F,KACX7D,EAAM4J,EAAO/F,GAAGnN,OACXkT,EAAO/F,GAAGnN,SAAWuH,GAAU,CACnCmH,GAAQ,EACR,MAIGA,IACLkE,EAAMpD,KAAM,SAAUpI,EAAMmM,GAC3B,IAAIhP,EAAOgP,EAAGC,cAAczN,SACvB4E,EAAMD,QAASnG,GAAS,GAC5BoG,EAAM8I,KAAMlP,KAGd9D,QAAQoD,MACP,iDACA8G,EAAM5G,KAAM,QAAW,cAAgBwD,EACvC,eAAiB+B,EAAM,cAM1BlH,eAAiB,SAAUtF,GAE1B,IAAI4W,EAAcC,EAAS3R,EAAUsH,EAAKvC,EACzClH,GAFD/C,EAAQzE,EAAGyE,GAAS,IAETyD,OACVqT,EAAY/T,EAAEM,OAAO4B,SAAU,YAKhC,GAHK6R,EAAU5T,QAAU4T,EAAUjN,SAAUrO,EAAGuE,IAAII,WACnD2W,EAAUtF,SAENzO,EAAEhH,YAAyD,IAA3CgH,EAAEM,OAAO4B,SAAU,YAAa/B,OAAe,CAMnE,IALA4T,EAAYvb,EAAG,oBAAsBC,EAAGuE,IAAII,SAAW,MACvDyW,EAAe7T,EAAEM,OAAO0T,QAGxBvK,GADAtH,EAAWnC,EAAEmC,SAASF,KAAM,YAAaC,SAAU,aACpC/B,OACT+G,EAAQ,EAAGA,EAAQuC,EAAKvC,IAC7B4M,EAAU3S,SAAYgB,EAAS2K,GAAI5F,GAAQ8M,QAAUH,EAAiB,IAAM,IAAO,GAAK,IACxFE,EAAUjF,OAAQtW,EAAG,SAAUwE,IAAK,QAAS8W,IAE9C9T,EAAEM,OAAO2T,QAASF,KAOpBzL,QAAU,SAAUjL,EAAQ6W,EAAcC,GACzC,IAAI5T,EAAM6T,EACT9I,EAAM,GACNuC,EAAUrV,EAAG6E,GACd,OAAMwQ,EAAQ1N,QACdI,IAAO/H,EAAEgI,UAAWqN,EAAQrN,WAC5B4T,EAAQ,KAAQvG,EAAQrM,KAAM,UAAa,SACP,IAAxBqM,EAAQlN,KAAMwT,SACoB,IAAtCtG,EAAQlN,KAAMwT,EAAI/S,eAGzBkK,GAAOuC,EAAQlN,KAAMwT,IAAStG,EAAQlN,KAAMwT,EAAI/S,eACrCb,QAA+B,IAAhBA,EAAM4T,GAChC7I,GAAO/K,EAAM4T,GACFD,QAA+C,IAAxBA,EAAcC,GAChD7I,GAAO4I,EAAcC,GACA,MAAVC,GAAiBA,EAAMxN,MAAO,IAAMuN,EAAM,OAErD7I,EAAM8I,EAAMxN,MAAO,IAAIoL,OAAQ,MAAQmC,EAAM,eAAkB,IAAO,IAEhE3b,EAAE0S,KAAMI,IAhBiB,IAmBjCpD,cAAgB,SAAUjL,EAAO0V,EAAKpL,EAAM8M,EAASrS,GACpD,GAAoB,iBAAR2Q,GAA4B,OAARA,EAC/B,OAAOA,EAGR,IAAawB,EACZnU,GAFD/C,EAAQzE,EAAGyE,GAAS,IAETyD,OACVgL,EAAW1J,GAAYhC,EAAEgC,SAEzBsE,EAAQtG,EAAEmH,gBAAkBnH,EAAEmH,eAAgBI,IAC7CmE,EAAOzJ,KAAM,iBAAmBsF,EAAO,WACzC,QAA4B,IAAhBoL,EAAKpL,GAChB,OAAO8M,EAAU1B,EAAKpL,GAASoL,EAAKjH,EAAOxE,MAAOZ,IAEnD,IAAM6N,KAAOxB,EACZ,GAAoB,iBAARwB,GACD7N,EAERF,OAAQ+N,GAERhO,IAAKG,EAAMrE,KAAMkS,IACNhU,OACZ,OAAOwS,EAAKwB,IAShB1T,aAAe,SAAUH,EAAQgU,EAAQtS,GAExC,IAAIhC,GADJM,EAAS9H,EAAG8H,IACI,GAAII,OAEnBmN,EAAU7L,GAAY1B,EAAO2B,KAAM,IAAMxJ,EAAGuE,IAAIK,QAC5CiX,QAEqB,IAAbtS,GAAgD,EAApBhC,EAAE/F,SAASkG,SAElD0N,EAAUA,EAAQzH,OAAQ,WAEzB,OAAO/B,KAAKvG,cAEuE,GAAlFrF,EAAGgV,eAAgBuD,WAAYxY,EAAG6L,MAAO7C,KAAM,gBAAmBxB,EAAE/F,aAGvEqG,EAAO6F,IAAK0H,GAAU9L,SAAUtJ,EAAGuE,IAAIS,WAAa,IAAMuC,EAAEtE,gBAE5D4E,EAAO6F,IAAK0H,GAAUZ,YAAaxU,EAAGuE,IAAIS,WAAa,IAAMuC,EAAEtE,gBAMjEwT,aAAe,SAAUjS,EAAOsX,EAAKC,GAEpC,GADAvX,EAAQzE,EAAGyE,GAAS,GACfuX,EAGJ,OAFAvX,EAAMwD,cAAe,EACrB8T,EAAIE,OAAQ,+CACLjc,EAAEwI,GAAG0T,OAASH,EAAIG,SAAWH,EAAI9F,SAEzC,IAAIkG,EAAQnc,EAAGyE,GAAQgF,KAAM,oCAC7BsS,EAAIK,YAAaD,GACjBA,EAAMlG,SACNxR,EAAMwD,cAAe,GAGtBoU,eAAiB,SAAU5X,GAC1BzE,EAAGyE,GAAS,GAAIyD,OAAOyB,SAASD,WAAWwS,UAI5CI,qBAAuB,CACtB,EAAM,UACN,EAAM,UACN,EAAM,MACN,EAAM,MACN,EAAM,SACN,EAAM,SACN,EAAM,SACN,EAAM,QACN,EAAM,SACN,EAAM,SACN,GAAM,IACN,GAAM,IACN,EAAM,QACN,EAAM,SAGPC,eAAiB,SAAUlC,GAC1B,IAAImC,EACHC,EAAM,IACNnI,EAAKrU,EAAGqc,qBACT,IAAMrc,EAAGyc,eAAiB,CAEzB,IAAMF,KADNvc,EAAG0c,oBAAsB,GACZrI,EACQ,iBAARkI,IACXC,GAAOnI,EAAIkI,GACXvc,EAAG0c,oBAAqBH,GAAQ,IAAIhD,OAAQ,IAAMlF,EAAIkI,GAAQ,IAAK,MAGrEvc,EAAGyc,eAAiB,IAAIlD,OAAQiD,EAAM,KAEvC,GAAKxc,EAAGyc,eAAe3T,KAAMsR,GAC5B,IAAMmC,KAAOlI,EACQ,iBAARkI,IACXnC,EAAMA,EAAInR,QAASjJ,EAAG0c,oBAAqBH,GAAOA,IAIrD,OAAOnC,GAGRjQ,gBAAkB,SAAU5C,GAC3B,IAAIoV,EAASC,EAAUC,EAAKhO,EAE3BiO,EAAS,gDAAgDrU,MAAO,KAChEsU,EAAOxV,EAAE8F,iBACV,GAAK0P,EAAO,CAIX,IAAMJ,KAHD3c,EAAGiE,MAAMsD,EAAG,UAChBsH,EAAQ,IAAIxG,MAEI0U,EAEhB,GAAa,eADbF,SAAa7c,EAAGK,SAASsc,IAExBxU,QAAQmD,KAAM,sCAAwCqR,EAAU,gCAC1D,GAAa,WAARE,EACX,IAAMD,KAAYG,EAAKJ,GACtBE,EAAM7c,EAAGK,SAASsc,WAAmB3c,EAAGK,SAASsc,GAASC,GACrD7c,EAAE8V,QAAS8G,EAASG,GAAW,GAAa,cAARD,GACxC1U,QAAQmD,KAAM,sCAAwCqR,EAAU,IAAMC,EAAW,2BAKhF5c,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQ+C,IAAK,yBAA2BlL,EAAGmL,UAAW0D,MAMzDmO,eAAiB,SAAUxY,GAC1B,IAAIiK,EAAOZ,EACVtG,EAAIxH,EAAGyE,GAAS,GAAIyD,OACpBsB,EAAWhC,EAAEM,OAAO2B,KAAMjC,EAAEzD,iBAC5BkN,EAAMzH,EAAS7B,OAEhB,IAAM+G,EAAQ,EAAGA,EAAQuC,EAAKvC,KAC7BZ,EAAQtE,EAAS8K,GAAI5F,IAGVjF,KAAM,IAAMxJ,EAAGuE,IAAIO,UAAW4C,QACxCmG,EAAM6B,KAAMnI,EAAEwH,cAAeN,KAKhCtB,QAAU,SAAU3I,EAAO0I,EAAexB,GAEzC,IADAlH,EAAQzE,EAAGyE,GAAS,IACRmD,eAAZ,CAEA3H,EAAGiN,aAAczI,GAAO,GAAM,GAC9B,IAAIgH,EACHyR,EAAKld,EAAGyE,GACR+C,EAAI/C,EAAMyD,OACViV,EAAKD,EAAGzT,KAAM,eACd2T,EAAKD,EAAG1T,KAAM,MAAQxJ,EAAGuE,IAAIM,WAAY2P,YAAaxU,EAAGuE,IAAIM,UAAY,IAAM0C,EAAEvE,cACjFoa,EAAKH,EAAGzT,KAAM,oBAAqBC,SAAU,WACvB,IAAlByD,GAAgE,GAArCnN,EAAE8V,QAAS,UAAWtO,EAAEnH,WAEvD6c,EAAG5R,eAAgB,gBAAiB,CAAE,YACtC4R,EAAG5R,eAAgB,gBAAiB,CAAE,WAGvC6R,EAAG1T,KAAM,MAAO0G,IAAKiN,GAAKnH,SAG1BxK,EAAS,0MAER,+CAA+C/C,MAAO,KACrDgD,KAAMlE,EAAEyB,UAAY,KACtBiU,EACEI,WAAY,eACZ1S,OAAQa,EAAOvC,QAASjJ,EAAGyF,MAAMI,OAAQ,MAC3C0B,EAAEgC,SACAmE,IAAK0P,GACL5I,YAAa,CAAExU,EAAGuE,IAAIK,OAAQ2C,EAAExE,UAAWwE,EAAE3E,OAAQ2E,EAAE1E,QAAS7C,EAAGuE,IAAIU,QAASjF,EAAGuE,IAAIW,SAAUlF,EAAGuE,IAAIY,UAAWsG,KAAM,MACzH8J,WAAY,eACZA,WAAY,cACZxM,KAAM,gBAAiB,QACzBoU,EACE3T,KAAMjC,EAAExD,cACR4G,OAAU,8BAA8BlC,MAAO,KAAMgD,KAAMlE,EAAEyB,UAAY,KAAQC,QAASjJ,EAAGyF,MAAMI,OAAQ,MAC7G7F,EAAGgd,eAAgBxY,GACnByY,EAAGK,YAAatd,EAAGuE,IAAIC,MAAQ,IAAM+C,EAAE5E,WAAa,gBAAkB4E,EAAEjH,OAAyB,IAAlB4M,GAC/E+P,EAAGzI,YAAYjN,EAAEyB,UAAUK,MAAM,IAEjC7E,EAAMmD,gBAAiB,SAChBnD,EAAMyD,OAAOuG,MACK,mBAAb9C,GACXA,EAAUlH,GAENxE,EAAGiE,MAAMsD,EAAG,SAChBY,QAAQ+C,IAAK,mCAMhBnL,EAAEwI,GAAGtI,YAAc,SAAUsd,GAC5B,OAAO3R,KAAKsL,KAAM,WACjB,IAEA3P,EAAIxH,EAAEqN,QAAQ,EAAM,GAAIpN,EAAGK,SAAUkd,EAAUvd,EAAGqH,iBAElDE,EAAE8F,iBAAmBkQ,GAJT3R,KAMAjE,gBAAkB3H,EAAGwd,YAAgC,UAAlB5R,KAAK6B,SAEnDzN,EAAGwd,WARQ5R,KAQWrE,GAEtBvH,EAAGsH,MAVQsE,KAUMrE,MAMZkW,OAAOtV,SAAWsV,OAAOtV,QAAQ+C,MAExClL,EAAG0d,KAAO,GAEVvV,QAAU,GACVA,QAAQ+C,IAAM/C,QAAQmD,KAAOnD,QAAQoD,MAAQpD,QAAQ3D,MAAQ,WAC5D,IAAImZ,EAAyB,EAAnB1D,UAAUvS,OAAauS,UAAYA,UAAU,GACvDja,EAAG0d,KAAM1d,EAAG0d,KAAKhW,QAAW,CAAEkW,KAAMvV,KAAKwV,MAAO3S,IAAKyS,KAKvD3d,EAAG0R,UAAU,CACZ/H,GAAK,YACL4I,GAAK,WACJ,OAAO,GAERO,OAAS,WACR,MAAO,IAER9H,KAAO,SAGRhL,EAAG0R,UAAU,CACZ/H,GAAK,OACL4I,GAAK,WACJ,OAAO,GAERO,OAAS,SAAUsH,EAAK5V,GACvB,IAAI+C,EAAI/C,EAAMyD,OAKd,OAJKmS,IACJA,EAAMra,EAAE0S,KAAMlL,EAAEjG,WAAa8Y,EAAI0D,oBAAsB1D,GACvDA,EAAM7S,EAAE3F,kBAAoB5B,EAAGsc,eAAgBlC,GAAQA,GAEjDA,GAERpP,KAAO,SAGRhL,EAAGyF,MAAMsY,SAAW,gBACpB/d,EAAG0R,UAAU,CACZ/H,GAAK,QACL4I,GAAK,SAAU6H,GACd,OAAOpa,EAAGqa,QAASD,IAEpBtH,OAAS,SAAUsH,EAAK5V,GACvB,IAAIqT,EAAM7X,EAAGma,aAAeC,GAAO,IAAKnR,QAASjJ,EAAGyF,MAAMsY,SAAU,IAAMvZ,GAC1E,OAAO4V,GAAsB,iBAARvC,EAAmBA,EACvCuC,EAAMra,EAAE0S,KAAM2H,GAAO5V,EAAMyD,OAAO3G,WAAa8Y,EAAI0D,oBAAsB1D,GAAQA,GAEnFpP,KAAO,YAGRhL,EAAGyF,MAAMuY,gBAAkB,YAC3Bhe,EAAGyF,MAAMwY,aAAe,wFACxBje,EAAG0R,UAAU,CACZ/H,GAAK,WACL4I,GAAK,SAAU6H,GAGd,OAFAA,GAAQA,GAAO,IAAKnR,QAASjJ,EAAGyF,MAAMuY,gBAAiB,IAEhDhe,EAAGyF,MAAMwY,aAAanV,KAAMsR,IAEpCtH,OAAS,SAAUsH,EAAK5V,GACvB,IAAIqT,EAAM7X,EAAGma,aAAeC,GAAO,IAAKnR,QAASjJ,EAAGyF,MAAMsY,SAAU,IAAMvZ,GAC1E,OAAO4V,GAAsB,iBAARvC,EAAmBA,EACvCuC,EAAMra,EAAE0S,KAAM2H,GAAO5V,EAAMyD,OAAO3G,WAAa8Y,EAAI0D,oBAAsB1D,GAAQA,GAEnFpP,KAAO,YAKRhL,EAAGyF,MAAMyY,gBAAkB,0BAC3Ble,EAAGyF,MAAM0Y,mBAAqB,iCAC9Bne,EAAG0R,UAAU,CACZ/H,GAAK,MACL4I,GAAK,SAAU6H,GACd,OAAOpa,EAAGyF,MAAMyY,gBAAgBpV,KAAMsR,IAEvCtH,OAAS,SAAUsH,GAClB,OAAOA,EAAMra,EAAE0S,KAAM2H,EAAInR,QAASjJ,EAAGyF,MAAM0Y,mBAAoB,KAAS/D,GAEzEpP,KAAO,SAGRhL,EAAGyF,MAAM2Y,KAAO,KAChBpe,EAAGyF,MAAM4Y,QAAU,mCACnBre,EAAG0R,UAAU,CACZ/H,GAAK,UACL4I,GAAK,SAAU6H,GACd,OAAOpa,EAAGyF,MAAM4Y,QAAQvV,KAAMsR,IAE/BtH,OAAS,SAAUsH,GAClB,IAAIwD,EAAOxD,EAAM,IAAI/R,KAAM+R,EAAInR,QAASjJ,EAAGyF,MAAM2Y,KAAM,MAAUhE,EACjE,OAAOwD,aAAgBvV,MAAQiW,SAAUV,GAASA,EAAK5D,UAAYI,GAEpEpP,KAAO,YAGRhL,EAAGyF,MAAM4V,QAAU,KACnBrb,EAAGyF,MAAM8Y,YAAc,oBACvBve,EAAG0R,UAAU,CACZ/H,GAAK,UACL4I,GAAK,SAAU6H,GACd,OAAOpa,EAAGyF,MAAM8Y,YAAYzV,KAAMsR,IAASA,EAAI1S,OAAS,IAEzDoL,OAAS,SAAUsH,EAAK5V,GACvB,OAAO4V,EAAMpa,EAAGma,YAAaC,EAAInR,QAASjJ,EAAGyF,MAAM4V,QAAS,IAAM7W,GAAU4V,GAE7EpP,KAAO,YAIRhL,EAAG0R,UAAU,CACZ/H,GAAK,QACL4I,GAAK,SAAU6H,EAAK5V,EAAOwN,EAAMF,GAChC,OAAoC,EAA7BA,EAAMtI,KAAM,OAAQ9B,QAE5BoL,OAAS,SAAUsH,EAAK5V,EAAOyH,GAC9B,OAAOlM,EAAGkM,GAAOzC,KAAM,OAAQT,KAAMvE,EAAMyD,OAAO3D,SAAW,QAAW8V,GAEzEnG,QAAS,EACTjJ,KAAO,SAGRhL,EAAGyF,MAAM+Y,YAAc,gBACvBxe,EAAGyF,MAAMgZ,gBAAkB,iFAC3Bze,EAAGyF,MAAMiZ,gBAAkB,kCAC3B1e,EAAG0R,UAAU,CACZ/H,GAAK,aACL4I,GAAK,SAAU6H,GAGd,OAAOpa,EAAGyF,MAAMgZ,gBAAgB3V,KAAMsR,IAASpa,EAAGyF,MAAMiZ,gBAAgB5V,KAAMsR,IAE/EtH,OAAS,SAAUsH,GAClB,IAAIwD,EAAOxD,EAAM,IAAI/R,KAAM+R,EAAInR,QAASjJ,EAAGyF,MAAM+Y,YAAa,UAAcpE,EAC5E,OAAOwD,aAAgBvV,MAAQiW,SAAUV,GAASA,EAAK5D,UAAYI,GAEpEpP,KAAO,YAIRhL,EAAGyF,MAAMkZ,cAAgB,wEAEzB3e,EAAGyF,MAAMmZ,iBAAmB,UAE5B5e,EAAGyF,MAAMoZ,aAAe,wCACxB7e,EAAGyF,MAAMqZ,aAAe,wCACxB9e,EAAG+e,cAAgB,SAAUC,EAAYlM,GACxCkM,GAAeA,GAAc,IAC3B/V,QAASjJ,EAAGyF,MAAMI,OAAQ,KAC1BoD,QAASjJ,EAAGyF,MAAMmZ,iBAAkB,KACtB,aAAX9L,EACJkM,EAAaA,EAAW/V,QAASjJ,EAAGyF,MAAMoZ,aAAc,YAClC,aAAX/L,EACXkM,EAAaA,EAAW/V,QAASjJ,EAAGyF,MAAMoZ,aAAc,YAClC,aAAX/L,IACXkM,EAAaA,EAAW/V,QAASjJ,EAAGyF,MAAMqZ,aAAc,aAEzD,IAAIlB,EAAO,IAAIvV,KAAM2W,GACrB,OAAOpB,aAAgBvV,MAAQiW,SAAUV,GAASA,EAAK5D,UAAY,IAGpEha,EAAG0R,UAAU,CACZ/H,GAAK,YACL4I,GAAK,SAAU6H,GAEd,OADAA,GAAQA,GAAO,IAAKnR,QAASjJ,EAAGyF,MAAMI,OAAQ,KAAMoD,QAASjJ,EAAGyF,MAAMmZ,iBAAkB,KACjF5e,EAAGyF,MAAMkZ,cAAc7V,KAAMsR,IAErCtH,OAAS,SAAUsH,EAAK5V,EAAOyH,EAAM2F,GACpC,GAAKwI,EAAM,CACV,IAAI7S,EAAI/C,EAAMyD,OACbmN,EAAU7N,EAAEmH,eAAgBkD,GAC5BkB,EAASsC,EAAQ1N,QAAU0N,EAAQlN,KAAM,eACxClI,EAAG6P,QAASuF,EAASpV,EAAGyP,cAAejL,EAAO+C,EAAElG,QAASuQ,GAAa,eACtErK,EAAEzG,WAKJ,OAHKsU,EAAQ1N,QACZ0N,EAAQlN,KAAM,aAAc4K,GAEtB9S,EAAG+e,cAAe3E,EAAKtH,IAAYsH,EAE3C,OAAOA,GAERpP,KAAO,YAIRhL,EAAGyF,MAAMwZ,SAAW,yEACpBjf,EAAGyF,MAAMyZ,UAAY,qEACrBlf,EAAG0R,UAAU,CACZ/H,GAAK,OACL4I,GAAK,SAAU6H,GACd,OAAOpa,EAAGyF,MAAMwZ,SAASnW,KAAMsR,IAEhCtH,OAAS,SAAUsH,GAElB,IACC+E,GAAa/E,GAAO,IAAKjM,MAAOnO,EAAGyF,MAAMyZ,WACzCnC,EAAO,IAAI1U,KAAM+R,GAEjBtJ,EAAOsJ,IAAsB,OAAb+E,EAAoBA,EAAU,GAAM,YACpDvB,EAAO9M,EAAO,IAAIzI,KAAM,cAAgByI,EAAK7H,QAASjJ,EAAGyF,MAAM+Y,YAAa,UAAc1N,EAC3F,OAAK8M,aAAgBvV,MAAQiW,SAAUV,IAC/Bb,aAAgB1U,MAAQiW,SAAUvB,GAASA,EAAK/C,UAAY,GAGrDzB,WAAYqF,EAAK5D,UAAY,IAAM+C,EAAK/C,WAAc4D,EAAK5D,UAEnEI,GAERpP,KAAO,YAGRhL,EAAG0R,UAAU,CACZ/H,GAAK,WACL4I,GAAK,WACJ,OAAO,GAERO,OAAS,SAAUsH,EAAK5V,EAAOyH,GAC9B,IAAI1E,EAAI/C,EAAMyD,OACdmX,EAAO7X,EAAE8X,mBAAqC9X,EAAE8X,mBAAhB,YAChC,OAAOtf,EAAGkM,GAAOlE,WAAYqX,IAE9BpU,KAAO,YAURhL,EAAGiZ,UAAU,CACZtP,GAAK,QACLiQ,SAAW,GACX9G,OAAS,SAAUtO,EAAO+C,EAAG8R,GAC5B,IAAIiG,EAAcnT,EAAM2D,EAAOyP,EAAQtO,EAAYU,EAAUX,EAC5DyC,EAAQ,IAAI8F,OAAQhS,EAAErE,YAAa,KACnCwG,EAAWnC,EAAEmC,SAASgE,IAAK3N,EAAGwH,EAAEyB,UAAY,gBAAiBS,SAAU,cAAgBlC,EAAEpE,aAAe,MACzG,IAAM8N,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,IAKnD,IAHAnB,EAAQ,EAERkB,GADAsO,EAAe5V,EAAS2K,GAAIpD,GAAaxH,SAAU,cAAeyG,IAAK3I,EAAEvD,iBACtD0D,OACbiK,EAAW,EAAGA,EAAWX,EAAKW,IACnCxF,EAAOmT,EAAajL,GAAI1C,GAElB8B,EAAM3K,KAAMqD,EAAM,GAAIgG,YAAgBrC,IAC5CyP,EAAWzP,EAAQ,GAAM,EACzB3D,EACEqI,YAAa6E,EAAG5W,MAAO8c,EAAS,EAAI,IACpCjW,SAAU+P,EAAG5W,MAAO8c,EAAS,EAAI,KAItCvJ,OAAS,SAAUxR,EAAO+C,EAAG8R,EAAIrM,GAChC,IAAKA,EAAL,CACA,IAAIiE,EAAY8B,EACfrJ,EAAWnC,EAAEmC,SACb8V,GAAanG,EAAG5W,OAAS,CAAE,OAAQ,QAAUgJ,KAAM,KACpD,IAAMwF,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,KACnD8B,EAAS/S,EAAGyW,aAAcjS,EAAOkF,EAAS2K,GAAIpD,IAAc,IACrDxH,WAAW+K,YAAagL,GAC/Bxf,EAAGyW,aAAcjS,EAAOuO,GAAQ,OAt0FnC,CA20FGjT,GACGA,EAAOG,cAj2F+E,gC,oBCA7F,UAAmE,EAAO,CAAC,WAAkB,0BAAP,EAA6J,SAASH;;;;EAMu9mB,OAAltnB,SAAS2f,GAAG,aAAa,IAAIC,EAAED,EAAExf,YAAYwf,EAAErS,OAAO,CAACuS,iBAAiB,IAAI,WAAW/T,KAAKvL,SAAS,CAACuf,UAAU,KAAKC,QAAQ,KAAKC,cAAc,SAASjV,EAAEkV,GAAG,OAAOA,GAAGC,UAAU,KAAKC,WAAW,CAACC,SAAS,QAAQC,mBAAkB,EAAGC,eAAe,SAASvV,GAAG,OAAOA,GAAGwV,OAAO,6CAA6CC,cAAa,EAAGC,KAAK,EAAEC,UAAU,EAAEC,KAAK,GAAGC,cAAc,GAAGC,WAAU,EAAGC,WAAW,oBAAoBC,aAAY,EAAGC,gBAAe,EAAGnK,YAAW,EAAGoK,SAAS,SAASC,QAAQ,QAAQC,QAAQ,QAAQC,QAAQ,QAAQC,QAAQ,YAAYC,eAAe,eAAeC,YAAY,YAAYC,YAAY,uBAAuBC,YAAY,WAAWrX,UAAU,EAAEsX,WAAW,EAAEC,aAAa,EAAEC,cAAc,EAAEC,YAAY,EAAEC,eAAe,GAAGC,SAAS,EAAEC,OAAO,EAAEC,MAAM,KAAKnZ,KAAK,IAA6K,SAAFoZ,EAAWnX,EAAEkV,EAAErI,GAAG,IAAI7C,EAAEoN,EAAE,WAAWC,EAAE,cAAcC,EAAEpC,EAAEwB,YAAY3I,IAAIlB,EAAE+C,EAAE7B,GAAG,IAAImH,EAAEQ,KAAK6B,EAAEC,EAAExX,EAAEkV,GAAGxY,EAAEqR,GAAGmH,EAAEQ,OAAO6B,EAAE,GAAG,IAAIA,EAAErC,EAAEO,gBAAgBzL,EAAEkL,EAAEuC,WAAW9Y,KAAKuW,EAAEgB,SAAS,IAAIhB,EAAEiB,UAAUvG,EAAEwH,EAAEC,GAAGC,GAAGtN,EAAEqC,KAAK,WAAWtL,KAAK2W,aAAa9H,KAAK5F,EAAEkL,EAAEuC,WAAW9Y,KAAKuW,EAAEkB,QAAQ,IAAIlB,EAAEmB,UAAU3Z,EAAE0a,EAAEC,GAAGC,GAAGtN,EAAEqC,KAAK,WAAWtL,KAAK2W,aAAahb,KAAQ,SAAFib,EAAW3X,EAAEkV,GAAG,IAAIrI,EAAE7C,EAAEoN,EAAEC,EAAErX,EAAE5C,OAAOka,EAAED,EAAEra,OAAOwG,SAAS,cAAc,GAAG8T,IAAIpC,EAAEnJ,KAAK,GAAG8I,EAAEnR,cAAc2T,EAAE1T,OAAOuR,EAAE0B,aAAa1B,EAAE7V,UAAUgY,EAAExY,SAAS2K,GAAG,GAAG5K,SAAS,MAAMyG,IAAI6P,EAAEe,eAAe,GAAG,IAAIoB,EAAEhf,aAAawE,YAAY,IAAIqY,EAAE0B,aAAa,EAAEQ,GAAGvK,EAAEwK,EAAE1T,MAAM,GAAGgF,YAAY9L,OAAOmN,EAAE,EAAEA,EAAEoN,EAAEpN,IAAIkL,EAAE0B,cAAc1B,EAAE0C,UAAU3Z,KAAK4O,EAAE7C,GAAGqN,EAAEjT,SAAS9C,KAAK,GAAGgG,WAAW,EAAE,OAAOgQ,IAAIpC,EAAE0B,aAAa1B,EAAE7V,WAAc,SAAF6N,EAAWlN,EAAE+N,EAAEmH,GAAG,IAAInH,EAAE8J,aAAa,CAAC,IAAIhL,EAAE7C,EAAEoN,EAAEC,EAAEC,EAAE1H,EAAE2H,EAAE7a,EAAEob,EAAE9X,EAAE5C,OAAOmX,EAAEuD,EAAE3Z,UAAU,QAAQ4Z,EAAEC,EAAEjK,EAAEA,EAAE6H,KAAK,OAAO,GAAG,QAAQmC,IAAIA,EAAEhK,EAAE1O,WAAW0O,EAAEkI,iBAAiBjM,EAAEA,EAAEnN,QAAQib,EAAEzf,aAAa0V,EAAE4I,WAAWtY,KAAK4Z,KAAKlK,EAAE1O,UAAU0Y,GAAGD,EAAEzY,UAAU0O,EAAE1O,UAAU6Y,EAAElY,EAAE+N,GAAG4J,EAAE3X,EAAE+N,GAAG+J,EAAElB,aAAa7I,EAAE6I,aAAa7I,EAAE8I,cAAcxY,KAAK4Z,KAAKlK,EAAE6I,aAAamB,IAAI,EAAE,GAAGP,EAAExX,EAAE+N,GAAG,CAAC,GAAG/D,EAAE+N,EAAEhK,EAAE2H,KAAK3H,EAAE6I,cAAc1B,EAAEnH,EAAE2H,KAAK1L,EAAE+D,EAAE4H,WAAW,EAAE5H,EAAE2H,KAAK3H,EAAEiJ,UAAShN,GAAa,IAAI+D,EAAE6I,aAAa,EAA9BmB,EAAEhK,EAAE2H,KAAK,EAAkC3H,EAAEkJ,OAAO5Y,KAAKvC,IAAIiS,EAAE6I,aAAa7I,EAAE1O,UAAU0Y,GAAGhK,EAAE2H,KAAK,IAAI0B,EAAErJ,EAAE0J,WAAW9Y,KAAKoP,EAAEwI,gBAA4C1J,EAA5B,mBAAmBkB,EAAEyH,OAASzH,EAAEyH,OAAOxV,EAAE+N,IAAIrR,EAAE0a,EAAElZ,KAAK,qBAAqB6P,EAAE6I,aAAa7I,EAAE1O,UAAU,YAAY,MAAM0O,EAAEyH,QAAUzH,EAAEoK,UAAUpK,EAAEoK,SAAS3C,QAAQzH,EAAEoK,SAAS3C,QAAQ9Y,GAAG0B,QAAQ,wBAAwB,SAAS4B,EAAEkV,GAAG,OAAOnH,EAAE4I,WAAW5I,EAAE2H,MAAMR,EAAErX,SAASqX,EAAE,IAAI,GAAG,IAAI9W,QAAQ,yBAAyB,SAAS4B,GAAG,IAAIkV,EAAErI,EAAE7C,EAAEhK,EAAE5B,QAAQ,UAAU,IAAIgZ,EAAEpN,EAAEpM,MAAM,KAAKyZ,EAAEtJ,EAAEoK,SAASb,EAAE,mBAAmBrZ,KAAK+L,GAAG,EAAE,GAAG,MAAM,kBAAkB/L,KAAKmZ,EAAE,KAAK,UAAUA,EAAE,IAAIlC,GAAG,IAAI,SAASkC,EAAE,GAAGrJ,EAAE4I,WAAW5I,EAAE1O,YAAYxC,OAAOgQ,EAAE,SAASuK,EAAE,GAAGrJ,EAAE2H,KAAK,EAAE3H,EAAEiJ,SAAS,gCAAgCI,EAAE,GAAG,sBAAsBlC,EAAE,cAAcrI,EAAE,OAAO,EAAEuK,EAAEva,QAAQwa,GAAGA,EAAED,EAAE,IAAIC,EAAED,EAAE,IAAIA,EAAE,IAAIrJ,EAAE/D,KAAKqN,EAAEA,EAAErN,GAAGsN,IAAIA,MAAMD,EAAEtJ,EAAE0J,WAAW9Y,KAAKoP,EAAEuI,UAAUzZ,OAAO,CAAC,IAAImN,EAAE,GAAG4F,GAAG2H,EAAEzK,EAAE9M,EAAE+N,IAAIlR,OAAOya,EAAE,EAAEA,EAAE1H,EAAE0H,IAAItN,GAAG,kBAAkBuN,EAAED,GAAG,KAAKC,EAAED,GAAG,YAAYD,EAAExS,KAAKmF,GAAGhC,IAAI+F,EAAE2H,KAAK,GAAG0B,EAAEva,SAASua,EAAE,UAAUA,EAAE,GAAGxU,SAAS,MAAM,QAAQiK,GAAGuK,EAAEzY,KAAK,0BAA0BmB,OAAO,SAASyU,GAAGxU,KAAK,SAASwU,EAAE,WAAW,IAAIvU,EAAE4U,EAAE7T,MAAMiH,MAAMkN,EAAEN,EAAE7T,MAAMyC,SAAS,eAAenF,KAAK+Z,MAAMpY,EAAE+X,GAAG,EAAE/X,EAAE8X,EAAE9a,OAAOwD,eAAe,UAAU+T,EAAE,CAACW,OAAOiC,EAAEnX,EAAE+N,GAAGsK,EAAErY,EAAE+N,GAAGA,EAAElW,cAAa,IAAKqd,IAAIL,EAAEzb,MAAM0e,EAAE,UAAUxa,QAAQ+C,IAAI,qCAAqCyX,EAAE9a,OAAOwD,eAAe,gBAAgBuN,GAAGA,EAAE+H,WAAWjB,EAAEyD,SAASzD,EAAEyD,QAAQtY,EAAE+N,EAAEgI,WAAW,CAACL,KAAK3H,EAAE2H,KAAKE,KAAKmC,IAAIhK,EAAE1O,UAAU,MAAM0Y,MAA0mC,SAAFQ,EAAWvY,EAAEkV,GAAG,IAAIrI,EAAE7C,EAAEhK,EAAE5C,OAAOga,EAAEpN,EAAEnL,SAAS2K,GAAG,GAAG4N,EAAEzY,KAAK,6BAA6BwM,SAASiM,EAAExY,SAAS,cAAc/B,QAAQua,EAAE5L,OAAO,qCAAqCxB,EAAE7Q,eAAeqF,MAAM,GAAG,yBAAyBqO,EAAEuK,EAAExY,SAAS,MAAM4K,GAAG,GAAGgP,UAAU,QAAQtD,EAAEU,KAAKV,EAAE7V,UAAU6V,EAAEU,MAAMhB,EAAEvX,KAAK2C,EAAE,mBAAmB6M,GAAGwL,EAAErY,EAAEkV,GAAGN,EAAEvX,KAAK2C,EAAE,gBAAgBkV,EAAEU,MAAS,SAAF3I,EAAWjN,EAAEkV,GAAG,IAAIA,EAAEF,QAAQ,CAAC,IAAInI,EAAE7C,EAAE,EAAEoN,EAAEpX,EAAE5C,OAAOia,EAAED,EAAEvY,SAAS2K,GAAG,GAAG5K,SAAS,MAAM0Y,EAAED,EAAExa,OAAOkR,EAAE,QAAQmH,EAAEU,KAAKV,EAAE7V,UAAU6V,EAAEU,KAAKhG,EAAEsF,EAAEQ,KAAK3H,EAAEwJ,EAAE3H,EAAE7B,EAAErR,EAAE,EAAEob,EAAE,EAAE,IAAI5C,EAAEzM,WAAW,GAAGoE,EAAE,EAAEA,EAAEyK,EAAEzK,IAAIqI,EAAEuD,cAAcxa,KAAKoZ,EAAExK,GAAGvF,aAAawQ,IAAIlI,GAAGyH,EAAExK,GAAGvF,UAAUhE,MAAM8T,EAAE/e,aAAagf,EAAExK,GAAG6L,MAAMC,QAAQ,QAAQtB,EAAExK,GAAG6L,MAAMC,QAAQ/I,GAAGkI,GAAGA,EAAEP,EAAE,GAAG,OAAO7a,IAAIob,GAAGlI,GAAGkI,GAAGA,EAAEP,IAAIrC,EAAEzM,WAAWyM,EAAEzM,WAAW5L,QAAQgQ,EAAEnQ,EAAEob,IAAIA,GAAGT,EAAExK,GAAGvF,UAAUhE,MAAM8T,EAAE/e,YAAY,IAAI+e,EAAEje,eAAeqF,MAAM,MAAM0W,EAAEe,eAAe,EAAE,KAAKsB,GAAG,SAASF,EAAExK,GAAG6L,MAAMC,SAAStB,EAAExK,GAAGvF,UAAUhE,MAAMuR,EAAEnb,IAAIE,eAAeoQ,EAAE6C,KAAK,GAAG,EAAE7C,GAAGqN,EAAErN,GAAG1C,UAAUhE,MAAMuR,EAAEnb,IAAIE,aAAa,OAAOoQ,EAAEsN,GAAGD,EAAErN,GAAG1C,UAAUhE,MAAM8T,EAAE/e,cAAcgf,EAAErN,GAAG0O,MAAMC,QAAQ,IAAO,SAAFjJ,EAAW1P,EAAEkV,GAAGA,EAAEU,KAAKoC,EAAE9C,EAAEA,EAAEuC,WAAW9Y,KAAKuW,EAAEsB,aAAaxO,MAAM,OAAO4Q,EAAE5Y,EAAEkV,EAAEU,KAAKV,GAAGiC,EAAEnX,EAAEkV,GAAGA,EAAEpJ,aAAamB,EAAEjN,EAAEkV,GAAGN,EAAE5U,GAAGD,KAAK,qBAAqBnC,MAAM,KAAKgD,KAAKZ,EAAE5C,OAAOe,UAAU,UAAU,WAAW8O,EAAEjN,EAAEkV,MAAS,SAAF2D,EAAW7Y,EAAEkV,EAAErI,EAAE7C,EAAEoN,EAAEC,GAAG,GAAG,mBAAmBxK,EAAE0I,eAAe,CAACL,EAAE9X,OAAOyB,SAAS2K,GAAG,GAAG7C,QAAQ,IAAI2Q,EAAEvJ,EAAE6B,EAAE2H,EAAE7a,EAAEob,EAAEvD,EAAEwD,EAAEe,EAAE3B,EAAEQ,EAAE7K,EAAEuL,EAAEE,EAAEtL,EAAEyC,EAAEwF,EAAE9X,OAAOyb,EAAEnJ,EAAE1S,OAAO+b,EAAE,GAAGC,EAAEnM,EAAE0I,eAAevV,EAAEkV,EAAElL,IAAI,CAAC,EAAE,IAAI,GAAG6K,EAAEoE,UAAU/D,GAAGmC,EAAExC,EAAEzb,MAAMsW,EAAE,UAAUpS,QAAQoD,MAAM,sBAAsBsJ,EAAEoN,EAAEC,GAAGxC,EAAEoE,UAAU/D,EAAElL,EAAEoN,EAAEC,GAAG3H,EAAE7Q,SAAS2K,GAAG,GAAG5K,SAAS,MAAMwS,SAASvE,EAAExN,UAAU,MAAM,CAAC,GAAGuV,EAAErI,QAAQyM,IAAIX,EAAEW,GAAGpJ,EAAEnC,MAAMuL,EAAE,MAAMvL,MAAMuL,EAAE,KAAK,EAAE,GAAGnM,EAAExN,UAAUoO,MAAM4K,GAAGxL,EAAExN,WAAW,EAAEgZ,EAAE3I,EAAErQ,UAAUqQ,EAAEkH,aAAa/J,EAAE+J,aAAa/J,EAAExN,UAAUsY,EAAE,IAAI9K,EAAExN,WAAa2Z,EAAEpJ,EAAE,EAAE,IAAT,GAAgBuH,EAAE6B,EAAE,KAAKnM,EAAEsL,SAASa,EAAEtJ,EAAErQ,UAAUwN,EAAExN,UAAU2Z,EAAEE,MAAMxJ,EAAEkH,aAAa/J,EAAE+J,kBAAa,IAASoC,EAAEpC,aAAaoC,EAAEpC,aAAaoC,EAAEE,MAAM/B,EAAE6B,EAAExiB,QAAQmhB,EAAEqB,EAAErT,MAAM,IAAImH,EAAE6K,GAAGA,EAAE9a,OAAO8a,aAAa/C,EAAE/H,EAAEyI,oBAAoB5F,EAAE7Q,SAAS2K,GAAG,GAAG7C,QAAQ+I,EAAE7Q,SAAS2K,GAAG,GAAGgC,OAAOmM,SAAS,GAAG7K,EAAE,CAAC,IAAIwK,EAAE,EAAEA,EAAExK,EAAEwK,IAAI,CAAC,IAAIyB,GAAG,OAAOhL,EAAE,EAAEA,EAAE4J,EAAEL,GAAGza,OAAOkR,IAAIgL,GAAG,UAAU9a,KAAK0Z,EAAEL,GAAGvJ,IAAI6G,EAAEhN,KAAK+P,EAAEL,GAAGvJ,IAAI,OAAO4J,EAAEL,GAAGvJ,GAAG,QAAQgL,GAAG,QAAQlM,EAAEyI,mBAAmB5F,EAAE7Q,SAAS2K,GAAG,GAAG3E,KAAKkU,GAAG,GAAGlM,EAAEyI,mBAAkB,EAAG6B,EAAE,IAAIW,GAAGP,EAAEsB,EAAErV,SAAS,qBAAqBkM,EAAE/X,cAAcwhB,QAAQva,SAAS,eAAeA,SAAS,WAAW8Q,EAAElX,aAAa,KAAKoG,WAAW,GAAGlC,EAAEmc,EAAEla,KAAK,kBAAkBC,WAAW2Z,GAAGhE,EAAE7E,EAAEhR,SAASoE,OAAO,QAAQjG,OAAOkR,EAAE,EAAEA,EAAEwK,EAAExK,KAAKgK,EAAExD,EAAE/K,GAAGuE,IAAIpP,KAAK,IAAIkW,EAAEnb,IAAIQ,MAAM2C,QAAQic,EAAEf,EAAEpZ,KAAK,IAAIkW,EAAEnb,IAAIQ,MAAMkf,OAAM,GAAIrB,EAAEpZ,KAAK,IAAIkW,EAAEnb,IAAIO,UAAU4K,KAAKsS,EAAEpJ,IAAIvC,OAAOsN,GAAGvB,GAAGO,EAAEjb,SAASic,EAAEhB,EAAEtO,GAAGuE,GAAGpP,KAAK,IAAIkW,EAAEnb,IAAIQ,MAAMkf,OAAM,GAAItB,EAAEtO,GAAGuE,GAAGpP,KAAK,IAAIkW,EAAEnb,IAAIO,UAAU4K,KAAKsS,EAAEpJ,IAAIvC,OAAOsN,MAAMf,EAAEpZ,KAAK,IAAIkW,EAAEnb,IAAIO,UAAU4K,KAAKsS,EAAEpJ,IAAIwJ,GAAGO,EAAEjb,SAASgQ,EAAE4K,WAAW5K,EAAE4K,WAAW5U,IAAI6M,EAAE/X,cAAcwhB,SAASrB,EAAEtO,GAAGuE,GAAGpP,KAAK,IAAIkW,EAAEnb,IAAIO,UAAU4K,KAAKsS,EAAEpJ,MAAMrR,EAAE8M,GAAGuE,GAAGlJ,KAAKsS,EAAEpJ,IAAI2B,EAAE/Z,gBAAgBkf,EAAE1X,aAAa+X,GAAGjI,EAAE+K,EAAEnL,EAAEA,EAAE+I,KAAK,OAAO/I,EAAE8J,WAAW,QAAQ1J,EAAE,EAAE5O,KAAK4Z,KAAKpL,EAAExN,UAAU4N,GAAGJ,EAAE9O,KAAKsB,UAAUwN,EAAExN,UAAUwN,EAAE9O,KAAKgZ,eAAelK,EAAEkK,eAAelK,EAAE9O,KAAKpH,UAAU+Y,EAAE/Y,UAAU,IAAIiK,KAAK,KAAKsM,EAAEgI,EAAErI,GAAE,GAAIgI,EAAEhT,YAAY6N,EAAE,WAAW7C,EAAEhV,aAAauI,WAAW,WAAWyU,EAAEzb,MAAMsW,EAAE,UAAUpS,QAAQ+C,IAAI,mCAAmCwY,EAAErY,eAAe,cAAcqM,GAAGgI,EAAElV,YAAYuV,GAAGhI,EAAEgI,EAAErI,GAAE,IAAK,KAAKA,EAAEhV,aAAawhB,EAAEnE,EAAErI,GAAszB,SAAFmM,EAAWhZ,EAAEkV,EAAErI,GAAG,IAAI7C,EAAEoN,EAAEC,EAAEC,EAAEvJ,EAAE6G,EAAE5U,GAAG4P,EAAE5P,EAAE5C,OAAOma,EAAE1C,EAAEzb,MAAMwW,EAAE,SAASlT,EAAEkT,EAAE5S,OAAOwG,SAAS,cAAcsU,EAAE5C,GAAGA,EAAErY,QAAQ,EAAE0X,EAAE,QAAQ1H,EAAE+I,KAAK/I,EAAExN,UAAUwN,EAAE+I,KAAKmC,EAAElL,EAAE6I,KAAKnB,EAAE,GAAGuD,EAAE,EAAEP,GAAGja,QAAQmD,KAAK,4CAA4C,CAAC,GAAGoM,EAAE6I,MAAM7I,EAAE8J,YAAY2C,EAAEtZ,EAAE6M,GAAGA,EAAEpE,WAAW,GAAGoE,EAAElC,YAAW,EAAGkC,EAAEhV,cAAc0f,GAAGja,QAAQ+C,IAAI,mCAAmC0N,EAAEvN,eAAe,cAAcqM,IAAIA,EAAEf,WAAW,CAAC,IAAI+I,EAAEtD,eAAevR,GAAGgK,EAAE6K,EAAEjJ,aAAa5L,EAAE4P,EAAE/Q,SAAS2K,GAAG,IAAG,GAAI6N,EAAED,EAAE1a,EAAE,EAAEqb,EAAET,EAAE,EAAEA,EAAE/C,GAAG6C,EAAElC,EAAErY,QAAQH,GAAGmQ,EAAE4L,cAAcxa,KAAKiX,EAAEkC,GAAG,GAAG9P,YAAYyQ,IAAIV,GAAGC,GAAG/C,IAAI+C,IAAIzK,EAAEpE,WAAWoE,EAAEpE,WAAW5L,QAAQua,EAAEpN,EAAEwB,OAAO0J,EAAEkC,KAAKA,IAAIvC,EAAEjJ,aAAa5L,EAAEgK,GAAE,QAASiD,EAAEjN,EAAE6M,GAAGK,EAAElN,EAAE6M,GAAG7M,EAAEwB,aAAa+V,GAAGja,QAAQ+C,IAAI,sCAAsC0N,EAAEvN,eAAe,iBAAiB,CAACR,GAAE,MAAU,SAAFuZ,EAAWvZ,EAAEkV,GAAG,IAAIrI,EAAE7C,EAAEoN,EAAE,IAAIlC,EAAEnJ,KAAKoL,EAAEnX,EAAEkV,GAAE,IAAKN,EAAEvX,KAAK2C,EAAE,gBAAgBkV,EAAEQ,MAAMd,EAAEvX,KAAK2C,EAAE,gBAAgBkV,EAAEU,MAAMV,EAAEQ,KAAK,EAAER,EAAEU,KAAKV,EAAE7V,UAAU6V,EAAEyB,WAAW,EAAE/B,EAAE5U,GAAGvB,SAAS,iBAAiBiM,WAAW,oBAAoB/L,KAAK,6BAA6BwM,SAAS6N,EAAEhZ,EAAEA,EAAE5C,OAAOoc,SAAStE,GAAGA,EAAEvK,YAAW,EAAGkK,EAAElV,YAAYK,GAAG6U,EAAEzb,MAAM4G,EAAE5C,OAAO,UAAUE,QAAQ+C,IAAI,sBAAsB+W,GAAGpN,EAAEkL,EAAEuC,WAAW9Y,KAAKuW,EAAEoB,QAAQ,IAAIpB,EAAEsB,YAAY,6BAA6B3Z,OAAOgQ,EAAE,EAAEA,EAAEuK,EAAEvK,IAAI7C,EAAER,GAAGqD,GAAGpO,SAASyW,EAAEwB,aAAa,GAAG+C,UAAS,EAAGzP,EAAE6C,GAAG6K,cAAa,EAAM,SAAFgC,EAAW1P,GAAG,IAAIoN,EAAEpN,EAAE5M,OAAOia,EAAED,EAAEvL,MAAMgJ,EAAEhT,YAAYuV,EAAE,WAAW,IAAIpX,EAAEkV,EAAE,GAAGrI,EAAE7C,EAAE5M,OAAOuG,MAAM,GAAGgF,WAAW,IAAI0O,EAAEhY,UAAUwN,EAAEhQ,OAAOmD,EAAE,EAAEA,EAAEqX,EAAEhY,UAAUW,IAAIkV,EAAEA,EAAErY,QAAQgQ,EAAE7M,GAAGoX,EAAEhT,SAAS9C,KAAK8V,EAAEoC,SAAStE,EAAEhgB,EAAE8U,EAAEqN,GAAE,KAAmrF,SAAFsC,EAAW3Z,EAAEkV,GAAGA,EAAEQ,KAAK,EAAExgB,EAAE8K,EAAEkV,GAA8C,SAAF0E,EAAW5Z,EAAEkV,GAAGA,EAAEQ,OAAO,IAAI7I,EAAE2K,EAAExX,EAAEkV,GAAG,EAAEA,EAAEQ,MAAM7I,IAAIqI,EAAEQ,KAAK7I,GAAG3X,EAAE8K,EAAEkV,GAAM,SAAF2E,EAAW7Z,EAAEkV,GAAGA,EAAEQ,OAAOR,EAAEQ,MAAM,IAAIR,EAAEQ,KAAK,GAAGxgB,EAAE8K,EAAEkV,GAA2M,SAAF4E,EAAW9Z,EAAEkV,EAAErI,GAAG,IAAI7C,EAAEoN,EAAEC,EAAEC,EAAEtX,EAAE5C,OAAO8X,EAAEuC,WAAW9Y,KAAKuW,EAAEoB,QAAQ,IAAIpB,EAAEsB,YAAY,2BAA2B7M,YAAYuL,EAAEwB,aAAahM,WAAW,YAAY2B,KAAK,WAAWtL,KAAK2W,cAAa,IAAKxC,EAAEvK,YAAW,EAAGuK,EAAEQ,KAAKd,EAAEvX,KAAK2C,EAAE,kBAAkBkV,EAAEQ,MAAM,EAAE0B,GAAGC,EAAEnC,EAAEuC,WAAW9Y,KAAKuW,EAAEsB,cAAc7X,KAAK,oBAAoBqJ,MAAMkN,EAAEU,KAAKhB,EAAEvX,KAAK2C,EAAE,kBAAkBgY,EAAE9C,EAAEkC,EAAE,OAAOlC,EAAEyB,WAAW,QAAQzB,EAAEU,KAAK,EAAEvX,KAAK4Z,KAAKT,EAAExX,EAAEkV,GAAGA,EAAEU,MAAMgD,EAAE5Y,EAAEkV,EAAEU,KAAKV,GAAGlV,EAAElB,KAAKwY,EAAEta,OAAOkB,KAAK,uBAAuB8L,GAAGqN,EAAEnC,EAAEuC,WAAW9Y,KAAKuW,EAAEqB,iBAAiBrY,KAAK,SAAS8L,EAAEhK,EAAElB,GAAG,cAAcuY,EAAEnZ,KAAK,KAAK8L,IAAIsN,EAAEta,OAAOkB,KAAK,mBAAmB8L,IAAIuO,EAAEvY,EAAEkV,GAAGrI,IAAIgI,EAAE3T,OAAOoW,GAAGsB,EAAE5Y,EAAEkV,EAAEU,KAAKV,GAAGhgB,EAAE8K,EAAEkV,GAAGxF,EAAE1P,EAAEkV,GAAGL,EAAEzb,MAAMke,EAAE,UAAUha,QAAQ+C,IAAI,qBAA1ta,IAAgKyY,EAAE/X,KAAsnF+L,EAAE,SAAS9M,EAAEkV,GAAG,IAAIrI,EAAE7C,EAAEoN,EAAEC,EAAEC,EAAEvJ,EAAE6B,EAAE4H,EAAExX,EAAEkV,IAAI,EAAEqC,EAAE,EAAElZ,KAAK4Z,KAAKrI,EAAEsF,EAAEW,cAAc,GAAGnZ,EAAEkT,EAAEsF,EAAEW,cAAciC,EAAE5C,EAAEQ,KAAK,EAAEnB,EAAEgD,EAAEQ,EAAEnI,EAAE2H,EAAEuB,EAAE,CAAC,GAAG,IAAIjM,EAAEnQ,EAAE6a,EAAE,EAAE1K,GAAG+C,GAAGkJ,EAAEA,EAAEjc,QAAQgQ,EAAEA,GAAGnQ,EAAE6a,EAAE,EAAE,GAAGuB,EAAEA,EAAEjc,QAAQ+S,EAAElT,EAAE,CAAC,IAAI0a,EAAE,IAAI7C,EAAEuD,GAAG9N,EAAE3L,KAAKxC,IAAIwC,KAAK+Z,MAAMlD,EAAEW,cAAc0B,GAAG,EAAE,KAAK,IAAIhD,EAAE,GAAG3E,GAAGmI,EAAED,EAAE9N,KAAK+N,EAAEnI,GAAG/C,EAAE0H,EAAE1H,GAAGkL,EAAElL,IAAIuK,EAAEA,EAAEva,QAAQgQ,EAAE0K,EAAE,GAAGD,GAAGwB,EAAElE,EAAE9F,KAAKgK,EAAE,SAAS9Y,EAAEkV,GAAG,OAAON,EAAE5J,QAAQhL,EAAE8Y,KAAK5D,KAAKrY,SAASkR,EAAEqJ,EAAEva,SAASya,EAAEvJ,EAAEmH,EAAEW,gBAAgBwB,EAAEhZ,KAAK+Z,MAAMd,EAAE,GAAGjZ,KAAK+Z,MAAMrK,EAAE,GAAGkC,MAAM8J,UAAUzN,OAAOxH,MAAMgU,EAAE,CAACzB,EAAEtJ,KAAK+K,EAAEA,EAAEkB,OAAO5C,GAAG,OAAO0B,EAAElE,EAAE9F,KAAKgK,EAAE,SAAS9Y,EAAEkV,GAAG,OAAON,EAAE5J,QAAQhL,EAAE8Y,KAAK5D,IAAItI,KAAK,SAAS5M,EAAEkV,GAAG,OAAOlV,EAAEkV,KAAKmD,EAAE,SAASrY,EAAEkV,GAAG,IAAIrI,EAAE7C,EAAEoN,EAAEC,EAAErX,EAAE5C,OAAOka,EAAED,EAAExY,SAAS2K,GAAG,GAAG8N,EAAE3Y,KAAK,6BAA6BwM,SAAS+J,EAAEc,cAAcd,EAAEvK,aAAaX,EAAE4K,EAAEvX,KAAK2C,EAAE,uBAAuBoX,EAAE,EAAE,EAAExC,EAAE5U,GAAGtG,IAAI,kBAAkBkE,MAAM,KAAKf,SAASua,EAAExC,EAAE5U,GAAGtG,IAAI,kBAAkBkE,MAAM,KAAK,GAAGQ,QAAQ,YAAY,KAAK,GAAGyO,EAAE7C,EAAEsN,EAAEkB,SAASpB,EAAElC,EAAEU,KAAKwB,IAAIxC,EAAEvX,KAAK2C,EAAE,mBAAmBkV,EAAEU,MAAM0B,EAAE1Y,SAAS,cAAc/B,QAAQ,QAAQqY,EAAEU,KAAKV,EAAE7V,UAAU6V,EAAEU,OAAO0B,EAAE9L,OAAO,qCAAqC6L,EAAEle,eAAeqF,MAAM,GAAG,mBAAmBqO,EAAE,gBAA4nL3X,EAAE,SAAS8K,EAAEkV,EAAErI,GAAG,IAAIqI,EAAEvK,WAAW,CAAC,IAAIX,EAAEoN,EAAEC,EAAEC,EAAEvJ,EAAE6B,EAAE2H,EAAE7a,EAAEob,EAAE9X,EAAE5C,OAAOmX,EAAEM,EAAEzb,MAAM0e,EAAE,SAASC,EAAEnD,EAAE5U,GAAG8Y,EAAE5D,EAAEnX,KAAK,IAAG,IAAK8O,GAAGqI,EAAErd,aAAagd,EAAEnR,cAAcoU,EAAEnU,OAAO,OAAO+V,EAAE1Z,GAAOkV,EAAEnJ,MAAO8I,EAAEtG,UAAUvO,EAAE,YAAW8X,EAAEngB,cAAcsiB,qBAAsB/B,EAAElY,EAAEkV,GAAGyC,EAAE3X,EAAEkV,GAAG4D,EAAE/B,eAAe,MAAM+B,EAAE/B,gBAAgB,IAAInW,KAAK,IAAI,GAAGkY,EAAE/B,eAAe7B,EAAE6B,eAAe,MAAM7B,EAAE6B,gBAAgB,IAAInW,KAAK,IAAI,GAAGsU,EAAE6B,eAAe+B,EAAEpD,OAAOR,EAAEQ,MAAMoD,EAAElD,OAAOV,EAAEU,MAAMkD,EAAEzZ,YAAY6V,EAAE7V,YAAYyZ,EAAE/B,gBAAgB,IAAInW,KAAK,QAAQsU,EAAE6B,gBAAgB,IAAInW,KAAK,OAAOkY,EAAE9D,SAAS,OAAOE,EAAEE,WAAW8E,KAAK,MAAMpB,EAAEqB,YAAY,OAAOjF,EAAEF,SAAS,KAAK8D,EAAEniB,YAAYmhB,EAAEnhB,UAAU,IAAIiK,KAAK,OAAK2T,GAAGjX,QAAQ+C,IAAI,6BAA6B6U,EAAEQ,MAAMR,EAAEnX,KAAK,CAAC2X,KAAKR,EAAEQ,KAAKE,KAAKV,EAAEU,KAAKjf,UAAUmhB,EAAEnhB,UAAU,IAAIiK,KAAK,KAAKvB,UAAU6V,EAAE7V,UAAU0X,eAAe7B,EAAE6B,gBAAgB,GAAG/B,QAAQE,EAAEE,WAAW8E,KAAK,GAAGC,WAAWjF,EAAEF,SAAS,IAAIE,EAAEnJ,KAAKmJ,EAAEI,mBAAmBT,EAAEnR,cAAcwR,EAAEkF,cAAcrM,EAA3uG,SAAS/N,EAAE6M,GAAG,IAAIqI,EAAElL,EAAEoN,EAAEpX,EAAE5C,OAAOia,EAAExK,EAAEmI,QAAQnI,EAAEmI,QAAQ5W,QAAQ,sBAAsB,SAAS4B,EAAEkV,GAAG,OAAOrI,EAAE6I,MAAMR,EAAErX,SAASqX,EAAE,IAAI,KAAK9W,QAAQ,YAAYyO,EAAE+I,MAAM,GAAG0B,EAAEF,EAAEzgB,SAASoX,EAAElB,EAAEkK,gBAAgBnC,EAAE5U,GAAG3C,KAAK,eAAe,GAAGuS,EAAEyH,EAAE/T,MAAM,uCAAuCiU,EAAEF,EAAE/T,MAAM,yCAAyC5G,EAAE,GAAG,GAAGkT,EAAE,CAAC,IAAIA,EAAEA,EAAE,GAAG5F,EAAEsN,EAAEza,OAAOqY,EAAE,EAAEA,EAAElL,EAAEkL,IAAIxY,EAAEA,EAAEG,QAAQ+S,EAAE,IAAI0H,EAAEpC,GAAG,GAAG,KAAKoC,EAAEpC,GAAG,GAAGmC,EAAEA,EAAEjZ,QAAQ,uCAAuC1B,EAAEG,OAAOH,EAAEkE,KAAK,KAAKgP,GAAGlT,EAAE,GAAG,GAAG6a,EAAE,CAAC,IAAIA,EAAEA,EAAE,GAAGvN,EAAE+D,EAAElR,OAAOqY,EAAE,EAAEA,EAAElL,EAAEkL,IAAInH,EAAEmH,KAAKxY,EAAEA,EAAEG,QAAQ0a,EAAE,IAAIrC,EAAE,KAAKmF,mBAAmBtM,EAAEmH,KAAKmC,EAAEA,EAAEjZ,QAAQ,yCAAyC1B,EAAEG,OAAOH,EAAEkE,KAAK,KAAK2W,GAAG1K,EAAEkK,eAAehJ,EAAE,MAAM,mBAAmBlB,EAAEoI,gBAAgBoC,EAAExK,EAAEoI,cAAcjV,EAAEqX,IAAIxC,EAAEzb,MAAMge,EAAE,UAAU9Z,QAAQ+C,IAAI,uBAAuBgX,GAAGA,EAAk8E0B,CAAE3B,EAAEpX,EAAEqX,EAAEnC,GAAGtF,EAAEgF,EAAE0F,UAAU/C,EAAEH,EAAEha,OAAOV,EAAE6a,EAAEpZ,UAAU,QAAQ,KAAK4P,IAAIwJ,EAAE5hB,gBAAgBkf,EAAE1X,aAAaia,GAAE,GAAIxH,EAAE7P,KAAK,YAAYrD,EAAE,SAASsD,EAAEkV,EAAErI,EAAE7C,GAAG6O,EAAE,KAAKzB,EAAEC,EAAEnC,EAAErI,EAAE7C,GAAG4F,EAAE9P,OAAO,YAAYpD,KAAK4a,IAAID,EAAEP,YAAYO,EAAEtZ,KAAKiX,QAAQjH,EAAEsJ,EAAEjC,WAAW8E,IAAInM,EAAEsJ,EAAEjC,WAAWmF,QAAQ,SAASva,EAAEkV,EAAErI,GAAGyK,EAAED,EAAEP,cAAc+B,EAAE7Y,EAAEoX,EAAEC,EAAExK,GAAG+C,EAAE9P,OAAO,YAAYpD,GAAG,mBAAmB2a,EAAEmD,gBAAgBnD,EAAEmD,eAAexa,KAAK6U,EAAEzb,MAAMme,EAAE,UAAUja,QAAQ+C,IAAI,4BAA4BgX,EAAEjC,YAAYR,EAAE7I,KAAKsL,EAAEjC,eAAeF,EAAEI,mBAAkB,EAAGtL,EAAEkL,EAAEkF,YAAYlF,EAAE7V,eAAU,IAAS2K,EAAEkP,MAAMlP,EAAEkP,MAAM3E,GAAGjX,QAAQoD,MAAM,wCAAwC,EAAEwU,EAAE0B,kBAAa,IAAS5M,EAAEyQ,SAASzQ,EAAEyQ,SAASlG,GAAGjX,QAAQoD,MAAM,2CAA2C,EAAE2Y,EAAErZ,EAAEkV,IAAIA,EAAEnJ,MAAMiN,EAAEhZ,EAAE8X,EAAE0B,SAAStE,GAAGN,EAAEvX,KAAK2C,EAAE,gBAAgBkV,EAAEQ,MAAMR,EAAErd,cAAa,IAAKgV,IAAI0H,GAAGjX,QAAQ+C,IAAI,iCAAiC0X,EAAEvX,eAAe,YAAY0U,GAAGL,EAAElV,YAAYK,GAAGA,EAAEwB,aAAa+S,GAAGjX,QAAQ+C,IAAI,sCAAsC0X,EAAEvX,eAAe,iBAAiB,CAACR,GAAE,UAASwX,EAAE,SAASxX,EAAEkV,GAAG,OAAOL,EAAEtG,UAAUvO,EAAE,UAAU3B,KAAKvC,IAAIoZ,EAAEyB,WAAWzB,EAAE2B,eAAe3B,EAAEyB,YAAYuB,EAAE,SAASlY,EAAEkV,GAAG,IAAIrI,EAAE2K,EAAExX,EAAEkV,GAAG,EAAE,OAAOA,EAAEQ,KAAK7X,SAASqX,EAAEQ,KAAK,KAAKR,EAAEQ,KAAK,GAAGjI,MAAMyH,EAAEQ,SAASR,EAAEQ,KAAK,GAAGR,EAAEQ,KAAK7I,GAAG,GAAGA,IAAIqI,EAAEQ,KAAK7I,GAAGqI,EAAEQ,MAAMsC,EAAE,SAAShY,EAAEkV,EAAErI,GAAG,IAAI7C,EAAEnM,SAASqX,EAAE,KAAKlV,EAAE4V,MAAM5V,EAAE0S,SAASkD,MAAM,GAAG,OAAO5V,EAAEnI,cAAc,OAAOoG,KAAK+L,EAAE,IAAIkL,IAAIlL,IAAIhK,EAAEX,WAAWW,EAAEyX,WAAW9Y,KAAKqB,EAAEwW,YAAY,wBAAwB3Z,OAAO,MAAMmD,EAAEX,UAAU,QAAQwN,EAAE7C,EAAEhK,EAAE4V,MAAMgD,EAAE,SAAS5Y,EAAEkV,EAAErI,GAAGA,EAAE+I,KAAKoC,EAAEnL,EAAEqI,EAAE,OAAOrI,EAAE4K,WAAW9Y,KAAKkO,EAAE2J,aAAaxO,IAAI6E,EAAE+I,MAAMhB,EAAEvX,KAAK2C,EAAE,gBAAgBkY,EAAElY,EAAE6M,IAAI+H,EAAEvX,KAAK2C,EAAE,gBAAgB6M,EAAE+I,MAAM/I,EAAE8J,WAAW,QAAQ9J,EAAE+I,KAAK,EAAEvX,KAAK4Z,KAAKpL,EAAExN,UAAUwN,EAAE+I,MAAM/I,EAAEgK,cAAc,QAAQhK,EAAE+I,KAAK,EAAEvX,KAAK4Z,KAAKpL,EAAE+J,aAAa/J,EAAE+I,OAAwC0D,EAAE,SAAStZ,EAAEkV,GAAGA,EAAEQ,KAAK8B,EAAExX,EAAEkV,GAAG,EAAEhgB,EAAE8K,EAAEkV,IAAiImE,EAAE,SAASrZ,EAAEkV,GAAGA,EAAErd,aAAY,EAAGqd,EAAE2C,cAAa,EAAGhD,EAAEzb,MAAM4G,EAAE5C,OAAO,UAAUE,QAAQ+C,IAAI,wCAAwCuU,EAAE5U,GAAGQ,eAAe,mBAAmB0U,GAAGL,EAAElV,YAAYK,GAAGkN,EAAElN,EAAEkV,IAA0tBwF,EAAE,SAASpD,EAAEtX,GAAG,IAAIkV,EAAEkC,EAAEC,EAAExK,EAAEkB,EAAEuJ,EAAEla,OAAO4M,EAAE+D,EAAEpW,cAAciY,EAAEiF,EAAEzb,MAAM2U,EAAE,SAASwJ,EAAExJ,EAAElC,MAAM+I,EAAErS,QAAO,EAAG,GAAGqS,EAAEE,iBAAiBtf,SAASwK,GAAGtD,EAAEqR,EAAE/Q,OAAO8a,EAAE/J,EAAE5P,UAAU,QAAQoW,EAAEgD,EAAEE,WAAW7C,EAAE2C,EAAExC,WAAWtW,SAAS,qBAAqBkc,OAAOpD,EAAE7E,SAASkC,EAAErS,QAAO,EAAG,GAAGqS,EAAEE,iBAAiBtf,SAASwK,GAAG4P,GAAGtS,QAAQ+C,IAAI,yBAAyBkX,EAAEiD,eAAejD,EAAEiD,gBAAgBjD,EAAEnC,WAAWmF,QAAQxM,EAAEpC,SAASmN,EAAEnN,SAAS4L,EAAEM,cAAa,EAAGN,EAAEzB,WAAWjB,EAAEyD,UAAUpD,EAAEL,EAAEyD,QAAQhB,EAAEC,EAAExB,aAAa,GAAGwB,EAAE7B,KAAKjI,MAAMyH,EAAEQ,MAAM6B,EAAE7B,KAAKR,EAAEQ,KAAK6B,EAAE3B,KAAK,QAAQV,EAAEU,KAAKV,EAAEU,MAAMnI,MAAMyH,EAAEU,MAAM2B,EAAE3B,KAAKV,EAAEU,OAAO2B,EAAEqD,SAAS,GAAGhC,EAAEtB,EAAEC,EAAE3B,KAAK2B,IAAIA,EAAEK,UAAU,IAAIlJ,OAAO,KAAK1E,EAAE6Q,oBAAoB,YAAY,IAAI9M,EAAE5U,eAAeqF,MAAM,GAAG,IAAIuP,EAAE1V,YAAY,KAAKkf,EAAEkB,cAAc,IAAI/J,OAAO1E,EAAE6Q,oBAAoB,YAAYne,EAAEoD,OAA5/b,0JAAqgclC,MAAM,KAAKgD,KAAKkX,EAAE,KAAK1Z,QAAQ,OAAO,MAAM2B,KAAK,0BAA0BnC,MAAM,KAAKgD,KAAKkX,EAAE,KAAK,SAAS9X,EAAEkV,GAAG,IAAIrI,EAAE,GAAG0K,EAAER,eAAenC,EAAErI,QAAQ2I,GAAGA,EAAEnH,EAAE/Q,OAAOK,KAAK,cAAcka,EAAExL,MAAM,eAAe/L,EAAEG,KAAK,OAAOjL,EAAEoiB,EAAEC,GAAE,GAAI1K,EAAEgI,EAAE/R,OAAOgY,aAAajG,EAAE/R,OAAOgY,aAAa/M,EAAEA,EAAEgN,WAAWxD,EAAER,iBAAiBhJ,EAAEgN,YAAY,IAAIna,KAAK,OAAO2W,EAAER,gBAAgB,IAAInW,KAAK,IAAI,gBAAgBZ,EAAEG,OAAM,IAAKoX,EAAE5B,WAAW9I,IAAI0K,EAAE7B,KAAK6B,EAAE5B,aAAa5V,KAAK,qBAAqBnC,MAAM,KAAKgD,KAAKkX,EAAE,KAAK,WAAWP,EAAER,eAAehJ,EAAE/Q,OAAOK,KAAK,eAAeka,EAAE1f,aAAa0f,EAAEM,gBAAgB9J,EAAE1X,WAAW0X,EAAEyL,UAAU,IAAIzL,EAAEyL,SAAS3c,QAAQ6c,EAAEpC,GAAGpK,EAAEoK,EAAEC,GAAE,GAAIriB,EAAEoiB,EAAEC,GAAE,GAAI1C,EAAElV,YAAY2X,MAAMvX,KAAK,eAAe+X,EAAE,SAAS9X,GAAGA,EAAEc,kBAAkByY,EAAEjC,EAAEC,KAAKxX,KAAK,cAAc+X,EAAE,SAAS9X,GAAGA,EAAEc,kBAAkBgZ,EAAExC,EAAEC,GAAE,KAAMxX,KAAK,eAAe+X,EAAE,SAAS9X,GAAG,IAAIkV,EAAErI,EAAE7C,EAAEoN,EAAEC,EAAErX,EAAEc,kBAAkB+L,EAAE0K,EAAiBH,GAAfpN,GAAGkL,EAAEoC,GAAGla,QAAWe,UAAU,QAAQkZ,EAAE,CAACxK,EAAEqJ,SAASrJ,EAAEsJ,QAAQtJ,EAAEuJ,QAAQvJ,EAAEwJ,QAAQxJ,EAAEyJ,QAAQzJ,EAAE2J,aAAa5V,KAAK,KAAK2Y,EAAErE,EAAErI,GAAGA,EAAE4K,WAAWuD,OAAOrc,KAAK0Y,GAAGvX,OAAOsX,GAAGpN,EAAE2B,SAAS,KAAK3B,EAAEhN,OAAO8C,OAAOsX,GAAGvC,EAAEyD,SAASzD,EAAEyD,QAAQpD,EAAErI,EAAEkJ,WAAW,WAAW/L,EAAE6B,aAAa7B,EAAEwP,WAAWzZ,KAAK,mBAAmB+X,EAAE,SAAS9X,GAAG,IAAIkV,EAAErI,EAAE7M,EAAEc,kBAAkB+L,EAAE0K,GAAGrC,EAAEoC,GAAGla,OAAOyO,MAAM+I,EAAErS,QAAO,EAAG,GAAGqS,EAAEE,iBAAiBtf,SAASqX,EAAE6F,UAAUgI,EAAExF,EAAErI,EAAE6F,YAAY3S,KAAK,iBAAiB+X,EAAE,SAAS9X,EAAEkV,EAAErI,GAAG,GAAG7M,EAAEc,kBAAkBoU,IAAIrI,IAAI0K,EAAExL,KAAK,CAAC,IAAI/B,EAAE+D,EAAElP,SAAS2K,GAAG,GAAG5K,SAAS,MAAMyG,IAAI0I,EAAE5U,gBAAgBoe,EAAElY,UAAU2K,EAAEnN,QAAQ0a,EAAEtB,eAAe,EAAEjM,EAAElH,OAAO,IAAIiL,EAAE1V,aAAawE,QAAQ0a,EAAEZ,WAAW,QAAQY,EAAE3B,KAAK,EAAEvX,KAAK4Z,KAAKV,EAAElY,UAAUkY,EAAE3B,MAAM5L,EAAEnN,QAAQkR,EAAEyL,UAAU,IAAIzL,EAAEyL,SAAS3c,QAAQ6c,EAAExE,GAAGqC,EAAE7B,MAAM6B,EAAEZ,YAAY2C,EAAEpE,EAAEqC,GAAGtK,EAAEiI,EAAEqC,GAAGgB,EAAErD,EAAEqC,GAAGrK,EAAEgI,EAAEqC,GAAE,MAAOxX,KAAK,4BAA4BnC,MAAM,KAAKgD,KAAKkX,EAAE,KAAK,SAAS9X,EAAEkV,GAAGlV,EAAEc,kBAAkB8X,EAAEtB,EAAEU,EAAET,EAAErC,EAAE,OAAOqC,GAAGriB,EAAEoiB,EAAEC,GAAGtK,EAAEqK,EAAEC,GAAGrK,EAAEoK,EAAEC,GAAE,KAAMxX,KAAK,uBAAuBnC,MAAM,KAAKgD,KAAKkX,EAAE,KAAK,SAAS9X,EAAEkV,GAAGlV,EAAEc,kBAAkB,gBAAgBd,EAAEG,OAAO+U,OAAE,IAASA,EAAEqC,EAAE7B,KAAK,EAAER,EAAEqC,EAAExZ,KAAK2X,MAAK,GAAI6B,EAAE7B,MAAM7X,SAASqX,EAAE,KAAK,GAAG,EAAEhgB,EAAEoiB,EAAEC,GAAE,GAAIrK,EAAEoK,EAAEC,GAAE,KAAMxX,KAAK,cAAc+X,EAAE,SAAS9X,EAAEkV,EAAErI,GAAG7M,EAAEc,kBAAkByW,EAAE7B,MAAM7X,SAASqX,EAAE,KAAK,GAAG,EAAE0D,EAAEtB,EAAEU,EAAET,EAAE1K,EAAE,OAAO0K,GAAGriB,EAAEoiB,EAAEC,GAAE,GAAItK,EAAEqK,EAAEC,GAAGrK,EAAEoK,EAAEC,GAAE,KAAMH,EAAE,CAACG,EAAErB,SAASqB,EAAEpB,QAAQoB,EAAEnB,QAAQmB,EAAElB,SAASgB,EAAE,CAACsC,EAAEE,EAAED,EAAEN,GAAG1J,IAAI2E,EAAE1X,QAAQS,QAAQmD,KAAK,kCAAkC8T,EAAE5V,KAAKyY,EAAExW,KAAK,MAAM1C,KAAK,WAAW,GAAG4B,OAAO,QAAQgY,GAAG/X,KAAK,QAAQ+X,EAAE,SAAS9X,GAAGA,EAAEc,kBAAkB,IAAIoU,EAAErI,EAAE+H,EAAE7T,MAAMiJ,EAAEoN,EAAEva,OAAO,IAAIgQ,EAAErJ,SAAS+T,EAAEb,aAAa,IAAIxB,EAAE,EAAEA,EAAElL,EAAEkL,IAAI,GAAGrI,EAAEnF,GAAG0P,EAAElC,IAAI,CAACmC,EAAEnC,GAAGoC,EAAEC,GAAG,UAAU1K,EAAE0H,EAAE5V,KAAK4Y,EAAEjB,UAAUzZ,OAAOgQ,EAAE/M,OAAO,SAASgY,GAAG/X,KAAK,SAAS+X,EAAE,WAAWP,EAAE7B,KAAKd,EAAE7T,MAAMiH,MAAM,EAAE9S,EAAEoiB,EAAEC,GAAE,GAAIrK,EAAEoK,EAAEC,GAAE,KAAM3H,GAAGtS,QAAQmD,KAAK,uCAAuCoM,EAAE0H,EAAE5V,KAAK4Y,EAAEf,cAAc3Z,QAAQgQ,EAAElO,KAAK,UAAU+L,WAAW,YAAYmC,EAAE/M,OAAO,SAASgY,GAAG/X,KAAK,SAAS+X,EAAE,WAAW,IAAIlD,EAAE7T,MAAMyC,SAAS+T,EAAEb,aAAa,CAAC,IAAI1W,EAAE4U,EAAE7T,MAAMiH,MAAM4Q,EAAEtB,EAAEtX,EAAEuX,GAAGriB,EAAEoiB,EAAEC,GAAGgB,EAAEjB,EAAEC,GAAG,OAAM,KAAM3H,GAAGtS,QAAQmD,KAAK,sCAAsC8W,EAAE1f,aAAY,EAAG6E,EAAE8D,eAAe,yBAAyB+W,GAAGuC,EAAExC,EAAEC,GAAE,GAAI,iBAAiBA,EAAEvC,SAASuC,EAAExL,MAAK,EAAGgC,EAAEpW,cAAcsjB,4BAA2B,EAAGlN,EAAEzX,mBAAkB,EAAGpB,EAAEoiB,EAAEC,KAAKA,EAAExL,MAAK,EAAG8I,EAAElT,YAAYoM,GAAE,GAAI2B,EAAE4H,EAAEC,IAAIA,EAAExL,MAAMwL,EAAE1f,cAAc0f,EAAEM,cAAa,EAAGN,EAAE1f,aAAY,EAAG+gB,EAAEtB,EAAEC,EAAE3B,KAAK2B,GAAGriB,EAAEoiB,EAAEC,GAAG3H,GAAGtS,QAAQ+C,IAAI,wCAAwC0N,EAAE/Q,OAAOwD,eAAe,mBAAmB+W,GAAGxJ,EAAEpW,cAAcsiB,oBAAoBpF,EAAEtG,UAAU+I,EAAE,WAAWpK,EAAEoK,EAAEC,GAAE,IAAKxJ,EAAEhP,WAAW8M,OAAM,GAAIiN,EAAEnN,SAAS,SAAS3L,EAAEkV,GAAG,IAAIrI,EAAE7M,EAAE5C,OAAO4M,EAAE6C,EAAEhB,MAAM7B,EAAE+B,OAAOc,EAAE2M,SAAStE,EAAElL,EAAE3K,UAAU2K,EAAEiM,eAAepJ,EAAEhO,SAAS2K,GAAG,GAAG5K,SAAS,MAAM/B,OAAOqY,EAAErY,OAAOmN,EAAE4L,KAAKhB,EAAEvX,KAAK2C,EAAE,kBAAkBgK,EAAE4L,MAAM5L,EAAE0I,SAASkD,MAAM,GAAG5L,EAAE2M,WAAW,QAAQ3M,EAAE4L,KAAK,EAAEvX,KAAK4Z,KAAKjO,EAAE3K,UAAU2K,EAAE4L,MAAMoD,EAAEhZ,EAAEkV,EAAElL,GAAGkD,EAAElN,EAAEgK,GAAE,KAAM8O,EAAEoC,UAAU,SAASlb,GAAG,OAAOe,KAAKsL,KAAK,WAAWtL,KAAK3D,QAAQ2D,KAAKjE,gBAAgB4d,EAAE3Z,KAAKf,SAAS6U,EAAEoE,UAAU,SAASjZ,EAAEkV,EAAErI,EAAE7C,GAAqK,SAAF8N,IAAaT,EAAEra,OAAO2B,KAAK,SAASA,KAAK0Y,EAAEle,gBAAgBgS,SAA3N,IAAIiM,EAAExC,EAAE5U,GAAGqX,EAAED,EAAE,GAAGha,OAAOka,EAAED,GAAGA,EAAE1f,cAAcoW,EAAEsJ,EAAExL,OAAOwL,EAAExL,MAAM4K,aAAaa,GAAGA,EAAE6D,WAAW7D,EAAE6D,UAAUC,UAAU,uBAAuBxL,SAASsF,EAAEqC,GAAE,EAAG7a,EAAE,GAAwE,GAAG0a,EAAEva,OAAO,CAAC,GAAG,mBAAmBwa,EAAExL,MAAMsJ,UAAU,CAAC,IAAG,KAAMoC,EAAEF,EAAExL,MAAMsJ,UAAUkC,EAAEnC,EAAErI,EAAE7C,IAAI,OAAO8N,IAAIpb,EAAE6a,OAAO,GAAG,mBAAmBD,EAAE+D,gBAAgB,CAAC,IAAG,KAAM9D,EAAED,EAAE+D,gBAAgBhE,EAAEnC,EAAErI,EAAE7C,IAAI,OAAO8N,IAAIpb,EAAE6a,EAAE,GAAG,KAAK7a,EAAE,GAAG,UAAWkT,EAAElT,EAAE,IAAIwY,EAAEoG,OAAO,gCAAgC,MAAMpG,EAAEoG,OAAO,iCAAiC,MAAMpG,EAAEoG,OAAO,8BAA8B,gBAAgBtR,EAAE,8BAA8B,YAAYA,EAAE,iBAAiB,UAAUA,EAAE,uBAAuB,mBAAmBkL,EAAEqG,WAAW,KAAKrG,EAAEoG,OAAO,QAAQ,CAAC,GAAG,UAAW1L,EAAE,OAAOkI,IAAIpb,EAAEwY,EAAEN,EAAE,OAAO3W,KAAKvB,GAAGA,EAAE,oBAAoB2a,EAAEjT,QAAQ,KAAK1H,EAAE,cAAc8e,MAAM,WAAW5G,EAAE7T,MAAMoK,WAAWsQ,SAASpE,EAAEra,OAAO2B,KAAK,gBAAgBF,SAASsP,EAAE,IAAIsJ,EAAEle,eAAeqF,MAAM,IAAIN,KAAK,CAACqH,KAAK,QAAQ,YAAY,mBAAmBjI,QAAQoD,MAAM,qDAAqDkU,EAAElX,GAAG6E,OAAO,CAACuS,iBAAiBF,EAAEE,iBAAiBoG,YAA7rnB,CAA0snBjmB,GAAeA,IAN7nnB,gC,oBCA7F,UAEmE,EAAO,CAAC,WAAkB,0BAAP,EAA6J,SAASA,GAqmG5P,OAlmGC,SAAWC,EAAG0d,EAAQ0H,GACtB,aAEA,IAAInlB,EAAKD,EAAEE,aAAe,GAG1BF,EAAEqN,QAAO,EAAMpN,EAAGK,SAAU,CAC3BkmB,SAAU,GACV/jB,cAAe,CACdgkB,iBAAkB,GAClBC,cAAe,GACfC,aAAc,GACdC,oBAAqB,GACrBC,gBAAiB,GACjBC,0BAA2B,MAuB7B7mB,EAAGmjB,QAAU,SAAS3e,EAAOkX,EAAKoL,EAAOxN,GAExC,IAAIyN,EAAaC,EAASpJ,EACzBqJ,GAAa,EACbC,EAAS,GACT3f,GAJD/C,EAAQzE,EAAEyE,GAAO,IAINyD,OACVoR,EAAK9R,GAAKA,EAAE/E,cACZyB,EAAQjE,EAAGiE,MAAMsD,EAAG,WACpB4f,GACG7N,GAAWA,EAAQ6N,aAAmB9N,GAAMA,EAAGsN,qBAChDvd,WAAWge,OAAO,GAAGze,cAEvB0e,EAAUF,EAAc,GACrB7N,GAAWA,EAAQgO,mBAAyBjO,GAAMA,EAAGwN,0BACxDhf,EAAS9H,EAAEyE,GAGXmF,EAAK2P,GAAWA,EAAQ3P,IACvB9B,EAAOkB,KAAMuQ,GAAWA,EAAQlR,OAASiR,GAAMA,EAAGoN,eAAiB,qBACnEpN,GAAMA,EAAGuN,iBAAmBpiB,EAAMmF,IAAM5J,EAAE,gBAAgB0O,MAAO5G,GAGlEkd,EAAMzL,GAAWA,EAAQyL,KACxBld,EAAOkB,KAAKuQ,GAAWA,EAAQiH,MAAQlH,GAAMA,EAAGqN,cAAgB,oBAChErN,GAAMA,EAAGmN,kBAAoBjf,GAAKA,EAAEgf,UAAY9I,EAAO8J,SAASC,SAGlE,GAAoB,MAAhBL,IACHA,EAA+B,MAAhBA,GAAuBE,EAAW,iBAAmB,kBAEjD5J,EAClB,IACCA,EAAO0J,GAAaM,QAAQ,WAAY,QACxCR,GAAa,EACbxJ,EAAO0J,GAAaO,WAAW,YAC9B,MAAOnc,GACRpD,QAAQmD,KAAM6b,EAAc,qCAoB/B,GAhBIljB,GACHkE,QAAQ+C,IAAI,mBAAoB+b,EAAaE,EAAc,WAGxDpnB,EAAE4nB,YAEJT,EADGD,EACMlnB,EAAE4nB,UAAWlK,EAAO0J,GAAazL,IAAQ,SAAY,IAG9DsL,EAAU7B,EAASyC,OAAOnf,MAAM,WAGN,KAD1Bse,EAAchnB,EAAE8V,QAAQ6F,EAAKsL,GAAW,IACTjnB,EAAE4nB,UAAUX,EAAQD,IAAgB,SAAgB,UAIhE,IAAVD,IAAyBrJ,EAAOoK,OAAQA,KAAKC,eAAe,aAetE,OAAOZ,GAAUA,EAAOnC,GAAOmC,EAAOnC,GAAKpb,GAAM,GAb5Cud,EAAOnC,KACXmC,EAAOnC,GAAO,IAEfmC,EAAOnC,GAAKpb,GAAMmd,EAEdG,EACHxJ,EAAO0J,GAAazL,GAAOmM,KAAKE,UAAUb,KAE1CtJ,EAAO,IAAIvV,MACN2f,QAAQpK,EAAK5D,UAAY,SAC9BmL,EAASyC,OAASlM,EAAM,IAAOmM,KAAKE,UAAUb,GAASje,QAAQ,MAAO,KAAQ,aAAe2U,EAAKqK,cAAgB,aAzGrH,CAgHEnoB,EAAQ2d,OAAQ0H,UAGlB,SAAWplB,GACX,aACA,IAAIC,EAAKD,EAAEE,aAAe,GAE1BD,EAAGkoB,OAAS,CACX,UAAc,CACb1jB,MAAe,qCACf2jB,QAAe,UAEfvjB,OAAe,mBACfO,SAAe,GACfF,QAAe,GACfC,SAAe,GACfkjB,OAAe,GACfC,MAAe,GAEfC,MAAe,GACfC,aAAe,0BACfC,YAAe,iCACfC,aAAe,mCACfC,UAAe,GACfC,UAAe,GACfC,YAAe,GACfC,KAAe,GACfC,IAAe,IAEhB,IAAQ,CACPtkB,MAAe,4CACf2jB,QAAe,oBAEfvjB,OAAe,kDACfO,SAAe,GACfF,QAAe,GACfC,SAAe,GACfkjB,OAAe,kBACfC,MAAe,iBAEfC,MAAe,UACfC,aAAe,0CACfC,YAAe,sCACfC,aAAe,sCACfC,UAAe,GACfC,UAAe,GACfC,YAAe,GACfC,KAAe,oBACfC,IAAe,qBAIjB/oB,EAAEqN,OAAOpN,EAAGuE,IAAK,CAChBwkB,QAAU,wBAGX/oB,EAAGiZ,UAAU,CACZtP,GAAI,UACJiQ,SAAU,GACV9G,OAAQ,SAAStO,EAAO+C,EAAG8R,GAC1B,IAAIxE,EAAGjN,EAAKohB,EAAKjkB,EAAM+L,EAAMsE,EAAS6T,EAAOC,EAAQhM,EAAIiM,EAAUC,EAAWC,EAAYC,EACzFC,EAAYvpB,EAAGkoB,OACfrgB,EAASN,EAAEM,OAAO6F,IAAK3N,EAAGwH,EAAEyB,UAAY,iBACxCO,EAAWhC,EAAEgC,SAASmE,IAAK3N,EAAGwH,EAAEyB,UAAY,mBAC5C1I,EAAQiH,EAAEjH,OAAS,MACnB4nB,EAASqB,EAAUjpB,IAAU,GAC7B0V,EAASjW,EAAE0S,KAAM,CAAEyV,EAAO/iB,SAAU+iB,EAAOhjB,SAAUgjB,EAAOjjB,QAASijB,EAAOE,QAAS3c,KAAM,MAC3F+d,EAAUzpB,EAAE0S,KAAM,CAAEyV,EAAOK,aAAcL,EAAOO,aAAcP,EAAOM,aAAc/c,KAAM,MACzFxH,EAAQjE,EAAGiE,MAAMsD,EAAG,WA4ErB,IA3EItD,IAAS6M,EAAO,IAAIzI,MAEnBR,EAAOwG,SAAS,eAAiB/N,IAAUiH,EAAEjH,QAAUiH,EAAEkiB,cAAiBpQ,EAAGqQ,kBACjFrQ,EAAGqQ,iBAAkB,EACrBP,EAAWI,EAAUhiB,EAAEkiB,eAAiB,GAExCL,GADAE,GAAevpB,EAAEwO,cAAc4a,IACJ,CAAEA,EAAShkB,SAAUgkB,EAASjkB,SAAUikB,EAASlkB,QAASkkB,EAASf,QAAS3c,KAAM,KAAQ,GACrH4d,EAAaC,EAAc,CAAEH,EAASZ,aAAcY,EAASV,aAAcU,EAASX,aAAc/c,KAAM,KAAQ,GAC5G6d,IACHjQ,EAAG5W,MAAM,GAAK1C,EAAE0S,KAAM,IAAM4G,EAAG5W,MAAM,GAAGwG,QAAQ,IAAMkgB,EAASN,KAAM,KACrExP,EAAG5W,MAAM,GAAK1C,EAAE0S,KAAM,IAAM4G,EAAG5W,MAAM,GAAGwG,QAAQ,IAAMkgB,EAASL,IAAK,KACpEvhB,EAAEmC,SAASD,WAAW+K,YAAa,CAAE2U,EAASN,KAAMM,EAASL,KAAMrd,KAAK,OAGrEyc,EAAOW,OAAQxP,EAAG5W,MAAM,IAAM,IAAMylB,EAAOW,MAC3CX,EAAOY,MAAOzP,EAAG5W,MAAM,IAAM,IAAMylB,EAAOY,KAE9CjhB,EAAO4B,SAAS,WACd+K,YAAY2U,EAAShB,SAAW,IAChC7e,SAAS4e,EAAOC,SAElBe,EAASrhB,EAEP2M,aAAcjN,EAAEkiB,aAAe,gBAAkBliB,EAAEkiB,cAAgB,IAAM,IAAM,KAAON,EAAS3kB,OAAS,KACxG8E,SAAS,eAAiBhJ,EAAQ,KAAO4nB,EAAO1jB,OAAS,KACzDiF,SAAS,SACXlC,EAAEkiB,aAAeliB,EAAEjH,MAEf4oB,EAAOxhB,QACVwhB,EAEEzf,SAAS,MAAM+K,YAAY2U,EAASR,WAAa,IAAIrf,SAAS4e,EAAOS,WACrElf,SAAS,UAAU+K,YAAY2U,EAASP,aAAe,IAAItf,SAAS4e,EAAOU,aAG9Erf,EACEiL,aAAc8U,EAAc,CAAEH,EAASvkB,OAAQukB,EAASd,MAAOe,GAAY3d,KAAK,KAAO,KAAO,IAC9FnC,SAAS4e,EAAOtjB,QAChBsL,IAAI,iBACJvF,OAAO,6CACPC,KAAK,4CAA6C,SAASiM,GAE3D9W,EAAE6L,MAAsB,eAAfiL,EAAM7L,KAAwB,WAAa,eAAgBkd,EAAOG,OAAS,MAGtF9e,EAAS2N,KAAK,WACb,IAAIyS,EAAQ5pB,EAAE6L,MACT+d,EAAMngB,KAAK,IAAMxJ,EAAGuE,IAAIwkB,SAASrhB,QAErCiiB,EAAMC,UAAU,eAAiB5pB,EAAGuE,IAAIwkB,QAAU,+DAGhDxhB,EAAEjE,SAELiG,EACEC,KAAK,IAAMxJ,EAAGuE,IAAIQ,MAClByP,YAAY8U,EAAc,CAAEH,EAASb,MAAOe,GAAa5d,KAAK,KAAO,IACrEnC,SAAS4e,EAAOI,OAAS,IAGxBtoB,EAAGoZ,UAAW7R,EAAE/C,MAAO,YAC1BoD,EAAM,WACLC,EAAO4B,SAAS,SAASA,SAAS,IAAMzJ,EAAGuE,IAAImkB,WAC7ClU,YAAY8U,GAAcH,EAAST,WAAkB,IACrDpf,SAAS4e,EAAOQ,WAAa,KAE5BrP,EAAGyL,mBACNld,IAEAC,EAAOgiB,IAAI,aAAc,WACxBjiB,QAKCiN,EAAI,EAAGA,EAAItN,EAAE0H,QAAS4F,IAC1BO,EAAU7N,EAAEgC,SACVmE,IAAI3N,EAAEwH,EAAEyB,UAAY,mBACpBkH,IAAI,iBACJvC,OAAO,iBAAmBkH,EAAI,MAChCoU,EAASjpB,EAAGuE,IAAQ,KAAI6Q,EAAQ5L,KAAK,IAAMxJ,EAAGuE,IAAIQ,MAAQhF,KAC1Dmd,EAAK3T,EAAS2G,IAAI,iBAAiBvC,OAAO,iBAAmBkH,EAAI,YAC1DnN,SACN0N,EAAQZ,YAAYwB,GACpBiT,EAAMzU,YAAYgV,GACdtM,EAAG,GAAG7X,aAET4jB,EAAMzU,YAAY0T,EAAOI,OAAS,KAElCU,EAAMd,EAAO/iB,SACbJ,EAAOmjB,EAAOK,aACVrL,EAAG7O,SAASrO,EAAGuE,IAAIU,UACtB+jB,EAAM,CAAEd,EAAOjjB,QAASijB,EAAOE,QAAS3c,KAAK,KAC7C1G,EAAOmjB,EAAOM,aACJtL,EAAG7O,SAASrO,EAAGuE,IAAIW,YAC7B8jB,EAAM,CAAEd,EAAOhjB,SAAUgjB,EAAOE,QAAS3c,KAAK,KAC9C1G,EAAOmjB,EAAOO,cAEfrT,EAAQ9L,SAAS0f,GACjBC,EAAM3f,SAASvE,GAAQ,MAItBd,GACHkE,QAAQ+C,IAAI,sBAAwB5K,EAAQ,SAAWN,EAAGmL,UAAU2F,KAGtEkF,OAAQ,SAASxR,EAAO+C,EAAG8R,EAAIrM,GAC9B,GAAKqM,EAAGqQ,gBAAR,CACA,IAAI7hB,EAASN,EAAEM,OACdvH,EAAQiH,EAAEkiB,cAAgB,MAC1BvB,EAASloB,EAAGkoB,OAAQ5nB,IAAWN,EAAGkoB,OAAO4B,IACzCvgB,EAAW1B,EAAO4B,SAAS,SAASA,WACpCuM,EAASkS,EAAO/iB,SAAW,IAAM+iB,EAAOhjB,SAAW,IAAMgjB,EAAOjjB,QAChEukB,EAAUtB,EAAOK,aAAe,IAAML,EAAOO,aAAe,IAAMP,EAAOM,YAC1E3gB,EAAO2M,YAAY,eAAiBlU,EAAQ,IAAM4nB,EAAO1jB,OACzD6U,EAAGqQ,iBAAkB,EACjB1c,IACJnF,EAAO2B,KAAKxJ,EAAGuE,IAAIK,QAAQ4P,YAAY0T,EAAOtjB,QAC9C2E,EACEoB,OAAO,6CACP6J,YAAY0T,EAAOG,MAAQ,IAAMrS,EAAS,IAAMkS,EAAOE,QACvDza,OAAO,IAAM3N,EAAGuE,IAAImkB,WACpBlU,YAAY0T,EAAOQ,WACrBnf,EAASC,KAAK,IAAMxJ,EAAGuE,IAAIQ,MAAMyP,YAAY0T,EAAOI,MAAQ,IAAMkB,QA9LpE,CAkME1pB,GAGF,SAAWC,GACX,aACA,IAAIC,EAAKD,EAAEE,aAAe,GAE1BD,EAAGiZ,UAAU,CACZtP,GAAI,UACJiQ,SAAU,GACVN,QAAU,CACTrK,QAAU,CAAE,UAAW,YAAa,aAErC6D,OAAQ,SAAStO,EAAO+C,EAAG8R,GAC1B,IAAItG,EAAQ9B,EAAYqJ,EAAO9J,EAAMrE,EAAM8G,EAAQ+C,EAAQlH,EAC3DjH,EAASN,EAAEM,OACX6B,EAAWnC,EAAEmC,SACblI,EAAW+F,EAAE/F,SACbwP,EAAMxP,EAASkG,OAEfnD,EAAM8U,GAAMA,EAAGpK,SAAW,CAAE,UAAW,YAAa,YACpDrG,EAAOrE,EAAImD,OAAS,EAGpB,IAFAsO,EAASzR,EAAIkH,KAAK,KAEbwF,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,KAElDqJ,GADAvH,EAAS/S,EAAGyW,aAAajS,EAAOkF,EAAS2K,GAAGpD,IAAa,IAC1CxH,SAAS,OAElByN,KAAK,WAEV,GADA/K,EAAOpM,EAAE6L,MACkB,SAAvBA,KAAK2X,MAAMC,UAEdvQ,EAAS9G,EAAK1C,WAAW+K,YAAYwB,GAEjCxU,GAAYA,EAAS,KAExByR,EAAOoB,GAAG7S,EAAS,GAAG,IAAI8H,SAAS/E,EAAI,IAC7B,EAANyM,IACH,IAAKlC,EAAO,EAAGA,EAAOkC,EAAKlC,IAE1BmE,EAAOoB,GAAG7S,EAASsN,GAAM,IAAIxF,SAAU/E,EAAIuK,IAASvK,EAAIqE,MAM7D5I,EAAGyW,aAAajS,EAAOuO,GAAQ,GAOhC,GAJAvC,GAA4B,IAArB6I,EAAG0Q,cAA0B,CAAE,YAAe,IAC5B,IAArB1Q,EAAG2Q,eACNxZ,EAAK2K,KAAK,YAEP3K,EAAK9I,SACR4S,EAAQzS,EAAO2B,KAAMgH,EAAK/E,KAAK,MAAOhC,WAAW+K,YAAYwB,GACzDhF,GACH,IAAKlC,EAAO,EAAGA,EAAOkC,EAAKlC,IAE1BwL,EAAM3M,OAAO,iBAAmBnM,EAASsN,GAAM,GAAK,MAAMxF,SAAS/E,EAAIuK,IAASvK,EAAIqE,KAKxFoN,OAAQ,SAASxR,EAAO+C,EAAG8R,GAC1B,IAAIpI,EAAY8B,EACfrJ,EAAWnC,EAAEmC,SACbsM,GAAUqD,EAAGpK,SAAW,CAAE,UAAW,YAAa,aAAcxD,KAAK,KAGtE,IAFAlE,EAAEgC,SAASiL,YAAYwB,GACvBzO,EAAEM,OAAO4B,SAAS,SAASA,SAAS,MAAMA,SAAS,UAAU+K,YAAYwB,GACpE/E,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,KAClD8B,EAAS/S,EAAGyW,aAAajS,EAAOkF,EAAS2K,GAAGpD,IAAa,IAClDxH,SAAS,MAAMyN,KAAK,WAC1BnX,EAAE6L,MAAMnC,WAAW+K,YAAYwB,KAEhChW,EAAGyW,aAAajS,EAAOuO,GAAQ,MAvElC,CA4EEjT,GAMF,SAAaC,GACb,aACA,IAAIkqB,EAAKC,EACRlqB,EAAKD,EAAEE,aAAe,GACtBkqB,EAAQnqB,EAAGuE,IACX6lB,EAAapqB,EAAGkH,SAEjBnH,EAAEqN,OAAQ+c,EAAO,CAChBzB,UAAiB,yBACjB/a,OAAiB,qBACjB0c,eAAiB,WACjBC,cAAiB,WAGlBvqB,EAAEqN,OAAQgd,EAAY,CACrBG,UAAY,EACZC,OAAS,GACTC,MAAQ,GACRC,KAAO,GACPC,KAAO,KAGR3qB,EAAGiZ,UAAU,CACZtP,GAAI,SACJiQ,SAAU,GACVN,QAAU,CACTsR,kBAAuB,GACvBC,kBAAuB,EACvBC,sBAAuB,EACvBC,sBAAuB,EACvBC,uBAAuB,EACvBC,sBAAuB,EACvBC,iBAAuB,GACvBC,qBAAuB,aACvBC,qBAAuB,GACvBC,qBAAuB,GACvBC,gBAAuB,GACvB5F,mBAAuB,WACvB6F,mBAAuB,kCACvBC,iBAAuB,KACvBC,iBAAuB,KACvBC,kBAAuB,EACvBC,oBAAuB,EACvBC,mBAAuB,EACvBC,mBAAuB,EACvBC,iBAAuB,CAAE,MAAS,QAAS,OAAU,SACrDC,iBAAuB,mBACvBC,mBAAuB,CAAEC,OAAS,GAAIC,OAAS,IAC/CC,aAAuB,KACvBC,mBAAuB,EACvBC,oBAAuB,EACvBC,mBAAuB,IACvBC,uBAAuB,EACvBC,oBAAuB,KACvBC,6BAA+B,IAC/B3G,4BAA6B,EAC7B4G,mBAAuB,EACvBC,sBAAuB,GAExB7Z,OAAQ,SAAUtO,EAAO+C,EAAG8R,GACrB9R,EAAEM,OAAOwG,SAAU,eACxB4b,EAAI1d,KAAM/H,EAAO+C,EAAG8R,IAGtBrD,OAAQ,SAAUxR,EAAO+C,EAAG8R,EAAIrM,GAC/B,IAAIiE,EAAY8B,EACflL,EAASN,EAAEM,OACX6B,EAAWnC,EAAEmC,SACb8B,EAAS,0JAGP/C,MAAO,KAAMgD,KAAMlE,EAAEyB,UAAY,WAQpC,GAPAnB,EACE2M,YAAa,cAEb7J,OAAQa,EAAOvC,QAASjJ,EAAGyF,MAAMI,OAAQ,MAEzC2D,KAAM,IAAM2gB,EAAMzB,WAAY1S,SAChCqD,EAAGyL,oBAAqB,GACnB9X,EAAL,CACA,IAAMiE,EAAa,EAAGA,EAAavH,EAAShC,OAAQuJ,KACnD8B,EAAS/S,EAAGyW,aAAcjS,EAAOkF,EAAS2K,GAAIpD,IAAc,IACrDxH,WAAW+K,YAAa6E,EAAGqM,oBAAqBF,OACvDxlB,EAAGyW,aAAcjS,EAAOuO,GAAQ,GAE5BsG,EAAG8S,cACPpsB,EAAGolB,UAAWyH,WAAYvT,EAAG8S,aAAc,QAAU5kB,EAAEyB,UAAY,cA8uDtEkhB,GAzuDAD,EAAMjqB,EAAG2N,OAAS,CAGjBlI,MAAO,CACNA,MAAY,yCACZgO,MAAY,uBACZ6R,SAAY,WACZta,KAAY,mBACZ6hB,MAAY,2BACZC,UAAY,SACZC,MAAY,YACZC,OAAY,MACZC,UAAY,MACZC,MAAY,MACZC,OAAY,cACZC,OAAY,cAebC,MAAO,CACNC,GAAK,SAAU/lB,EAAGW,EAAMoN,GAEvB,IAAO4U,EAASqD,OAAOzkB,KAAMZ,EAAKslB,WAAatD,EAASuD,QAAQ3kB,KAAMZ,EAAKyF,SAEzEuc,EAASzkB,MAAMqD,KAAMZ,EAAKyF,QA6B5B,OAAO,KA5BN,IAAImB,EAAM4e,EAAeX,EAExBY,EAAQ5tB,EAAEqN,OAAQ,GAAIlF,GACtByF,EAASzF,EAAKyF,OAAOlF,MAAOyhB,EAASuD,SACrCD,EAAUtlB,EAAKslB,QAAQ/kB,MAAOyhB,EAASuD,SACvCzc,EAAMrD,EAAOjG,OACd,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAAS,CACpC6e,EAAMC,eAAgB,EACtBD,EAAMhgB,OAAS,IAAOsc,EAAI4D,YAAatmB,EAAGoG,EAAQmB,GAAQ5G,IAAU,IACpEylB,EAAMH,QAAU,IAAOvD,EAAI4D,YAAatmB,EAAGimB,EAAS1e,GAAQ5G,IAAU,IACtE6kB,EAAQ,KAAQ9C,EAAI4D,YAAatmB,EAAGomB,EAAMhgB,OAAQzF,IAAU,IAAO,IACnE,IAOC,GADAwlB,EAHQ,IAAInU,OAAQrR,EAAK4lB,QAAUf,EAAQ,IAAMA,EAAQ,IAAKxlB,EAAE/E,cAAcopB,kBAAoB,IAAM,IAGlF9iB,KAAM6kB,EAAMd,QAAW5C,EAAI8D,aAAcxmB,EAAGomB,EAAOrY,GAExE,OAAOoY,EAEP,MAAQniB,GACT,OAAO,MAIT,OAAOmiB,IAAiB,GAK1BM,IAAM,SAAUzmB,EAAGW,EAAMoN,GACxB,GAAK4U,EAAS+D,QAAQnlB,KAAMZ,EAAKyF,QAAW,CAC3C,IAAImB,EAAM4e,EAAexZ,EAAQ6Y,EAEhCY,EAAQ5tB,EAAEqN,OAAQ,GAAIlF,GACtByF,EAASzF,EAAKyF,OAAOlF,MAAOyhB,EAASgE,UACrCV,EAAUtlB,EAAKslB,QAAQ/kB,MAAOyhB,EAASgE,UACvCld,EAAMrD,EAAOjG,OACd,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAAS,CACpC6e,EAAMC,eAAgB,EACtBD,EAAMhgB,OAAS,IAAOsc,EAAI4D,YAAatmB,EAAGoG,EAAQmB,GAAQ5G,IAAU,IACpEylB,EAAMH,QAAU,IAAOvD,EAAI4D,YAAatmB,EAAGimB,EAAS1e,GAAQ5G,IAAU,IACtE6kB,GAAU,KAAQ9C,EAAI4D,YAAatmB,EAAGomB,EAAMhgB,OAAQzF,IAAU,IAAO,KAEnEe,QAASihB,EAAS8C,OAAQ,UAAW/jB,QAASihB,EAAS+C,UAAW,QACpE,IAIC/Y,EAFQ,IAAIqF,OAAQrR,EAAK4lB,QAAUf,EAAQ,IAAMA,EAAQ,IAAKxlB,EAAE/E,cAAcopB,kBAAoB,IAAM,IAEvF9iB,KAAM6kB,EAAMd,QAAW5C,EAAI8D,aAAcxmB,EAAGomB,EAAOrY,GAEnEoY,GADa,IAAT5e,GAGY4e,IAFAxZ,EAIhB,MAAQ3I,GACT,OAAO,MAIT,OAAOmiB,IAAiB,EAEzB,OAAO,MAGRjoB,MAAO,SAAU8B,EAAGW,GACnB,GAAKgiB,EAASzkB,MAAMqD,KAAMZ,EAAKyF,QAAW,CACzC,IAAIwgB,EAEH1oB,EAAQyC,EAAKkmB,kBAAmBlmB,EAAKuG,QAAWyb,EAASzkB,MAAM4oB,KAAMnmB,EAAKyF,QAC1E2gB,EAAU7oB,aAAiB8T,OAC5B,IACO+U,IAGLpmB,EAAKkmB,kBAAmBlmB,EAAKuG,OAAUhJ,EAAQ,IAAI8T,OAAQ9T,EAAM,GAAIA,EAAM,KAE5E0oB,EAAU1oB,EAAMqD,KAAMZ,EAAK2kB,OAC1B,MAAQthB,GACT4iB,GAAU,EAEX,OAAOA,EAER,OAAO,MAGRrB,UAAW,SAAUvlB,EAAGW,GAEvB,GAAKgiB,EAASqE,SAASzlB,KAAMZ,EAAKslB,UAA6B,KAAhBtlB,EAAKsmB,OAAgB,CACnE,IAAIC,EAAava,EAAQtB,EACxBpO,EAAQ+C,EAAE/C,MACVyP,EAAS/L,EAAK+L,OAAQ/L,EAAKuG,OAC3Bse,EAAQ/sB,EAAGma,YAAajS,EAAKslB,QAAQvkB,QAASihB,EAAS4C,UAAW,IAAMtoB,GACxEoM,EAASrJ,EAAEpH,QAAS+H,EAAKuG,QAAW,GACpCigB,EAAc3B,EAyBf,OAvBK9Y,GAA0B,YAAhBrD,EAAO5F,OACrB4H,EAAM7S,EAAE0S,KAAM,GAAKvK,EAAKslB,QAAQvkB,QAASihB,EAAS4C,UAAW,KAE7DC,EAA4B,iBAD5B7Y,EAAS+V,EAAI4D,YAAatmB,EAAGqL,EAAK1K,GAAM,KACW,KAAXgM,GAAkBoE,MAAOpE,GAAsB6Y,EAAT7Y,GAS9Eua,GALMxa,GAA0B,YAAhBrD,EAAO5F,MAAyBsN,MAAOyU,SACjC,IAAf7kB,EAAKsG,OAGZoE,EAAM0F,MAAOpQ,EAAKsmB,QAAWtmB,EAAKsmB,OAAOvlB,QAASjJ,EAAGyF,MAAMsY,SAAU,IAAO7V,EAAKsmB,OACnExuB,EAAGma,YAAavH,EAAKpO,IAHrB0D,EAAKsG,MAKf0b,EAASyE,OAAO7lB,KAAMZ,EAAKslB,SAC/BtZ,EAASgW,EAAS0E,QAAQ9lB,KAAMZ,EAAKslB,SAA2BT,GAAf0B,EAAqC1B,EAAd0B,EAC7DvE,EAAS2E,OAAO/lB,KAAMZ,EAAKslB,WACtCtZ,EAASgW,EAAS4E,QAAQhmB,KAAMZ,EAAKslB,SAAYiB,GAAe1B,EAAQ0B,EAAc1B,GAGjF7Y,GAA0B,KAAhBwa,IACfxa,GAAS,GAEHA,EAER,OAAO,MAGR6a,SAAU,SAAUxnB,EAAGW,GACtB,GAAKgiB,EAAS8E,QAAQlmB,KAAMZ,EAAKslB,SAAY,CAC5C,IAAI1e,EACH8D,EAAM1K,EAAKslB,QAAQvkB,QAAS,IAAK,IACjC0E,EAASsc,EAAI4D,YAAatmB,EAAGqL,EAAK1K,IAAU,GAC7C,OAAKgiB,EAAS2C,MAAM/jB,KAAM6E,GAGP,MADlBA,EAASA,EAAO1E,QAASihB,EAAS2C,MAAO,MACX9sB,EAAE0S,KAAM9E,KAAazF,EAAKsmB,QAExD1f,EAAO5G,EAAKsmB,OAAOvC,OAAQlsB,EAAE0S,KAAM9E,IACjB,KAAXA,IAENzF,EAAK+mB,SAAWngB,EAAO,IAEpBvH,EAAE/E,cAAckqB,kBAA6B,IAAT5d,EAAqB,GAARA,KAGvD,OAAO,MAGR+d,MAAO,SAAUtlB,EAAGW,GAEnB,GAAKgiB,EAAS2C,MAAM/jB,KAAMZ,EAAKslB,SAAY,CAC1C,IAAI5a,EAAM1K,EAAKslB,QAAQvkB,QAASihB,EAAS2C,MAAO,IAC/Clf,EAASsc,EAAI4D,YAAatmB,EAAGqL,EAAK1K,IAAU,GAE7C,OAAOA,EAAK+mB,SAAiD,GAAtClvB,EAAE8V,QAASlI,EAAQzF,EAAKgnB,UAAkBvhB,GAAUzF,EAAKsmB,OAEjF,OAAO,MAGRW,MAAQ,SAAU5nB,EAAGW,GACpB,GAAKgiB,EAASkF,OAAOtmB,KAAMZ,EAAKslB,SAAY,CAC3C,IAAItZ,EAAQtM,EAAKynB,EAAQC,EACxB9qB,EAAQ+C,EAAE/C,MACViK,EAAQvG,EAAKuG,MACbwF,EAAS/L,EAAK+L,OAAOxF,GAErBse,EAAQ7kB,EAAKslB,QAAQ/kB,MAAOyhB,EAASqF,SAsBtC,OApBA3nB,EAAMmlB,EAAM,GAAG9jB,QAASjJ,EAAGyF,MAAMsY,SAAU,KAAQ,GACnDsR,EAASrvB,EAAGma,YAAa8P,EAAI4D,YAAatmB,EAAGK,EAAKM,GAAQ1D,GAC1DoD,EAAMmlB,EAAM,GAAG9jB,QAASjJ,EAAGyF,MAAMsY,SAAU,KAAQ,GACnDuR,EAAStvB,EAAGma,YAAa8P,EAAI4D,YAAatmB,EAAGK,EAAKM,GAAQ1D,IAErDyP,GAAsC,YAA5B1M,EAAEpH,QAASsO,GAAQzD,OAEjCqkB,EAAsB,MADtBnb,EAAS3M,EAAEpH,QAASsO,GAAQqE,OAAQ,GAAKia,EAAM,GAAIvoB,EAAO+C,EAAEgC,SAAS8K,GAAI5F,GAASA,KACrD6J,MAAOpE,GAAsBmb,EAATnb,EAEjDob,EAAsB,MADtBpb,EAAS3M,EAAEpH,QAASsO,GAAQqE,OAAQ,GAAKia,EAAM,GAAIvoB,EAAO+C,EAAEgC,SAAS8K,GAAI5F,GAASA,KACrD6J,MAAOpE,GAAsBob,EAATpb,GAMjDA,GAJMD,GAAsC,YAA5B1M,EAAEpH,QAASsO,GAAQzD,MAAyBsN,MAAO+W,IAAa/W,MAAOgX,IAGvF1nB,EAAM0Q,MAAOpQ,EAAKsmB,QAAWtmB,EAAKsmB,OAAOvlB,QAASjJ,EAAGyF,MAAMsY,SAAU,IAAO7V,EAAKsmB,OACxExuB,EAAGma,YAAavS,EAAKpD,IAHrB0D,EAAKsG,MAKD8gB,EAATD,IACJznB,EAAMynB,EAAQA,EAASC,EAAQA,EAAS1nB,GAEtBynB,GAAVnb,GAAoBA,GAAUob,GAAyB,KAAXD,GAA4B,KAAXC,EAEvE,OAAO,MAGRE,KAAO,SAAUjoB,EAAGW,GACnB,GAAKgiB,EAASuF,WAAW3mB,KAAMZ,EAAKslB,SAAY,CAC/C,IAAIT,EAAQ,IAAO9C,EAAI4D,YAAatmB,EAAGW,EAAKslB,QAAStlB,IAAU,KAEzDgiB,EAASwF,SAAS5mB,KAAMikB,IAAW7kB,EAAK0lB,gBAC7Cb,EAAQ7kB,EAAK4lB,QAAUf,EAAQ,KAAOA,EAAQ,MAG/C,IACC,OAAO,IAAIxT,OACVwT,EAAM9jB,QAASihB,EAAS8C,OAAQ,UAAW/jB,QAASihB,EAAS+C,UAAW,QACxE1lB,EAAE/E,cAAcopB,kBAAoB,IAAM,IAE1C9iB,KAAMZ,EAAK2kB,OACX,MAAQthB,GACT,OAAO,MAGT,OAAO,MAGRokB,MAAO,SAAUpoB,EAAGW,GACnB,GAAKgiB,EAAS0F,UAAU9mB,KAAMZ,EAAKslB,SAAY,CAC9C,IAAI1e,EACH+gB,EAAc,EACd7e,EAAM9I,EAAKsmB,OAAO9mB,OAClBkL,EAAM1K,EAAKslB,QAAQnkB,MAAO,GAC1BymB,EAAU7F,EAAI4D,YAAatmB,EAAGqL,EAAK1K,IAAU,GAC9C,IAAM4G,EAAO,EAAGA,EAAOkC,EAAKlC,IACtB5G,EAAKsmB,OAAQ1f,KAAWghB,EAASD,KACrCA,GAAe,GAGjB,OAAOA,IAAgBC,EAAQpoB,OAEhC,OAAO,OAGT6E,KAAM,SAAU/H,GAEfxE,EAAGoF,SAAWrF,EAAEqN,QAAQ,EAAM,GAAI,CACjC2iB,GAAM,KACNzC,GAAM,KACNU,IAAM,OACJhuB,EAAGoF,UAKQ,SAAb4qB,EAAsBC,EAAQ7V,EAAK8V,GAGlC,MAAe,MAFf9V,EAAMA,EAAI3H,QAEU,IAAMwd,GAAU,IAAM7V,GAAO8V,GAAU,IAN7D,IAAI5W,EAAS7S,EAAQmM,EAAKwC,EAAS9F,EAAQuD,EAAKsd,EAAKC,EACpD7oB,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cAmHR,GA7GA+E,EAAEM,OAAOyB,SAAU,cACnB/B,EAAEqe,WAAa,GAGfvM,EAAGgX,mBAAqB,KACxBhX,EAAGiX,iBAAmB,KACtBjX,EAAGkX,sBAAwB,EAC3BlX,EAAGmX,qBAAuB,GAC1BnX,EAAGoX,yBAA2B,0CAC9BpX,EAAGqX,8BAAgC,wCAEnC7d,EAAM,MAAQqX,EAAS6C,MAAQ,MAC/BhtB,EAAEqN,OAAQ8c,EAAU,CACnBzW,MAAQ,IAAI8F,OAAQhS,EAAErE,aACtBoiB,SAAW,IAAI/L,OAAQF,EAAGqM,oBAC1BiL,gBAAkB,IAAIpX,OAAQ,UAAYyW,EAAW,IAAKhwB,EAAGoF,SAASkoB,IAAM0C,EAAW,IAAKhwB,EAAGoF,SAAS2qB,IAAM,SAAU,KACxHX,OAAS,IAAI7V,OAAQ,SAAWyW,EAAW,IAAKhwB,EAAGoF,SAAS2qB,IAAM,QAAS,KAC3ER,QAAU,IAAIhW,OAAQ,cAAgByW,EAAW,IAAKhwB,EAAGoF,SAAS2qB,IAAM,SAAU,MAClF9B,QAAU,IAAI1U,OAAQ,QAAUyW,EAAW,GAAIhwB,EAAGoF,SAAS4oB,IAAK,KAAO,UAAW,KAClFE,SAAW,IAAI3U,OAAQ,aAAeyW,EAAW,GAAIhwB,EAAGoF,SAAS4oB,IAAK,KAAO,WAAY,MACzFT,OAAS,IAAIhU,OAAQ,OAASyW,EAAW,QAAShwB,EAAGoF,SAASkoB,GAAI,QAAU,IAAK,KACjFG,QAAU,IAAIlU,OAAQ,SAAWyW,EAAW,WAAYhwB,EAAGoF,SAASkoB,GAAI,SAAW,IAAK,MACxFsD,OAAS,IAAIrX,OAAQ1G,EAAK,KAC1Bge,QAAU,IAAItX,OAAQ1G,EAAK,MAC3B0b,SAAW,UACXI,OAAU,IACVC,QAAU,KACVC,OAAU,IACVC,QAAU,KACVE,QAAU,MACVS,WAAa,WACbC,SAAW,OACXE,UAAY,KACZkB,UAAY,aAKbje,EAAMtL,EAAEgC,SAASoE,OAAQ,gCAAiCjG,QACzB,IAA5B2R,EAAG4R,sBAAkCpY,IAAQtL,EAAEgC,SAAS7B,QAE5DuiB,EAAI8G,SAAUvsB,EAAO+C,EAAG8R,GAGzBzG,EAAM,+EACL,wDAAwDnK,MAAO,KAAMgD,KAAMlE,EAAEyB,UAAY,WAC1FzB,EAAEM,OAAO+C,KAAMgI,EAAK,SAAUiE,EAAOlJ,GA2CpC,OA1CAkF,EAAMwG,EAAGqS,kBACR3rB,EAAEwO,cAAehH,EAAEiH,UAChBjH,EAAErG,WAA4B,gBAAf2V,EAAM7L,MAEzBzD,EAAEM,OAAO2B,KAAM,IAAM2gB,EAAMzB,WAAYpL,YAAajE,EAAGqM,mBAAoB7S,GACrE,kBAAkB/J,KAAM+N,EAAM7L,QACnC6L,EAAMlL,kBACNse,EAAI+G,aAAcxsB,GAAO,IAGN,gBAAfqS,EAAM7L,MAAyC,uBAAf6L,EAAM7L,MAC1CzD,EAAEM,OAAO2B,KAAM,IAAM2gB,EAAMxc,QAASD,IAAK2L,EAAG4X,yBAA0Bpe,IAAK,IACvD,uBAAfgE,EAAM7L,KACVhL,EAAG6B,UAAW+J,KAAK3D,OAAQ,WAC1BgiB,EAAIiH,UAAW1sB,EAAO,MAGvBylB,EAAIiH,UAAW1sB,EAAO,KAEG,qBAAfqS,EAAM7L,KACjBhL,EAAGmjB,QAAS3e,EAAO,sBAAuB,IAChB,cAAfqS,EAAM7L,KACjBif,EAAI+G,aAAcxsB,GAAO,IAIzBmJ,EAAwB,WAAfkJ,EAAM7L,KAAoB2C,EACnB,mBAAfkJ,EAAM7L,KAA4BzD,EAAEM,OAAOK,KAAM,cAAiB,GAC9D,eAAeY,KAAM+N,EAAM7L,OAAyB,mBAAf6L,EAAM7L,OAE/CzD,EAAE4pB,mBAAqB,KACvB5pB,EAAEqe,WAAa,GAEf3a,WAAW,WACV1D,EAAEM,OAAOwD,eAAgB,yBACvB,MAKJ4e,EAAIiH,UAAW1sB,EAAOmJ,GAAQ,KAExB,IAIH0L,EAAG8S,eACF9S,EAAG8S,wBAAwBpsB,EAE/BsZ,EAAG8S,aAAa9F,MAAO,WACtB9e,EAAEM,OAAOwD,eAAgB,iBAEftL,EAAGsZ,EAAG8S,cAAezkB,QAEhC3H,EAAGolB,UACDyH,WAAYvT,EAAG8S,aAAc,QAAU5kB,EAAEyB,UAAY,UACrDooB,SAAU/X,EAAG8S,aAAc,QAAU5kB,EAAEyB,UAAY,SAAU,WAE7DzB,EAAEM,OAAOwD,eAAgB,kBAIxBgO,EAAGoS,iBACP,IAAMnc,EAAS,EAAGA,EAAS/H,EAAE0H,QAASK,IAErC,GADA6gB,EAAMnwB,EAAGyP,cAAejL,EAAO6U,EAAGoS,iBAAkBnc,GAQnD,GAFA8gB,KAFAhb,EAAU7N,EAAEmH,eAAgBY,GAASkF,YAAa,kBAE5BnG,SAAU,iBAAoB+G,EAAQ/G,SAAU,mBACtEiL,EAAU,MACL6W,GAAgBC,EACpBnG,EAAIoH,YAAa7sB,EAAO8K,QAClB,GAAoB,iBAAR6gB,GAAoBC,EAAW,CAEjD,IAAM3pB,KAAU0pB,EACQ,iBAAX1pB,IACX6S,GAAuB,KAAZA,EACV,qBACGlE,EAAQlN,KAAM,gBACfkN,EAAQrM,KAAM,qBACdsQ,EAAG2S,mBAAmBE,QACtB,IAEF,YAAc,GAG2C,IAD1DtZ,EADAC,EAAMpM,GAEM2L,QAASiH,EAAGoT,gCAEvB7Z,GADAC,EAAMpM,EAAOgC,MAAO4Q,EAAGoT,+BACb,GACV5Z,EAAMA,EAAI,IAEXyG,GAAW,YACR1G,IAAQC,EAAM,GAAK,uBAAyBpM,EAAS,MACvD,UAAYoM,EAAM,KAAOD,EAAM,aAGlCrL,EAAEM,OACA2B,KAAM,SACNA,KAAM,UAAY2gB,EAAMxc,OAAS,iBAAmB2B,EAAS,MAC7D+G,OAAQiD,IAEV6W,EAAqB,mBADrBvd,EAAMyG,EAAGmT,sBACgCxsB,EAAGyP,cAAejL,EAAOoO,EAAKtD,KAGtE2a,EAAIoH,YAAa9pB,EAAE/C,MAAO8K,EAAQ,IAAI,EAAM8F,EAAQ/G,SAAUgL,EAAG0S,mBAQtE9B,EAAI+G,aAAcxsB,GAAO,GAEzBylB,EAAIqH,WAAY9sB,EAAO+C,EAAEM,OAAO2B,KAAM,IAAM2gB,EAAMxc,SAAU,GACvD0L,EAAGiS,iBACPrB,EAAIqH,WAAY9sB,EAAO6U,EAAGiS,iBAGtBjS,EAAGsS,oBACP1B,EAAIsH,YAAahqB,GAIbA,EAAE/G,iBACNoS,EAAM,yBAAyBnK,MAAO,KAAMgD,KAAMlE,EAAEyB,UAAY,cAChEzB,EAAEM,OACA8C,OAAQiI,EAAI3J,QAASjJ,EAAGyF,MAAMI,OAAQ,MACtC+E,KAAMgI,EAAK,SAAUiE,EAAO5H,GAE7BmG,EAAU,EACT7N,EAAEM,OACA2B,KAAM,IAAM2gB,EAAMvlB,QAClB+I,OAAQ,iBACRA,OAAQ,WACR,MAAiD,KAA1CsB,EAASlP,EAAG6L,MAAO1D,KAAM,aAC5B,GACPlI,EAAGgI,aAAcxD,EAAsB,gBAAfqS,EAAM7L,KAAwBiE,EAAUmG,EAAU,OAK5E7N,EAAEka,aAAela,EAAE2C,UAGnB0I,EAAM,kDAAkDnK,MAAO,KAAMgD,KAAMlE,EAAEyB,UAAY,WACzFzB,EAAEM,OACD8C,OAAQiI,EAAI3J,QAASjJ,EAAGyF,MAAMI,OAAQ,MACtC+E,KAAMgI,EAAK,WACXqX,EAAIuH,aAAc5lB,QAGdrE,EAAEmP,OAASnP,EAAEmP,MAAMhU,cAAgB2W,EAAGyL,oBAC1Cvd,EAAEM,OAAOwD,eAAgB,wBACzBJ,WAAY,WACXgf,EAAIwH,mBAAoBlqB,IACtB,MACS8R,EAAGyL,oBACfmF,EAAIuH,aAAchtB,IAGpBgtB,aAAc,SAAUhtB,GAEvB,IAAI+C,EAAI/C,EAAMyD,OACboR,EAAK9R,EAAE/E,cACPkvB,EAAUzH,EAAI0H,YAAantB,EAAO+C,EAAG8R,IAAQ,GACzCqY,EAAQhqB,SAEJH,EAAErG,WAAoC,KAAvBwwB,EAAQjmB,KAAM,KACpCzL,EAAG4xB,WAAYptB,EAAOktB,GAAS,IAGjCnqB,EAAEM,OAAOwD,eAAgB,wBAEzBJ,WAAY,WACLoO,EAAGyL,oBACRmF,EAAIwH,mBAAoBlqB,IAEvB,MAKJsqB,iBAAkB,SAAUhkB,EAAOyB,GAElC,IAAIzH,EAASgG,GAASA,EAAMsH,QAAS,SACjClN,EAASJ,EAAOH,QAAUG,EAAO,GAAGI,OACvCoR,EAAKpR,GAAUA,EAAOzF,cAClB6W,IAAOA,EAAGyL,qBAGdzL,EAAGmX,qBAAsBlhB,GAAW,IAGtCmiB,mBAAoB,SAAUlqB,GAIhB,SAAZuqB,IACCzY,EAAGyL,oBAAqB,EAExBvd,EAAEqe,WAAare,EAAEM,OAAOK,KAAM,cAC9BX,EAAEM,OAAOwD,eAAgB,aAAc9D,GACvC0iB,EAAI8H,SAAUxqB,EAAE/C,MAAO+C,EAAEqe,YAAc,IACnC5lB,EAAGiE,MAAMsD,EAAG,WACfY,QAAQ+C,IAAI,gCAVf,IAAI4D,EAAMkC,EACTqI,EAAK9R,EAAE/E,cACPsN,EAAQ,EAWT,GAAK/P,EAAEwO,cAAe8K,EAAGmS,kBACxBsG,QACM,CAEN,IADA9gB,EAAMqI,EAAGmX,qBAAqB9oB,OACxBoH,EAAO,EAAGA,EAAOkC,EAAKlC,IACc,IAApCuK,EAAGmX,qBAAsB1hB,IAC7BgB,IAGFhF,aAAcuO,EAAGiX,kBACXjX,EAAGyL,oBAAsBhV,IAAUuJ,EAAGkX,sBAG/BlX,EAAGyL,qBAGfzL,EAAGiX,iBAAmBrlB,WAAY,WACjC6mB,KACE,MANHA,MAWHE,eAAgB,SAAUN,EAASO,GAClC,IAAInjB,EAEHoF,EAAS,GACTge,EAAOD,EAAS/M,mBAAqBiN,mBACrCnhB,EAAM0gB,EAAQhqB,OACf,IAAMoH,EAAO,EAAGA,EAAOkC,EAAKlC,IACtB4iB,EAAS5iB,KACboF,EAAQpF,GAASojB,EAAMR,EAAS5iB,KAGlC,OAAOoF,GAERyd,YAAa,SAAUntB,EAAO+C,EAAG8R,GAChC,IAAIjC,EAASgb,EAAOtjB,EAAMiG,EAAKsd,EAE9BX,EAAU1xB,EAAGsyB,WAAY9tB,IAAW,GAUrC,GATK6U,EAAGgT,oBAAsBrsB,EAAGmjB,UAChCiP,EAAQpyB,EAAGmjB,QAAS3e,EAAO,wBAA2B,IACtD4S,EAAUrX,EAAEqX,QAASgb,KAEmB,KAArBA,EAAM3mB,KAAM,MAAgB2L,IAC9Csa,EAAUzH,EAAI+H,eAAgBI,KAIJ,KAAvBV,EAAQjmB,KAAM,IAIlB,IAFA4mB,EAAW9qB,EAAEgC,SAASmE,IAAK2L,EAAG4X,yBAC5BtjB,OAAQ,IAAM0L,EAAG8R,qBAAuB,KACpCrc,EAAO,EAAGA,GAAQvH,EAAE0H,QAASH,IAElCiG,EAAMjG,IAASvH,EAAE0H,QAAU,MAAQH,EACnC4iB,EAAS5iB,GAASujB,EAChB1kB,OAAQ,iBAAmBoH,EAAM,MACjChM,KAAMsQ,EAAG8R,uBAA0BuG,EAAQ5iB,IAAS,GAIxD,OADAvH,EAAEM,OAAOK,KAAM,aAAcwpB,GACtBA,GAER7D,YAAa,SAAUtmB,EAAGoG,EAAQzF,EAAM+L,GACvC,OAAOA,GAAU/L,EAAK+L,OAAQ/L,EAAKuG,OAClClH,EAAEpH,QAAS+H,EAAKuG,OAAQqE,OAAQnF,EAAQpG,EAAE/C,MAAO,GAAI0D,EAAKuG,OAC1Dd,GAEFojB,SAAU,SAAUvsB,EAAO+C,EAAG8R,GAC7B,IAAIkZ,EAASxd,EAAKzF,EAAQ8F,EAASod,EAAYlO,EAAUvX,EAAM0lB,EAAM7qB,EAEpE8qB,EAAarZ,EAAGuR,kBAChB3b,EAAU1H,EAAE0H,QACZ6H,EAAO/W,EAAEqX,QAASsb,GAClBC,EAAc,4BAA8BxI,EAAMzB,UAAY,IAAMnhB,EAAElE,aAAe,KACtF,IAAMiM,EAAS,EAAGA,EAASL,EAASK,IAC9B/H,EAAEmH,eAAgBY,GAAS5H,SAI9BirB,GADU,GADX/qB,EAAML,EAAEmH,eAAgBY,IAAY/H,EAAEmH,eAAgBY,GAAS,GAAGmC,SAAW,GAE7D,oBAAsBnC,EAAS,KAAQA,EAAS1H,EAAM,GAAM,cAAgBA,EAAM,IAElF,oBAAsB0H,EAAS,IAG9CqjB,GADI7b,EACa4b,EAAYpjB,GAAW,WAAaojB,EAAYpjB,GAAW,IAAM,GAElD,KAAfojB,EAAoB,WAAaA,EAAa,IAAM,GAEtEC,GAAe,UAOjB,IAJAprB,EAAE8qB,SAAWtyB,EAAG4yB,GAAe,SAC7BrM,SAAU/e,EAAEM,OAAO4B,SAAU,SAAU4K,GAAI,IAC3C5K,SAAU,MAEN6F,EAAS,EAAGA,EAASL,EAASK,IACnCgV,GAAW,GAEXlP,EAAU7N,EAAEmH,eAAgBY,KACZ8F,EAAQ1N,SAEvB6qB,EAAUtI,EAAI2I,aAAcrrB,EAAGA,EAAE8qB,SAAU/iB,GAC3CmjB,EAAOzyB,EAAGyP,cAAejL,EAAO6U,EAAGoS,iBAAkBnc,GACrDkjB,EAAenZ,EAAGoS,kBAAoBgH,GAAwB,mBAATA,GACpDrd,EAAQ/G,SAAU,iBAEnB0G,EAAM/U,EAAGyP,cAAejL,EAAO+C,EAAElG,QAASiO,GAC1CgV,EAAuD,UAA5CtkB,EAAG6P,QAASuF,EAAQ,GAAIL,EAAK,WACK,UAA5C/U,EAAG6P,QAASuF,EAAQ,GAAIL,EAAK,UAEzByd,EACJG,EAAc5yB,EAAG,YAAaumB,SAAUiM,KAExCE,EAAOzyB,EAAGyP,cAAejL,EAAO6U,EAAGmS,iBAAkBlc,KAEpD+J,EAAGkX,yBACHoC,EAAcF,EAAMF,EAASjjB,KAEc,IAAvBqjB,EAAYjrB,SAC/BirB,EAAcJ,EAAQ9oB,SAAU,UAG5BkpB,IAAiD,IAAhCA,EAAYE,SAASnrB,QACxCirB,EAAYE,SAASnrB,QAAUirB,EAAYE,SAAS,KAAON,EAAQ,KACrEA,EAAQlc,OAAQsc,IAGjBA,EAAc5yB,EAAG,yBAA0BumB,SAAUiM,GAEjDI,IACJ/qB,EAAMwN,EAAQlN,KAAM,gBACnBkN,EAAQrM,KAAM,qBACdsQ,EAAG2S,mBAAmBC,QAAU,GACjC0G,EAAY5pB,KAAM,cAAenB,KAG9B+qB,IAEJ5lB,GAAShN,EAAEqX,QAASiC,EAAG6R,uBACmB,IAAhC7R,EAAG6R,iBAAiB5b,IAA0B+J,EAAG6R,iBAAiB5b,IAAgB,GAC3F+J,EAAG6R,mBAAsB,GAE1ByH,EAAYrpB,SAAU6gB,EAAMxc,OAAS,IAAMZ,GAI1CnF,GAFDA,GADAmF,EAAOsM,EAAGkS,oBACCpd,MAAM,mBAEV,CAAE,aAETpO,EAAEmX,KAAKtP,EAAK,SAASkH,EAAM/F,GAC1B,IAAItD,EAAQ,IAAI8T,OAAOxQ,EAAM,KAC5Bb,EAAOkN,EAAQrM,KAAK,QAAUA,EAAKE,QAAQ,SAAU,KACrDsI,OAAuB,IAATrJ,EAAuBkN,EAAQ7D,OAASrJ,EACvD6E,EAAOA,EAAK9D,QAASxD,EAAO1F,EAAE0S,KAAMlB,MAErCohB,EAAY5pB,KAAK,CAChB,cAAewpB,EAAQxpB,KAAM,eAC7B,aAAcgE,IAEVuX,IACJqO,EAAY5pB,KAAM,cAAe,IAAKO,SAAU6gB,EAAME,gBAAiB,GAAG/F,UAAW,MAM1FgN,WAAY,SAAU9sB,EAAO+P,EAAKue,GAGjC,GAFAtuB,EAAQzE,EAAGyE,GAAQ,IACnB+P,EAAMxU,EAAGwU,IACC7M,OAAV,CACA,IAAIE,EACHL,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cACPwG,EAAYzB,EAAEyB,UAAY,SAC1B+pB,EAAO1Z,EAAG4X,yBACO,IAAb6B,IAEJlrB,EAAMyR,EAAGoX,yBAA2B,IAAMpX,EAAGqX,8BAC7CrX,EAAG2Z,iBAAmBze,EAAI5G,OAAQ/F,GAC7BmrB,GAAQA,EAAKrrB,OACjB2R,EAAG4X,wBAA0B5X,EAAG4X,wBAAwBvjB,IAAK6G,GAE7D8E,EAAG4X,wBAA0B1c,EAG9BvU,EAAG4xB,WAAYptB,EAAO+C,EAAEM,OAAOK,KAAM,eAAkB,IAAiB,IAAb4qB,IAG5DlrB,EAAQ,8CAA8Ca,MAAO,KAAMgD,KAAMzC,EAAY,KACrFuL,EAGCxL,KAAM,uBAAuB,IAAIV,MAAO2R,WACxCrP,OAAQ/C,EAAIqB,QAASjJ,EAAGyF,MAAMI,OAAQ,MACtC+E,KAAM,UAAY5B,EAAW,SAAU6N,GACvC,GAAKA,EAAM5I,QAAUmc,EAAWI,SAAWhmB,EAAMyD,OAAOzF,cAAc4pB,kBAErE,OAAO,IAGRxhB,KAAM,QAAU5B,EAAW,SAAU6N,GACrCwC,EAAK7U,EAAMyD,OAAOzF,cAClB,IAAI8M,EAAS5G,SAAU3I,EAAG6L,MAAO7C,KAAM,eAAiB,IACvDkqB,EAA6C,kBAAzB5Z,EAAGwS,kBAAkCxS,EAAGwS,kBAC3D7rB,EAAGyP,cAAejL,EAAO6U,EAAGwS,kBAAmBvc,GAMjD,QAL2B,IAAf2jB,IACXA,EAAa5Z,EAAGwS,kBAAkBqH,WAAY,GAE/CnzB,EAAG6L,MAAO7C,KAAM,uBAAuB,IAAIV,MAAO2R,WAE7CnD,EAAM5I,QAAUmc,EAAWI,OAE/B5e,KAAKkb,MAAQzN,EAAG+S,kBAAoB,GAAK7kB,EAAEqe,WAAWtW,OAEhD,IAAoB,KAAf1D,KAAKkb,QAEQ,iBAAfmM,GAA2BrnB,KAAKkb,MAAMpf,OAASurB,GAEtDpc,EAAM5I,QAAUmc,EAAWjjB,OAAS0P,EAAM5I,QAAUmc,EAAWG,YAC9D1T,EAAM5I,MAAQmc,EAAWK,OAAW5T,EAAM5I,OAASmc,EAAWM,MAAQ7T,EAAM5I,OAASmc,EAAWO,OACnG,OAEM,IAAoB,IAAfsI,GACS,KAAfrnB,KAAKkb,OAAgBjQ,EAAM5I,QAAUmc,EAAWjjB,MACpD,OAIF8iB,EAAIiH,UAAW1sB,GAAO,GAAM,EAAM8K,KAGlC1E,KAAM,qCAAqCnC,MAAO,KAAMgD,KAAMzC,EAAY,KAAO,SAAU6N,GAE3F,IAAIvH,EAAS5G,SAAU3I,EAAG6L,MAAO7C,KAAM,eAAiB,IACvDoqB,EAAYtc,EAAM7L,KAClBioB,EAA6C,kBAAzB5Z,EAAGwS,kBACtBxS,EAAGwS,kBACH7rB,EAAGyP,cAAejL,EAAO6U,EAAGwS,kBAAmBvc,IAC5C9K,EAAMyD,OAAOzF,cAAcsiB,oBAE7BjO,EAAM5I,QAAUmc,EAAWjjB,OAEZ,WAAdgsB,GAAwC,SAAdA,IAEZ,WAAdA,GAAwC,UAAdA,IAEX,IAAfF,KAAsC,IAAfA,GAAiD,UAA1Bpc,EAAM7I,OAAOP,WAG7D7B,KAAKkb,QAAUvf,EAAEqe,WAAWtW,MAG7BuH,EAAMzI,iBAENrO,EAAG6L,MAAO7C,KAAM,uBAAuB,IAAIV,MAAO2R,WAClDiQ,EAAIiH,UAAW1sB,EAAqB,aAAd2uB,GAA0B,EAAM7jB,QAIzD4hB,UAAW,SAAU1sB,EAAOmJ,EAAQylB,EAAW9jB,GAC9C,IAAI2jB,EACH5Z,EAAK7U,EAAMyD,OAAOzF,mBACG,IAAX8M,EAEV2jB,GAAa,OAMc,KAJ3BA,EAA6C,kBAAzB5Z,EAAGwS,kBACtBxS,EAAGwS,kBAEH7rB,EAAGyP,cAAejL,EAAO6U,EAAGwS,kBAAmBvc,MAE/C2jB,EAAa5Z,EAAGwS,kBAAkBqH,WAAY,GAGhDpoB,aAAcuO,EAAGgX,yBACM,IAAX1iB,IAAqC,IAAXA,EAErC0L,EAAGgX,mBAAqBplB,WAAY,WACnCgf,EAAIoJ,aAAc7uB,EAAOmJ,EAAQylB,IAC/BH,EAAa5Z,EAAGiT,mBAAqB,IAGxCrC,EAAIoJ,aAAc7uB,EAAOmJ,EAAQylB,IAGnCzN,aAAc,SAAUpe,EAAG+rB,EAASC,GACnC,IAAIzkB,EACH0kB,EAAK,GACLC,EAAK,GACLziB,EAAMzJ,EAAE0H,QAAU,EAGnB,IAFAqkB,EAAUvzB,EAAEqX,QAAQkc,GAAWA,EAAU,GACzCC,EAAUxzB,EAAEqX,QAAQmc,GAAWA,EAAU,GACpCzkB,EAAO,EAAGA,EAAOkC,EAAKlC,IAC1B0kB,EAAG1kB,GAAQwkB,EAAQxkB,IAAS,GAC5B2kB,EAAG3kB,GAAQykB,EAAQzkB,IAAS,GAE7B,OAAO0kB,EAAG/nB,KAAK,OAASgoB,EAAGhoB,KAAK,MAEjC4nB,aAAc,SAAU7uB,EAAOmJ,EAAQylB,GACtC,IAAI7rB,EAAI/C,EAAMyD,OACboR,EAAK9R,EAAE/E,cACPkxB,EAAc3zB,EAAEqX,QAASzJ,GACzB+jB,EAAU,EAAkB/jB,EAAS3N,EAAGsyB,WAAY9tB,GAAO,GAC3Dod,EAAiB8P,GAAW,GAE7B,GAAK3xB,EAAEwO,cAAehH,EAAEiH,OAElBjH,EAAErG,aAAgBqG,EAAEmP,OAASnP,EAAEmP,OAASnP,EAAEmP,MAAMhU,cACpD1C,EAAG0M,YAAanF,EAAG,WAClB0iB,EAAIoJ,aAAc7uB,GAAO,EAAO4uB,UAqBnC,GAfKM,IACJ1zB,EAAG4xB,WAAYptB,EAAOktB,GAAS,GAAqB,IAAd0B,GAChC/Z,EAAGyL,qBACRvd,EAAEqe,WAAa,GACfre,EAAE4pB,mBAAqB,KAGpB9X,EAAGsS,oBAEPpkB,EAAEM,OACA2B,KAAM,IAAM2gB,EAAMzB,WAClBrd,eAAgB4e,EAAI0J,iBAAkBpsB,GAAM,aAAe,eAIzD0iB,EAAItE,aAAape,EAAGA,EAAEqe,WAAYhE,KAA8B,IAAXjU,EAA1D,CAkBA,IAhBuB,IAAXA,IAEXpG,EAAE4pB,mBAAqB,GACvB5pB,EAAEqe,WAAa,IAGhB8L,EAAUA,GAAW,GAErBA,EAAU5W,MAAM8J,UAAUzV,IACzBuiB,EAAQviB,IAAKykB,QAEblC,EAAQjmB,KAAM,KAAWhD,MAAO,KAE5B4Q,EAAGyL,oBACPvd,EAAEM,OAAOwD,eAAgB,cAAe,CAAEqmB,KAEtCnqB,EAAE/G,eAQN,OADAypB,EAAI8H,SAAUvtB,EAAOktB,EAAS9P,IACvB,EANP3W,WAAY,WAEX,OADAgf,EAAI8H,SAAUvtB,EAAOktB,EAAS9P,IACvB,GACL,MAML+R,iBAAkB,SAAUpsB,GAC3B,GAAkD,mBAAvCA,EAAE/E,cAAcmpB,mBAAmC,CAC7D,IAAI9Y,EAAMtL,EAAE/E,cAAcmpB,mBAAoBpkB,GAC9C,GAAmB,kBAARsL,EACV,OAAOA,EAGT,MAAgD,KAAzC7S,EAAGsyB,WAAY/qB,EAAEM,QAAS4D,KAAM,KAExC8lB,YAAa,SAAUhqB,EAAGM,GACzB,IAAIgH,GACFhH,GAAUN,EAAEM,QACZ2B,KAAM,IAAM2gB,EAAMzB,WAClBpf,SAAU6gB,EAAMG,eAChB1f,KAAM,wBAAyB,SAAUC,GAEzC,IAAIgM,EAAQhM,EACXsB,EAAOpM,EAAG6L,MACXd,aAAc+D,GACdA,EAAQ5D,WAAY,WACd,aAAanC,KAAM+N,EAAM7L,MAC7BmB,EAAKqI,YAAa2V,EAAMG,eAInBvqB,EAAGolB,SAAS0O,eAAgB1e,QAAS,MAAO,KAAOhJ,EAAK,IAE5DA,EAAKmR,YAAa6M,EAAMG,cAAeL,EAAI0J,iBAAkBpsB,KAG7D,OAEHiC,KAAM,iBAAkBoB,KAAM,aAAc,SAAUC,GACtD,IAAIgM,EAAQhM,EACXsB,EAAOpM,EAAG6L,MAAOuJ,QAAS,MAC3BrK,aAAc+D,GACdA,EAAQ5D,WAAY,WACnBH,aAAc+D,GAEd1C,EAAKmR,YAAa6M,EAAMG,cAAeL,EAAI0J,iBAAkBpsB,IAAsB,UAAfsP,EAAM7L,OACxE,QAGN8oB,cAAe,SAAUnmB,EAAQomB,GAChC,GAAgB,KAAXpmB,EAAkB,OAAOA,EAC9B,IAAIlI,EAAQykB,EAAS0G,OACpBoD,EAAUD,EAAK5lB,MAAO+b,EAAS2G,SAAUnpB,OACzCqlB,EAAkB,EAAViH,EAAcj0B,EAAE0S,KAAM9E,GAASlF,MAAO,MAAS,CAAE1I,EAAE0S,KAAM9E,IACjEqD,EAAM+b,EAAMrlB,OAAS,EACrBoH,EAAO,EACP+D,EAAMkhB,EAQP,IAPK/iB,EAAM,GAAe,EAAVgjB,IAEfjH,EAAM,GAAKA,EAAM,IAKVtnB,EAAMqD,KAAM+J,IACnBA,EAAMA,EAAI5J,QAASxD,EAAOsnB,EAAMje,MAAW,IACtCrJ,EAAMqD,KAAM+J,IAAS/D,EAAOkC,GAAiC,MAAxB+b,EAAMje,IAAS,MACxD+D,EAAMkhB,EAAK9qB,QAASxD,EAAOoN,IAG7B,OAAOA,GAERohB,gBAAiB,SAAUC,GAC1B,OAAKA,EACGA,EAAOzc,KAAM,SAAUC,EAAGC,GAChC,OAAO5X,EAAG4X,GAAI5O,KAAM,uBAA0BhJ,EAAG2X,GAAI3O,KAAM,yBAGtDmrB,GAAUn0B,KAElBo0B,UAAW,SAAU5sB,EAAGsL,EAAKuhB,GAE5B,IAAItmB,EAAMumB,EAAQlF,EAAOmF,EAAO1f,EAAK2f,EAAS1f,EAAG/F,EAAMkC,EACtD/B,EAAU,GACX,GAAK,WAAWnG,KAAM+J,GAErB,MAAO,CAAEnK,SAAUmK,EAAK,KAGzB,IAAMuhB,GAAgB,IAAItrB,KAAM+J,GAG/B,IADA7B,GADAqjB,EAASxhB,EAAI1E,MAAO,uBACLkmB,EAAO3sB,OAAS,EACzBoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAAS,CAUpC,IATAqgB,EAAQkF,EAAOvlB,GAAMrG,MAAO,WAC5B6rB,EAAQ5rB,SAAUymB,EAAM,GAAI,KAAQ,GACpCva,EAAMlM,SAAUymB,EAAM,GAAI,KAAU5nB,EAAE0H,QAAU,GAC3CqlB,IACJxmB,EAAOwmB,EAAOA,EAAQ1f,EAAKA,EAAM9G,GAE7B8G,GAAOrN,EAAE0H,UACb2F,EAAMrN,EAAE0H,QAAU,GAEXqlB,GAAS1f,EAAK0f,IACrBrlB,EAASA,EAAQvH,QAAW4sB,EAG7BzhB,EAAMA,EAAI5J,QAASorB,EAAQvlB,GAAQ,IAIrC,IAAMslB,GAAgB,IAAItrB,KAAM+J,GAG/B,IADA7B,GADAujB,EAAU1hB,EAAIpK,MAAO,YACPf,OACRmN,EAAI,EAAGA,EAAI7D,EAAK6D,IACC,KAAjB0f,EAAS1f,KACb/F,EAAOpG,SAAU6rB,EAAS1f,GAAK,KACnBtN,EAAE0H,UACbA,EAASA,EAAQvH,QAAWoH,GAMhC,IAAMG,EAAQvH,OACb,IAAMoH,EAAO,EAAGA,EAAOvH,EAAE0H,QAASH,IACjCG,EAASA,EAAQvH,QAAWoH,EAG9B,OAAOG,GAER2jB,aAAc,SAAUrrB,EAAGitB,EAAWllB,GAGrC,OAAOklB,EAAU7mB,OAAQ,WACxB,IAAIqF,EAAOiX,EAAIkK,UAAW5sB,EAAGxH,EAAG6L,MAAO7C,KAAM,gBAC7C,OAAoC,EAA7BhJ,EAAE8V,QAASvG,EAAQ0D,MAG5ByhB,gBAAiB,SAAUltB,EAAG2sB,GAE7B,IAAI7a,EAAK9R,EAAE/E,cAGVkyB,EAAUrb,EAAGyL,qBAAuBoP,EAAOvmB,OAAQ0L,EAAGoX,0BAA2B/oB,OACjFmL,EAAM9S,EAAE0S,KAAMwX,EAAIgK,gBAAiBC,GAASnrB,KAAM,gBAAmB,IACtE,OAAOkhB,EAAIkK,UAAW5sB,EAAGsL,GAAM6hB,IAEhC3G,aAAc,SAAUxmB,EAAGW,EAAMoN,GAChC,IAAImd,EACH/E,EAAgB,KAChBS,EAAU,KACX,IAAMsE,KAAQxI,EAAIoD,MACZttB,EAAE8V,QAAS4c,EAAMnd,EAAKqf,cAAiB,GAAiB,OAAZxG,GAE/B,QADjBA,EAAUlE,EAAIoD,MAAMoF,GAAOlrB,EAAGW,EAAMoN,MAEnCpN,EAAK0sB,UAAYnC,EACjB/E,EAAgBS,GAInB,OAAOT,GAERmH,UAAW,SAAUttB,EAAGutB,GACvB,IACCzb,EAAK9R,EAAE/E,cACP+R,EAAMhN,EAAEmH,eAAgBomB,GAqBzB,OAnBKvgB,EAAIlG,SAAU,oBAEPkG,EAAIlG,SAAU,kBAIpBgL,EAAG4R,qBACP1W,EAAMhN,EAAE8qB,SACN7oB,KAAM,IAAM2gB,EAAMxc,QAClBD,IAAK2L,EAAG4X,yBACRtjB,OAAQ,iBAAmBmnB,EAAc,MAChCzb,EAAG4X,0BACd1c,EAAM8E,EAAG4X,wBAAwBtjB,OAAQ,iBAAmBmnB,EAAc,SAEjEvgB,EAAI7M,QACqE,UAAlFH,EAAE/E,cAAcspB,kBAAoBvX,EAAK,GAAI9G,UAAY,IAAK9E,kBAMjEosB,WAAY,SAAUxtB,EAAGW,EAAMoN,GAC9B,IAAIpB,EAAQwZ,EACXyC,EAAKsC,EAAM7f,EACXyG,EAAK9R,EAAE/E,cACPwyB,GAAU,EACVC,EAAmB5b,EAAG2Z,kBAAoB3Z,EAAG2Z,iBAAiBtrB,OAK9DotB,EAAczb,EAAG2Z,kBAAoB3Z,EAAG2Z,iBAAiBtrB,OAExDuiB,EAAIwK,gBAAiBltB,EAAG8R,EAAG2Z,kBAC3B,GAGF,GAFA9qB,EAAK+K,OAAS/K,EAAKiE,KAAK1C,WACxBvB,EAAK0sB,UAAY,KACZ1sB,EAAKgtB,cAAqC,EAArBJ,EAAYptB,QAAgBQ,EAAKitB,iBAAmBF,EAAqB,CAwBlG,GAvBA/sB,EAAK+mB,UAAW,EAChB/mB,EAAK4lB,SAAU,EACf5lB,EAAKgnB,SAAWhnB,EAAK+K,OAAO9D,IAAK,SAAU0F,GAC1C,IAAoC,EAA/B9U,EAAE8V,QAAShB,EAAGigB,IAAwB5sB,EAAKitB,iBAAmBF,EAUlE,OATK/sB,EAAK+L,OAAQY,GACjBjC,EAAM1K,EAAKktB,WAAYvgB,IAEvBjC,EAAM1K,EAAKmtB,SAAUxgB,GACrBjC,EAAM7S,EAAE0S,KAAM4G,EAAGuS,kBAAoBhZ,EAAIjK,cAAgBiK,GACpDrL,EAAE3F,oBACNgR,EAAM5S,EAAGsc,eAAgB1J,KAGpBA,IAEN0iB,MACHptB,EAAKyF,OAASzF,EAAKitB,eACnBjtB,EAAKslB,QAAUtlB,EAAKqtB,gBACpBrtB,EAAK2kB,MAAQ3kB,EAAKgnB,SAASzjB,KAAM,KACjCvD,EAAKsmB,OAASnV,EAAGuS,kBAAoB1jB,EAAK2kB,MAAMlkB,cAAgBT,EAAK2kB,MACrE3kB,EAAKsG,MAAQtG,EAAKktB,WAAW/rB,MAAO,GAAI,GAAIoC,KAAM,KAClD6J,EAAKqf,aAAerf,EAAKkgB,WAEF,QADvB9H,EAAgBzD,EAAI8D,aAAcxmB,EAAGW,EAAMoN,IAE1C0f,EAAUtH,OAEV,GAAKrU,EAAGqT,kBAIP,IAHAsI,GAAU,EAEVF,EAAc5rB,KAAKvC,IAAKY,EAAE0H,QAAS/G,EAAKgnB,SAASxnB,SACxCstB,GAAyB,EAAdF,GACnBA,IACAE,EAAUA,GAAoE,IAAzD9sB,EAAKgnB,SAAU4F,GAAc1iB,QAASlK,EAAKslB,cAGjEwH,EAAyE,IAA7D9sB,EAAKsmB,OAAStmB,EAAKutB,cAAerjB,QAASlK,EAAKslB,SAK9D,GAFAtlB,EAAK+mB,UAAW,EAEX/mB,EAAKwpB,QAAQjmB,KAAM,MAASvD,EAAKyF,OACrC,OAAOqnB,EAIT,IAAMF,EAAc,EAAGA,EAAcvtB,EAAE0H,QAAS6lB,IAC/C5sB,EAAKyF,OAASzF,EAAKwpB,QAASoD,GAC5B5sB,EAAKuG,MAAQqmB,EAGbxf,EAAKqf,aAAerf,EAAKogB,cAAeZ,GAGnC5sB,EAAKyF,SACTzF,EAAKsG,MAAQtG,EAAKktB,WAAYN,GAC9B5gB,EAAShM,EAAK+L,OAAQ6gB,GAAgB5sB,EAAKsG,MAAQtG,EAAKmtB,SAAUP,IAAiB,GACnF5sB,EAAK2kB,MAAQtlB,EAAE3F,kBAAoB5B,EAAGsc,eAAgBpI,GAAWA,EACjEhM,EAAKsmB,QAAUtE,EAASlf,KAAKlC,YAAaZ,EAAK2kB,QAAWxT,EAAGuS,kBAC5D1jB,EAAK2kB,MAAMlkB,cAAgBT,EAAK2kB,MACjC3kB,EAAK4lB,QAAU7D,EAAI4K,UAAWttB,EAAGutB,GAEjC5gB,EAAS8gB,EAGTvC,EAAOpZ,EAAG4R,sBACT1jB,EAAE8qB,SAAS3kB,IAAK2L,EAAG4X,yBACjBtjB,OAAQ,iBAAmBmnB,EAAc,MACzCtrB,KAAM,0BACNT,KAAM,uBAA+B,GAEnCxB,EAAE3F,oBACNsG,EAAKyF,OAAS3N,EAAGsc,eAAgBpU,EAAKyF,SAIlC0L,EAAG+R,sBAAwBlB,EAAS0G,OAAO9nB,KAAMwM,EAAKqgB,iBAAkBb,MAC5E5sB,EAAKyF,OAASsc,EAAI6J,cAAe5rB,EAAKyF,OAAQ2H,EAAKqgB,iBAAkBb,KAKtE5sB,EAAKslB,QAAUnU,EAAGuS,mBAAsB1jB,EAAKyF,QAAU,IAAKhF,cAAgBT,EAAKyF,OAEjF+f,EAAgB,MADhByC,EAAM7a,EAAKsgB,UAAWd,MAGD,mBAAR3E,EAGXzC,EAAgByC,EAAKjoB,EAAK2kB,MAAO3kB,EAAKsG,MAAOtG,EAAKyF,OAAQmnB,EAAa5sB,EAAKiE,KAAM5E,EAAGW,GACpC,mBAA/BioB,EAAKsC,GAAQvqB,EAAKyF,UAGpC+f,EACCyC,EAFDvd,EAAM6f,GAAQvqB,EAAKyF,QAENzF,EAAK2kB,MAAO3kB,EAAKsG,MAAOtG,EAAKyF,OAAQmnB,EAAa5sB,EAAKiE,KAAM5E,EAAGW,KA6B/E8sB,KAZG9gB,EAdoB,OAAlBwZ,GAGJA,EAAgBzD,EAAI8D,aAAcxmB,EAAGW,EAAMoN,GAE3C1C,GAAc,IAARud,IAAoC,QAAnBjoB,EAAK0sB,WAA0C,OAAnB1sB,EAAK0sB,WACjC,OAAlBlH,GAA2B9a,GAMlB,IAARud,EAEKjoB,EAAK4lB,QAEkC,IAA7C,GAAK5lB,EAAKsmB,QAASvC,OAAQ/jB,EAAKslB,SAClCtlB,EAAKyF,SAAWzF,EAAK2kB,OAEtBja,GAAQ1K,EAAKsmB,OAAStmB,EAAKutB,cAAerjB,QAAS6X,EAAI4D,YAAatmB,EAAGW,EAAKslB,QAAStlB,KACvEmR,EAAGqT,mBAA4B,GAAP9Z,GAAgByG,EAAGqT,mBAA6B,IAAR9Z,GAbtE8a,GAiBDA,IAEasH,GAGzB,OAAOA,GAERjD,SAAU,SAAUvtB,EAAOktB,EAAS9P,GACnC,IACCqI,EAAItE,aAAanhB,EAAMyD,OAAQzD,EAAMyD,OAAO2d,WAAYhE,IACvDpd,EAAMyD,OAAOzF,cAAcsiB,mBAF7B,CAMA,IAAI9T,EAAK6kB,EAAW1iB,EAASmH,EAAOnO,EAAMwF,EAAUV,EAAY8B,EAAQ+hB,EAC9DpwB,EAAUkhB,EAAYoP,EAASc,EAAYhlB,EAAM+B,EAAK/D,EAC/DinB,EAAaC,EAAgBjJ,EAAOkJ,EAAUC,EAAKvsB,EAAIiJ,EACvDujB,EAAgBp2B,EAAEqN,OAAQ,GAAIskB,GAC9BnqB,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cACPyB,EAAQjE,EAAGiE,MAAMsD,EAAG,UAEpBW,EAAO,CACN+mB,UAAU,EACVyC,QAASA,EAETtD,kBAAoB,IAErB9Y,EAAO,CAENkgB,WAAY,CAAE,QAAU,aAExBI,UAAY,GACZF,cAAgB,GAChBC,iBAAmB,GACnBS,iBAAmBp2B,EAAGyP,cAAejL,EAAO6U,EAAG+R,qBAAsB7jB,EAAE0H,SAAS,IAAU,IAI5F,IADA/G,EAAK+L,OAAS,GACR6gB,EAAc,EAAGA,EAAcvtB,EAAE0H,QAAS6lB,IAC/C5sB,EAAK+L,OAAQ6gB,GAAgBzb,EAAGsT,sBAE7BplB,EAAEpH,SAAWoH,EAAEpH,QAAS20B,IAAiBvtB,EAAEpH,QAAS20B,GAAc7gB,QAGpEjU,EAAG6P,SACgE,WADrD7P,EAAG6P,QAAStI,EAAEmH,eAAgBomB,GAC3C90B,EAAGyP,cAAejL,EAAO+C,EAAElG,QAASyzB,GAAe,WACpDvtB,EAAEmH,eAAgBomB,GAAczmB,SAAU,iBAE3CiH,EAAKsgB,UAAWd,GACf90B,EAAGyP,cAAejL,EAAO6U,EAAGoS,iBAAkBqJ,IAC9CvtB,EAAEmH,eAAgBomB,GAAczmB,SAAU,iBAC3CiH,EAAKqgB,iBAAkBb,GACtB90B,EAAGyP,cAAejL,EAAO6U,EAAG+R,qBAAsB0J,IAAiB,GACpExf,EAAKogB,cAAeZ,IACjB90B,EAAGyP,cAAejL,EAAO6U,EAAGgS,qBAAsByJ,GAAa,IAAU,IAAKrsB,MAAO,OAYzF,IATKxE,IACJkE,QAAQ+C,IAAK,0CAA2CwmB,GACxD5gB,EAAO,IAAIzI,MAGZd,EAAEka,aAAe,EAEjBG,EAAmBuU,GAAiB,GAE9BllB,EAHN1J,EAAE2C,UAAY,EAGQ+G,EAAa1J,EAAEmC,SAAShC,OAAQuJ,IAAe,CAWpE,GAVA8B,EAAS/S,EAAGyW,aAAcjS,EAAO+C,EAAEmC,SAAS2K,GAAIpD,IAAc,GAG9D6jB,EAAcvtB,EAAE0H,QAEhB4mB,EAAYtuB,EAAEiH,MAAOyC,GAAauC,WAClC8G,EAAQva,EAAGA,EAAEoP,IAAK0mB,EAAW,SAAU5a,GACtC,OAAOA,EAAI6Z,GAAc3oB,KAAKmpB,SAGE,KAA5B1T,EAAenW,KAAK,KAAc4N,EAAGyM,2BACzCxL,EACE9F,YAAa6E,EAAGqM,oBAChBxV,IAAK,IAAM3I,EAAErE,aACbqB,IAAK,UAAW,QACZ,CAKN,GAFAyM,GADAsJ,EAAQA,EAAMpK,IAAK,IAAM3I,EAAErE,cACfwE,QAEL2R,EAAG2Z,kBAAoB3Z,EAAG2Z,iBAAiBtrB,aACnB,IAAvBgqB,EAAQnqB,EAAE0H,YACjB/G,EAAKgtB,cAAe,EACpBhtB,EAAKitB,eAAiB,IACrBzD,EAASnqB,EAAE0H,UACXoK,EAAG2Z,kBAAoB/I,EAAIgK,gBAAiB5a,EAAG2Z,kBAAmBngB,OAClE,IAEIwG,EAAG2R,uBAAwB,CAI/B,IAFA+B,EAAQ7kB,EAAKitB,eAAe1sB,MAAOyhB,EAASgE,UAC5C+H,GAAW,EACLnnB,EAAO,EAAGA,EAAOie,EAAMrlB,OAAQoH,IAElB,GADlBonB,EAAMnJ,EAAOje,GAAOrG,MAAO,MAClBf,SAEH4Q,MAAO4d,EAAI,IACfn2B,EAAEmX,KAAM3P,EAAEwH,cAAe,SAAU8F,EAAGjC,IAEO,EAAvCA,EAAIjK,cAAcyJ,QAAS8jB,EAAI,MAEnCxE,EADA/nB,EAAKkL,GACWqhB,EAAI,MAItBvsB,EAAKjB,SAAUwtB,EAAI,GAAI,IAAO,EAEpB,GAANvsB,GAAWA,EAAKpC,EAAE0H,UACtByiB,EAAS/nB,GAAOusB,EAAI,GACpBnJ,EAAM5V,OAAQrI,EAAM,GACpBA,IACAmnB,GAAW,IAITA,IACJ/tB,EAAKitB,eAAiBpI,EAAMthB,KAAM,SAQrC,GAFAuqB,EAAiB3c,EAAGkT,sBACpB3G,EAAare,EAAEqe,YAAcre,EAAEM,OAAOK,KAAM,eAAkB,GACzD8tB,EAEJ,IAAMlnB,EAAO,EAAGA,EAAOgmB,EAAc,EAAGhmB,IACvC+D,EAAM6e,EAAQ5iB,IAAS,GAEjBknB,IAAmBlnB,EAAOgmB,GAEhCkB,EAAiBA,GAAkBpQ,EAAWle,QAEH,IAA1CmL,EAAIT,QAASwT,EAAW9W,IAAS,MAEhCob,EAASyG,gBAAgB7nB,KAAM+J,KAE/BqX,EAAS4G,UAAUhoB,KAAM+J,MAGvBqX,EAASiD,OAAOrkB,KAAM+J,IAASqX,EAASkD,OAAOtkB,KAAM+J,OAE7C,KAARA,GAActL,EAAE8qB,UAAY9qB,EAAE8qB,SAAS1kB,OAAQ,iBAAmBmB,EAAO,MAAOtF,KAAM,UAAW9B,SAClGuiB,EAAI4K,UAAWttB,EAAGuH,IA4BvB,IAzBAinB,EAAczb,EAAMpK,IAAK,IAAMmJ,EAAGqM,oBAAqBhe,OAElDsuB,GAAkC,IAAhBD,IAAsBC,GAAiB,GACzD/xB,GACJkE,QAAQ+C,IAAK,gCACV8qB,GAAkBD,EAAc/kB,EAAM+kB,EAAc,OAAU,SAE7D7tB,EAAKgtB,eACJ3tB,EAAE3F,oBAENsG,EAAKitB,eAAiBn1B,EAAGsc,eAAgBpU,EAAKitB,iBAE1C9b,EAAG+R,sBAAwBlB,EAAS0G,OAAO9nB,KAAMwM,EAAK8gB,oBAC1DluB,EAAKitB,eAAiBlL,EAAI6J,cAAe5rB,EAAKitB,eAAgB7f,EAAK8gB,kBAEnEJ,GAAiB,GAIlB9tB,EAAKqtB,gBAAqBlc,EAAGuS,mBAAqBrkB,EAAEjG,WAEnD4G,EAAKitB,eAAexsB,cADpBT,EAAKitB,gBAKDxjB,EAAW,EAAGA,EAAWX,EAAKW,IAMnC,GAJAiB,EAAM0H,EAAO3I,GAAWQ,YAEdR,GAAYuY,EAASzW,MAAM3K,KAAM8J,IAEzBojB,GAAkB9L,EAAS5E,SAASxc,KAAM8J,IAA5D,CAWA,GAPA1K,EAAKiE,KAAOmO,EAAMjG,GAAI1C,GACtBzJ,EAAKyJ,SAAWA,EAChBzJ,EAAKktB,WAAaS,EAAWlkB,GAC7BwB,EAAUjL,EAAKktB,WAAY7tB,EAAE0H,SAC7B/G,EAAKmtB,SAAWliB,EAAQO,IACxBxL,EAAKutB,aAAe,IAEdpc,EAAGyR,qBAAuB,CAO/B,IANAlY,EAAM,GAENlO,EAAWyO,EAAQM,MAIb3E,EAAO,EAAGA,EAAOpK,EAASgD,OAAQoH,IACvC8D,GAAO,IAAMlO,EAASoK,GAAMrD,KAAM,OAAS,EAE5CvD,EAAKutB,aAAepc,EAAGwR,iBACpBxR,EAAGuS,kBAAoBhZ,EAAIjK,cAAgBiK,EAC7C,GAUF,GAPAoiB,GAAU,EACVc,EAAa7L,EAAI8K,WAAYxtB,EAAGW,EAAMoN,GACtCnJ,EAAOgH,EAAQhH,KAGf0G,IAAMijB,EACNpxB,EAAWyO,EAAQhH,KAAKwB,OAAQ,UAC3B0L,EAAGwR,kBAAoBnmB,EAASgD,OAAS,CAC7C,GAAK2R,EAAGyR,qBAQP,IAPMzR,EAAG0R,uBAERrmB,EAAS4E,SAAU+P,EAAGqM,oBAEtBvZ,EAAOA,EAAKkI,GAAI,IAGXvF,EAAO,EAAGA,EAAOpK,EAASgD,OAAQoH,IACvC5G,EAAKiE,KAAOzH,EAAS2P,GAAIvF,GACzB5G,EAAKktB,WAAajiB,EAAQM,MAAO3E,GACjC5G,EAAKmtB,SAAWntB,EAAKktB,WACrBviB,EAAMoX,EAAI8K,WAAYxtB,EAAGW,EAAMoN,GAE/B0f,EAAUA,GAAWniB,GACfwG,EAAG0R,sBAAwBlY,GAChCnO,EAAS2P,GAAIvF,GAAO0F,YAAa6E,EAAGqM,oBAKvCsP,EAAUA,GAAWc,OAErBd,EAAUniB,EAEX1G,EACEmR,YAAajE,EAAGqM,oBAAqBsP,GAAU,GAC/CxR,QAAUwR,EAAU,GAAK,QAG7BztB,EAAEka,cAAgBnH,EAAMpK,IAAK,IAAMmJ,EAAGqM,oBAAqBhe,OAC3DH,EAAE2C,WAAaoQ,EAAM5S,OACrB1H,EAAGyW,aAAcjS,EAAOuO,GAAQ,GAGjCxL,EAAE4pB,mBAAqBgF,EAAc1qB,KAAK,IAE1ClE,EAAEqe,WAAauQ,EACf5uB,EAAEM,OAAOK,KAAM,aAAciuB,GACxB9c,EAAGgT,oBAAsBrsB,EAAGmjB,SAChCnjB,EAAGmjB,QAAS3e,EAAO,sBAAuBylB,EAAI+H,eAAgBmE,GAAe,IAEzElyB,GACJkE,QAAQ+C,IAAK,6BAA+BlL,EAAGmL,UAAU2F,IAErDuI,EAAGyL,qBACPvd,EAAEM,OAAOwD,eAAgB,kBAAmB9D,GAC5CA,EAAEM,OAAOwD,eAAgB,YAAa9D,IAEvC0D,WAAY,WACXjL,EAAGwK,YAAajD,EAAE/C,QAChB,KAEJ6xB,gBAAiB,SAAU7xB,EAAO8K,EAAQgnB,GAEzC,IAAI/uB,GADJ/C,EAAQzE,EAAGyE,GAAQ,IACLyD,OAEb6O,GAAO,EACPyf,EAFKhvB,EAAE/E,cAEKgqB,oBACZ5jB,EAAOrB,EAAEM,OAAOK,KAAM,eAAkB,GACxCioB,EAAwB,mBAAXoG,GAA+Bv2B,EAAGyP,cAAejL,EAAO+xB,EAAQjnB,GAO9E,GALKgnB,GAA8B,KAAjB1tB,EAAK0G,KACtBgnB,GAAY,IAIA,IAARnG,EAEJrZ,EAAOyf,EAAQ/xB,EAAO8K,EAAQgnB,OACxB,IAAKnG,aAAepwB,GAAyB,WAAlBA,EAAEiL,KAAMmlB,IAAoD,GAA9BA,EAAI/d,QAAS,aAE5E,OAAO+d,EACD,GAAKpwB,EAAEqX,QAAS+Y,GACtBrZ,EAAOqZ,OACD,GAA0B,WAArBpwB,EAAEiL,KAAMurB,IAAyBpG,GAI/B,QAFbrZ,EAAOqZ,EAAK3rB,EAAO8K,EAAQgnB,IAG1B,OAAO,KAQT,OALc,IAATxf,IAEJA,EAAOmT,EAAIuM,WAAYhyB,EAAO8K,EAAQgnB,IAGhCrM,EAAIwM,eAAgBjyB,EAAO8K,EAAQwH,IAG3C2f,eAAgB,SAAUjyB,EAAO8K,EAAQwH,GACxC,IAAM/W,EAAEqX,QAASN,GAChB,OAAO,EAGR,IAAI4f,EAAK9jB,EAAK9D,EAAMkC,EAAK2lB,EAAWvc,EACnC7S,GAFD/C,EAAQzE,EAAGyE,GAAQ,IAERyD,OACV2uB,EAAc,MAAOtnB,GAAuD,GAAVA,GAAeA,EAAS/H,EAAE0H,QAC5F4nB,EAAYD,GAAcrvB,EAAEmH,eAAgBY,GAASjB,SAAU,2BAC/D4F,EAAS,GAUV,GANA6C,EAAO/W,EAAE4Z,KAAM7C,EAAM,SAAUgQ,EAAOhY,GACrC,QAAKgY,EAAMvV,MAGJxR,EAAE8V,QAASiR,EAAOhQ,KAAWhI,IAEhC8nB,GAAervB,EAAEmH,eAAgBY,GAASjB,SAAU,wBAExD,OAAOyI,EAIP,IAFA9F,EAAM8F,EAAKpP,OAELoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAG3BsL,GAFAxH,EAAMkE,EAAMhI,IAEFyC,KAAOqB,EAAIrB,KAAOqB,EAE5B+jB,GAAcC,GAAervB,EAAEpH,SAAWoH,EAAEpH,QAAQuH,QACnDH,EAAEpH,QAASmP,GAASwD,OAAQsH,EAAK5V,EAAO,GAAI8K,IAAY8K,GAAMhR,WAC/DutB,EAAYpvB,EAAE/E,cAAcopB,kBAAoB+K,EAAUhuB,cAAgBguB,EAGrE/jB,EAAIrB,MACRqB,EAAIqB,OAAS0iB,EACb1iB,EAAQA,EAAOvM,QAAWkL,GAE1BqB,EAAQA,EAAOvM,QAAW,CACzB6J,KAAOqB,EAEPqB,OAAS0iB,GAyBZ,IApBAD,EAAMnvB,EAAEnF,YAAc,GACtB6R,EAAOwD,KAAM,SAAUC,EAAGC,GACzB,IAAIG,EAAI+e,EAAYlf,EAAE1D,OAASyD,EAAEzD,OAChC8D,EAAI8e,EAAYnf,EAAEzD,OAAS0D,EAAE1D,OAC9B,OAAK2iB,GAA8B,mBAARF,EAEnBA,EAAK5e,EAAGC,GAAG,EAAMzI,EAAQ9K,GACrBoyB,GAA8B,iBAARF,GAAoBA,EAAI5O,eAAgBxY,GAElEonB,EAAIpnB,GAASwI,EAAGC,GAAG,EAAMzI,EAAQ9K,IAC7BxE,EAAGiY,aAEPjY,EAAGiY,YAAaH,EAAGC,KAM5BjB,EAAO,GACP9F,EAAMiD,EAAOvM,OACPoH,EAAO,EAAGA,EAAOkC,EAAKlC,IAC3BgI,EAAMA,EAAKpP,QAAWuM,EAAOnF,GAE9B,OAAOgI,GAGT0f,WAAY,SAAUhyB,EAAO8K,EAAQgnB,GAEpC,IAAI3kB,EAAUV,EAAYD,EAAKe,EAAKvD,EAAOM,EAAM2E,EAAOqjB,EACvDvvB,GAFD/C,EAAQzE,EAAGyE,GAAQ,IAERyD,OACVoR,EAAK9R,EAAE/E,cACPsU,EAAO,GACR,IAAM7F,EAAa,EAAGA,EAAa1J,EAAEmC,SAAShC,OAAQuJ,IAIrD,IAHAzC,EAAQjH,EAAEiH,MAAMyC,GAChBD,EAAMzJ,EAAEiH,MAAMyC,GAAYuC,WAAW9L,OAE/BiK,EAAW,EAAGA,EAAWX,EAAKW,IAOnC,GAJAI,EAAMvD,EAAMuD,IACXvD,EAAMuD,IAAKJ,GACXnD,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAU9C,KAAK,IAE3CmqB,IAAavkB,EAAII,UAAUhE,MAAOkL,EAAGqM,oBAI1C,GAAKrM,EAAGsT,sBACPplB,EAAEpH,QAAQmP,GAAQ2E,QAClB1M,EAAEmH,eAAeY,GAAQjB,SAAU,kBAGnC,GAFAyI,EAAMA,EAAKpP,QAAW,GAAK8G,EAAMgF,WAAY7B,GAAYrC,GAEpD+J,EAAGwR,kBAAoBxR,EAAGyR,qBAE9B,IADAgM,EAAWtoB,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAU9C,KAAKzE,OAAS,EAC7DoH,EAAO,EAAGA,EAAOgoB,EAAUhoB,IAChCgI,EAAMA,EAAKpP,QAAW,GAAK8G,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAUwE,MAAO3E,GAAQQ,QAOtF,GAFAwH,EAAMA,EAAKpP,QAAW8G,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAUyE,IAAKpE,GAEhE+J,EAAGwR,kBAAoBxR,EAAGyR,qBAE9B,IADAgM,EAAWtoB,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAU9C,KAAKzE,OACpDoH,EAAO,EAAGA,EAAOgoB,EAAUhoB,IAChC2E,EAASjF,EAAMgF,WAAY7B,GAAYpK,EAAE0H,SAAU9C,KAAKkI,GAAIvF,GAAOrF,WAAW4K,GAAI/E,GAClFwH,EAAMA,EAAKpP,QAAW,GAAK1H,EAAGsS,eAAgB/K,EAAGkM,EAAOnE,GAM7D,OAAOwH,GAERua,YAAa,SAAU7sB,EAAO8K,EAAQwH,EAAMigB,EAAUT,GAGrD,GAFA9xB,EAAQzE,EAAGyE,GAAQ,GACnB8K,EAAS5G,SAAU4G,EAAQ,IACrB9K,EAAMyD,OAAOuG,QAASzO,EAAEwO,cAAe/J,EAAMyD,OAAOuG,OAA1D,CAIA,IAAIM,EAAM+D,EAAKD,EAAKmN,EAAGsS,EAAUE,EAASyE,EACzCzvB,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cACPwP,EAAOzK,EAAEmH,eAAgBY,GAEzBgK,EAAU,qBACPtH,EAAK9J,KAAM,gBACZ8J,EAAKjJ,KAAM,qBACXsQ,EAAG2S,mBAAmBE,QAAU,IAC7B,YAEL+K,EAAe1vB,EAAEM,OACf2B,KAAM,SACNA,KAAM,UAAY2gB,EAAMxc,OAAS,iBAAmB2B,EAAS,MAC7DuD,MAIH,QAAqB,IAATiE,GAAiC,KAATA,GAGtB,QAFbA,EAAOmT,EAAIoM,gBAAiB7xB,EAAO8K,EAAQgnB,IAD5C,CAQA,GAAKv2B,EAAEqX,QAASN,GAAS,CAExB,IAAMhI,EAAO,EAAGA,EAAOgI,EAAKpP,OAAQoH,IAEnC,IADAkoB,EAASlgB,EAAMhI,IACHyC,KAAO,CAOlB,IAAMsB,KALNmkB,EAAO,2BAAgD,IAAjBA,EAAOlQ,MAAwBkQ,EAAOzlB,KAAOylB,EAAOlQ,MAI1FxN,GAAW,UACE0d,EACPA,EAAOlP,eAAgBjV,IAAiB,SAARA,IACpCyG,GAAW,IAAMzG,EAAM,KAAOmkB,EAAQnkB,GAAM5J,QAASihB,EAASgD,MAAO,UAAa,KAG9E8J,EAAOlQ,QACZxN,GAAW,WAAa0d,EAAOzlB,KAAKtI,QAASihB,EAASgD,MAAO,UAAa,KAE3E5T,GAAW,IAAM0d,EAAOzlB,KAAKtI,QAASihB,EAASgD,MAAO,UAAa,gBAIxD,GAAK8J,GAAW,oBAM4B,IAJvDnkB,EADAD,EAAMokB,GAAW,GAAKA,GAAS/tB,QAASihB,EAASgD,MAAO,WAK/C9a,QAASiH,EAAGoT,gCAEpB5Z,GADAkN,EAAInN,EAAInK,MAAO4Q,EAAGoT,+BACV,GACR7Z,EAAMmN,EAAE,IAITzG,GAAsB,KAAX0d,EACV,YACGnkB,IAAQD,EAAM,GAAK,uBAAyBokB,EAAS,MACvD,UAAYnkB,EAAM,KAAOD,EAC1B,YAAc,IAIjBkE,EAAO,GAKRub,GAAa9qB,EAAE8qB,SAAW9qB,EAAE8qB,SAAW9qB,EAAEM,OAAO4B,SAAU,UACxDD,KAAM,IAAM2gB,EAAMxc,QACf0L,EAAG4X,0BACPoB,EAAWA,GAAYA,EAAS3qB,OAC/B2qB,EAAS3kB,IAAK2L,EAAG4X,yBACjB5X,EAAG4X,0BAELsB,EAAUF,EAAS1kB,OAAQ,uBAAyB2B,EAAS,OAGhD5H,SACZ6qB,EAASwE,EAAW,OAAS,UAAYzd,GACnCvZ,EAAEqX,QAASN,IAGhByb,EAAQlc,OAAQS,GAAOjE,IAAKokB,GAE7B1E,EAAQ1f,IAAKokB,OAGfjG,aAAc,SAAUxsB,EAAOuyB,GAC9B,IAAIjC,EAAa1f,EAASgb,EACzB7oB,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cACPyM,EAAU1H,EAAE0H,QAEb,IAAM6lB,EAAc,EAAGA,EAAc7lB,EAAS6lB,IAE7C1E,KADAhb,EAAU7N,EAAEmH,eAAeomB,IACLzmB,SAAU,iBAAoB+G,EAAQ/G,SAAU,kBAE/D+G,EAAQ/G,SAAU,mBACwC,IAAhErO,EAAGyP,cAAejL,EAAO6U,EAAGoS,iBAAkBqJ,KAA4B1E,GAC1EnG,EAAIoH,YAAa7sB,EAAOswB,EAAa,GAAIiC,EAAU3hB,EAAQ/G,SAAUgL,EAAG0S,sBAO7DtmB,MAEfzF,EAAGsyB,WAAa,SAAU9tB,EAAO0yB,EAAQtF,EAAYwB,GACpD,IAAIve,EAAGwd,EAAU8E,EAASnkB,EACzB0e,EAAU,GACVnqB,EAAI/C,EAAQzE,EAAGyE,GAAQ,GAAGyD,OAAS,GACnCoR,EAAK9R,EAAIA,EAAE/E,cAAgB,GAC5B,IAAkB,IAAX00B,GAAmB7d,IAAOA,EAAG4R,sBAGjClrB,EAAEqX,QAAQwa,IAAe3H,EAAItE,aAAape,EAAGqqB,EAAYrqB,EAAEqe,YAE7D,OAAO7lB,EAAGyE,GAAQ0D,KAAM,eAAkB,GAE3C,GAAKX,IACCA,EAAE8qB,WACNA,EAAW9qB,EAAE8qB,SAAS7oB,KAAM,IAAM2gB,EAAMxc,SAEpC0L,EAAG4X,0BACPoB,EAAWA,GAAYA,EAAS3qB,OAC/B2qB,EAAS3kB,IAAK2L,EAAG4X,yBACjB5X,EAAG4X,yBAEAoB,GAAYA,EAAS3qB,QAEzB,IADAgqB,EAAUE,GAAc,GAClB/c,EAAI,EAAGA,EAAItN,EAAE0H,QAAU,EAAG4F,IAC/B7B,EAAS6B,IAAMtN,EAAE0H,QAEhBoK,EAAGoX,yBAA2B,IAAMpX,EAAGqX,8BACvC,iBAAmB7b,EAAI,MACxBsiB,EAAU9E,EAAS1kB,OAAQqF,IACdtL,SAEZyvB,EAAUlN,EAAIgK,gBAAiBkD,GAC1Bp3B,EAAEqX,QAASwa,IAEVwB,GAA8B,EAAjB+D,EAAQzvB,SACzByvB,EAAUA,EAAQ9tB,MAAO,IAErBwL,IAAMtN,EAAE0H,UAGZkoB,GADAnkB,EAAOmkB,EAAQxpB,OAAQ0L,EAAGoX,2BACX/oB,OAASsL,EAAOmkB,GAEhCA,EACEtkB,IAAK+e,EAAY/c,IAEjBuiB,QAAS,SAAW7vB,EAAEyB,aAExB0oB,EAAQ7c,GAAKsiB,EAAQtkB,OAAS,GAEzBgC,IAAMtN,EAAE0H,QAEZkoB,EACE9tB,MAAO,GACPsE,OAAQ,kBAAoBwpB,EAAQpuB,KAAM,eAAkB,MAC5D8J,IAAK6e,EAAS7c,IAEhBsiB,EACE9tB,MAAO,GACPwJ,IAAK6e,EAAS7c,KAIbA,IAAMtN,EAAE0H,SAAWkoB,EAAQzvB,SAC/B2R,EAAG2Z,iBAAmBmE,IAM3B,OAAOzF,GAGR1xB,EAAG4xB,WAAa,SAAUptB,EAAOmJ,EAAQgC,EAAOyjB,GAC/C,IAAI7rB,EAAI/C,EAAQzE,EAAGyE,GAAQ,GAAGyD,OAAS,GACtCmO,EAAQpW,EAAGsyB,WAAY9tB,GAAO,EAAMmJ,EAAQylB,GAY7C,YAVsB,IAAVzjB,IACXA,GAAQ,GAEJpI,GAAKoI,IAETpI,EAAE4pB,mBAAqB,KACvB5pB,EAAEqe,WAAa,GACfqE,EAAIiH,UAAW3pB,EAAE/C,MAAOmJ,EAAQylB,GAChC7rB,EAAEM,OAAOwD,eAAgB,yBAEF,IAAjB+K,EAAM1O,QA55Dd,CA+5DG5H,GAMH,SAAWC,EAAG0d,GACd,aACA,IAAIzd,EAAKD,EAAEE,aAAe,GAmD1B,SAASo3B,EAAgB9vB,EAAG8R,GAC3B,IAAI9E,EAAM+D,MAAMe,EAAGie,sBAAwBv3B,EAAEsZ,EAAGie,sBAAwB,GACxE,OAAO/iB,EAAI7M,OACV6M,EAAI8O,UAAY,EAChB3a,SAAS2Q,EAAGie,qBAAsB,KAAO,EArD3Cv3B,EAAEqN,OAAOpN,EAAGuE,IAAK,CAChBgzB,OAAY,2BACZC,UAAY,6BACZC,WAAY,4BACZC,WAAY,+BAIb13B,EAAG23B,qBAAuB,SAASnzB,EAAOozB,EAASra,GAElD,IADA/Y,EAAQzE,EAAEyE,GAAO,IACLyD,OAAZ,CACA,IAGCqR,EAAUvZ,EAAEqN,OAAO,GAHL,CACbyB,MAAQ,KAEwB0O,GACjChW,EAAI/C,EAAMyD,OACVoR,EAAK9R,EAAE/E,cACPq1B,EAAa,SAAUC,GACtB,IAAIrpB,EAAOpN,EAAS+T,EAAS2iB,EAAOxc,EAAO8H,EAC1CrS,EAAMzJ,EAAEgC,SAAS7B,OAGlB,IAFA2R,EAAG2e,aAAc,EACjB32B,EAAU,GACJoN,EAAQ,EAAGA,EAAQuC,EAAKvC,IAE7BspB,GADA3iB,EAAU7N,EAAEgC,SAAS8K,GAAI5F,IACTvG,KAAM,eAAkB,CAAE,EAAG,GAC7CqT,EAAQnG,EAAQ,GAAG6iB,YACnB5U,EAASjO,EAAQ,GAAG8iB,aACf3c,IAAUwc,EAAM,IAAM1U,IAAW0U,EAAM,KAC3C3iB,EAAQlN,KAAM,aAAc,CAAEqT,EAAO8H,IACrChiB,EAAQ8Z,KAAM/F,EAAQ,KAGnB/T,EAAQqG,SAA2B,IAAjBowB,GACtBvwB,EAAEM,OAAOwD,eAAgB,SAAU,CAAEhK,IAEtCgY,EAAG2e,aAAc,GAGnB,GADAG,cAAc9e,EAAG+e,cACbR,EAEH,OADAve,EAAG2e,aAAc,EAGlBH,GAAY,GACZxe,EAAG+e,aAAeC,YAAY,WACzBhf,EAAG2e,aACPH,KACEve,EAAQzK,SAcZ7O,EAAGiZ,UAAU,CACZtP,GAAI,gBACJiQ,SAAU,GACVN,QAAS,CACRgf,cAAgB,GAChBC,uBAAyB,KACzBC,uBAAyB,KACzBC,sBAAwB,KACxBC,sBAAwB,KACxBpB,qBAAuB,EACvBqB,6BAA6B,EAC7BC,sBAAwB,UACxBC,8BAA+B,EAC/BC,8BAA+B,EAC/BC,qBAAuB,GAExBjmB,OAAQ,SAAStO,EAAO+C,EAAG8R,GAE1B,KAAK9R,EAAEM,OAAOwG,SAAS,qBAA0D,GAAlCtO,EAAE8V,QAAQ,SAAUtO,EAAEnH,WAAkBmH,EAAEM,OAAOwG,SAAS,eAAzG,CAGA,IAAII,EAAOuC,EAAKiM,EA+Bf+b,EA9BAnxB,EAASN,EAAEM,OAEXoxB,EAAUl5B,EAAEsZ,EAAGmf,wBAA0Bnf,EAAGkf,wBAC5CvvB,EAAYzB,EAAEyB,UAAY,iBAE1BkwB,EAAWn5B,EAAEsZ,EAAGqf,uBAAyBrf,EAAGmf,wBAA0B/a,GACtE0b,EAAWp5B,EAAEsZ,EAAGof,uBAAyBpf,EAAGmf,wBAA0B/a,GAEtErI,EADSvN,EAAO4B,SAAS,eACRA,SAAS,MAAMyG,IAAI,iBAAiBzG,WACrDyf,EAASrhB,EAAO4B,SAAS,SACzB2vB,EAAe/B,EAAgB9vB,EAAG8R,GAElCggB,EAAgBxxB,EAAOgrB,SAAS1d,QAAQ,IAAMnV,EAAGuE,IAAIC,OAAO6J,SAAS,oBACpExG,EAAOgrB,SAAS1d,QAAQ,qBAAqB,GAAGlN,OAAOzF,cAAcwhB,QAAQ6O,SAAW,GACzFyG,EAAkBD,EAAc3xB,OAAS2xB,EAAchW,SAAW,EAElEkW,EAAelgB,EAAG2K,QAAUnc,EAAOoc,QACjC3a,SAAS,yBAA2BtJ,EAAGuE,IAAIgzB,OAAS,IAAMle,EAAGif,cAAgB,IAAM/wB,EAAEyB,UAAUK,MAAM,GAAK,gBAC1GmwB,KAAK,eAAiBx5B,EAAGuE,IAAImzB,WAAa,MAC5C+B,EAAcF,EAAa1G,SACzBvpB,SAAStJ,EAAGuE,IAAIkzB,YAChBlzB,IAAI,CACJm1B,SAAaT,EAAQvxB,OAAS,WAAa,QAC3CiyB,QAAajxB,SAAU6wB,EAAa1G,SAASA,SAAStuB,IAAI,gBAAiB,IAC3EyC,IAAaoyB,EAAeE,EAC5B5O,KAAa,EACbkP,WAAa,SACbC,OAAaxgB,EAAG0f,sBAAwB,IAE1Ce,EAAeP,EAAa9vB,SAAS,eAErCswB,EAAY,GACZC,EAAW,SAASC,EAAOC,GAC1B,IAAIzrB,EAAO8M,EAAO4e,EAAQtsB,EAAO8b,EAChC1W,EAASgnB,EAAMtsB,OAAO,YACtBqD,EAAMiC,EAAOvL,OACd,IAAM+G,EAAQ,EAAGA,EAAQuC,EAAKvC,IAC7BZ,EAAQqsB,EAAOvsB,OAAO,YAAY0G,GAAG5F,GAIpC8M,EAD+B,gBAFhCoO,EAAQ1W,EAAOoB,GAAG5F,IAERlK,IAAI,cACLolB,EAAMyQ,aAEuB,aAAjCvsB,EAAMtJ,IAAI,mBACTkZ,EAAO4c,iBACF9hB,WAAYkF,EAAO4c,iBAAiB1Q,EAAM,GAAI,MAAMpO,QAG5D4e,EAAS5hB,WAAYoR,EAAMplB,IAAI,iBACvBolB,EAAMyQ,aAAe7hB,WAAYoR,EAAMplB,IAAI,iBAAoBgU,WAAYoR,EAAMplB,IAAI,kBAAqB41B,GAG3GxQ,EAAMpO,QAGhB1N,EAAMtJ,IAAI,CACT,MAASgX,EACT,YAAaA,EACb,YAAaA,KAIhB+e,EAAkB,SAASC,GAC1B,OAAgB,IAAZA,GAAqBlB,EAAc3xB,OAC/BG,EAAO6xB,WAAWhP,KAEnBuO,EAAQvxB,OACdgB,SAASuwB,EAAQ10B,IAAI,gBAAiB,KAAO,EAC7CsD,EAAO2yB,SAAS9P,KAAOhiB,SAASb,EAAOtD,IAAI,eAAgB,IAAMxE,EAAE0d,GAAQgd,cAE7EC,EAAe,WACdjB,EAAYl1B,IAAI,CACfmmB,KAAO4P,IACP/e,MAAO1T,EAAOuyB,eAEfJ,EAAUnyB,EAAQ0xB,GAClBS,EAAU5kB,EAAS4jB,IAEpB2B,EAAe,SAAUC,GACxB,GAAK/yB,EAAO0K,GAAG,YAAf,CAEA+mB,EAAkBD,EAAc3xB,OAAS2xB,EAAcmB,SAASxzB,IAAMkyB,EAAS2B,YAAcxB,EAAchW,SAAW,EACtH,IAAIzb,EACH4yB,EAAS3yB,EAAO2yB,SAChBpB,EAAe/B,EAAgB9vB,EAAG8R,GAClCkhB,EAAUx6B,EAAE+6B,SAAU5B,EAAS,IAC/B6B,EAAUR,EACTrB,EAAS2B,YAETxB,EAAc3xB,OAASgB,SAAS2wB,EAAc,GAAG9V,MAAMvc,IAAK,IAAMkyB,EAASsB,SAASxzB,IACrFg0B,EAAY/B,EAAQvxB,OAASqzB,EAAU7B,EAAS2B,YAChDI,GAAgB5hB,EAAGyf,8BAAmCjxB,EAAO4B,SAAU,WAAY4Z,UAAjC,EAClDwX,EAAYG,EAAY5B,EAAeE,EAAkB2B,EACzDC,EAAcrzB,EAAOwb,UAAYoW,EAAYpW,UAAY6F,EAAO7F,UAAY,IAAM4X,EAClFE,EAAcN,EAAYL,EAAOxzB,KAAW6zB,EAAYL,EAAOxzB,IAAMk0B,EAAgB,UAAY,SACjGE,EAAsB,WAAdD,EAA0Bn7B,EAAGuE,IAAIizB,UAAYx3B,EAAGuE,IAAIkzB,WAC5D4D,GAAiB5B,EAAYprB,SAAU+sB,GACvCE,EAAc,CAAE1B,WAAauB,GAC1BlC,EAAQvxB,SAEX2zB,GAAgB,EAChBC,EAAYt0B,IAAMuzB,EAAUM,EAAY5B,EAAQuB,SAASxzB,IAAMiyB,EAAQ4B,cAGxEjzB,EAAM0yB,EAAgBC,MACV7xB,SAAS+wB,EAAYl1B,IAAI,QAAS,MAC7C82B,GAAgB,EAChBC,EAAY5Q,KAAO9iB,GAEpB0zB,EAAYt0B,KAAQs0B,EAAYt0B,KAAO,KAEpCuzB,GAAWlB,EAAc3xB,OAAS2xB,EAAchW,SAAW+V,EAAeE,GACzE+B,GACH5B,EACEjlB,YAAaxU,EAAGuE,IAAIizB,UAAY,IAAMx3B,EAAGuE,IAAIkzB,YAC7CnuB,SAAU8xB,GACV72B,IAAI+2B,GAEHH,IAAcpB,IAAaa,IAE9BF,IACAX,EAAYoB,KAoCf,GAhCIlC,EAAQvxB,SAAWuxB,EAAQ10B,IAAI,aAClC00B,EAAQ10B,IAAI,WAAY,YAGrBg1B,EAAaxwB,KAAK,QAASwwB,EAAa,GAAG5vB,IAAM0P,EAAGuf,uBAGxDW,EAAa/vB,KAAK,kCAAkCqc,OACpD0T,EAAa/vB,KAAK,oBAAoBwM,SACtCujB,EAAa/vB,KAAK,WAAWqS,OAAOxC,EAAGyf,8BAEvCE,EAAec,EAAarwB,WAAWA,WACvC8vB,EAAah1B,IAAI,CAAE8e,OAAO,EAAG9H,MAAM,EAAGggB,OAAQ,IAE9CvC,EAAaxvB,KAAK,IAAMxJ,EAAGuE,IAAIi3B,SAASxlB,SAExCnO,EACEyB,SAAS,oBACTsB,KAAK,gBAAkB5B,EAAW,WAClC0xB,MAGF16B,EAAGqK,WAAW7F,EAAOs1B,EAAarwB,WAAWA,SAAS,IAAMzJ,EAAGuE,IAAIK,SAE/DyU,EAAGkf,uBACNx4B,EAAEsZ,EAAGkf,wBAAwBliB,OAAQojB,GAGrC5xB,EAAO4zB,MAAOhC,GAIXlyB,EAAE5G,eAGL,IADAqQ,GADAiM,EAAK6c,EAAarwB,SAAS,MAAMA,YACxB/B,OACH+G,EAAQ,EAAGA,EAAQuC,EAAKvC,IAE7BlH,EAAE5G,eAAegP,MAAOsN,EAAG5I,GAAI5F,GAAS,CAAEA,EAAOlH,EAAGgyB,IAItDJ,EAASzrB,IAAIwrB,GACXvuB,OAAS,iBAAiBlC,MAAM,KAAKgD,KAAMzC,GAAaC,QAAQ,OAAQ,MACxE2B,KAAK,iBAAiBnC,MAAM,KAAKgD,KAAMzC,GAAa,SAAU6N,GAC9D8jB,EAA6B,WAAf9jB,EAAM7L,QAEtBzD,EAAEM,OACA8C,OAAO,sBAAwB3B,GAC/B4B,KAAK,sBAAwB5B,EAAW,WACxC2xB,GAAc,KAGZthB,EAAGwf,8BACN74B,EAAG23B,qBAAqBnzB,GAIrBqD,EAAOwG,SAAS,eAAiBgL,EAAG4R,uBAEvCpjB,EAAO+C,KAAK,YAAc5B,EAAW,WAEpC,IAAI0yB,EAAM37B,EAAEolB,SAAS0O,eAAe1e,QAAQ,MAC3C7F,EAASosB,EAAI7I,SAASppB,WAAWgF,MAAMitB,GAEpCjC,EAAYprB,SAASrO,EAAGuE,IAAIizB,YAAcne,EAAGsf,8BAEhDlb,EAAOke,SAAS,EAAG9zB,EAAO6xB,WAAW1yB,KAEvB,GAAVsI,GAAe/H,EAAE8qB,UACpB9qB,EAAE8qB,SAAShe,GAAG/E,GAAQ9F,KAAK,oBAAoBmE,OAAO,YAAYiuB,WAIrE57B,EAAG2N,OAAO2jB,WAAYzpB,EAAQmxB,EAAaxvB,KAAK,IAAMxJ,EAAGuE,IAAIoJ,SAEzD0L,EAAGsS,oBACN3rB,EAAG2N,OAAO4jB,YAAYhqB,EAAGgyB,IAKvBlgB,EAAGwf,8BACNhxB,EAAO+C,KAAK,SAAWrD,EAAEyB,UAAY,gBAAiB,WACrD0xB,MAKFC,GAAc,GACd9yB,EAAOwD,eAAe,uBAGvB2K,OAAQ,SAASxR,EAAO+C,EAAG8R,GAC1B,IAAIrQ,EAAYzB,EAAEyB,UAAY,iBAC9BzB,EAAEM,OACA2M,YAAY,oBACZ7J,OAAS,sDAAsDlC,MAAM,KAAKgD,KAAKzC,GAAYC,QAAQ,OAAQ,MAC3G4yB,KAAK,IAAM77B,EAAGuE,IAAImzB,YAAY1hB,SAC5BqD,EAAG2K,SAAW3K,EAAG2K,QAAQtc,QAAU2R,EAAG2K,QAAQhO,SAClDjW,EAAE0d,GACA/P,IAAI2L,EAAGof,uBACP/qB,IAAI2L,EAAGqf,uBACPhrB,IAAI2L,EAAGmf,wBACP7tB,OAAS,iBAAiBlC,MAAM,KAAKgD,KAAKzC,GAAYC,QAAQ,OAAQ,MACxEjJ,EAAG23B,qBAAqBnzB,GAAO,MA3TjC,CA+TE1E,EAAQ2d,QAIV,SAAW1d,EAAG0d,GACd,aACA,IAAIzd,EAAKD,EAAEE,aAAe,GAE1BF,EAAEqN,OAAOpN,EAAGuE,IAAK,CAChBu3B,mBAAqB,kCACrBC,gBAAqB,+BACrBC,kBAAqB,+BACrBC,iBAAqB,0BAItBl8B,EAAE,WACD,IAAIkiB,EAAI,eACGjiB,EAAGuE,IAAIy3B,kBAAoB,mIAE/Bh8B,EAAGuE,IAAIu3B,mBAAqB,yCAE5B97B,EAAGuE,IAAIw3B,gBAAkB,yJAGhCh8B,EAAE,QAAQsW,OAAO4L,KAGlBjiB,EAAGk8B,UAAY,CACd3vB,KAAO,SAAUhF,EAAG8R,GACnB,IAAK9R,EAAEM,OAAOwG,SAAU,gBAAxB,CACA9G,EAAEM,OAAOyB,SAAU,gBAEnB,IAAc8L,EAAS9F,EAAQ6sB,EAAav0B,EAC3CC,EAASN,EAAEM,OACXu0B,EAAUv0B,EAAOgrB,SACjBwJ,EAAY3zB,SAAUb,EAAOtD,IAAK,cAAgB,IAGnD+Q,EAAO+D,EAAGijB,eAAiB,CAC1BC,WAAav8B,EAAGmjB,UAA4B,IAAjB9J,EAAG6iB,UAC9BM,MAAQJ,EACRK,eAAiB,EACjB1uB,QAAU,KACV2uB,MAAQ,KACRC,SAAuC,SAA5BP,EAAQ73B,IAAI,aACM,WAA5B63B,EAAQ73B,IAAI,aACkB,SAA9B63B,EAAQ73B,IAAI,eACkB,WAA9B63B,EAAQ73B,IAAI,cACb43B,YAAc,IA0Cf,IAtCAn8B,EAAG48B,eAAgBr1B,EAAE/C,OAAO,GAG5B8Q,EAAKunB,WAAah1B,EAAO0T,QAEzBjG,EAAKwnB,UAAY5zB,KAAK0K,IAAKwoB,EAAQ7gB,QAAUjG,EAAKunB,YAAe,GAiB5DvnB,EAAKinB,YAAcjnB,EAAKqnB,WAE5B38B,EAAGmjB,QAAS5b,EAAE/C,MAAO,uCAAwC8Q,EAAKunB,YAClEj1B,EAAM5H,EAAGmjB,QAAS5b,EAAE/C,MAAO,oCAAuC,OAClExE,EAAGk8B,UAAUlC,SAAUnyB,EAAQD,GAAK,IAErCyR,EAAGijB,eAAeH,YAAcA,GAAgB7mB,EAAKinB,WACpDv8B,EAAGmjB,QAAS5b,EAAE/C,MAAOxE,EAAGuE,IAAI03B,kBAC5B,KAAQ,GACTj8B,EAAGk8B,UAAUa,UAAWx1B,EAAG8R,EAAI8iB,GAC/Bn8B,EAAGk8B,UAAUc,kBAAmBz1B,EAAG8R,GAEnCA,EAAG4jB,qBAAuBl9B,EAAG,eAAiBC,EAAGuE,IAAIu3B,mBAAqB,MACxEv3B,IAAI,CAAEyC,IAAMq1B,IACZa,aAAcr1B,GAEVyH,EAAS,EAAGA,EAAS/H,EAAE0H,QAASK,IACrC8F,EAAU7N,EAAEmH,eAAgBY,GAC5B1H,EAAM5H,EAAGyP,cAAelI,EAAE/C,MAAO+C,EAAElG,QAASiO,GACW,UAA5CtP,EAAG6P,QAASuF,EAASxN,EAAK,cAEpC7H,EAAG,eAAiBC,EAAGuE,IAAIw3B,gBAAkB,MAC3CzV,SAAUjN,EAAG4jB,sBACbl0B,KAAK,CACL,cAAgBuG,EAChB,aAAiB,OAEjBpH,KAAM,SAAUkN,GAChBxK,KAAM,eAAe,GAGzB5K,EAAGk8B,UAAUiB,SAAU51B,EAAG8R,KAG3B2jB,kBAAoB,SAAUz1B,EAAG8R,GAChC,IAAI/J,EAAQ8F,EACXpE,EAAMzJ,EAAE0H,QACRqG,EAAO+D,EAAGijB,eAEX,IADAhnB,EAAK6mB,YAAc,GACb7sB,EAAS,EAAGA,EAAS0B,EAAK1B,IAC/B8F,EAAU7N,EAAEmH,eAAgBY,GAC5BgG,EAAK6mB,YAAa7sB,GAAW8F,EAAQ7C,GAAG,YAAc6C,EAAQmG,QAAU,GAI1Eye,SAAW,SAAUzlB,EAAKgH,EAAOohB,GAEhCpoB,EAAIhQ,IAAI,CACP,MAAUgX,EACV,YAAcohB,EAAWphB,EAAQ,GACjC,YAAcohB,EAAWphB,EAAQ,MAInCwhB,UAAY,SAAUx1B,EAAG8R,EAAI8iB,GAC5B,IAAI7sB,EAAQV,EACX0G,EAAO+D,EAAGijB,eACVc,EAASr9B,EAAGwH,EAAEyB,UAAY,kBAC1Bq0B,EAAO91B,EAAEM,OAAO4B,SAAU,YAAaA,SAAU,OAGlD,IAFA0yB,EAAcA,GAAe7mB,EAAK6mB,aAAe,IAEhCz0B,OAAS,CACzB,IAAM4H,EAAS,EAAGA,EAAS/H,EAAE0H,QAASK,IAErCtP,EAAGk8B,UAAUlC,SAAUzyB,EAAEmH,eAAgBY,GAAU6sB,EAAa7sB,GAAUgG,EAAKqnB,UAC1ES,EAAO11B,SAEXkH,EAAQwuB,EAAO/oB,GAAI/E,GAAS5B,IAAK2vB,EAAKhpB,GAAI/E,IAC1CtP,EAAGk8B,UAAUlC,SAAUprB,EAAOutB,EAAa7sB,GAAUgG,EAAKqnB,YAG5D/tB,EAAQ7O,EAAGwH,EAAEyB,UAAY,iBACdtB,SAAW1H,EAAGoZ,UAAW7R,EAAE/C,MAAO,aAC5CxE,EAAGk8B,UAAUlC,SAAUprB,EAAOrH,EAAEM,OAAOuyB,aAAc9kB,EAAKqnB,YAK7DW,kBAAoB,SAAU/1B,EAAG8R,GAChC,IAAIkkB,EACHrC,EAAc3zB,EAAEM,OAAOwb,SACvBma,EAAWnkB,EAAG4jB,qBAAqBxzB,WACnCg0B,EAAev0B,KAAK+Z,MAAOua,EAASjiB,QAAU,GAE1Cvb,EAAGoZ,UAAW7R,EAAE/C,MAAO,cAC3B02B,EAAc,EACd3zB,EAAEM,OAAOsN,QAAS,IAAMnV,EAAGuE,IAAIm5B,cAAej0B,WAAWyN,KAAK,WAC7D,IAAIyS,EAAQ5pB,EAAE6L,MAEdsvB,GAAevR,EAAMhc,OAAO,qBAAqBjG,OAASiiB,EAAMtG,SAAWsG,EAAMlgB,SAAS,SAAS4Z,aAI/FhK,EAAGskB,yBAA2Bp2B,EAAEM,OAAO4B,SAAS,SAAS/B,SAC9DwzB,GAAe3zB,EAAEM,OAAO4B,SAAS,SAAS4Z,UAI3Cka,EAA2C,KAA3BhlB,WAAWxY,EAAEwI,GAAGC,QAAiB,EAAIjB,EAAEM,OAAO6xB,WAAWhP,KACzE8S,EAAStmB,KAAM,WACd,IAAIyS,EAAQ5pB,EAAE6L,MACb0D,EAAS5G,SAAUihB,EAAM5gB,KAAM,eAAiB,IAChDkG,EAAU1H,EAAE0H,QAAU,EACtBmG,EAAUuU,EAAMzhB,KAAM,UACjBkN,KAEJA,EAAQ7C,GAAG,cACT8G,EAAGukB,yBAA2B59B,EAAGk8B,UAAU2B,oBAAoBt2B,EAAG+H,GAErEqa,EAAM9D,QACKvW,EAASL,GAAWK,IAAWL,GAAWoK,EAAGukB,0BACxDjU,EAAMplB,IAAI,CACTif,QAAS,eACTH,OAAS6X,EACTxQ,KAAOtV,EAAQskB,WAAWhP,KAAO6S,EAAgBnoB,EAAQglB,aAAeqD,QAO5EI,oBAAqB,SAAUt2B,EAAG+H,GACjC,IAAIuF,EACH7D,EAAM,EACP,IAAM6D,EAAIvF,EAAS,EAAGuF,EAAItN,EAAE0H,QAAS4F,IACpC7D,GAAOzJ,EAAEmH,eAAemG,GAAGtC,GAAI,YAAe,EAAI,EAEnD,OAAe,IAARvB,GAIR8sB,oBAAsB,SAAUv2B,EAAG8R,EAAIwC,GACtC,IAAI7S,EAAYzB,EAAEyB,UAAY,WAC9BqQ,EAAGijB,eAAehY,SAAWzI,EAC7B9b,EAAG,QAASud,YAAatd,EAAGuE,IAAIy3B,kBAAmBngB,GAC9CA,EACJ9b,EAAG,QACDgJ,KAAM,eAAgB,MACtB6B,KAAM,cAAgB5B,GAAW,GAEnCjJ,EAAG,QACDwV,WAAY,gBACZ5K,OAAQ,cAAgB3B,IAI5Bm0B,SAAW,SAAU51B,EAAG8R,GACvB,IAAIrQ,EAAYzB,EAAEyB,UAAY,WAC9BqQ,EAAG4jB,qBAAqBxzB,WAAWmB,KAAM,YAAa,SAAUiM,GAE/D,IAAIvH,EACHgG,EAAO+D,EAAGijB,eACV5nB,EAAU3U,EAAGwH,EAAEyB,UAAY,kBAC3BoM,EAAUrV,EAAG8W,EAAM7I,QAAS9F,KAAM,UAEnCoH,EAAS5G,SAAU0M,EAAQrM,KAAM,eAAiB,IAClDuM,EAAKvH,QAAUqH,EAAUA,EAAQ1H,IAAKgH,EAAQ/G,OAAO,iBAAmB2B,EAAS,OACjFgG,EAAKtH,OAASsB,EAGdgG,EAAKonB,MAAQ7lB,EAAMknB,UAAY1kB,EAAG2kB,qBACjC5oB,EAAQyd,SAASppB,WAAWyG,IAAK,oBAAqBvC,OAAQ,SAC9DyH,EAAQ6oB,QAAS,0BAA2B5pB,GAAI,GAEjD/E,EAAS5G,SAAU4M,EAAKonB,MAAM3zB,KAAM,eAAiB,IACrDuM,EAAKonB,MAAQpnB,EAAKonB,MAAMhvB,IAAKgH,EAAQ/G,OAAO,iBAAmB2B,EAAS,OACxEgG,EAAKumB,KAAOvsB,EAEZgG,EAAKmnB,eAAiB5lB,EAAMqnB,MAC5Bl+B,EAAGk8B,UAAUc,kBAAmBz1B,EAAG8R,GACnCrZ,EAAGk8B,UAAU4B,oBAAoBv2B,EAAG8R,GAAI,KAGzCtZ,EAAGolB,UACDva,KAAM,YAAc5B,EAAW,SAAU6N,GACzC,IAAIvB,EAAO+D,EAAGijB,eAERhnB,EAAKgP,UAAoC,IAAxBhP,EAAKmnB,gBAAyBnnB,EAAKvH,UACrDsL,EAAG8kB,oBACPrzB,aAAcwK,EAAKzG,OACnByG,EAAKzG,MAAQ5D,WAAY,WACxBjL,EAAGk8B,UAAUkC,UAAW72B,EAAG8R,EAAIxC,IAC7ByB,MAAOe,EAAG8kB,oBAAuB,EAAI9kB,EAAG8kB,qBAE3Cn+B,EAAGk8B,UAAUkC,UAAW72B,EAAG8R,EAAIxC,MAGhCjM,KAAM,UAAY5B,EAAW,WACxBqQ,EAAGijB,eAAehY,WACvBtkB,EAAGk8B,UAAU4B,oBAAqBv2B,EAAG8R,GAAI,GACzCrZ,EAAGk8B,UAAUmC,WAAY92B,EAAG8R,GAC5BrZ,EAAGk8B,UAAUoB,kBAAmB/1B,EAAG8R,MAIrCtZ,EAAG0d,GAAS7S,KAAM,SAAW5B,EAAY,aAAeA,EAAW,WAClEhJ,EAAGk8B,UAAUoB,kBAAmB/1B,EAAG8R,KAIpC9R,EAAEM,OACA+C,KAAM,8CAA8CnC,MAAO,KAAMgD,KAAMzC,EAAY,KAAO,WAC1FhJ,EAAGk8B,UAAUoB,kBAAmB/1B,EAAG8R,KAEnCzO,KAAM,iBAAmB5B,EAAW,WACpChJ,EAAG48B,eAAgBr1B,EAAE/C,SAErBgF,KAAM,eACNkE,IAAK3N,EAAGwH,EAAEyB,UAAY,gBAAiBQ,KAAM,gBAC7CoB,KAAM,cAAgB5B,EAAW,WAEjC,IAAIs1B,EAAsD,IAAzCjlB,EAAGijB,eAAeH,YAAYz0B,OAI/C,OAHA1H,EAAG48B,eAAgBr1B,EAAE/C,OACrBxE,EAAGk8B,UAAUoB,kBAAmB/1B,EAAG8R,GACnCA,EAAGijB,eAAeH,YAAc,GACzBmC,KAKVF,UAAY,SAAU72B,EAAG8R,EAAIxC,GAC5B,GAA0C,IAArCwC,EAAGijB,eAAeG,gBAAyBpjB,EAAGijB,eAAevuB,QAAlE,CAEA,IAAIuB,EACHyU,EAAQ,EACRzO,EAAO+D,EAAGijB,eACVI,EAAQpnB,EAAKonB,MACb6B,EAAMjpB,EAAK6mB,YAAa7mB,EAAKtH,QAC7BwwB,EAAW3nB,EAAMqnB,MAAQ5oB,EAAKmnB,eAC/B,GAAKnnB,EAAKqnB,SAAW,CACpB,GAAsB,EAAjB4B,EAAMC,EAAe,CAIzB,IAHAlpB,EAAK6mB,YAAa7mB,EAAKtH,SAAYwwB,EACnCx+B,EAAGk8B,UAAUlC,SAAU1kB,EAAKvH,QAASuH,EAAK6mB,YAAa7mB,EAAKtH,SAAU,GAEhEsB,EAAS,EAAGA,EAAS/H,EAAE0H,QAASK,IACrCyU,GAASzO,EAAK6mB,YAAa7sB,GAE5BtP,EAAGk8B,UAAUlC,SAAUzyB,EAAEM,OAAO6F,IAAK3N,EAAGwH,EAAEyB,UAAY,iBAAoB+a,GAErE2Y,EAAMh1B,SAEX4N,EAAKknB,MAAM,GAAG/B,WAAalzB,EAAEM,OAAO0T,cAE1BjG,EAAKwnB,WAChBxnB,EAAK6mB,YAAa7mB,EAAKtH,SAAYwwB,EACnClpB,EAAK6mB,YAAa7mB,EAAKumB,OAAU2C,GAGjClpB,EAAK6mB,YAAa7mB,EAAKtH,SAAYwwB,EAFnCx+B,EAAGk8B,UAAUa,UAAWx1B,EAAG8R,GAK5B/D,EAAKmnB,eAAiB5lB,EAAMqnB,MAE5B32B,EAAEM,OAAOwD,eAAe,yBAGzBgzB,WAAa,SAAU92B,EAAG8R,GACzB,IAAI/D,EAAO+D,EAAGijB,eACdt8B,EAAGk8B,UAAUc,kBAAmBz1B,EAAG8R,GAC9B/D,EAAKinB,aAETv8B,EAAGmjB,QAAS5b,EAAE/C,MAAOxE,EAAGuE,IAAI03B,iBAAkB3mB,EAAK6mB,aACnDn8B,EAAGmjB,QAAS5b,EAAE/C,MAAO,kCAAmC+C,EAAEM,OAAO0T,UAElEjG,EAAKmnB,eAAiB,EACtBnnB,EAAKvH,QAAUuH,EAAKonB,MAAQ,KAE5Bn1B,EAAEM,OAAOwD,eAAe,uBACxB9D,EAAEM,OAAOwD,eAAe,uBAO1BrL,EAAGiZ,UAAU,CACZtP,GAAI,YACJiQ,SAAU,GACVN,QAAS,CACR4iB,WAAY,EACZ0B,yBAA0B,EAC1BD,yBAAyB,EACzBc,iBAAmB,GACnBN,oBAAqB,EACrBH,sBAAuB,GAExBzxB,KAAM,SAAS/H,EAAOk6B,EAAYn3B,EAAG8R,GACpCrZ,EAAGk8B,UAAU3vB,KAAMhF,EAAG8R,IAEvBvG,OAAQ,SAAUtO,EAAO+C,EAAG8R,GAC3BrZ,EAAGk8B,UAAUoB,kBAAmB/1B,EAAG8R,IAEpCrD,OAAQ,SAAUxR,EAAO+C,EAAG8R,EAAIrM,GAC/B,GAAIqM,EAAG4jB,qBAAsB,CAC5B,IAAIj0B,EAAYzB,EAAEyB,UAAY,WAC9BzB,EAAEM,OAAO6F,IAAK3N,EAAGwH,EAAEyB,UAAY,iBAC7BwL,YAAY,gBACZ/K,SAAU,SACVkB,OAAQ,cAAgB3B,GAE1BqQ,EAAG4jB,qBAAqBjnB,SACxBhW,EAAGk8B,UAAU4B,oBAAqBv2B,EAAG8R,GAAI,GACzCrZ,EAAG48B,eAAgBp4B,EAAOwI,GAC1BjN,EAAGolB,UAAWxa,OAAQ,YAAc3B,EAAY,WAAaA,OAKhEhJ,EAAG48B,eAAiB,SAAUp4B,EAAOwI,GACpCjN,EAAGyE,GAAQ0S,KAAK,WACf,IAAIzI,EAAOwO,EACV1V,EAAIqE,KAAK3D,OACToR,EAAK9R,GAAKA,EAAE/E,cACZ8S,EAAO+D,EAAGijB,eACX,GAAK93B,GAAS+C,GAAKA,EAAEmH,eAAehH,OAAS,CAQ5C,IANK4N,EAAKqnB,UAAYrnB,EAAKunB,aAC1B78B,EAAGk8B,UAAUlC,SAAUzyB,EAAEM,OAAQyN,EAAKunB,YAAY,GAC7CvnB,EAAKinB,YACTv8B,EAAGmjB,QAAS3e,EAAO,kCAAmC8Q,EAAKunB,aAGvDpuB,EAAQ,EAAGA,EAAQlH,EAAE0H,QAASR,IACnCwO,EAAK1V,EAAEmH,eAAgBD,GAClB4K,EAAGolB,kBAAoBplB,EAAGolB,iBAAkBhwB,GAChDzO,EAAGk8B,UAAUlC,SAAU/c,EAAI5D,EAAGolB,iBAAkBhwB,GAAS6G,EAAKqnB,UAClD1f,EAAG5O,SAAU,oBAEzBrO,EAAGk8B,UAAUlC,SAAU/c,EAAI,GAAI3H,EAAKqnB,UAKtCp1B,EAAEM,OAAOwD,eAAgB,uBACpBrL,EAAGmjB,UAAYnW,GACnBhN,EAAGmjB,QAASvX,KAAM5L,EAAGuE,IAAI03B,iBAAkB,QAtZ/C,CA4ZGn8B,EAAQ2d,QAMX,SAAW1d,GACX,aACA,IAAIC,EAAKD,EAAEE,aAAe,GAE1B,SAAS0+B,EAAkBp3B,GAC1B,IAAIq3B,EAAS5+B,EAAGmjB,QAAS5b,EAAE/C,MAAO,wBAClC,OAAQo6B,GAAUA,EAAO9W,eAAe,aAAe/nB,EAAEqX,QAAQwnB,EAAOp9B,UAAao9B,EAAOp9B,SAAW,GAGxG,SAASq9B,EAAgBt3B,EAAG/F,GAC3B,OAAQA,GAAYm9B,EAAkBp3B,IAAIkE,KAAK,OAASlE,EAAE/F,SAASiK,KAAK,KAOzEzL,EAAGiZ,UAAU,CACZtP,GAAI,WACJiQ,SAAU,GACVN,QAAS,CACRwlB,UAAW,GAEZvyB,KAAM,SAAS/H,EAAOk6B,EAAYn3B,EAAG8R,GAEpCqlB,EAAW5rB,OAAOtO,EAAO+C,EAAG8R,GAAI,IAEjCvG,OAAQ,SAAStO,EAAO+C,EAAG8R,EAAI9M,GAC9B,IAAIuE,EACHjJ,EAASN,EAAEM,OACXi3B,GAA2B,IAAhBzlB,EAAGylB,SACdt9B,EAAW,CAAE,SAAa+F,EAAE/F,UAC5ByC,EAAQjE,EAAGiE,MAAMsD,EAAG,YACjBtD,IACH6M,EAAO,IAAIzI,MAERR,EAAOwG,SAAS,eACfywB,GAAYt6B,EAAMmD,gBAAkB3H,EAAGmjB,SAAW0b,EAAgBt3B,KACrEvH,EAAGmjB,QAAS3e,EAAO,uBAAwBhD,GACvCyC,GACHkE,QAAQ+C,IAAI,iCAAmC3D,EAAE/F,SAAWxB,EAAGmL,UAAU2F,MAK3EjJ,EAAOyB,SAAS,eAChB9H,EAAW,GAEPxB,EAAGmjB,UACN3hB,EAAWm9B,EAAkBp3B,GACzBtD,GACHkE,QAAQ+C,IAAI,kCAAoC1J,EAAW,IAAMxB,EAAGmL,UAAU2F,IAE/EjJ,EAAO+C,KAAK,gBAAiB,SAASiM,GACrCA,EAAMlL,kBACN3L,EAAGmjB,QAAS3e,EAAO,uBAAwB,OAKzC+H,GAAQ/K,GAA8B,EAAlBA,EAASkG,OAChCH,EAAE/F,SAAWA,EACHgD,EAAMmD,gBAAkBnG,GAA8B,EAAlBA,EAASkG,QAEnDm3B,EAAgBt3B,EAAG/F,IACtBxB,EAAGyK,OAAOlD,EAAG/F,KAKjBwU,OAAQ,SAASxR,EAAO+C,GACvBA,EAAEM,OAAO2M,YAAY,eAEjBxU,EAAGmjB,SAAWnjB,EAAGmjB,QAAS3e,EAAO,uBAAwB,OAzE/D,CA6EE1E,GACIA,EAAOG,cArmG+E","file":"javascripts/vendors~tablesorter-9608cb1d1ca489254ec5.chunk.js","sourcesContent":["(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){\n/*! TableSorter (FORK) v2.31.0 *//*\n* Client-side table sorting with ease!\n* @requires jQuery v1.2.6+\n*\n* Copyright (c) 2007 Christian Bach\n* fork maintained by Rob Garrison\n*\n* Examples and original docs at: http://tablesorter.com\n* Dual licensed under the MIT and GPL licenses:\n* http://www.opensource.org/licenses/mit-license.php\n* http://www.gnu.org/licenses/gpl.html\n*\n* @type jQuery\n* @name tablesorter (FORK)\n* @cat Plugins/Tablesorter\n* @author Christian Bach - christian.bach@polyester.se\n* @contributor Rob Garrison - https://github.com/Mottie/tablesorter\n* @docs (fork) - https://mottie.github.io/tablesorter/docs/\n*/\n/*jshint browser:true, jquery:true, unused:false, expr: true */\n;( function( $ ) {\n\t'use strict';\n\tvar ts = $.tablesorter = {\n\n\t\tversion : '2.31.0',\n\n\t\tparsers : [],\n\t\twidgets : [],\n\t\tdefaults : {\n\n\t\t\t// *** appearance\n\t\t\ttheme            : 'default',  // adds tablesorter-{theme} to the table for styling\n\t\t\twidthFixed       : false,      // adds colgroup to fix widths of columns\n\t\t\tshowProcessing   : false,      // show an indeterminate timer icon in the header when the table is sorted or filtered.\n\n\t\t\theaderTemplate   : '{content}',// header layout template (HTML ok); {content} = innerHTML, {icon} = <i/> // class from cssIcon\n\t\t\tonRenderTemplate : null,       // function( index, template ) { return template; }, // template is a string\n\t\t\tonRenderHeader   : null,       // function( index ) {}, // nothing to return\n\n\t\t\t// *** functionality\n\t\t\tcancelSelection  : true,       // prevent text selection in the header\n\t\t\ttabIndex         : true,       // add tabindex to header for keyboard accessibility\n\t\t\tdateFormat       : 'mmddyyyy', // other options: 'ddmmyyy' or 'yyyymmdd'\n\t\t\tsortMultiSortKey : 'shiftKey', // key used to select additional columns\n\t\t\tsortResetKey     : 'ctrlKey',  // key used to remove sorting on a column\n\t\t\tusNumberFormat   : true,       // false for German '1.234.567,89' or French '1 234 567,89'\n\t\t\tdelayInit        : false,      // if false, the parsed table contents will not update until the first sort\n\t\t\tserverSideSorting: false,      // if true, server-side sorting should be performed because client-side sorting will be disabled, but the ui and events will still be used.\n\t\t\tresort           : true,       // default setting to trigger a resort after an 'update', 'addRows', 'updateCell', etc has completed\n\n\t\t\t// *** sort options\n\t\t\theaders          : {},         // set sorter, string, empty, locked order, sortInitialOrder, filter, etc.\n\t\t\tignoreCase       : true,       // ignore case while sorting\n\t\t\tsortForce        : null,       // column(s) first sorted; always applied\n\t\t\tsortList         : [],         // Initial sort order; applied initially; updated when manually sorted\n\t\t\tsortAppend       : null,       // column(s) sorted last; always applied\n\t\t\tsortStable       : false,      // when sorting two rows with exactly the same content, the original sort order is maintained\n\n\t\t\tsortInitialOrder : 'asc',      // sort direction on first click\n\t\t\tsortLocaleCompare: false,      // replace equivalent character (accented characters)\n\t\t\tsortReset        : false,      // third click on the header will reset column to default - unsorted\n\t\t\tsortRestart      : false,      // restart sort to 'sortInitialOrder' when clicking on previously unsorted columns\n\n\t\t\temptyTo          : 'bottom',   // sort empty cell to bottom, top, none, zero, emptyMax, emptyMin\n\t\t\tstringTo         : 'max',      // sort strings in numerical column as max, min, top, bottom, zero\n\t\t\tduplicateSpan    : true,       // colspan cells in the tbody will have duplicated content in the cache for each spanned column\n\t\t\ttextExtraction   : 'basic',    // text extraction method/function - function( node, table, cellIndex ) {}\n\t\t\ttextAttribute    : 'data-text',// data-attribute that contains alternate cell text (used in default textExtraction function)\n\t\t\ttextSorter       : null,       // choose overall or specific column sorter function( a, b, direction, table, columnIndex ) [alt: ts.sortText]\n\t\t\tnumberSorter     : null,       // choose overall numeric sorter function( a, b, direction, maxColumnValue )\n\n\t\t\t// *** widget options\n\t\t\tinitWidgets      : true,       // apply widgets on tablesorter initialization\n\t\t\twidgetClass      : 'widget-{name}', // table class name template to match to include a widget\n\t\t\twidgets          : [],         // method to add widgets, e.g. widgets: ['zebra']\n\t\t\twidgetOptions    : {\n\t\t\t\tzebra : [ 'even', 'odd' ]  // zebra widget alternating row class names\n\t\t\t},\n\n\t\t\t// *** callbacks\n\t\t\tinitialized      : null,       // function( table ) {},\n\n\t\t\t// *** extra css class names\n\t\t\ttableClass       : '',\n\t\t\tcssAsc           : '',\n\t\t\tcssDesc          : '',\n\t\t\tcssNone          : '',\n\t\t\tcssHeader        : '',\n\t\t\tcssHeaderRow     : '',\n\t\t\tcssProcessing    : '', // processing icon applied to header during sort/filter\n\n\t\t\tcssChildRow      : 'tablesorter-childRow', // class name indiciating that a row is to be attached to its parent\n\t\t\tcssInfoBlock     : 'tablesorter-infoOnly', // don't sort tbody with this class name (only one class name allowed here!)\n\t\t\tcssNoSort        : 'tablesorter-noSort',   // class name added to element inside header; clicking on it won't cause a sort\n\t\t\tcssIgnoreRow     : 'tablesorter-ignoreRow',// header row to ignore; cells within this row will not be added to c.$headers\n\n\t\t\tcssIcon          : 'tablesorter-icon', // if this class does not exist, the {icon} will not be added from the headerTemplate\n\t\t\tcssIconNone      : '', // class name added to the icon when there is no column sort\n\t\t\tcssIconAsc       : '', // class name added to the icon when the column has an ascending sort\n\t\t\tcssIconDesc      : '', // class name added to the icon when the column has a descending sort\n\t\t\tcssIconDisabled  : '', // class name added to the icon when the column has a disabled sort\n\n\t\t\t// *** events\n\t\t\tpointerClick     : 'click',\n\t\t\tpointerDown      : 'mousedown',\n\t\t\tpointerUp        : 'mouseup',\n\n\t\t\t// *** selectors\n\t\t\tselectorHeaders  : '> thead th, > thead td',\n\t\t\tselectorSort     : 'th, td', // jQuery selector of content within selectorHeaders that is clickable to trigger a sort\n\t\t\tselectorRemove   : '.remove-me',\n\n\t\t\t// *** advanced\n\t\t\tdebug            : false,\n\n\t\t\t// *** Internal variables\n\t\t\theaderList: [],\n\t\t\tempties: {},\n\t\t\tstrings: {},\n\t\t\tparsers: [],\n\n\t\t\t// *** parser options for validator; values must be falsy!\n\t\t\tglobalize: 0,\n\t\t\timgAttr: 0\n\n\t\t\t// removed: widgetZebra: { css: ['even', 'odd'] }\n\n\t\t},\n\n\t\t// internal css classes - these will ALWAYS be added to\n\t\t// the table and MUST only contain one class name - fixes #381\n\t\tcss : {\n\t\t\ttable      : 'tablesorter',\n\t\t\tcssHasChild: 'tablesorter-hasChildRow',\n\t\t\tchildRow   : 'tablesorter-childRow',\n\t\t\tcolgroup   : 'tablesorter-colgroup',\n\t\t\theader     : 'tablesorter-header',\n\t\t\theaderRow  : 'tablesorter-headerRow',\n\t\t\theaderIn   : 'tablesorter-header-inner',\n\t\t\ticon       : 'tablesorter-icon',\n\t\t\tprocessing : 'tablesorter-processing',\n\t\t\tsortAsc    : 'tablesorter-headerAsc',\n\t\t\tsortDesc   : 'tablesorter-headerDesc',\n\t\t\tsortNone   : 'tablesorter-headerUnSorted'\n\t\t},\n\n\t\t// labels applied to sortable headers for accessibility (aria) support\n\t\tlanguage : {\n\t\t\tsortAsc      : 'Ascending sort applied, ',\n\t\t\tsortDesc     : 'Descending sort applied, ',\n\t\t\tsortNone     : 'No sort applied, ',\n\t\t\tsortDisabled : 'sorting is disabled',\n\t\t\tnextAsc      : 'activate to apply an ascending sort',\n\t\t\tnextDesc     : 'activate to apply a descending sort',\n\t\t\tnextNone     : 'activate to remove the sort'\n\t\t},\n\n\t\tregex : {\n\t\t\ttemplateContent : /\\{content\\}/g,\n\t\t\ttemplateIcon    : /\\{icon\\}/g,\n\t\t\ttemplateName    : /\\{name\\}/i,\n\t\t\tspaces          : /\\s+/g,\n\t\t\tnonWord         : /\\W/g,\n\t\t\tformElements    : /(input|select|button|textarea)/i,\n\n\t\t\t// *** sort functions ***\n\t\t\t// regex used in natural sort\n\t\t\t// chunk/tokenize numbers & letters\n\t\t\tchunk  : /(^([+\\-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,\n\t\t\t// replace chunks @ ends\n\t\t\tchunks : /(^\\\\0|\\\\0$)/,\n\t\t\thex    : /^0x[0-9a-f]+$/i,\n\n\t\t\t// *** formatFloat ***\n\t\t\tcomma                : /,/g,\n\t\t\tdigitNonUS           : /[\\s|\\.]/g,\n\t\t\tdigitNegativeTest    : /^\\s*\\([.\\d]+\\)/,\n\t\t\tdigitNegativeReplace : /^\\s*\\(([.\\d]+)\\)/,\n\n\t\t\t// *** isDigit ***\n\t\t\tdigitTest    : /^[\\-+(]?\\d+[)]?$/,\n\t\t\tdigitReplace : /[,.'\"\\s]/g\n\n\t\t},\n\n\t\t// digit sort, text location\n\t\tstring : {\n\t\t\tmax      : 1,\n\t\t\tmin      : -1,\n\t\t\temptymin : 1,\n\t\t\temptymax : -1,\n\t\t\tzero     : 0,\n\t\t\tnone     : 0,\n\t\t\t'null'   : 0,\n\t\t\ttop      : true,\n\t\t\tbottom   : false\n\t\t},\n\n\t\tkeyCodes : {\n\t\t\tenter : 13\n\t\t},\n\n\t\t// placeholder date parser data (globalize)\n\t\tdates : {},\n\n\t\t// These methods can be applied on table.config instance\n\t\tinstanceMethods : {},\n\n\t\t/*\n\t\t▄█████ ██████ ██████ ██  ██ █████▄\n\t\t▀█▄    ██▄▄     ██   ██  ██ ██▄▄██\n\t\t   ▀█▄ ██▀▀     ██   ██  ██ ██▀▀▀\n\t\t█████▀ ██████   ██   ▀████▀ ██\n\t\t*/\n\n\t\tsetup : function( table, c ) {\n\t\t\t// if no thead or tbody, or tablesorter is already present, quit\n\t\t\tif ( !table || !table.tHead || table.tBodies.length === 0 || table.hasInitialized === true ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tif ( table.hasInitialized ) {\n\t\t\t\t\t\tconsole.warn( 'Stopping initialization. Tablesorter has already been initialized' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error( 'Stopping initialization! No table, thead or tbody', table );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar tmp = '',\n\t\t\t\t$table = $( table ),\n\t\t\t\tmeta = $.metadata;\n\t\t\t// initialization flag\n\t\t\ttable.hasInitialized = false;\n\t\t\t// table is being processed flag\n\t\t\ttable.isProcessing = true;\n\t\t\t// make sure to store the config object\n\t\t\ttable.config = c;\n\t\t\t// save the settings where they read\n\t\t\t$.data( table, 'tablesorter', c );\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Initializing tablesorter v' + ts.version );\n\t\t\t\t$.data( table, 'startoveralltimer', new Date() );\n\t\t\t}\n\n\t\t\t// removing this in version 3 (only supports jQuery 1.7+)\n\t\t\tc.supportsDataObject = ( function( version ) {\n\t\t\t\tversion[ 0 ] = parseInt( version[ 0 ], 10 );\n\t\t\t\treturn ( version[ 0 ] > 1 ) || ( version[ 0 ] === 1 && parseInt( version[ 1 ], 10 ) >= 4 );\n\t\t\t})( $.fn.jquery.split( '.' ) );\n\t\t\t// ensure case insensitivity\n\t\t\tc.emptyTo = c.emptyTo.toLowerCase();\n\t\t\tc.stringTo = c.stringTo.toLowerCase();\n\t\t\tc.last = { sortList : [], clickedIndex : -1 };\n\t\t\t// add table theme class only if there isn't already one there\n\t\t\tif ( !/tablesorter\\-/.test( $table.attr( 'class' ) ) ) {\n\t\t\t\ttmp = ( c.theme !== '' ? ' tablesorter-' + c.theme : '' );\n\t\t\t}\n\n\t\t\t// give the table a unique id, which will be used in namespace binding\n\t\t\tif ( !c.namespace ) {\n\t\t\t\tc.namespace = '.tablesorter' + Math.random().toString( 16 ).slice( 2 );\n\t\t\t} else {\n\t\t\t\t// make sure namespace starts with a period & doesn't have weird characters\n\t\t\t\tc.namespace = '.' + c.namespace.replace( ts.regex.nonWord, '' );\n\t\t\t}\n\n\t\t\tc.table = table;\n\t\t\tc.$table = $table\n\t\t\t\t// add namespace to table to allow bindings on extra elements to target\n\t\t\t\t// the parent table (e.g. parser-input-select)\n\t\t\t\t.addClass( ts.css.table + ' ' + c.tableClass + tmp + ' ' + c.namespace.slice(1) )\n\t\t\t\t.attr( 'role', 'grid' );\n\t\t\tc.$headers = $table.find( c.selectorHeaders );\n\n\t\t\tc.$table.children().children( 'tr' ).attr( 'role', 'row' );\n\t\t\tc.$tbodies = $table.children( 'tbody:not(.' + c.cssInfoBlock + ')' ).attr({\n\t\t\t\t'aria-live' : 'polite',\n\t\t\t\t'aria-relevant' : 'all'\n\t\t\t});\n\t\t\tif ( c.$table.children( 'caption' ).length ) {\n\t\t\t\ttmp = c.$table.children( 'caption' )[ 0 ];\n\t\t\t\tif ( !tmp.id ) { tmp.id = c.namespace.slice( 1 ) + 'caption'; }\n\t\t\t\tc.$table.attr( 'aria-labelledby', tmp.id );\n\t\t\t}\n\t\t\tc.widgetInit = {}; // keep a list of initialized widgets\n\t\t\t// change textExtraction via data-attribute\n\t\t\tc.textExtraction = c.$table.attr( 'data-text-extraction' ) || c.textExtraction || 'basic';\n\t\t\t// build headers\n\t\t\tts.buildHeaders( c );\n\t\t\t// fixate columns if the users supplies the fixedWidth option\n\t\t\t// do this after theme has been applied\n\t\t\tts.fixColumnWidth( table );\n\t\t\t// add widgets from class name\n\t\t\tts.addWidgetFromClass( table );\n\t\t\t// add widget options before parsing (e.g. grouping widget has parser settings)\n\t\t\tts.applyWidgetOptions( table );\n\t\t\t// try to auto detect column type, and store in tables config\n\t\t\tts.setupParsers( c );\n\t\t\t// start total row count at zero\n\t\t\tc.totalRows = 0;\n\t\t\t// only validate options while debugging. See #1528\n\t\t\tif (c.debug) {\n\t\t\t\tts.validateOptions( c );\n\t\t\t}\n\t\t\t// build the cache for the tbody cells\n\t\t\t// delayInit will delay building the cache until the user starts a sort\n\t\t\tif ( !c.delayInit ) { ts.buildCache( c ); }\n\t\t\t// bind all header events and methods\n\t\t\tts.bindEvents( table, c.$headers, true );\n\t\t\tts.bindMethods( c );\n\t\t\t// get sort list from jQuery data or metadata\n\t\t\t// in jQuery < 1.4, an error occurs when calling $table.data()\n\t\t\tif ( c.supportsDataObject && typeof $table.data().sortlist !== 'undefined' ) {\n\t\t\t\tc.sortList = $table.data().sortlist;\n\t\t\t} else if ( meta && ( $table.metadata() && $table.metadata().sortlist ) ) {\n\t\t\t\tc.sortList = $table.metadata().sortlist;\n\t\t\t}\n\t\t\t// apply widget init code\n\t\t\tts.applyWidget( table, true );\n\t\t\t// if user has supplied a sort list to constructor\n\t\t\tif ( c.sortList.length > 0 ) {\n\t\t\t\tts.sortOn( c, c.sortList, {}, !c.initWidgets );\n\t\t\t} else {\n\t\t\t\tts.setHeadersCss( c );\n\t\t\t\tif ( c.initWidgets ) {\n\t\t\t\t\t// apply widget format\n\t\t\t\t\tts.applyWidget( table, false );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// show processesing icon\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\t$table\n\t\t\t\t.unbind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace )\n\t\t\t\t.bind( 'sortBegin' + c.namespace + ' sortEnd' + c.namespace, function( e ) {\n\t\t\t\t\tclearTimeout( c.timerProcessing );\n\t\t\t\t\tts.isProcessing( table );\n\t\t\t\t\tif ( e.type === 'sortBegin' ) {\n\t\t\t\t\t\tc.timerProcessing = setTimeout( function() {\n\t\t\t\t\t\t\tts.isProcessing( table, true );\n\t\t\t\t\t\t}, 500 );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// initialized\n\t\t\ttable.hasInitialized = true;\n\t\t\ttable.isProcessing = false;\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Overall initialization time:' + ts.benchmark( $.data( table, 'startoveralltimer' ) ) );\n\t\t\t\tif ( ts.debug(c, 'core') && console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\t$table.triggerHandler( 'tablesorter-initialized', table );\n\t\t\tif ( typeof c.initialized === 'function' ) {\n\t\t\t\tc.initialized( table );\n\t\t\t}\n\t\t},\n\n\t\tbindMethods : function( c ) {\n\t\t\tvar $table = c.$table,\n\t\t\t\tnamespace = c.namespace,\n\t\t\t\tevents = ( 'sortReset update updateRows updateAll updateHeaders addRows updateCell updateComplete ' +\n\t\t\t\t\t'sorton appendCache updateCache applyWidgetId applyWidgets refreshWidgets destroy mouseup ' +\n\t\t\t\t\t'mouseleave ' ).split( ' ' )\n\t\t\t\t\t.join( namespace + ' ' );\n\t\t\t// apply easy methods that trigger bound events\n\t\t\t$table\n\t\t\t.unbind( events.replace( ts.regex.spaces, ' ' ) )\n\t\t\t.bind( 'sortReset' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// using this.config to ensure functions are getting a non-cached version of the config\n\t\t\t\tts.sortReset( this.config, function( table ) {\n\t\t\t\t\tif (table.isApplyingWidgets) {\n\t\t\t\t\t\t// multiple triggers in a row... filterReset, then sortReset - see #1361\n\t\t\t\t\t\t// wait to update widgets\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\tts.applyWidget( table, '', callback );\n\t\t\t\t\t\t}, 100 );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tts.applyWidget( table, '', callback );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t})\n\t\t\t.bind( 'updateAll' + namespace, function( e, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateAll( this.config, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'update' + namespace + ' updateRows' + namespace, function( e, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.update( this.config, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'updateHeaders' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateHeaders( this.config, callback );\n\t\t\t})\n\t\t\t.bind( 'updateCell' + namespace, function( e, cell, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateCell( this.config, cell, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'addRows' + namespace, function( e, $row, resort, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.addRows( this.config, $row, resort, callback );\n\t\t\t})\n\t\t\t.bind( 'updateComplete' + namespace, function() {\n\t\t\t\tthis.isUpdating = false;\n\t\t\t})\n\t\t\t.bind( 'sorton' + namespace, function( e, list, callback, init ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.sortOn( this.config, list, callback, init );\n\t\t\t})\n\t\t\t.bind( 'appendCache' + namespace, function( e, callback, init ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.appendCache( this.config, init );\n\t\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\t\tcallback( this );\n\t\t\t\t}\n\t\t\t})\n\t\t\t// $tbodies variable is used by the tbody sorting widget\n\t\t\t.bind( 'updateCache' + namespace, function( e, callback, $tbodies ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.updateCache( this.config, callback, $tbodies );\n\t\t\t})\n\t\t\t.bind( 'applyWidgetId' + namespace, function( e, id ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.applyWidgetId( this, id );\n\t\t\t})\n\t\t\t.bind( 'applyWidgets' + namespace, function( e, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// apply widgets (false = not initializing)\n\t\t\t\tts.applyWidget( this, false, callback );\n\t\t\t})\n\t\t\t.bind( 'refreshWidgets' + namespace, function( e, all, dontapply ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.refreshWidgets( this, all, dontapply );\n\t\t\t})\n\t\t\t.bind( 'removeWidget' + namespace, function( e, name, refreshing ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.removeWidget( this, name, refreshing );\n\t\t\t})\n\t\t\t.bind( 'destroy' + namespace, function( e, removeClasses, callback ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tts.destroy( this, removeClasses, callback );\n\t\t\t})\n\t\t\t.bind( 'resetToLoadState' + namespace, function( e ) {\n\t\t\t\te.stopPropagation();\n\t\t\t\t// remove all widgets\n\t\t\t\tts.removeWidget( this, true, false );\n\t\t\t\tvar tmp = $.extend( true, {}, c.originalSettings );\n\t\t\t\t// restore original settings; this clears out current settings, but does not clear\n\t\t\t\t// values saved to storage.\n\t\t\t\tc = $.extend( true, {}, ts.defaults, tmp );\n\t\t\t\tc.originalSettings = tmp;\n\t\t\t\tthis.hasInitialized = false;\n\t\t\t\t// setup the entire table again\n\t\t\t\tts.setup( this, c );\n\t\t\t});\n\t\t},\n\n\t\tbindEvents : function( table, $headers, core ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar tmp,\n\t\t\t\tc = table.config,\n\t\t\t\tnamespace = c.namespace,\n\t\t\t\tdownTarget = null;\n\t\t\tif ( core !== true ) {\n\t\t\t\t$headers.addClass( namespace.slice( 1 ) + '_extra_headers' );\n\t\t\t\ttmp = ts.getClosest( $headers, 'table' );\n\t\t\t\tif ( tmp.length && tmp[ 0 ].nodeName === 'TABLE' && tmp[ 0 ] !== table ) {\n\t\t\t\t\t$( tmp[ 0 ] ).addClass( namespace.slice( 1 ) + '_extra_table' );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp = ( c.pointerDown + ' ' + c.pointerUp + ' ' + c.pointerClick + ' sort keyup ' )\n\t\t\t\t.replace( ts.regex.spaces, ' ' )\n\t\t\t\t.split( ' ' )\n\t\t\t\t.join( namespace + ' ' );\n\t\t\t// apply event handling to headers and/or additional headers (stickyheaders, scroller, etc)\n\t\t\t$headers\n\t\t\t// http://stackoverflow.com/questions/5312849/jquery-find-self;\n\t\t\t.find( c.selectorSort )\n\t\t\t.add( $headers.filter( c.selectorSort ) )\n\t\t\t.unbind( tmp )\n\t\t\t.bind( tmp, function( e, external ) {\n\t\t\t\tvar $cell, cell, temp,\n\t\t\t\t\t$target = $( e.target ),\n\t\t\t\t\t// wrap event type in spaces, so the match doesn't trigger on inner words\n\t\t\t\t\ttype = ' ' + e.type + ' ';\n\t\t\t\t// only recognize left clicks\n\t\t\t\tif ( ( ( e.which || e.button ) !== 1 && !type.match( ' ' + c.pointerClick + ' | sort | keyup ' ) ) ||\n\t\t\t\t\t// allow pressing enter\n\t\t\t\t\t( type === ' keyup ' && e.which !== ts.keyCodes.enter ) ||\n\t\t\t\t\t// allow triggering a click event (e.which is undefined) & ignore physical clicks\n\t\t\t\t\t( type.match( ' ' + c.pointerClick + ' ' ) && typeof e.which !== 'undefined' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// ignore mouseup if mousedown wasn't on the same target\n\t\t\t\tif ( type.match( ' ' + c.pointerUp + ' ' ) && downTarget !== e.target && external !== true ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// set target on mousedown\n\t\t\t\tif ( type.match( ' ' + c.pointerDown + ' ' ) ) {\n\t\t\t\t\tdownTarget = e.target;\n\t\t\t\t\t// preventDefault needed or jQuery v1.3.2 and older throws an\n\t\t\t\t\t// \"Uncaught TypeError: handler.apply is not a function\" error\n\t\t\t\t\ttemp = $target.jquery.split( '.' );\n\t\t\t\t\tif ( temp[ 0 ] === '1' && temp[ 1 ] < 4 ) { e.preventDefault(); }\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdownTarget = null;\n\t\t\t\t$cell = ts.getClosest( $( this ), '.' + ts.css.header );\n\t\t\t\t// prevent sort being triggered on form elements\n\t\t\t\tif ( ts.regex.formElements.test( e.target.nodeName ) ||\n\t\t\t\t\t// nosort class name, or elements within a nosort container\n\t\t\t\t\t$target.hasClass( c.cssNoSort ) || $target.parents( '.' + c.cssNoSort ).length > 0 ||\n\t\t\t\t\t// disabled cell directly clicked\n\t\t\t\t\t$cell.hasClass( 'sorter-false' ) ||\n\t\t\t\t\t// elements within a button\n\t\t\t\t\t$target.parents( 'button' ).length > 0 ) {\n\t\t\t\t\treturn !c.cancelSelection;\n\t\t\t\t}\n\t\t\t\tif ( c.delayInit && ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t\tts.buildCache( c );\n\t\t\t\t}\n\t\t\t\t// use column index from data-attribute or index of current row; fixes #1116\n\t\t\t\tc.last.clickedIndex = $cell.attr( 'data-column' ) || $cell.index();\n\t\t\t\tcell = c.$headerIndexed[ c.last.clickedIndex ][0];\n\t\t\t\tif ( cell && !cell.sortDisabled ) {\n\t\t\t\t\tts.initSort( c, cell, e );\n\t\t\t\t}\n\t\t\t});\n\t\t\tif ( c.cancelSelection ) {\n\t\t\t\t// cancel selection\n\t\t\t\t$headers\n\t\t\t\t\t.attr( 'unselectable', 'on' )\n\t\t\t\t\t.bind( 'selectstart', false )\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'user-select' : 'none',\n\t\t\t\t\t\t'MozUserSelect' : 'none' // not needed for jQuery 1.8+\n\t\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tbuildHeaders : function( c ) {\n\t\t\tvar $temp, icon, timer, indx;\n\t\t\tc.headerList = [];\n\t\t\tc.headerContent = [];\n\t\t\tc.sortVars = [];\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\ttimer = new Date();\n\t\t\t}\n\t\t\t// children tr in tfoot - see issue #196 & #547\n\t\t\t// don't pass table.config to computeColumnIndex here - widgets (math) pass it to \"quickly\" index tbody cells\n\t\t\tc.columns = ts.computeColumnIndex( c.$table.children( 'thead, tfoot' ).children( 'tr' ) );\n\t\t\t// add icon if cssIcon option exists\n\t\t\ticon = c.cssIcon ?\n\t\t\t\t'<i class=\"' + ( c.cssIcon === ts.css.icon ? ts.css.icon : c.cssIcon + ' ' + ts.css.icon ) + '\"></i>' :\n\t\t\t\t'';\n\t\t\t// redefine c.$headers here in case of an updateAll that replaces or adds an entire header cell - see #683\n\t\t\tc.$headers = $( $.map( c.$table.find( c.selectorHeaders ), function( elem, index ) {\n\t\t\t\tvar configHeaders, header, column, template, tmp,\n\t\t\t\t\t$elem = $( elem );\n\t\t\t\t// ignore cell (don't add it to c.$headers) if row has ignoreRow class\n\t\t\t\tif ( ts.getClosest( $elem, 'tr' ).hasClass( c.cssIgnoreRow ) ) { return; }\n\t\t\t\t// transfer data-column to element if not th/td - #1459\n\t\t\t\tif ( !/(th|td)/i.test( elem.nodeName ) ) {\n\t\t\t\t\ttmp = ts.getClosest( $elem, 'th, td' );\n\t\t\t\t\t$elem.attr( 'data-column', tmp.attr( 'data-column' ) );\n\t\t\t\t}\n\t\t\t\t// make sure to get header cell & not column indexed cell\n\t\t\t\tconfigHeaders = ts.getColumnData( c.table, c.headers, index, true );\n\t\t\t\t// save original header content\n\t\t\t\tc.headerContent[ index ] = $elem.html();\n\t\t\t\t// if headerTemplate is empty, don't reformat the header cell\n\t\t\t\tif ( c.headerTemplate !== '' && !$elem.find( '.' + ts.css.headerIn ).length ) {\n\t\t\t\t\t// set up header template\n\t\t\t\t\ttemplate = c.headerTemplate\n\t\t\t\t\t\t.replace( ts.regex.templateContent, $elem.html() )\n\t\t\t\t\t\t.replace( ts.regex.templateIcon, $elem.find( '.' + ts.css.icon ).length ? '' : icon );\n\t\t\t\t\tif ( c.onRenderTemplate ) {\n\t\t\t\t\t\theader = c.onRenderTemplate.apply( $elem, [ index, template ] );\n\t\t\t\t\t\t// only change t if something is returned\n\t\t\t\t\t\tif ( header && typeof header === 'string' ) {\n\t\t\t\t\t\t\ttemplate = header;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$elem.html( '<div class=\"' + ts.css.headerIn + '\">' + template + '</div>' ); // faster than wrapInner\n\t\t\t\t}\n\t\t\t\tif ( c.onRenderHeader ) {\n\t\t\t\t\tc.onRenderHeader.apply( $elem, [ index, c, c.$table ] );\n\t\t\t\t}\n\t\t\t\tcolumn = parseInt( $elem.attr( 'data-column' ), 10 );\n\t\t\t\telem.column = column;\n\t\t\t\ttmp = ts.getOrder( ts.getData( $elem, configHeaders, 'sortInitialOrder' ) || c.sortInitialOrder );\n\t\t\t\t// this may get updated numerous times if there are multiple rows\n\t\t\t\tc.sortVars[ column ] = {\n\t\t\t\t\tcount : -1, // set to -1 because clicking on the header automatically adds one\n\t\t\t\t\torder : tmp ?\n\t\t\t\t\t\t( c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ] ) : // desc, asc, unsorted\n\t\t\t\t\t\t( c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ] ),  // asc, desc, unsorted\n\t\t\t\t\tlockedOrder : false,\n\t\t\t\t\tsortedBy : ''\n\t\t\t\t};\n\t\t\t\ttmp = ts.getData( $elem, configHeaders, 'lockedOrder' ) || false;\n\t\t\t\tif ( typeof tmp !== 'undefined' && tmp !== false ) {\n\t\t\t\t\tc.sortVars[ column ].lockedOrder = true;\n\t\t\t\t\tc.sortVars[ column ].order = ts.getOrder( tmp ) ? [ 1, 1 ] : [ 0, 0 ];\n\t\t\t\t}\n\t\t\t\t// add cell to headerList\n\t\t\t\tc.headerList[ index ] = elem;\n\t\t\t\t$elem.addClass( ts.css.header + ' ' + c.cssHeader );\n\t\t\t\t// add to parent in case there are multiple rows\n\t\t\t\tts.getClosest( $elem, 'tr' )\n\t\t\t\t\t.addClass( ts.css.headerRow + ' ' + c.cssHeaderRow )\n\t\t\t\t\t.attr( 'role', 'row' );\n\t\t\t\t// allow keyboard cursor to focus on element\n\t\t\t\tif ( c.tabIndex ) {\n\t\t\t\t\t$elem.attr( 'tabindex', 0 );\n\t\t\t\t}\n\t\t\t\treturn elem;\n\t\t\t}) );\n\t\t\t// cache headers per column\n\t\t\tc.$headerIndexed = [];\n\t\t\tfor ( indx = 0; indx < c.columns; indx++ ) {\n\t\t\t\t// colspan in header making a column undefined\n\t\t\t\tif ( ts.isEmptyObject( c.sortVars[ indx ] ) ) {\n\t\t\t\t\tc.sortVars[ indx ] = {};\n\t\t\t\t}\n\t\t\t\t// Use c.$headers.parent() in case selectorHeaders doesn't point to the th/td\n\t\t\t\t$temp = c.$headers.filter( '[data-column=\"' + indx + '\"]' );\n\t\t\t\t// target sortable column cells, unless there are none, then use non-sortable cells\n\t\t\t\t// .last() added in jQuery 1.4; use .filter(':last') to maintain compatibility with jQuery v1.2.6\n\t\t\t\tc.$headerIndexed[ indx ] = $temp.length ?\n\t\t\t\t\t$temp.not( '.sorter-false' ).length ?\n\t\t\t\t\t\t$temp.not( '.sorter-false' ).filter( ':last' ) :\n\t\t\t\t\t\t$temp.filter( ':last' ) :\n\t\t\t\t\t$();\n\t\t\t}\n\t\t\tc.$table.find( c.selectorHeaders ).attr({\n\t\t\t\tscope: 'col',\n\t\t\t\trole : 'columnheader'\n\t\t\t});\n\t\t\t// enable/disable sorting\n\t\t\tts.updateHeader( c );\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Built headers:' + ts.benchmark( timer ) );\n\t\t\t\tconsole.log( c.$headers );\n\t\t\t}\n\t\t},\n\n\t\t// Use it to add a set of methods to table.config which will be available for all tables.\n\t\t// This should be done before table initialization\n\t\taddInstanceMethods : function( methods ) {\n\t\t\t$.extend( ts.instanceMethods, methods );\n\t\t},\n\n\t\t/*\n\t\t█████▄ ▄████▄ █████▄ ▄█████ ██████ █████▄ ▄█████\n\t\t██▄▄██ ██▄▄██ ██▄▄██ ▀█▄    ██▄▄   ██▄▄██ ▀█▄\n\t\t██▀▀▀  ██▀▀██ ██▀██     ▀█▄ ██▀▀   ██▀██     ▀█▄\n\t\t██     ██  ██ ██  ██ █████▀ ██████ ██  ██ █████▀\n\t\t*/\n\t\tsetupParsers : function( c, $tbodies ) {\n\t\t\tvar rows, list, span, max, colIndex, indx, header, configHeaders,\n\t\t\t\tnoParser, parser, extractor, time, tbody, len,\n\t\t\t\ttable = c.table,\n\t\t\t\ttbodyIndex = 0,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\tdebugOutput = {};\n\t\t\t// update table bodies in case we start with an empty table\n\t\t\tc.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );\n\t\t\ttbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies;\n\t\t\tlen = tbody.length;\n\t\t\tif ( len === 0 ) {\n\t\t\t\treturn debug ? console.warn( 'Warning: *Empty table!* Not building a parser cache' ) : '';\n\t\t\t} else if ( debug ) {\n\t\t\t\ttime = new Date();\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Detecting parsers for each column' );\n\t\t\t}\n\t\t\tlist = {\n\t\t\t\textractors: [],\n\t\t\t\tparsers: []\n\t\t\t};\n\t\t\twhile ( tbodyIndex < len ) {\n\t\t\t\trows = tbody[ tbodyIndex ].rows;\n\t\t\t\tif ( rows.length ) {\n\t\t\t\t\tcolIndex = 0;\n\t\t\t\t\tmax = c.columns;\n\t\t\t\t\tfor ( indx = 0; indx < max; indx++ ) {\n\t\t\t\t\t\theader = c.$headerIndexed[ colIndex ];\n\t\t\t\t\t\tif ( header && header.length ) {\n\t\t\t\t\t\t\t// get column indexed table cell; adding true parameter fixes #1362 but\n\t\t\t\t\t\t\t// it would break backwards compatibility...\n\t\t\t\t\t\t\tconfigHeaders = ts.getColumnData( table, c.headers, colIndex ); // , true );\n\t\t\t\t\t\t\t// get column parser/extractor\n\t\t\t\t\t\t\textractor = ts.getParserById( ts.getData( header, configHeaders, 'extractor' ) );\n\t\t\t\t\t\t\tparser = ts.getParserById( ts.getData( header, configHeaders, 'sorter' ) );\n\t\t\t\t\t\t\tnoParser = ts.getData( header, configHeaders, 'parser' ) === 'false';\n\t\t\t\t\t\t\t// empty cells behaviour - keeping emptyToBottom for backwards compatibility\n\t\t\t\t\t\t\tc.empties[colIndex] = (\n\t\t\t\t\t\t\t\tts.getData( header, configHeaders, 'empty' ) ||\n\t\t\t\t\t\t\t\tc.emptyTo || ( c.emptyToBottom ? 'bottom' : 'top' ) ).toLowerCase();\n\t\t\t\t\t\t\t// text strings behaviour in numerical sorts\n\t\t\t\t\t\t\tc.strings[colIndex] = (\n\t\t\t\t\t\t\t\tts.getData( header, configHeaders, 'string' ) ||\n\t\t\t\t\t\t\t\tc.stringTo ||\n\t\t\t\t\t\t\t\t'max' ).toLowerCase();\n\t\t\t\t\t\t\tif ( noParser ) {\n\t\t\t\t\t\t\t\tparser = ts.getParserById( 'no-parser' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( !extractor ) {\n\t\t\t\t\t\t\t\t// For now, maybe detect someday\n\t\t\t\t\t\t\t\textractor = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( !parser ) {\n\t\t\t\t\t\t\t\tparser = ts.detectParserForColumn( c, rows, -1, colIndex );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\t\tdebugOutput[ '(' + colIndex + ') ' + header.text() ] = {\n\t\t\t\t\t\t\t\t\tparser : parser.id,\n\t\t\t\t\t\t\t\t\textractor : extractor ? extractor.id : 'none',\n\t\t\t\t\t\t\t\t\tstring : c.strings[ colIndex ],\n\t\t\t\t\t\t\t\t\tempty  : c.empties[ colIndex ]\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlist.parsers[ colIndex ] = parser;\n\t\t\t\t\t\t\tlist.extractors[ colIndex ] = extractor;\n\t\t\t\t\t\t\tspan = header[ 0 ].colSpan - 1;\n\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\tcolIndex += span;\n\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t\twhile ( span + 1 > 0 ) {\n\t\t\t\t\t\t\t\t\t// set colspan columns to use the same parsers & extractors\n\t\t\t\t\t\t\t\t\tlist.parsers[ colIndex - span ] = parser;\n\t\t\t\t\t\t\t\t\tlist.extractors[ colIndex - span ] = extractor;\n\t\t\t\t\t\t\t\t\tspan--;\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\tcolIndex++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttbodyIndex += ( list.parsers.length ) ? len : 1;\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tif ( !ts.isEmptyObject( debugOutput ) ) {\n\t\t\t\t\tconsole[ console.table ? 'table' : 'log' ]( debugOutput );\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn( '  No parsers detected!' );\n\t\t\t\t}\n\t\t\t\tconsole.log( 'Completed detecting parsers' + ts.benchmark( time ) );\n\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tc.parsers = list.parsers;\n\t\t\tc.extractors = list.extractors;\n\t\t},\n\n\t\taddParser : function( parser ) {\n\t\t\tvar indx,\n\t\t\t\tlen = ts.parsers.length,\n\t\t\t\tadd = true;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( ts.parsers[ indx ].id.toLowerCase() === parser.id.toLowerCase() ) {\n\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( add ) {\n\t\t\t\tts.parsers[ ts.parsers.length ] = parser;\n\t\t\t}\n\t\t},\n\n\t\tgetParserById : function( name ) {\n\t\t\t/*jshint eqeqeq:false */ // eslint-disable-next-line eqeqeq\n\t\t\tif ( name == 'false' ) { return false; }\n\t\t\tvar indx,\n\t\t\t\tlen = ts.parsers.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( ts.parsers[ indx ].id.toLowerCase() === ( name.toString() ).toLowerCase() ) {\n\t\t\t\t\treturn ts.parsers[ indx ];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tdetectParserForColumn : function( c, rows, rowIndex, cellIndex ) {\n\t\t\tvar cur, $node, row,\n\t\t\t\tindx = ts.parsers.length,\n\t\t\t\tnode = false,\n\t\t\t\tnodeValue = '',\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\tkeepLooking = true;\n\t\t\twhile ( nodeValue === '' && keepLooking ) {\n\t\t\t\trowIndex++;\n\t\t\t\trow = rows[ rowIndex ];\n\t\t\t\t// stop looking after 50 empty rows\n\t\t\t\tif ( row && rowIndex < 50 ) {\n\t\t\t\t\tif ( row.className.indexOf( ts.cssIgnoreRow ) < 0 ) {\n\t\t\t\t\t\tnode = rows[ rowIndex ].cells[ cellIndex ];\n\t\t\t\t\t\tnodeValue = ts.getElementText( c, node, cellIndex );\n\t\t\t\t\t\t$node = $( node );\n\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\tconsole.log( 'Checking if value was empty on row ' + rowIndex + ', column: ' +\n\t\t\t\t\t\t\t\tcellIndex + ': \"' + nodeValue + '\"' );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tkeepLooking = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( --indx >= 0 ) {\n\t\t\t\tcur = ts.parsers[ indx ];\n\t\t\t\t// ignore the default text parser because it will always be true\n\t\t\t\tif ( cur && cur.id !== 'text' && cur.is && cur.is( nodeValue, c.table, node, $node ) ) {\n\t\t\t\t\treturn cur;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// nothing found, return the generic parser (text)\n\t\t\treturn ts.getParserById( 'text' );\n\t\t},\n\n\t\tgetElementText : function( c, node, cellIndex ) {\n\t\t\tif ( !node ) { return ''; }\n\t\t\tvar tmp,\n\t\t\t\textract = c.textExtraction || '',\n\t\t\t\t// node could be a jquery object\n\t\t\t\t// http://jsperf.com/jquery-vs-instanceof-jquery/2\n\t\t\t\t$node = node.jquery ? node : $( node );\n\t\t\tif ( typeof extract === 'string' ) {\n\t\t\t\t// check data-attribute first when set to 'basic'; don't use node.innerText - it's really slow!\n\t\t\t\t// http://www.kellegous.com/j/2013/02/27/innertext-vs-textcontent/\n\t\t\t\tif ( extract === 'basic' && typeof ( tmp = $node.attr( c.textAttribute ) ) !== 'undefined' ) {\n\t\t\t\t\treturn $.trim( tmp );\n\t\t\t\t}\n\t\t\t\treturn $.trim( node.textContent || $node.text() );\n\t\t\t} else {\n\t\t\t\tif ( typeof extract === 'function' ) {\n\t\t\t\t\treturn $.trim( extract( $node[ 0 ], c.table, cellIndex ) );\n\t\t\t\t} else if ( typeof ( tmp = ts.getColumnData( c.table, extract, cellIndex ) ) === 'function' ) {\n\t\t\t\t\treturn $.trim( tmp( $node[ 0 ], c.table, cellIndex ) );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback\n\t\t\treturn $.trim( $node[ 0 ].textContent || $node.text() );\n\t\t},\n\n\t\t// centralized function to extract/parse cell contents\n\t\tgetParsedText : function( c, cell, colIndex, txt ) {\n\t\t\tif ( typeof txt === 'undefined' ) {\n\t\t\t\ttxt = ts.getElementText( c, cell, colIndex );\n\t\t\t}\n\t\t\t// if no parser, make sure to return the txt\n\t\t\tvar val = '' + txt,\n\t\t\t\tparser = c.parsers[ colIndex ],\n\t\t\t\textractor = c.extractors[ colIndex ];\n\t\t\tif ( parser ) {\n\t\t\t\t// do extract before parsing, if there is one\n\t\t\t\tif ( extractor && typeof extractor.format === 'function' ) {\n\t\t\t\t\ttxt = extractor.format( txt, c.table, cell, colIndex );\n\t\t\t\t}\n\t\t\t\t// allow parsing if the string is empty, previously parsing would change it to zero,\n\t\t\t\t// in case the parser needs to extract data from the table cell attributes\n\t\t\t\tval = parser.id === 'no-parser' ? '' :\n\t\t\t\t\t// make sure txt is a string (extractor may have converted it)\n\t\t\t\t\tparser.format( '' + txt, c.table, cell, colIndex );\n\t\t\t\tif ( c.ignoreCase && typeof val === 'string' ) {\n\t\t\t\t\tval = val.toLowerCase();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\n\t\t/*\n\t\t▄████▄ ▄████▄ ▄████▄ ██  ██ ██████\n\t\t██  ▀▀ ██▄▄██ ██  ▀▀ ██▄▄██ ██▄▄\n\t\t██  ▄▄ ██▀▀██ ██  ▄▄ ██▀▀██ ██▀▀\n\t\t▀████▀ ██  ██ ▀████▀ ██  ██ ██████\n\t\t*/\n\t\tbuildCache : function( c, callback, $tbodies ) {\n\t\t\tvar cache, val, txt, rowIndex, colIndex, tbodyIndex, $tbody, $row,\n\t\t\t\tcols, $cells, cell, cacheTime, totalRows, rowData, prevRowData,\n\t\t\t\tcolMax, span, cacheIndex, hasParser, max, len, index,\n\t\t\t\ttable = c.table,\n\t\t\t\tparsers = c.parsers,\n\t\t\t\tdebug = ts.debug(c, 'core');\n\t\t\t// update tbody variable\n\t\t\tc.$tbodies = c.$table.children( 'tbody:not(.' + c.cssInfoBlock + ')' );\n\t\t\t$tbody = typeof $tbodies === 'undefined' ? c.$tbodies : $tbodies,\n\t\t\tc.cache = {};\n\t\t\tc.totalRows = 0;\n\t\t\t// if no parsers found, return - it's an empty table.\n\t\t\tif ( !parsers ) {\n\t\t\t\treturn debug ? console.warn( 'Warning: *Empty table!* Not building a cache' ) : '';\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tcacheTime = new Date();\n\t\t\t}\n\t\t\t// processing icon\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\tts.isProcessing( table, true );\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbody.length; tbodyIndex++ ) {\n\t\t\t\tcolMax = []; // column max value per tbody\n\t\t\t\tcache = c.cache[ tbodyIndex ] = {\n\t\t\t\t\tnormalized: [] // array of normalized row data; last entry contains 'rowData' above\n\t\t\t\t\t// colMax: #   // added at the end\n\t\t\t\t};\n\n\t\t\t\ttotalRows = ( $tbody[ tbodyIndex ] && $tbody[ tbodyIndex ].rows.length ) || 0;\n\t\t\t\tfor ( rowIndex = 0; rowIndex < totalRows; ++rowIndex ) {\n\t\t\t\t\trowData = {\n\t\t\t\t\t\t// order: original row order #\n\t\t\t\t\t\t// $row : jQuery Object[]\n\t\t\t\t\t\tchild: [], // child row text (filter widget)\n\t\t\t\t\t\traw: []    // original row text\n\t\t\t\t\t};\n\t\t\t\t\t/** Add the table data to main data array */\n\t\t\t\t\t$row = $( $tbody[ tbodyIndex ].rows[ rowIndex ] );\n\t\t\t\t\tcols = [];\n\t\t\t\t\t// ignore \"remove-me\" rows\n\t\t\t\t\tif ( $row.hasClass( c.selectorRemove.slice(1) ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// if this is a child row, add it to the last row's children and continue to the next row\n\t\t\t\t\t// ignore child row class, if it is the first row\n\t\t\t\t\tif ( $row.hasClass( c.cssChildRow ) && rowIndex !== 0 ) {\n\t\t\t\t\t\tlen = cache.normalized.length - 1;\n\t\t\t\t\t\tprevRowData = cache.normalized[ len ][ c.columns ];\n\t\t\t\t\t\tprevRowData.$row = prevRowData.$row.add( $row );\n\t\t\t\t\t\t// add 'hasChild' class name to parent row\n\t\t\t\t\t\tif ( !$row.prev().hasClass( c.cssChildRow ) ) {\n\t\t\t\t\t\t\t$row.prev().addClass( ts.css.cssHasChild );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// save child row content (un-parsed!)\n\t\t\t\t\t\t$cells = $row.children( 'th, td' );\n\t\t\t\t\t\tlen = prevRowData.child.length;\n\t\t\t\t\t\tprevRowData.child[ len ] = [];\n\t\t\t\t\t\t// child row content does not account for colspans/rowspans; so indexing may be off\n\t\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\t\tmax = c.columns;\n\t\t\t\t\t\tfor ( colIndex = 0; colIndex < max; colIndex++ ) {\n\t\t\t\t\t\t\tcell = $cells[ colIndex ];\n\t\t\t\t\t\t\tif ( cell ) {\n\t\t\t\t\t\t\t\tprevRowData.child[ len ][ colIndex ] = ts.getParsedText( c, cell, colIndex );\n\t\t\t\t\t\t\t\tspan = $cells[ colIndex ].colSpan - 1;\n\t\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// go to the next for loop\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\trowData.$row = $row;\n\t\t\t\t\trowData.order = rowIndex; // add original row position to rowCache\n\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\tmax = c.columns;\n\t\t\t\t\tfor ( colIndex = 0; colIndex < max; ++colIndex ) {\n\t\t\t\t\t\tcell = $row[ 0 ].cells[ colIndex ];\n\t\t\t\t\t\tif ( cell && cacheIndex < c.columns ) {\n\t\t\t\t\t\t\thasParser = typeof parsers[ cacheIndex ] !== 'undefined';\n\t\t\t\t\t\t\tif ( !hasParser && debug ) {\n\t\t\t\t\t\t\t\tconsole.warn( 'No parser found for row: ' + rowIndex + ', column: ' + colIndex +\n\t\t\t\t\t\t\t\t\t'; cell containing: \"' + $(cell).text() + '\"; does it have a header?' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tval = ts.getElementText( c, cell, cacheIndex );\n\t\t\t\t\t\t\trowData.raw[ cacheIndex ] = val; // save original row text\n\t\t\t\t\t\t\t// save raw column text even if there is no parser set\n\t\t\t\t\t\t\ttxt = ts.getParsedText( c, cell, cacheIndex, val );\n\t\t\t\t\t\t\tcols[ cacheIndex ] = txt;\n\t\t\t\t\t\t\tif ( hasParser && ( parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t\t\t\t// determine column max value (ignore sign)\n\t\t\t\t\t\t\t\tcolMax[ cacheIndex ] = Math.max( Math.abs( txt ) || 0, colMax[ cacheIndex ] || 0 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// allow colSpan in tbody\n\t\t\t\t\t\t\tspan = cell.colSpan - 1;\n\t\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t\twhile ( index <= span ) {\n\t\t\t\t\t\t\t\t\t// duplicate text (or not) to spanned columns\n\t\t\t\t\t\t\t\t\t// instead of setting duplicate span to empty string, use textExtraction to try to get a value\n\t\t\t\t\t\t\t\t\t// see http://stackoverflow.com/q/36449711/145346\n\t\t\t\t\t\t\t\t\ttxt = c.duplicateSpan || index === 0 ?\n\t\t\t\t\t\t\t\t\t\tval :\n\t\t\t\t\t\t\t\t\t\ttypeof c.textExtraction !== 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tts.getElementText( c, cell, cacheIndex + index ) || '' :\n\t\t\t\t\t\t\t\t\t\t\t'';\n\t\t\t\t\t\t\t\t\trowData.raw[ cacheIndex + index ] = txt;\n\t\t\t\t\t\t\t\t\tcols[ cacheIndex + index ] = txt;\n\t\t\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t\t\tmax += span;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t}\n\t\t\t\t\t// ensure rowData is always in the same location (after the last column)\n\t\t\t\t\tcols[ c.columns ] = rowData;\n\t\t\t\t\tcache.normalized[ cache.normalized.length ] = cols;\n\t\t\t\t}\n\t\t\t\tcache.colMax = colMax;\n\t\t\t\t// total up rows, not including child rows\n\t\t\t\tc.totalRows += cache.normalized.length;\n\n\t\t\t}\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\tts.isProcessing( table ); // remove processing icon\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tlen = Math.min( 5, c.cache[ 0 ].normalized.length );\n\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Building cache for ' + c.totalRows +\n\t\t\t\t\t' rows (showing ' + len + ' rows in log) and ' + c.columns + ' columns' +\n\t\t\t\t\tts.benchmark( cacheTime ) );\n\t\t\t\tval = {};\n\t\t\t\tfor ( colIndex = 0; colIndex < c.columns; colIndex++ ) {\n\t\t\t\t\tfor ( cacheIndex = 0; cacheIndex < len; cacheIndex++ ) {\n\t\t\t\t\t\tif ( !val[ 'row: ' + cacheIndex ] ) {\n\t\t\t\t\t\t\tval[ 'row: ' + cacheIndex ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tval[ 'row: ' + cacheIndex ][ c.$headerIndexed[ colIndex ].text() ] =\n\t\t\t\t\t\t\tc.cache[ 0 ].normalized[ cacheIndex ][ colIndex ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconsole[ console.table ? 'table' : 'log' ]( val );\n\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\tgetColumnText : function( table, column, callback, rowFilter ) {\n\t\t\ttable = $( table )[0];\n\t\t\tvar tbodyIndex, rowIndex, cache, row, tbodyLen, rowLen, raw, parsed, $cell, result,\n\t\t\t\thasCallback = typeof callback === 'function',\n\t\t\t\tallColumns = column === 'all',\n\t\t\t\tdata = { raw : [], parsed: [], $cell: [] },\n\t\t\t\tc = table.config;\n\t\t\tif ( ts.isEmptyObject( c ) ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.warn( 'No cache found - aborting getColumnText function!' );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttbodyLen = c.$tbodies.length;\n\t\t\t\tfor ( tbodyIndex = 0; tbodyIndex < tbodyLen; tbodyIndex++ ) {\n\t\t\t\t\tcache = c.cache[ tbodyIndex ].normalized;\n\t\t\t\t\trowLen = cache.length;\n\t\t\t\t\tfor ( rowIndex = 0; rowIndex < rowLen; rowIndex++ ) {\n\t\t\t\t\t\trow = cache[ rowIndex ];\n\t\t\t\t\t\tif ( rowFilter && !row[ c.columns ].$row.is( rowFilter ) ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = true;\n\t\t\t\t\t\tparsed = ( allColumns ) ? row.slice( 0, c.columns ) : row[ column ];\n\t\t\t\t\t\trow = row[ c.columns ];\n\t\t\t\t\t\traw = ( allColumns ) ? row.raw : row.raw[ column ];\n\t\t\t\t\t\t$cell = ( allColumns ) ? row.$row.children() : row.$row.children().eq( column );\n\t\t\t\t\t\tif ( hasCallback ) {\n\t\t\t\t\t\t\tresult = callback({\n\t\t\t\t\t\t\t\ttbodyIndex : tbodyIndex,\n\t\t\t\t\t\t\t\trowIndex : rowIndex,\n\t\t\t\t\t\t\t\tparsed : parsed,\n\t\t\t\t\t\t\t\traw : raw,\n\t\t\t\t\t\t\t\t$row : row.$row,\n\t\t\t\t\t\t\t\t$cell : $cell\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( result !== false ) {\n\t\t\t\t\t\t\tdata.parsed[ data.parsed.length ] = parsed;\n\t\t\t\t\t\t\tdata.raw[ data.raw.length ] = raw;\n\t\t\t\t\t\t\tdata.$cell[ data.$cell.length ] = $cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// return everything\n\t\t\t\treturn data;\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\t██  ██ █████▄ █████▄ ▄████▄ ██████ ██████\n\t\t██  ██ ██▄▄██ ██  ██ ██▄▄██   ██   ██▄▄\n\t\t██  ██ ██▀▀▀  ██  ██ ██▀▀██   ██   ██▀▀\n\t\t▀████▀ ██     █████▀ ██  ██   ██   ██████\n\t\t*/\n\t\tsetHeadersCss : function( c ) {\n\t\t\tvar indx, column,\n\t\t\t\tlist = c.sortList,\n\t\t\t\tlen = list.length,\n\t\t\t\tnone = ts.css.sortNone + ' ' + c.cssNone,\n\t\t\t\tcss = [ ts.css.sortAsc + ' ' + c.cssAsc, ts.css.sortDesc + ' ' + c.cssDesc ],\n\t\t\t\tcssIcon = [ c.cssIconAsc, c.cssIconDesc, c.cssIconNone ],\n\t\t\t\taria = [ 'ascending', 'descending' ],\n\t\t\t\tupdateColumnSort = function($el, index) {\n\t\t\t\t\t$el\n\t\t\t\t\t\t.removeClass( none )\n\t\t\t\t\t\t.addClass( css[ index ] )\n\t\t\t\t\t\t.attr( 'aria-sort', aria[ index ] )\n\t\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t\t.removeClass( cssIcon[ 2 ] )\n\t\t\t\t\t\t.addClass( cssIcon[ index ] );\n\t\t\t\t},\n\t\t\t\t// find the footer\n\t\t\t\t$extras = c.$table\n\t\t\t\t\t.find( 'tfoot tr' )\n\t\t\t\t\t.children( 'td, th' )\n\t\t\t\t\t.add( $( c.namespace + '_extra_headers' ) )\n\t\t\t\t\t.removeClass( css.join( ' ' ) ),\n\t\t\t\t// remove all header information\n\t\t\t\t$sorted = c.$headers\n\t\t\t\t\t.add( $( 'thead ' + c.namespace + '_extra_headers' ) )\n\t\t\t\t\t.removeClass( css.join( ' ' ) )\n\t\t\t\t\t.addClass( none )\n\t\t\t\t\t.attr( 'aria-sort', 'none' )\n\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t.removeClass( cssIcon.join( ' ' ) )\n\t\t\t\t\t.end();\n\t\t\t// add css none to all sortable headers\n\t\t\t$sorted\n\t\t\t\t.not( '.sorter-false' )\n\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t.addClass( cssIcon[ 2 ] );\n\t\t\t// add disabled css icon class\n\t\t\tif ( c.cssIconDisabled ) {\n\t\t\t\t$sorted\n\t\t\t\t\t.filter( '.sorter-false' )\n\t\t\t\t\t.find( '.' + ts.css.icon )\n\t\t\t\t\t.addClass( c.cssIconDisabled );\n\t\t\t}\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t// direction = 2 means reset!\n\t\t\t\tif ( list[ indx ][ 1 ] !== 2 ) {\n\t\t\t\t\t// multicolumn sorting updating - see #1005\n\t\t\t\t\t// .not(function() {}) needs jQuery 1.4\n\t\t\t\t\t// filter(function(i, el) {}) <- el is undefined in jQuery v1.2.6\n\t\t\t\t\t$sorted = c.$headers.filter( function( i ) {\n\t\t\t\t\t\t// only include headers that are in the sortList (this includes colspans)\n\t\t\t\t\t\tvar include = true,\n\t\t\t\t\t\t\t$el = c.$headers.eq( i ),\n\t\t\t\t\t\t\tcol = parseInt( $el.attr( 'data-column' ), 10 ),\n\t\t\t\t\t\t\tend = col + ts.getClosest( $el, 'th, td' )[0].colSpan;\n\t\t\t\t\t\tfor ( ; col < end; col++ ) {\n\t\t\t\t\t\t\tinclude = include ? include || ts.isValueInArray( col, c.sortList ) > -1 : false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn include;\n\t\t\t\t\t});\n\n\t\t\t\t\t// choose the :last in case there are nested columns\n\t\t\t\t\t$sorted = $sorted\n\t\t\t\t\t\t.not( '.sorter-false' )\n\t\t\t\t\t\t.filter( '[data-column=\"' + list[ indx ][ 0 ] + '\"]' + ( len === 1 ? ':last' : '' ) );\n\t\t\t\t\tif ( $sorted.length ) {\n\t\t\t\t\t\tfor ( column = 0; column < $sorted.length; column++ ) {\n\t\t\t\t\t\t\tif ( !$sorted[ column ].sortDisabled ) {\n\t\t\t\t\t\t\t\tupdateColumnSort( $sorted.eq( column ), list[ indx ][ 1 ] );\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// add sorted class to footer & extra headers, if they exist\n\t\t\t\t\tif ( $extras.length ) {\n\t\t\t\t\t\tupdateColumnSort( $extras.filter( '[data-column=\"' + list[ indx ][ 0 ] + '\"]' ), list[ indx ][ 1 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// add verbose aria labels\n\t\t\tlen = c.$headers.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tts.setColumnAriaLabel( c, c.$headers.eq( indx ) );\n\t\t\t}\n\t\t},\n\n\t\tgetClosest : function( $el, selector ) {\n\t\t\t// jQuery v1.2.6 doesn't have closest()\n\t\t\tif ( $.fn.closest ) {\n\t\t\t\treturn $el.closest( selector );\n\t\t\t}\n\t\t\treturn $el.is( selector ) ?\n\t\t\t\t$el :\n\t\t\t\t$el.parents( selector ).filter( ':first' );\n\t\t},\n\n\t\t// nextSort (optional), lets you disable next sort text\n\t\tsetColumnAriaLabel : function( c, $header, nextSort ) {\n\t\t\tif ( $header.length ) {\n\t\t\t\tvar column = parseInt( $header.attr( 'data-column' ), 10 ),\n\t\t\t\t\tvars = c.sortVars[ column ],\n\t\t\t\t\ttmp = $header.hasClass( ts.css.sortAsc ) ?\n\t\t\t\t\t\t'sortAsc' :\n\t\t\t\t\t\t$header.hasClass( ts.css.sortDesc ) ? 'sortDesc' : 'sortNone',\n\t\t\t\t\ttxt = $.trim( $header.text() ) + ': ' + ts.language[ tmp ];\n\t\t\t\tif ( $header.hasClass( 'sorter-false' ) || nextSort === false ) {\n\t\t\t\t\ttxt += ts.language.sortDisabled;\n\t\t\t\t} else {\n\t\t\t\t\ttmp = ( vars.count + 1 ) % vars.order.length;\n\t\t\t\t\tnextSort = vars.order[ tmp ];\n\t\t\t\t\t// if nextSort\n\t\t\t\t\ttxt += ts.language[ nextSort === 0 ? 'nextAsc' : nextSort === 1 ? 'nextDesc' : 'nextNone' ];\n\t\t\t\t}\n\t\t\t\t$header.attr( 'aria-label', txt );\n\t\t\t\tif (vars.sortedBy) {\n\t\t\t\t\t$header.attr( 'data-sortedBy', vars.sortedBy );\n\t\t\t\t} else {\n\t\t\t\t\t$header.removeAttr('data-sortedBy');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateHeader : function( c ) {\n\t\t\tvar index, isDisabled, $header, col,\n\t\t\t\ttable = c.table,\n\t\t\t\tlen = c.$headers.length;\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t$header = c.$headers.eq( index );\n\t\t\t\tcol = ts.getColumnData( table, c.headers, index, true );\n\t\t\t\t// add 'sorter-false' class if 'parser-false' is set\n\t\t\t\tisDisabled = ts.getData( $header, col, 'sorter' ) === 'false' || ts.getData( $header, col, 'parser' ) === 'false';\n\t\t\t\tts.setColumnSort( c, $header, isDisabled );\n\t\t\t}\n\t\t},\n\n\t\tsetColumnSort : function( c, $header, isDisabled ) {\n\t\t\tvar id = c.table.id;\n\t\t\t$header[ 0 ].sortDisabled = isDisabled;\n\t\t\t$header[ isDisabled ? 'addClass' : 'removeClass' ]( 'sorter-false' )\n\t\t\t\t.attr( 'aria-disabled', '' + isDisabled );\n\t\t\t// disable tab index on disabled cells\n\t\t\tif ( c.tabIndex ) {\n\t\t\t\tif ( isDisabled ) {\n\t\t\t\t\t$header.removeAttr( 'tabindex' );\n\t\t\t\t} else {\n\t\t\t\t\t$header.attr( 'tabindex', '0' );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// aria-controls - requires table ID\n\t\t\tif ( id ) {\n\t\t\t\tif ( isDisabled ) {\n\t\t\t\t\t$header.removeAttr( 'aria-controls' );\n\t\t\t\t} else {\n\t\t\t\t\t$header.attr( 'aria-controls', id );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateHeaderSortCount : function( c, list ) {\n\t\t\tvar col, dir, group, indx, primary, temp, val, order,\n\t\t\t\tsortList = list || c.sortList,\n\t\t\t\tlen = sortList.length;\n\t\t\tc.sortList = [];\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tval = sortList[ indx ];\n\t\t\t\t// ensure all sortList values are numeric - fixes #127\n\t\t\t\tcol = parseInt( val[ 0 ], 10 );\n\t\t\t\t// prevents error if sorton array is wrong\n\t\t\t\tif ( col < c.columns ) {\n\n\t\t\t\t\t// set order if not already defined - due to colspan header without associated header cell\n\t\t\t\t\t// adding this check prevents a javascript error\n\t\t\t\t\tif ( !c.sortVars[ col ].order ) {\n\t\t\t\t\t\tif ( ts.getOrder( c.sortInitialOrder ) ) {\n\t\t\t\t\t\t\torder = c.sortReset ? [ 1, 0, 2 ] : [ 1, 0 ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\torder = c.sortReset ? [ 0, 1, 2 ] : [ 0, 1 ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tc.sortVars[ col ].order = order;\n\t\t\t\t\t\tc.sortVars[ col ].count = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\torder = c.sortVars[ col ].order;\n\t\t\t\t\tdir = ( '' + val[ 1 ] ).match( /^(1|d|s|o|n)/ );\n\t\t\t\t\tdir = dir ? dir[ 0 ] : '';\n\t\t\t\t\t// 0/(a)sc (default), 1/(d)esc, (s)ame, (o)pposite, (n)ext\n\t\t\t\t\tswitch ( dir ) {\n\t\t\t\t\t\tcase '1' : case 'd' : // descending\n\t\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's' : // same direction (as primary column)\n\t\t\t\t\t\t\t// if primary sort is set to 's', make it ascending\n\t\t\t\t\t\t\tdir = primary || 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'o' :\n\t\t\t\t\t\t\ttemp = order[ ( primary || 0 ) % order.length ];\n\t\t\t\t\t\t\t// opposite of primary column; but resets if primary resets\n\t\t\t\t\t\t\tdir = temp === 0 ? 1 : temp === 1 ? 0 : 2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'n' :\n\t\t\t\t\t\t\tdir = order[ ( ++c.sortVars[ col ].count ) % order.length ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault : // ascending\n\t\t\t\t\t\t\tdir = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tprimary = indx === 0 ? dir : primary;\n\t\t\t\t\tgroup = [ col, parseInt( dir, 10 ) || 0 ];\n\t\t\t\t\tc.sortList[ c.sortList.length ] = group;\n\t\t\t\t\tdir = $.inArray( group[ 1 ], order ); // fixes issue #167\n\t\t\t\t\tc.sortVars[ col ].count = dir >= 0 ? dir : group[ 1 ] % order.length;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdateAll : function( c, resort, callback ) {\n\t\t\tvar table = c.table;\n\t\t\ttable.isUpdating = true;\n\t\t\tts.refreshWidgets( table, true, true );\n\t\t\tts.buildHeaders( c );\n\t\t\tts.bindEvents( table, c.$headers, true );\n\t\t\tts.bindMethods( c );\n\t\t\tts.commonUpdate( c, resort, callback );\n\t\t},\n\n\t\tupdate : function( c, resort, callback ) {\n\t\t\tvar table = c.table;\n\t\t\ttable.isUpdating = true;\n\t\t\t// update sorting (if enabled/disabled)\n\t\t\tts.updateHeader( c );\n\t\t\tts.commonUpdate( c, resort, callback );\n\t\t},\n\n\t\t// simple header update - see #989\n\t\tupdateHeaders : function( c, callback ) {\n\t\t\tc.table.isUpdating = true;\n\t\t\tts.buildHeaders( c );\n\t\t\tts.bindEvents( c.table, c.$headers, true );\n\t\t\tts.resortComplete( c, callback );\n\t\t},\n\n\t\tupdateCell : function( c, cell, resort, callback ) {\n\t\t\t// updateCell for child rows is a mess - we'll ignore them for now\n\t\t\t// eventually I'll break out the \"update\" row cache code to make everything consistent\n\t\t\tif ( $( cell ).closest( 'tr' ).hasClass( c.cssChildRow ) ) {\n\t\t\t\tconsole.warn('Tablesorter Warning! \"updateCell\" for child row content has been disabled, use \"update\" instead');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table, do an update instead - fixes #1099\n\t\t\t\tts.updateHeader( c );\n\t\t\t\tts.commonUpdate( c, resort, callback );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tc.table.isUpdating = true;\n\t\t\tc.$table.find( c.selectorRemove ).remove();\n\t\t\t// get position from the dom\n\t\t\tvar tmp, indx, row, icell, cache, len,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\t$cell = $( cell ),\n\t\t\t\t// update cache - format: function( s, table, cell, cellIndex )\n\t\t\t\t// no closest in jQuery v1.2.6\n\t\t\t\ttbodyIndex = $tbodies.index( ts.getClosest( $cell, 'tbody' ) ),\n\t\t\t\ttbcache = c.cache[ tbodyIndex ],\n\t\t\t\t$row = ts.getClosest( $cell, 'tr' );\n\t\t\tcell = $cell[ 0 ]; // in case cell is a jQuery object\n\t\t\t// tbody may not exist if update is initialized while tbody is removed for processing\n\t\t\tif ( $tbodies.length && tbodyIndex >= 0 ) {\n\t\t\t\trow = $tbodies.eq( tbodyIndex ).find( 'tr' ).not( '.' + c.cssChildRow ).index( $row );\n\t\t\t\tcache = tbcache.normalized[ row ];\n\t\t\t\tlen = $row[ 0 ].cells.length;\n\t\t\t\tif ( len !== c.columns ) {\n\t\t\t\t\t// colspan in here somewhere!\n\t\t\t\t\ticell = 0;\n\t\t\t\t\ttmp = false;\n\t\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\t\tif ( !tmp && $row[ 0 ].cells[ indx ] !== cell ) {\n\t\t\t\t\t\t\ticell += $row[ 0 ].cells[ indx ].colSpan;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ticell = $cell.index();\n\t\t\t\t}\n\t\t\t\ttmp = ts.getElementText( c, cell, icell ); // raw\n\t\t\t\tcache[ c.columns ].raw[ icell ] = tmp;\n\t\t\t\ttmp = ts.getParsedText( c, cell, icell, tmp );\n\t\t\t\tcache[ icell ] = tmp; // parsed\n\t\t\t\tif ( ( c.parsers[ icell ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t// update column max value (ignore sign)\n\t\t\t\t\ttbcache.colMax[ icell ] = Math.max( Math.abs( tmp ) || 0, tbcache.colMax[ icell ] || 0 );\n\t\t\t\t}\n\t\t\t\ttmp = resort !== 'undefined' ? resort : c.resort;\n\t\t\t\tif ( tmp !== false ) {\n\t\t\t\t\t// widgets will be reapplied\n\t\t\t\t\tts.checkResort( c, tmp, callback );\n\t\t\t\t} else {\n\t\t\t\t\t// don't reapply widgets is resort is false, just in case it causes\n\t\t\t\t\t// problems with element focus\n\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.error( 'updateCell aborted, tbody missing or not within the indicated table' );\n\t\t\t\t}\n\t\t\t\tc.table.isUpdating = false;\n\t\t\t}\n\t\t},\n\n\t\taddRows : function( c, $row, resort, callback ) {\n\t\t\tvar txt, val, tbodyIndex, rowIndex, rows, cellIndex, len, order,\n\t\t\t\tcacheIndex, rowData, cells, cell, span,\n\t\t\t\t// allow passing a row string if only one non-info tbody exists in the table\n\t\t\t\tvalid = typeof $row === 'string' && c.$tbodies.length === 1 && /<tr/.test( $row || '' ),\n\t\t\t\ttable = c.table;\n\t\t\tif ( valid ) {\n\t\t\t\t$row = $( $row );\n\t\t\t\tc.$tbodies.append( $row );\n\t\t\t} else if (\n\t\t\t\t!$row ||\n\t\t\t\t// row is a jQuery object?\n\t\t\t\t!( $row instanceof $ ) ||\n\t\t\t\t// row contained in the table?\n\t\t\t\t( ts.getClosest( $row, 'table' )[ 0 ] !== c.table )\n\t\t\t) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.error( 'addRows method requires (1) a jQuery selector reference to rows that have already ' +\n\t\t\t\t\t\t'been added to the table, or (2) row HTML string to be added to a table with only one tbody' );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttable.isUpdating = true;\n\t\t\tif ( ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table, do an update instead - fixes #450\n\t\t\t\tts.updateHeader( c );\n\t\t\t\tts.commonUpdate( c, resort, callback );\n\t\t\t} else {\n\t\t\t\trows = $row.filter( 'tr' ).attr( 'role', 'row' ).length;\n\t\t\t\ttbodyIndex = c.$tbodies.index( $row.parents( 'tbody' ).filter( ':first' ) );\n\t\t\t\t// fixes adding rows to an empty table - see issue #179\n\t\t\t\tif ( !( c.parsers && c.parsers.length ) ) {\n\t\t\t\t\tts.setupParsers( c );\n\t\t\t\t}\n\t\t\t\t// add each row\n\t\t\t\tfor ( rowIndex = 0; rowIndex < rows; rowIndex++ ) {\n\t\t\t\t\tcacheIndex = 0;\n\t\t\t\t\tlen = $row[ rowIndex ].cells.length;\n\t\t\t\t\torder = c.cache[ tbodyIndex ].normalized.length;\n\t\t\t\t\tcells = [];\n\t\t\t\t\trowData = {\n\t\t\t\t\t\tchild : [],\n\t\t\t\t\t\traw : [],\n\t\t\t\t\t\t$row : $row.eq( rowIndex ),\n\t\t\t\t\t\torder : order\n\t\t\t\t\t};\n\t\t\t\t\t// add each cell\n\t\t\t\t\tfor ( cellIndex = 0; cellIndex < len; cellIndex++ ) {\n\t\t\t\t\t\tcell = $row[ rowIndex ].cells[ cellIndex ];\n\t\t\t\t\t\ttxt = ts.getElementText( c, cell, cacheIndex );\n\t\t\t\t\t\trowData.raw[ cacheIndex ] = txt;\n\t\t\t\t\t\tval = ts.getParsedText( c, cell, cacheIndex, txt );\n\t\t\t\t\t\tcells[ cacheIndex ] = val;\n\t\t\t\t\t\tif ( ( c.parsers[ cacheIndex ].type || '' ).toLowerCase() === 'numeric' ) {\n\t\t\t\t\t\t\t// update column max value (ignore sign)\n\t\t\t\t\t\t\tc.cache[ tbodyIndex ].colMax[ cacheIndex ] =\n\t\t\t\t\t\t\t\tMath.max( Math.abs( val ) || 0, c.cache[ tbodyIndex ].colMax[ cacheIndex ] || 0 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspan = cell.colSpan - 1;\n\t\t\t\t\t\tif ( span > 0 ) {\n\t\t\t\t\t\t\tcacheIndex += span;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcacheIndex++;\n\t\t\t\t\t}\n\t\t\t\t\t// add the row data to the end\n\t\t\t\t\tcells[ c.columns ] = rowData;\n\t\t\t\t\t// update cache\n\t\t\t\t\tc.cache[ tbodyIndex ].normalized[ order ] = cells;\n\t\t\t\t}\n\t\t\t\t// resort using current settings\n\t\t\t\tts.checkResort( c, resort, callback );\n\t\t\t}\n\t\t},\n\n\t\tupdateCache : function( c, callback, $tbodies ) {\n\t\t\t// rebuild parsers\n\t\t\tif ( !( c.parsers && c.parsers.length ) ) {\n\t\t\t\tts.setupParsers( c, $tbodies );\n\t\t\t}\n\t\t\t// rebuild the cache map\n\t\t\tts.buildCache( c, callback, $tbodies );\n\t\t},\n\n\t\t// init flag (true) used by pager plugin to prevent widget application\n\t\t// renamed from appendToTable\n\t\tappendCache : function( c, init ) {\n\t\t\tvar parsed, totalRows, $tbody, $curTbody, rowIndex, tbodyIndex, appendTime,\n\t\t\t\ttable = c.table,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\trows = [],\n\t\t\t\tcache = c.cache;\n\t\t\t// empty table - fixes #206/#346\n\t\t\tif ( ts.isEmptyObject( cache ) ) {\n\t\t\t\t// run pager appender in case the table was just emptied\n\t\t\t\treturn c.appender ? c.appender( table, rows ) :\n\t\t\t\t\ttable.isUpdating ? c.$table.triggerHandler( 'updateComplete', table ) : ''; // Fixes #532\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tappendTime = new Date();\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = $tbodies.eq( tbodyIndex );\n\t\t\t\tif ( $tbody.length ) {\n\t\t\t\t\t// detach tbody for manipulation\n\t\t\t\t\t$curTbody = ts.processTbody( table, $tbody, true );\n\t\t\t\t\tparsed = cache[ tbodyIndex ].normalized;\n\t\t\t\t\ttotalRows = parsed.length;\n\t\t\t\t\tfor ( rowIndex = 0; rowIndex < totalRows; rowIndex++ ) {\n\t\t\t\t\t\trows[rows.length] = parsed[ rowIndex ][ c.columns ].$row;\n\t\t\t\t\t\t// removeRows used by the pager plugin; don't render if using ajax - fixes #411\n\t\t\t\t\t\tif ( !c.appender || ( c.pager && !c.pager.removeRows && !c.pager.ajax ) ) {\n\t\t\t\t\t\t\t$curTbody.append( parsed[ rowIndex ][ c.columns ].$row );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// restore tbody\n\t\t\t\t\tts.processTbody( table, $curTbody, false );\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( c.appender ) {\n\t\t\t\tc.appender( table, rows );\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Rebuilt table' + ts.benchmark( appendTime ) );\n\t\t\t}\n\t\t\t// apply table widgets; but not before ajax completes\n\t\t\tif ( !init && !c.appender ) {\n\t\t\t\tts.applyWidget( table );\n\t\t\t}\n\t\t\tif ( table.isUpdating ) {\n\t\t\t\tc.$table.triggerHandler( 'updateComplete', table );\n\t\t\t}\n\t\t},\n\n\t\tcommonUpdate : function( c, resort, callback ) {\n\t\t\t// remove rows/elements before update\n\t\t\tc.$table.find( c.selectorRemove ).remove();\n\t\t\t// rebuild parsers\n\t\t\tts.setupParsers( c );\n\t\t\t// rebuild the cache map\n\t\t\tts.buildCache( c );\n\t\t\tts.checkResort( c, resort, callback );\n\t\t},\n\n\t\t/*\n\t\t▄█████ ▄████▄ █████▄ ██████ ██ █████▄ ▄████▄\n\t\t▀█▄    ██  ██ ██▄▄██   ██   ██ ██  ██ ██ ▄▄▄\n\t\t   ▀█▄ ██  ██ ██▀██    ██   ██ ██  ██ ██ ▀██\n\t\t█████▀ ▀████▀ ██  ██   ██   ██ ██  ██ ▀████▀\n\t\t*/\n\t\tinitSort : function( c, cell, event ) {\n\t\t\tif ( c.table.isUpdating ) {\n\t\t\t\t// let any updates complete before initializing a sort\n\t\t\t\treturn setTimeout( function() {\n\t\t\t\t\tts.initSort( c, cell, event );\n\t\t\t\t}, 50 );\n\t\t\t}\n\n\t\t\tvar arry, indx, headerIndx, dir, temp, tmp, $header,\n\t\t\t\tnotMultiSort = !event[ c.sortMultiSortKey ],\n\t\t\t\ttable = c.table,\n\t\t\t\tlen = c.$headers.length,\n\t\t\t\tth = ts.getClosest( $( cell ), 'th, td' ),\n\t\t\t\tcol = parseInt( th.attr( 'data-column' ), 10 ),\n\t\t\t\tsortedBy = event.type === 'mouseup' ? 'user' : event.type,\n\t\t\t\torder = c.sortVars[ col ].order;\n\t\t\tth = th[0];\n\t\t\t// Only call sortStart if sorting is enabled\n\t\t\tc.$table.triggerHandler( 'sortStart', table );\n\t\t\t// get current column sort order\n\t\t\ttmp = ( c.sortVars[ col ].count + 1 ) % order.length;\n\t\t\tc.sortVars[ col ].count = event[ c.sortResetKey ] ? 2 : tmp;\n\t\t\t// reset all sorts on non-current column - issue #30\n\t\t\tif ( c.sortRestart ) {\n\t\t\t\tfor ( headerIndx = 0; headerIndx < len; headerIndx++ ) {\n\t\t\t\t\t$header = c.$headers.eq( headerIndx );\n\t\t\t\t\ttmp = parseInt( $header.attr( 'data-column' ), 10 );\n\t\t\t\t\t// only reset counts on columns that weren't just clicked on and if not included in a multisort\n\t\t\t\t\tif ( col !== tmp && ( notMultiSort || $header.hasClass( ts.css.sortNone ) ) ) {\n\t\t\t\t\t\tc.sortVars[ tmp ].count = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// user only wants to sort on one column\n\t\t\tif ( notMultiSort ) {\n\t\t\t\t$.each( c.sortVars, function( i ) {\n\t\t\t\t\tc.sortVars[ i ].sortedBy = '';\n\t\t\t\t});\n\t\t\t\t// flush the sort list\n\t\t\t\tc.sortList = [];\n\t\t\t\tc.last.sortList = [];\n\t\t\t\tif ( c.sortForce !== null ) {\n\t\t\t\t\tarry = c.sortForce;\n\t\t\t\t\tfor ( indx = 0; indx < arry.length; indx++ ) {\n\t\t\t\t\t\tif ( arry[ indx ][ 0 ] !== col ) {\n\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = arry[ indx ];\n\t\t\t\t\t\t\tc.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortForce';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// add column to sort list\n\t\t\t\tdir = order[ c.sortVars[ col ].count ];\n\t\t\t\tif ( dir < 2 ) {\n\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col, dir ];\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\t// add other columns if header spans across multiple\n\t\t\t\t\tif ( th.colSpan > 1 ) {\n\t\t\t\t\t\tfor ( indx = 1; indx < th.colSpan; indx++ ) {\n\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col + indx, dir ];\n\t\t\t\t\t\t\t// update count on columns in colSpan\n\t\t\t\t\t\t\tc.sortVars[ col + indx ].count = $.inArray( dir, order );\n\t\t\t\t\t\t\tc.sortVars[ col + indx ].sortedBy = sortedBy;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// multi column sorting\n\t\t\t} else {\n\t\t\t\t// get rid of the sortAppend before adding more - fixes issue #115 & #523\n\t\t\t\tc.sortList = $.extend( [], c.last.sortList );\n\n\t\t\t\t// the user has clicked on an already sorted column\n\t\t\t\tif ( ts.isValueInArray( col, c.sortList ) >= 0 ) {\n\t\t\t\t\t// reverse the sorting direction\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\tfor ( indx = 0; indx < c.sortList.length; indx++ ) {\n\t\t\t\t\t\ttmp = c.sortList[ indx ];\n\t\t\t\t\t\tif ( tmp[ 0 ] === col ) {\n\t\t\t\t\t\t\t// order.count seems to be incorrect when compared to cell.count\n\t\t\t\t\t\t\ttmp[ 1 ] = order[ c.sortVars[ col ].count ];\n\t\t\t\t\t\t\tif ( tmp[1] === 2 ) {\n\t\t\t\t\t\t\t\tc.sortList.splice( indx, 1 );\n\t\t\t\t\t\t\t\tc.sortVars[ col ].count = -1;\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// add column to sort list array\n\t\t\t\t\tdir = order[ c.sortVars[ col ].count ];\n\t\t\t\t\tc.sortVars[ col ].sortedBy = sortedBy;\n\t\t\t\t\tif ( dir < 2 ) {\n\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col, dir ];\n\t\t\t\t\t\t// add other columns if header spans across multiple\n\t\t\t\t\t\tif ( th.colSpan > 1 ) {\n\t\t\t\t\t\t\tfor ( indx = 1; indx < th.colSpan; indx++ ) {\n\t\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ col + indx, dir ];\n\t\t\t\t\t\t\t\t// update count on columns in colSpan\n\t\t\t\t\t\t\t\tc.sortVars[ col + indx ].count = $.inArray( dir, order );\n\t\t\t\t\t\t\t\tc.sortVars[ col + indx ].sortedBy = sortedBy;\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// save sort before applying sortAppend\n\t\t\tc.last.sortList = $.extend( [], c.sortList );\n\t\t\tif ( c.sortList.length && c.sortAppend ) {\n\t\t\t\tarry = $.isArray( c.sortAppend ) ? c.sortAppend : c.sortAppend[ c.sortList[ 0 ][ 0 ] ];\n\t\t\t\tif ( !ts.isEmptyObject( arry ) ) {\n\t\t\t\t\tfor ( indx = 0; indx < arry.length; indx++ ) {\n\t\t\t\t\t\tif ( arry[ indx ][ 0 ] !== col && ts.isValueInArray( arry[ indx ][ 0 ], c.sortList ) < 0 ) {\n\t\t\t\t\t\t\tdir = arry[ indx ][ 1 ];\n\t\t\t\t\t\t\ttemp = ( '' + dir ).match( /^(a|d|s|o|n)/ );\n\t\t\t\t\t\t\tif ( temp ) {\n\t\t\t\t\t\t\t\ttmp = c.sortList[ 0 ][ 1 ];\n\t\t\t\t\t\t\t\tswitch ( temp[ 0 ] ) {\n\t\t\t\t\t\t\t\t\tcase 'd' :\n\t\t\t\t\t\t\t\t\t\tdir = 1;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 's' :\n\t\t\t\t\t\t\t\t\t\tdir = tmp;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'o' :\n\t\t\t\t\t\t\t\t\t\tdir = tmp === 0 ? 1 : 0;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'n' :\n\t\t\t\t\t\t\t\t\t\tdir = ( tmp + 1 ) % order.length;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tdir = 0;\n\t\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\t\t\t\t\t\t\tc.sortList[ c.sortList.length ] = [ arry[ indx ][ 0 ], dir ];\n\t\t\t\t\t\t\tc.sortVars[ arry[ indx ][ 0 ] ].sortedBy = 'sortAppend';\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// sortBegin event triggered immediately before the sort\n\t\t\tc.$table.triggerHandler( 'sortBegin', table );\n\t\t\t// setTimeout needed so the processing icon shows up\n\t\t\tsetTimeout( function() {\n\t\t\t\t// set css for headers\n\t\t\t\tts.setHeadersCss( c );\n\t\t\t\tts.multisort( c );\n\t\t\t\tts.appendCache( c );\n\t\t\t\tc.$table.triggerHandler( 'sortBeforeEnd', table );\n\t\t\t\tc.$table.triggerHandler( 'sortEnd', table );\n\t\t\t}, 1 );\n\t\t},\n\n\t\t// sort multiple columns\n\t\tmultisort : function( c ) { /*jshint loopfunc:true */\n\t\t\tvar tbodyIndex, sortTime, colMax, rows, tmp,\n\t\t\t\ttable = c.table,\n\t\t\t\tsorter = [],\n\t\t\t\tdir = 0,\n\t\t\t\ttextSorter = c.textSorter || '',\n\t\t\t\tsortList = c.sortList,\n\t\t\t\tsortLen = sortList.length,\n\t\t\t\tlen = c.$tbodies.length;\n\t\t\tif ( c.serverSideSorting || ts.isEmptyObject( c.cache ) ) {\n\t\t\t\t// empty table - fixes #206/#346\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) { sortTime = new Date(); }\n\t\t\t// cache textSorter to optimize speed\n\t\t\tif ( typeof textSorter === 'object' ) {\n\t\t\t\tcolMax = c.columns;\n\t\t\t\twhile ( colMax-- ) {\n\t\t\t\t\ttmp = ts.getColumnData( table, textSorter, colMax );\n\t\t\t\t\tif ( typeof tmp === 'function' ) {\n\t\t\t\t\t\tsorter[ colMax ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < len; tbodyIndex++ ) {\n\t\t\t\tcolMax = c.cache[ tbodyIndex ].colMax;\n\t\t\t\trows = c.cache[ tbodyIndex ].normalized;\n\n\t\t\t\trows.sort( function( a, b ) {\n\t\t\t\t\tvar sortIndex, num, col, order, sort, x, y;\n\t\t\t\t\t// rows is undefined here in IE, so don't use it!\n\t\t\t\t\tfor ( sortIndex = 0; sortIndex < sortLen; sortIndex++ ) {\n\t\t\t\t\t\tcol = sortList[ sortIndex ][ 0 ];\n\t\t\t\t\t\torder = sortList[ sortIndex ][ 1 ];\n\t\t\t\t\t\t// sort direction, true = asc, false = desc\n\t\t\t\t\t\tdir = order === 0;\n\n\t\t\t\t\t\tif ( c.sortStable && a[ col ] === b[ col ] && sortLen === 1 ) {\n\t\t\t\t\t\t\treturn a[ c.columns ].order - b[ c.columns ].order;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// fallback to natural sort since it is more robust\n\t\t\t\t\t\tnum = /n/i.test( ts.getSortType( c.parsers, col ) );\n\t\t\t\t\t\tif ( num && c.strings[ col ] ) {\n\t\t\t\t\t\t\t// sort strings in numerical columns\n\t\t\t\t\t\t\tif ( typeof ( ts.string[ c.strings[ col ] ] ) === 'boolean' ) {\n\t\t\t\t\t\t\t\tnum = ( dir ? 1 : -1 ) * ( ts.string[ c.strings[ col ] ] ? -1 : 1 );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnum = ( c.strings[ col ] ) ? ts.string[ c.strings[ col ] ] || 0 : 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// fall back to built-in numeric sort\n\t\t\t\t\t\t\t// var sort = $.tablesorter['sort' + s]( a[col], b[col], dir, colMax[col], table );\n\t\t\t\t\t\t\tsort = c.numberSorter ? c.numberSorter( a[ col ], b[ col ], dir, colMax[ col ], table ) :\n\t\t\t\t\t\t\t\tts[ 'sortNumeric' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ], b[ col ], num, colMax[ col ], col, c );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// set a & b depending on sort direction\n\t\t\t\t\t\t\tx = dir ? a : b;\n\t\t\t\t\t\t\ty = dir ? b : a;\n\t\t\t\t\t\t\t// text sort function\n\t\t\t\t\t\t\tif ( typeof textSorter === 'function' ) {\n\t\t\t\t\t\t\t\t// custom OVERALL text sorter\n\t\t\t\t\t\t\t\tsort = textSorter( x[ col ], y[ col ], dir, col, table );\n\t\t\t\t\t\t\t} else if ( typeof sorter[ col ] === 'function' ) {\n\t\t\t\t\t\t\t\t// custom text sorter for a SPECIFIC COLUMN\n\t\t\t\t\t\t\t\tsort = sorter[ col ]( x[ col ], y[ col ], dir, col, table );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// fall back to natural sort\n\t\t\t\t\t\t\t\tsort = ts[ 'sortNatural' + ( dir ? 'Asc' : 'Desc' ) ]( a[ col ] || '', b[ col ] || '', col, c );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( sort ) { return sort; }\n\t\t\t\t\t}\n\t\t\t\t\treturn a[ c.columns ].order - b[ c.columns ].order;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'Applying sort ' + sortList.toString() + ts.benchmark( sortTime ) );\n\t\t\t}\n\t\t},\n\n\t\tresortComplete : function( c, callback ) {\n\t\t\tif ( c.table.isUpdating ) {\n\t\t\t\tc.$table.triggerHandler( 'updateComplete', c.table );\n\t\t\t}\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( c.table );\n\t\t\t}\n\t\t},\n\n\t\tcheckResort : function( c, resort, callback ) {\n\t\t\tvar sortList = $.isArray( resort ) ? resort : c.sortList,\n\t\t\t\t// if no resort parameter is passed, fallback to config.resort (true by default)\n\t\t\t\tresrt = typeof resort === 'undefined' ? c.resort : resort;\n\t\t\t// don't try to resort if the table is still processing\n\t\t\t// this will catch spamming of the updateCell method\n\t\t\tif ( resrt !== false && !c.serverSideSorting && !c.table.isProcessing ) {\n\t\t\t\tif ( sortList.length ) {\n\t\t\t\t\tts.sortOn( c, sortList, function() {\n\t\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t\t}, true );\n\t\t\t\t} else {\n\t\t\t\t\tts.sortReset( c, function() {\n\t\t\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\t\t\tts.applyWidget( c.table, false );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tts.resortComplete( c, callback );\n\t\t\t\tts.applyWidget( c.table, false );\n\t\t\t}\n\t\t},\n\n\t\tsortOn : function( c, list, callback, init ) {\n\t\t\tvar indx,\n\t\t\t\ttable = c.table;\n\t\t\tc.$table.triggerHandler( 'sortStart', table );\n\t\t\tfor (indx = 0; indx < c.columns; indx++) {\n\t\t\t\tc.sortVars[ indx ].sortedBy = ts.isValueInArray( indx, list ) > -1 ? 'sorton' : '';\n\t\t\t}\n\t\t\t// update header count index\n\t\t\tts.updateHeaderSortCount( c, list );\n\t\t\t// set css for headers\n\t\t\tts.setHeadersCss( c );\n\t\t\t// fixes #346\n\t\t\tif ( c.delayInit && ts.isEmptyObject( c.cache ) ) {\n\t\t\t\tts.buildCache( c );\n\t\t\t}\n\t\t\tc.$table.triggerHandler( 'sortBegin', table );\n\t\t\t// sort the table and append it to the dom\n\t\t\tts.multisort( c );\n\t\t\tts.appendCache( c, init );\n\t\t\tc.$table.triggerHandler( 'sortBeforeEnd', table );\n\t\t\tc.$table.triggerHandler( 'sortEnd', table );\n\t\t\tts.applyWidget( table );\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\tsortReset : function( c, callback ) {\n\t\t\tc.sortList = [];\n\t\t\tvar indx;\n\t\t\tfor (indx = 0; indx < c.columns; indx++) {\n\t\t\t\tc.sortVars[ indx ].count = -1;\n\t\t\t\tc.sortVars[ indx ].sortedBy = '';\n\t\t\t}\n\t\t\tts.setHeadersCss( c );\n\t\t\tts.multisort( c );\n\t\t\tts.appendCache( c );\n\t\t\tif ( $.isFunction( callback ) ) {\n\t\t\t\tcallback( c.table );\n\t\t\t}\n\t\t},\n\n\t\tgetSortType : function( parsers, column ) {\n\t\t\treturn ( parsers && parsers[ column ] ) ? parsers[ column ].type || '' : '';\n\t\t},\n\n\t\tgetOrder : function( val ) {\n\t\t\t// look for 'd' in 'desc' order; return true\n\t\t\treturn ( /^d/i.test( val ) || val === 1 );\n\t\t},\n\n\t\t// Natural sort - https://github.com/overset/javascript-natural-sort (date sorting removed)\n\t\tsortNatural : function( a, b ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\ta = ( a || '' ).toString();\n\t\t\tb = ( b || '' ).toString();\n\t\t\tvar aNum, bNum, aFloat, bFloat, indx, max,\n\t\t\t\tregex = ts.regex;\n\t\t\t// first try and sort Hex codes\n\t\t\tif ( regex.hex.test( b ) ) {\n\t\t\t\taNum = parseInt( a.match( regex.hex ), 16 );\n\t\t\t\tbNum = parseInt( b.match( regex.hex ), 16 );\n\t\t\t\tif ( aNum < bNum ) { return -1; }\n\t\t\t\tif ( aNum > bNum ) { return 1; }\n\t\t\t}\n\t\t\t// chunk/tokenize\n\t\t\taNum = a.replace( regex.chunk, '\\\\0$1\\\\0' ).replace( regex.chunks, '' ).split( '\\\\0' );\n\t\t\tbNum = b.replace( regex.chunk, '\\\\0$1\\\\0' ).replace( regex.chunks, '' ).split( '\\\\0' );\n\t\t\tmax = Math.max( aNum.length, bNum.length );\n\t\t\t// natural sorting through split numeric strings and default strings\n\t\t\tfor ( indx = 0; indx < max; indx++ ) {\n\t\t\t\t// find floats not starting with '0', string or 0 if not defined\n\t\t\t\taFloat = isNaN( aNum[ indx ] ) ? aNum[ indx ] || 0 : parseFloat( aNum[ indx ] ) || 0;\n\t\t\t\tbFloat = isNaN( bNum[ indx ] ) ? bNum[ indx ] || 0 : parseFloat( bNum[ indx ] ) || 0;\n\t\t\t\t// handle numeric vs string comparison - number < string - (Kyle Adams)\n\t\t\t\tif ( isNaN( aFloat ) !== isNaN( bFloat ) ) { return isNaN( aFloat ) ? 1 : -1; }\n\t\t\t\t// rely on string comparison if different types - i.e. '02' < 2 != '02' < '2'\n\t\t\t\tif ( typeof aFloat !== typeof bFloat ) {\n\t\t\t\t\taFloat += '';\n\t\t\t\t\tbFloat += '';\n\t\t\t\t}\n\t\t\t\tif ( aFloat < bFloat ) { return -1; }\n\t\t\t\tif ( aFloat > bFloat ) { return 1; }\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\tsortNaturalAsc : function( a, b, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }\n\t\t\treturn ts.sortNatural( a, b );\n\t\t},\n\n\t\tsortNaturalDesc : function( a, b, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }\n\t\t\treturn ts.sortNatural( b, a );\n\t\t},\n\n\t\t// basic alphabetical sort\n\t\tsortText : function( a, b ) {\n\t\t\treturn a > b ? 1 : ( a < b ? -1 : 0 );\n\t\t},\n\n\t\t// return text string value by adding up ascii value\n\t\t// so the text is somewhat sorted when using a digital sort\n\t\t// this is NOT an alphanumeric sort\n\t\tgetTextValue : function( val, num, max ) {\n\t\t\tif ( max ) {\n\t\t\t\t// make sure the text value is greater than the max numerical value (max)\n\t\t\t\tvar indx,\n\t\t\t\t\tlen = val ? val.length : 0,\n\t\t\t\t\tn = max + num;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tn += val.charCodeAt( indx );\n\t\t\t\t}\n\t\t\t\treturn num * n;\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\tsortNumericAsc : function( a, b, num, max, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : -empty || -1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : empty || 1; }\n\t\t\tif ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }\n\t\t\tif ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }\n\t\t\treturn a - b;\n\t\t},\n\n\t\tsortNumericDesc : function( a, b, num, max, col, c ) {\n\t\t\tif ( a === b ) { return 0; }\n\t\t\tvar empty = ts.string[ ( c.empties[ col ] || c.emptyTo ) ];\n\t\t\tif ( a === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? -1 : 1 ) : empty || 1; }\n\t\t\tif ( b === '' && empty !== 0 ) { return typeof empty === 'boolean' ? ( empty ? 1 : -1 ) : -empty || -1; }\n\t\t\tif ( isNaN( a ) ) { a = ts.getTextValue( a, num, max ); }\n\t\t\tif ( isNaN( b ) ) { b = ts.getTextValue( b, num, max ); }\n\t\t\treturn b - a;\n\t\t},\n\n\t\tsortNumeric : function( a, b ) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\t/*\n\t\t██ ██ ██ ██ █████▄ ▄████▄ ██████ ██████ ▄█████\n\t\t██ ██ ██ ██ ██  ██ ██ ▄▄▄ ██▄▄     ██   ▀█▄\n\t\t██ ██ ██ ██ ██  ██ ██ ▀██ ██▀▀     ██      ▀█▄\n\t\t███████▀ ██ █████▀ ▀████▀ ██████   ██   █████▀\n\t\t*/\n\t\taddWidget : function( widget ) {\n\t\t\tif ( widget.id && !ts.isEmptyObject( ts.getWidgetById( widget.id ) ) ) {\n\t\t\t\tconsole.warn( '\"' + widget.id + '\" widget was loaded more than once!' );\n\t\t\t}\n\t\t\tts.widgets[ ts.widgets.length ] = widget;\n\t\t},\n\n\t\thasWidget : function( $table, name ) {\n\t\t\t$table = $( $table );\n\t\t\treturn $table.length && $table[ 0 ].config && $table[ 0 ].config.widgetInit[ name ] || false;\n\t\t},\n\n\t\tgetWidgetById : function( name ) {\n\t\t\tvar indx, widget,\n\t\t\t\tlen = ts.widgets.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\twidget = ts.widgets[ indx ];\n\t\t\t\tif ( widget && widget.id && widget.id.toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\treturn widget;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidgetOptions : function( table ) {\n\t\t\tvar indx, widget, wo,\n\t\t\t\tc = table.config,\n\t\t\t\tlen = c.widgets.length;\n\t\t\tif ( len ) {\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.getWidgetById( c.widgets[ indx ] );\n\t\t\t\t\tif ( widget && widget.options ) {\n\t\t\t\t\t\two = $.extend( true, {}, widget.options );\n\t\t\t\t\t\tc.widgetOptions = $.extend( true, wo, c.widgetOptions );\n\t\t\t\t\t\t// add widgetOptions to defaults for option validator\n\t\t\t\t\t\t$.extend( true, ts.defaults.widgetOptions, widget.options );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\taddWidgetFromClass : function( table ) {\n\t\t\tvar len, indx,\n\t\t\t\tc = table.config,\n\t\t\t\t// look for widgets to apply from table class\n\t\t\t\t// don't match from 'ui-widget-content'; use \\S instead of \\w to include widgets\n\t\t\t\t// with dashes in the name, e.g. \"widget-test-2\" extracts out \"test-2\"\n\t\t\t\tregex = '^' + c.widgetClass.replace( ts.regex.templateName, '(\\\\S+)+' ) + '$',\n\t\t\t\twidgetClass = new RegExp( regex, 'g' ),\n\t\t\t\t// split up table class (widget id's can include dashes) - stop using match\n\t\t\t\t// otherwise only one widget gets extracted, see #1109\n\t\t\t\twidgets = ( table.className || '' ).split( ts.regex.spaces );\n\t\t\tif ( widgets.length ) {\n\t\t\t\tlen = widgets.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tif ( widgets[ indx ].match( widgetClass ) ) {\n\t\t\t\t\t\tc.widgets[ c.widgets.length ] = widgets[ indx ].replace( widgetClass, '$1' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidgetId : function( table, id, init ) {\n\t\t\ttable = $(table)[0];\n\t\t\tvar applied, time, name,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\twidget = ts.getWidgetById( id );\n\t\t\tif ( widget ) {\n\t\t\t\tname = widget.id;\n\t\t\t\tapplied = false;\n\t\t\t\t// add widget name to option list so it gets reapplied after sorting, filtering, etc\n\t\t\t\tif ( $.inArray( name, c.widgets ) < 0 ) {\n\t\t\t\t\tc.widgets[ c.widgets.length ] = name;\n\t\t\t\t}\n\t\t\t\tif ( debug ) { time = new Date(); }\n\n\t\t\t\tif ( init || !( c.widgetInit[ name ] ) ) {\n\t\t\t\t\t// set init flag first to prevent calling init more than once (e.g. pager)\n\t\t\t\t\tc.widgetInit[ name ] = true;\n\t\t\t\t\tif ( table.hasInitialized ) {\n\t\t\t\t\t\t// don't reapply widget options on tablesorter init\n\t\t\t\t\t\tts.applyWidgetOptions( table );\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof widget.init === 'function' ) {\n\t\t\t\t\t\tapplied = true;\n\t\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Initializing ' + name + ' widget' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\twidget.init( table, widget, c, wo );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( !init && typeof widget.format === 'function' ) {\n\t\t\t\t\tapplied = true;\n\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Updating ' + name + ' widget' );\n\t\t\t\t\t}\n\t\t\t\t\twidget.format( table, c, wo, false );\n\t\t\t\t}\n\t\t\t\tif ( debug ) {\n\t\t\t\t\tif ( applied ) {\n\t\t\t\t\t\tconsole.log( 'Completed ' + ( init ? 'initializing ' : 'applying ' ) + name + ' widget' + ts.benchmark( time ) );\n\t\t\t\t\t\tif ( console.groupEnd ) { console.groupEnd(); }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tapplyWidget : function( table, init, callback ) {\n\t\t\ttable = $( table )[ 0 ]; // in case this is called externally\n\t\t\tvar indx, len, names, widget, time,\n\t\t\t\tc = table.config,\n\t\t\t\tdebug = ts.debug(c, 'core'),\n\t\t\t\twidgets = [];\n\t\t\t// prevent numerous consecutive widget applications\n\t\t\tif ( init !== false && table.hasInitialized && ( table.isApplyingWidgets || table.isUpdating ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( debug ) { time = new Date(); }\n\t\t\tts.addWidgetFromClass( table );\n\t\t\t// prevent \"tablesorter-ready\" from firing multiple times in a row\n\t\t\tclearTimeout( c.timerReady );\n\t\t\tif ( c.widgets.length ) {\n\t\t\t\ttable.isApplyingWidgets = true;\n\t\t\t\t// ensure unique widget ids\n\t\t\t\tc.widgets = $.grep( c.widgets, function( val, index ) {\n\t\t\t\t\treturn $.inArray( val, c.widgets ) === index;\n\t\t\t\t});\n\t\t\t\tnames = c.widgets || [];\n\t\t\t\tlen = names.length;\n\t\t\t\t// build widget array & add priority as needed\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.getWidgetById( names[ indx ] );\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\t// set priority to 10 if not defined\n\t\t\t\t\t\tif ( !widget.priority ) { widget.priority = 10; }\n\t\t\t\t\t\twidgets[ indx ] = widget;\n\t\t\t\t\t} else if ( debug ) {\n\t\t\t\t\t\tconsole.warn( '\"' + names[ indx ] + '\" was enabled, but the widget code has not been loaded!' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// sort widgets by priority\n\t\t\t\twidgets.sort( function( a, b ) {\n\t\t\t\t\treturn a.priority < b.priority ? -1 : a.priority === b.priority ? 0 : 1;\n\t\t\t\t});\n\t\t\t\t// add/update selected widgets\n\t\t\t\tlen = widgets.length;\n\t\t\t\tif ( debug ) {\n\t\t\t\t\tconsole[ console.group ? 'group' : 'log' ]( 'Start ' + ( init ? 'initializing' : 'applying' ) + ' widgets' );\n\t\t\t\t}\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = widgets[ indx ];\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\tts.applyWidgetId( table, widget.id, init );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( debug && console.groupEnd ) { console.groupEnd(); }\n\t\t\t}\n\t\t\tc.timerReady = setTimeout( function() {\n\t\t\t\ttable.isApplyingWidgets = false;\n\t\t\t\t$.data( table, 'lastWidgetApplication', new Date() );\n\t\t\t\tc.$table.triggerHandler( 'tablesorter-ready' );\n\t\t\t\t// callback executed on init only\n\t\t\t\tif ( !init && typeof callback === 'function' ) {\n\t\t\t\t\tcallback( table );\n\t\t\t\t}\n\t\t\t\tif ( debug ) {\n\t\t\t\t\twidget = c.widgets.length;\n\t\t\t\t\tconsole.log( 'Completed ' +\n\t\t\t\t\t\t( init === true ? 'initializing ' : 'applying ' ) + widget +\n\t\t\t\t\t\t' widget' + ( widget !== 1 ? 's' : '' ) + ts.benchmark( time ) );\n\t\t\t\t}\n\t\t\t}, 10 );\n\t\t},\n\n\t\tremoveWidget : function( table, name, refreshing ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar index, widget, indx, len,\n\t\t\t\tc = table.config;\n\t\t\t// if name === true, add all widgets from $.tablesorter.widgets\n\t\t\tif ( name === true ) {\n\t\t\t\tname = [];\n\t\t\t\tlen = ts.widgets.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\twidget = ts.widgets[ indx ];\n\t\t\t\t\tif ( widget && widget.id ) {\n\t\t\t\t\t\tname[ name.length ] = widget.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// name can be either an array of widgets names,\n\t\t\t\t// or a space/comma separated list of widget names\n\t\t\t\tname = ( $.isArray( name ) ? name.join( ',' ) : name || '' ).toLowerCase().split( /[\\s,]+/ );\n\t\t\t}\n\t\t\tlen = name.length;\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\twidget = ts.getWidgetById( name[ index ] );\n\t\t\t\tindx = $.inArray( name[ index ], c.widgets );\n\t\t\t\t// don't remove the widget from config.widget if refreshing\n\t\t\t\tif ( indx >= 0 && refreshing !== true ) {\n\t\t\t\t\tc.widgets.splice( indx, 1 );\n\t\t\t\t}\n\t\t\t\tif ( widget && widget.remove ) {\n\t\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\t\tconsole.log( ( refreshing ? 'Refreshing' : 'Removing' ) + ' \"' + name[ index ] + '\" widget' );\n\t\t\t\t\t}\n\t\t\t\t\twidget.remove( table, c, c.widgetOptions, refreshing );\n\t\t\t\t\tc.widgetInit[ name[ index ] ] = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.$table.triggerHandler( 'widgetRemoveEnd', table );\n\t\t},\n\n\t\trefreshWidgets : function( table, doAll, dontapply ) {\n\t\t\ttable = $( table )[ 0 ]; // see issue #243\n\t\t\tvar indx, widget,\n\t\t\t\tc = table.config,\n\t\t\t\tcurWidgets = c.widgets,\n\t\t\t\twidgets = ts.widgets,\n\t\t\t\tlen = widgets.length,\n\t\t\t\tlist = [],\n\t\t\t\tcallback = function( table ) {\n\t\t\t\t\t$( table ).triggerHandler( 'refreshComplete' );\n\t\t\t\t};\n\t\t\t// remove widgets not defined in config.widgets, unless doAll is true\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\twidget = widgets[ indx ];\n\t\t\t\tif ( widget && widget.id && ( doAll || $.inArray( widget.id, curWidgets ) < 0 ) ) {\n\t\t\t\t\tlist[ list.length ] = widget.id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tts.removeWidget( table, list.join( ',' ), true );\n\t\t\tif ( dontapply !== true ) {\n\t\t\t\t// call widget init if\n\t\t\t\tts.applyWidget( table, doAll || false, callback );\n\t\t\t\tif ( doAll ) {\n\t\t\t\t\t// apply widget format\n\t\t\t\t\tts.applyWidget( table, false, callback );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t},\n\n\t\t/*\n\t\t██  ██ ██████ ██ ██     ██ ██████ ██ ██████ ▄█████\n\t\t██  ██   ██   ██ ██     ██   ██   ██ ██▄▄   ▀█▄\n\t\t██  ██   ██   ██ ██     ██   ██   ██ ██▀▀      ▀█▄\n\t\t▀████▀   ██   ██ ██████ ██   ██   ██ ██████ █████▀\n\t\t*/\n\t\tbenchmark : function( diff ) {\n\t\t\treturn ( ' (' + ( new Date().getTime() - diff.getTime() ) + ' ms)' );\n\t\t},\n\t\t// deprecated ts.log\n\t\tlog : function() {\n\t\t\tconsole.log( arguments );\n\t\t},\n\t\tdebug : function(c, name) {\n\t\t\treturn c && (\n\t\t\t\tc.debug === true ||\n\t\t\t\ttypeof c.debug === 'string' && c.debug.indexOf(name) > -1\n\t\t\t);\n\t\t},\n\n\t\t// $.isEmptyObject from jQuery v1.4\n\t\tisEmptyObject : function( obj ) {\n\t\t\t/*jshint forin: false */\n\t\t\tfor ( var name in obj ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tisValueInArray : function( column, arry ) {\n\t\t\tvar indx,\n\t\t\t\tlen = arry && arry.length || 0;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( arry[ indx ][ 0 ] === column ) {\n\t\t\t\t\treturn indx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\tformatFloat : function( str, table ) {\n\t\t\tif ( typeof str !== 'string' || str === '' ) { return str; }\n\t\t\t// allow using formatFloat without a table; defaults to US number format\n\t\t\tvar num,\n\t\t\t\tusFormat = table && table.config ? table.config.usNumberFormat !== false :\n\t\t\t\t\ttypeof table !== 'undefined' ? table : true;\n\t\t\tif ( usFormat ) {\n\t\t\t\t// US Format - 1,234,567.89 -> 1234567.89\n\t\t\t\tstr = str.replace( ts.regex.comma, '' );\n\t\t\t} else {\n\t\t\t\t// German Format = 1.234.567,89 -> 1234567.89\n\t\t\t\t// French Format = 1 234 567,89 -> 1234567.89\n\t\t\t\tstr = str.replace( ts.regex.digitNonUS, '' ).replace( ts.regex.comma, '.' );\n\t\t\t}\n\t\t\tif ( ts.regex.digitNegativeTest.test( str ) ) {\n\t\t\t\t// make (#) into a negative number -> (10) = -10\n\t\t\t\tstr = str.replace( ts.regex.digitNegativeReplace, '-$1' );\n\t\t\t}\n\t\t\tnum = parseFloat( str );\n\t\t\t// return the text instead of zero\n\t\t\treturn isNaN( num ) ? $.trim( str ) : num;\n\t\t},\n\n\t\tisDigit : function( str ) {\n\t\t\t// replace all unwanted chars and match\n\t\t\treturn isNaN( str ) ?\n\t\t\t\tts.regex.digitTest.test( str.toString().replace( ts.regex.digitReplace, '' ) ) :\n\t\t\t\tstr !== '';\n\t\t},\n\n\t\t// computeTableHeaderCellIndexes from:\n\t\t// http://www.javascripttoolbox.com/lib/table/examples.php\n\t\t// http://www.javascripttoolbox.com/temp/table_cellindex.html\n\t\tcomputeColumnIndex : function( $rows, c ) {\n\t\t\tvar i, j, k, l, cell, cells, rowIndex, rowSpan, colSpan, firstAvailCol,\n\t\t\t\t// total columns has been calculated, use it to set the matrixrow\n\t\t\t\tcolumns = c && c.columns || 0,\n\t\t\t\tmatrix = [],\n\t\t\t\tmatrixrow = new Array( columns );\n\t\t\tfor ( i = 0; i < $rows.length; i++ ) {\n\t\t\t\tcells = $rows[ i ].cells;\n\t\t\t\tfor ( j = 0; j < cells.length; j++ ) {\n\t\t\t\t\tcell = cells[ j ];\n\t\t\t\t\trowIndex = i;\n\t\t\t\t\trowSpan = cell.rowSpan || 1;\n\t\t\t\t\tcolSpan = cell.colSpan || 1;\n\t\t\t\t\tif ( typeof matrix[ rowIndex ] === 'undefined' ) {\n\t\t\t\t\t\tmatrix[ rowIndex ] = [];\n\t\t\t\t\t}\n\t\t\t\t\t// Find first available column in the first row\n\t\t\t\t\tfor ( k = 0; k < matrix[ rowIndex ].length + 1; k++ ) {\n\t\t\t\t\t\tif ( typeof matrix[ rowIndex ][ k ] === 'undefined' ) {\n\t\t\t\t\t\t\tfirstAvailCol = k;\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\t// jscs:disable disallowEmptyBlocks\n\t\t\t\t\tif ( columns && cell.cellIndex === firstAvailCol ) {\n\t\t\t\t\t\t// don't to anything\n\t\t\t\t\t} else if ( cell.setAttribute ) {\n\t\t\t\t\t\t// jscs:enable disallowEmptyBlocks\n\t\t\t\t\t\t// add data-column (setAttribute = IE8+)\n\t\t\t\t\t\tcell.setAttribute( 'data-column', firstAvailCol );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// remove once we drop support for IE7 - 1/12/2016\n\t\t\t\t\t\t$( cell ).attr( 'data-column', firstAvailCol );\n\t\t\t\t\t}\n\t\t\t\t\tfor ( k = rowIndex; k < rowIndex + rowSpan; k++ ) {\n\t\t\t\t\t\tif ( typeof matrix[ k ] === 'undefined' ) {\n\t\t\t\t\t\t\tmatrix[ k ] = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatrixrow = matrix[ k ];\n\t\t\t\t\t\tfor ( l = firstAvailCol; l < firstAvailCol + colSpan; l++ ) {\n\t\t\t\t\t\t\tmatrixrow[ l ] = 'x';\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\tts.checkColumnCount($rows, matrix, matrixrow.length);\n\t\t\treturn matrixrow.length;\n\t\t},\n\n\t\tcheckColumnCount : function($rows, matrix, columns) {\n\t\t\t// this DOES NOT report any tbody column issues, except for the math and\n\t\t\t// and column selector widgets\n\t\t\tvar i, len,\n\t\t\t\tvalid = true,\n\t\t\t\tcells = [];\n\t\t\tfor ( i = 0; i < matrix.length; i++ ) {\n\t\t\t\t// some matrix entries are undefined when testing the footer because\n\t\t\t\t// it is using the rowIndex property\n\t\t\t\tif ( matrix[i] ) {\n\t\t\t\t\tlen = matrix[i].length;\n\t\t\t\t\tif ( matrix[i].length !== columns ) {\n\t\t\t\t\t\tvalid = 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\tif ( !valid ) {\n\t\t\t\t$rows.each( function( indx, el ) {\n\t\t\t\t\tvar cell = el.parentElement.nodeName;\n\t\t\t\t\tif ( cells.indexOf( cell ) < 0 ) {\n\t\t\t\t\t\tcells.push( cell );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Invalid or incorrect number of columns in the ' +\n\t\t\t\t\tcells.join( ' or ' ) + '; expected ' + columns +\n\t\t\t\t\t', but found ' + len + ' columns'\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t// automatically add a colgroup with col elements set to a percentage width\n\t\tfixColumnWidth : function( table ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar overallWidth, percent, $tbodies, len, index,\n\t\t\t\tc = table.config,\n\t\t\t\t$colgroup = c.$table.children( 'colgroup' );\n\t\t\t// remove plugin-added colgroup, in case we need to refresh the widths\n\t\t\tif ( $colgroup.length && $colgroup.hasClass( ts.css.colgroup ) ) {\n\t\t\t\t$colgroup.remove();\n\t\t\t}\n\t\t\tif ( c.widthFixed && c.$table.children( 'colgroup' ).length === 0 ) {\n\t\t\t\t$colgroup = $( '<colgroup class=\"' + ts.css.colgroup + '\">' );\n\t\t\t\toverallWidth = c.$table.width();\n\t\t\t\t// only add col for visible columns - fixes #371\n\t\t\t\t$tbodies = c.$tbodies.find( 'tr:first' ).children( ':visible' );\n\t\t\t\tlen = $tbodies.length;\n\t\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t\tpercent = parseInt( ( $tbodies.eq( index ).width() / overallWidth ) * 1000, 10 ) / 10 + '%';\n\t\t\t\t\t$colgroup.append( $( '<col>' ).css( 'width', percent ) );\n\t\t\t\t}\n\t\t\t\tc.$table.prepend( $colgroup );\n\t\t\t}\n\t\t},\n\n\t\t// get sorter, string, empty, etc options for each column from\n\t\t// jQuery data, metadata, header option or header class name ('sorter-false')\n\t\t// priority = jQuery data > meta > headers option > header class name\n\t\tgetData : function( header, configHeader, key ) {\n\t\t\tvar meta, cl4ss,\n\t\t\t\tval = '',\n\t\t\t\t$header = $( header );\n\t\t\tif ( !$header.length ) { return ''; }\n\t\t\tmeta = $.metadata ? $header.metadata() : false;\n\t\t\tcl4ss = ' ' + ( $header.attr( 'class' ) || '' );\n\t\t\tif ( typeof $header.data( key ) !== 'undefined' ||\n\t\t\t\ttypeof $header.data( key.toLowerCase() ) !== 'undefined' ) {\n\t\t\t\t// 'data-lockedOrder' is assigned to 'lockedorder'; but 'data-locked-order' is assigned to 'lockedOrder'\n\t\t\t\t// 'data-sort-initial-order' is assigned to 'sortInitialOrder'\n\t\t\t\tval += $header.data( key ) || $header.data( key.toLowerCase() );\n\t\t\t} else if ( meta && typeof meta[ key ] !== 'undefined' ) {\n\t\t\t\tval += meta[ key ];\n\t\t\t} else if ( configHeader && typeof configHeader[ key ] !== 'undefined' ) {\n\t\t\t\tval += configHeader[ key ];\n\t\t\t} else if ( cl4ss !== ' ' && cl4ss.match( ' ' + key + '-' ) ) {\n\t\t\t\t// include sorter class name 'sorter-text', etc; now works with 'sorter-my-custom-parser'\n\t\t\t\tval = cl4ss.match( new RegExp( '\\\\s' + key + '-([\\\\w-]+)' ) )[ 1 ] || '';\n\t\t\t}\n\t\t\treturn $.trim( val );\n\t\t},\n\n\t\tgetColumnData : function( table, obj, indx, getCell, $headers ) {\n\t\t\tif ( typeof obj !== 'object' || obj === null ) {\n\t\t\t\treturn obj;\n\t\t\t}\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tvar $header, key,\n\t\t\t\tc = table.config,\n\t\t\t\t$cells = ( $headers || c.$headers ),\n\t\t\t\t// c.$headerIndexed is not defined initially\n\t\t\t\t$cell = c.$headerIndexed && c.$headerIndexed[ indx ] ||\n\t\t\t\t\t$cells.find( '[data-column=\"' + indx + '\"]:last' );\n\t\t\tif ( typeof obj[ indx ] !== 'undefined' ) {\n\t\t\t\treturn getCell ? obj[ indx ] : obj[ $cells.index( $cell ) ];\n\t\t\t}\n\t\t\tfor ( key in obj ) {\n\t\t\t\tif ( typeof key === 'string' ) {\n\t\t\t\t\t$header = $cell\n\t\t\t\t\t\t// header cell with class/id\n\t\t\t\t\t\t.filter( key )\n\t\t\t\t\t\t// find elements within the header cell with cell/id\n\t\t\t\t\t\t.add( $cell.find( key ) );\n\t\t\t\t\tif ( $header.length ) {\n\t\t\t\t\t\treturn obj[ key ];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t},\n\n\t\t// *** Process table ***\n\t\t// add processing indicator\n\t\tisProcessing : function( $table, toggle, $headers ) {\n\t\t\t$table = $( $table );\n\t\t\tvar c = $table[ 0 ].config,\n\t\t\t\t// default to all headers\n\t\t\t\t$header = $headers || $table.find( '.' + ts.css.header );\n\t\t\tif ( toggle ) {\n\t\t\t\t// don't use sortList if custom $headers used\n\t\t\t\tif ( typeof $headers !== 'undefined' && c.sortList.length > 0 ) {\n\t\t\t\t\t// get headers from the sortList\n\t\t\t\t\t$header = $header.filter( function() {\n\t\t\t\t\t\t// get data-column from attr to keep compatibility with jQuery 1.2.6\n\t\t\t\t\t\treturn this.sortDisabled ?\n\t\t\t\t\t\t\tfalse :\n\t\t\t\t\t\t\tts.isValueInArray( parseFloat( $( this ).attr( 'data-column' ) ), c.sortList ) >= 0;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t$table.add( $header ).addClass( ts.css.processing + ' ' + c.cssProcessing );\n\t\t\t} else {\n\t\t\t\t$table.add( $header ).removeClass( ts.css.processing + ' ' + c.cssProcessing );\n\t\t\t}\n\t\t},\n\n\t\t// detach tbody but save the position\n\t\t// don't use tbody because there are portions that look for a tbody index (updateCell)\n\t\tprocessTbody : function( table, $tb, getIt ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tif ( getIt ) {\n\t\t\t\ttable.isProcessing = true;\n\t\t\t\t$tb.before( '<colgroup class=\"tablesorter-savemyplace\"/>' );\n\t\t\t\treturn $.fn.detach ? $tb.detach() : $tb.remove();\n\t\t\t}\n\t\t\tvar holdr = $( table ).find( 'colgroup.tablesorter-savemyplace' );\n\t\t\t$tb.insertAfter( holdr );\n\t\t\tholdr.remove();\n\t\t\ttable.isProcessing = false;\n\t\t},\n\n\t\tclearTableBody : function( table ) {\n\t\t\t$( table )[ 0 ].config.$tbodies.children().detach();\n\t\t},\n\n\t\t// used when replacing accented characters during sorting\n\t\tcharacterEquivalents : {\n\t\t\t'a' : '\\u00e1\\u00e0\\u00e2\\u00e3\\u00e4\\u0105\\u00e5', // áàâãäąå\n\t\t\t'A' : '\\u00c1\\u00c0\\u00c2\\u00c3\\u00c4\\u0104\\u00c5', // ÁÀÂÃÄĄÅ\n\t\t\t'c' : '\\u00e7\\u0107\\u010d', // çćč\n\t\t\t'C' : '\\u00c7\\u0106\\u010c', // ÇĆČ\n\t\t\t'e' : '\\u00e9\\u00e8\\u00ea\\u00eb\\u011b\\u0119', // éèêëěę\n\t\t\t'E' : '\\u00c9\\u00c8\\u00ca\\u00cb\\u011a\\u0118', // ÉÈÊËĚĘ\n\t\t\t'i' : '\\u00ed\\u00ec\\u0130\\u00ee\\u00ef\\u0131', // íìİîïı\n\t\t\t'I' : '\\u00cd\\u00cc\\u0130\\u00ce\\u00cf', // ÍÌİÎÏ\n\t\t\t'o' : '\\u00f3\\u00f2\\u00f4\\u00f5\\u00f6\\u014d', // óòôõöō\n\t\t\t'O' : '\\u00d3\\u00d2\\u00d4\\u00d5\\u00d6\\u014c', // ÓÒÔÕÖŌ\n\t\t\t'ss': '\\u00df', // ß (s sharp)\n\t\t\t'SS': '\\u1e9e', // ẞ (Capital sharp s)\n\t\t\t'u' : '\\u00fa\\u00f9\\u00fb\\u00fc\\u016f', // úùûüů\n\t\t\t'U' : '\\u00da\\u00d9\\u00db\\u00dc\\u016e' // ÚÙÛÜŮ\n\t\t},\n\n\t\treplaceAccents : function( str ) {\n\t\t\tvar chr,\n\t\t\t\tacc = '[',\n\t\t\t\teq = ts.characterEquivalents;\n\t\t\tif ( !ts.characterRegex ) {\n\t\t\t\tts.characterRegexArray = {};\n\t\t\t\tfor ( chr in eq ) {\n\t\t\t\t\tif ( typeof chr === 'string' ) {\n\t\t\t\t\t\tacc += eq[ chr ];\n\t\t\t\t\t\tts.characterRegexArray[ chr ] = new RegExp( '[' + eq[ chr ] + ']', 'g' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tts.characterRegex = new RegExp( acc + ']' );\n\t\t\t}\n\t\t\tif ( ts.characterRegex.test( str ) ) {\n\t\t\t\tfor ( chr in eq ) {\n\t\t\t\t\tif ( typeof chr === 'string' ) {\n\t\t\t\t\t\tstr = str.replace( ts.characterRegexArray[ chr ], chr );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\n\t\tvalidateOptions : function( c ) {\n\t\t\tvar setting, setting2, typ, timer,\n\t\t\t\t// ignore options containing an array\n\t\t\t\tignore = 'headers sortForce sortList sortAppend widgets'.split( ' ' ),\n\t\t\t\torig = c.originalSettings;\n\t\t\tif ( orig ) {\n\t\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\ttimer = new Date();\n\t\t\t\t}\n\t\t\t\tfor ( setting in orig ) {\n\t\t\t\t\ttyp = typeof ts.defaults[setting];\n\t\t\t\t\tif ( typ === 'undefined' ) {\n\t\t\t\t\t\tconsole.warn( 'Tablesorter Warning! \"table.config.' + setting + '\" option not recognized' );\n\t\t\t\t\t} else if ( typ === 'object' ) {\n\t\t\t\t\t\tfor ( setting2 in orig[setting] ) {\n\t\t\t\t\t\t\ttyp = ts.defaults[setting] && typeof ts.defaults[setting][setting2];\n\t\t\t\t\t\t\tif ( $.inArray( setting, ignore ) < 0 && typ === 'undefined' ) {\n\t\t\t\t\t\t\t\tconsole.warn( 'Tablesorter Warning! \"table.config.' + setting + '.' + setting2 + '\" option not recognized' );\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\tif ( ts.debug(c, 'core') ) {\n\t\t\t\t\tconsole.log( 'validate options time:' + ts.benchmark( timer ) );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// restore headers\n\t\trestoreHeaders : function( table ) {\n\t\t\tvar index, $cell,\n\t\t\t\tc = $( table )[ 0 ].config,\n\t\t\t\t$headers = c.$table.find( c.selectorHeaders ),\n\t\t\t\tlen = $headers.length;\n\t\t\t// don't use c.$headers here in case header cells were swapped\n\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t$cell = $headers.eq( index );\n\t\t\t\t// only restore header cells if it is wrapped\n\t\t\t\t// because this is also used by the updateAll method\n\t\t\t\tif ( $cell.find( '.' + ts.css.headerIn ).length ) {\n\t\t\t\t\t$cell.html( c.headerContent[ index ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdestroy : function( table, removeClasses, callback ) {\n\t\t\ttable = $( table )[ 0 ];\n\t\t\tif ( !table.hasInitialized ) { return; }\n\t\t\t// remove all widgets\n\t\t\tts.removeWidget( table, true, false );\n\t\t\tvar events,\n\t\t\t\t$t = $( table ),\n\t\t\t\tc = table.config,\n\t\t\t\t$h = $t.find( 'thead:first' ),\n\t\t\t\t$r = $h.find( 'tr.' + ts.css.headerRow ).removeClass( ts.css.headerRow + ' ' + c.cssHeaderRow ),\n\t\t\t\t$f = $t.find( 'tfoot:first > tr' ).children( 'th, td' );\n\t\t\tif ( removeClasses === false && $.inArray( 'uitheme', c.widgets ) >= 0 ) {\n\t\t\t\t// reapply uitheme classes, in case we want to maintain appearance\n\t\t\t\t$t.triggerHandler( 'applyWidgetId', [ 'uitheme' ] );\n\t\t\t\t$t.triggerHandler( 'applyWidgetId', [ 'zebra' ] );\n\t\t\t}\n\t\t\t// remove widget added rows, just in case\n\t\t\t$h.find( 'tr' ).not( $r ).remove();\n\t\t\t// disable tablesorter - not using .unbind( namespace ) because namespacing was\n\t\t\t// added in jQuery v1.4.3 - see http://api.jquery.com/event.namespace/\n\t\t\tevents = 'sortReset update updateRows updateAll updateHeaders updateCell addRows updateComplete sorton ' +\n\t\t\t\t'appendCache updateCache applyWidgetId applyWidgets refreshWidgets removeWidget destroy mouseup mouseleave ' +\n\t\t\t\t'keypress sortBegin sortEnd resetToLoadState '.split( ' ' )\n\t\t\t\t.join( c.namespace + ' ' );\n\t\t\t$t\n\t\t\t\t.removeData( 'tablesorter' )\n\t\t\t\t.unbind( events.replace( ts.regex.spaces, ' ' ) );\n\t\t\tc.$headers\n\t\t\t\t.add( $f )\n\t\t\t\t.removeClass( [ ts.css.header, c.cssHeader, c.cssAsc, c.cssDesc, ts.css.sortAsc, ts.css.sortDesc, ts.css.sortNone ].join( ' ' ) )\n\t\t\t\t.removeAttr( 'data-column' )\n\t\t\t\t.removeAttr( 'aria-label' )\n\t\t\t\t.attr( 'aria-disabled', 'true' );\n\t\t\t$r\n\t\t\t\t.find( c.selectorSort )\n\t\t\t\t.unbind( ( 'mousedown mouseup keypress '.split( ' ' ).join( c.namespace + ' ' ) ).replace( ts.regex.spaces, ' ' ) );\n\t\t\tts.restoreHeaders( table );\n\t\t\t$t.toggleClass( ts.css.table + ' ' + c.tableClass + ' tablesorter-' + c.theme, removeClasses === false );\n\t\t\t$t.removeClass(c.namespace.slice(1));\n\t\t\t// clear flag in case the plugin is initialized again\n\t\t\ttable.hasInitialized = false;\n\t\t\tdelete table.config.cache;\n\t\t\tif ( typeof callback === 'function' ) {\n\t\t\t\tcallback( table );\n\t\t\t}\n\t\t\tif ( ts.debug(c, 'core') ) {\n\t\t\t\tconsole.log( 'tablesorter has been removed' );\n\t\t\t}\n\t\t}\n\n\t};\n\n\t$.fn.tablesorter = function( settings ) {\n\t\treturn this.each( function() {\n\t\t\tvar table = this,\n\t\t\t// merge & extend config options\n\t\t\tc = $.extend( true, {}, ts.defaults, settings, ts.instanceMethods );\n\t\t\t// save initial settings\n\t\t\tc.originalSettings = settings;\n\t\t\t// create a table from data (build table widget)\n\t\t\tif ( !table.hasInitialized && ts.buildTable && this.nodeName !== 'TABLE' ) {\n\t\t\t\t// return the table (in case the original target is the table's container)\n\t\t\t\tts.buildTable( table, c );\n\t\t\t} else {\n\t\t\t\tts.setup( table, c );\n\t\t\t}\n\t\t});\n\t};\n\n\t// set up debug logs\n\tif ( !( window.console && window.console.log ) ) {\n\t\t// access $.tablesorter.logs for browsers that don't have a console...\n\t\tts.logs = [];\n\t\t/*jshint -W020 */\n\t\tconsole = {};\n\t\tconsole.log = console.warn = console.error = console.table = function() {\n\t\t\tvar arg = arguments.length > 1 ? arguments : arguments[0];\n\t\t\tts.logs[ ts.logs.length ] = { date: Date.now(), log: arg };\n\t\t};\n\t}\n\n\t// add default parsers\n\tts.addParser({\n\t\tid : 'no-parser',\n\t\tis : function() {\n\t\t\treturn false;\n\t\t},\n\t\tformat : function() {\n\t\t\treturn '';\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.addParser({\n\t\tid : 'text',\n\t\tis : function() {\n\t\t\treturn true;\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar c = table.config;\n\t\t\tif ( str ) {\n\t\t\t\tstr = $.trim( c.ignoreCase ? str.toLocaleLowerCase() : str );\n\t\t\t\tstr = c.sortLocaleCompare ? ts.replaceAccents( str ) : str;\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.regex.nondigit = /[^\\w,. \\-()]/g;\n\tts.addParser({\n\t\tid : 'digit',\n\t\tis : function( str ) {\n\t\t\treturn ts.isDigit( str );\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );\n\t\t\treturn str && typeof num === 'number' ? num :\n\t\t\t\tstr ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.regex.currencyReplace = /[+\\-,. ]/g;\n\tts.regex.currencyTest = /^\\(?\\d+[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]|[\\u00a3$\\u20ac\\u00a4\\u00a5\\u00a2?.]\\d+\\)?$/;\n\tts.addParser({\n\t\tid : 'currency',\n\t\tis : function( str ) {\n\t\t\tstr = ( str || '' ).replace( ts.regex.currencyReplace, '' );\n\t\t\t// test for £$€¤¥¢\n\t\t\treturn ts.regex.currencyTest.test( str );\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\tvar num = ts.formatFloat( ( str || '' ).replace( ts.regex.nondigit, '' ), table );\n\t\t\treturn str && typeof num === 'number' ? num :\n\t\t\t\tstr ? $.trim( str && table.config.ignoreCase ? str.toLocaleLowerCase() : str ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// too many protocols to add them all https://en.wikipedia.org/wiki/URI_scheme\n\t// now, this regex can be updated before initialization\n\tts.regex.urlProtocolTest = /^(https?|ftp|file):\\/\\//;\n\tts.regex.urlProtocolReplace = /(https?|ftp|file):\\/\\/(www\\.)?/;\n\tts.addParser({\n\t\tid : 'url',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.urlProtocolTest.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\treturn str ? $.trim( str.replace( ts.regex.urlProtocolReplace, '' ) ) : str;\n\t\t},\n\t\ttype : 'text'\n\t});\n\n\tts.regex.dash = /-/g;\n\tts.regex.isoDate = /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}/;\n\tts.addParser({\n\t\tid : 'isoDate',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.isoDate.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\tvar date = str ? new Date( str.replace( ts.regex.dash, '/' ) ) : str;\n\t\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.regex.percent = /%/g;\n\tts.regex.percentTest = /(\\d\\s*?%|%\\s*?\\d)/;\n\tts.addParser({\n\t\tid : 'percent',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.percentTest.test( str ) && str.length < 15;\n\t\t},\n\t\tformat : function( str, table ) {\n\t\t\treturn str ? ts.formatFloat( str.replace( ts.regex.percent, '' ), table ) : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// added image parser to core v2.17.9\n\tts.addParser({\n\t\tid : 'image',\n\t\tis : function( str, table, node, $node ) {\n\t\t\treturn $node.find( 'img' ).length > 0;\n\t\t},\n\t\tformat : function( str, table, cell ) {\n\t\t\treturn $( cell ).find( 'img' ).attr( table.config.imgAttr || 'alt' ) || str;\n\t\t},\n\t\tparsed : true, // filter widget flag\n\t\ttype : 'text'\n\t});\n\n\tts.regex.dateReplace = /(\\S)([AP]M)$/i; // used by usLongDate & time parser\n\tts.regex.usLongDateTest1 = /^[A-Z]{3,10}\\.?\\s+\\d{1,2},?\\s+(\\d{4})(\\s+\\d{1,2}:\\d{2}(:\\d{2})?(\\s+[AP]M)?)?$/i;\n\tts.regex.usLongDateTest2 = /^\\d{1,2}\\s+[A-Z]{3,10}\\s+\\d{4}/i;\n\tts.addParser({\n\t\tid : 'usLongDate',\n\t\tis : function( str ) {\n\t\t\t// two digit years are not allowed cross-browser\n\t\t\t// Jan 01, 2013 12:34:56 PM or 01 Jan 2013\n\t\t\treturn ts.regex.usLongDateTest1.test( str ) || ts.regex.usLongDateTest2.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\tvar date = str ? new Date( str.replace( ts.regex.dateReplace, '$1 $2' ) ) : str;\n\t\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// testing for ##-##-#### or ####-##-##, so it's not perfect; time can be included\n\tts.regex.shortDateTest = /(^\\d{1,2}[\\/\\s]\\d{1,2}[\\/\\s]\\d{4})|(^\\d{4}[\\/\\s]\\d{1,2}[\\/\\s]\\d{1,2})/;\n\t// escaped \"-\" because JSHint in Firefox was showing it as an error\n\tts.regex.shortDateReplace = /[\\-.,]/g;\n\t// XXY covers MDY & DMY formats\n\tts.regex.shortDateXXY = /(\\d{1,2})[\\/\\s](\\d{1,2})[\\/\\s](\\d{4})/;\n\tts.regex.shortDateYMD = /(\\d{4})[\\/\\s](\\d{1,2})[\\/\\s](\\d{1,2})/;\n\tts.convertFormat = function( dateString, format ) {\n\t\tdateString = ( dateString || '' )\n\t\t\t.replace( ts.regex.spaces, ' ' )\n\t\t\t.replace( ts.regex.shortDateReplace, '/' );\n\t\tif ( format === 'mmddyyyy' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateXXY, '$3/$1/$2' );\n\t\t} else if ( format === 'ddmmyyyy' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateXXY, '$3/$2/$1' );\n\t\t} else if ( format === 'yyyymmdd' ) {\n\t\t\tdateString = dateString.replace( ts.regex.shortDateYMD, '$1/$2/$3' );\n\t\t}\n\t\tvar date = new Date( dateString );\n\t\treturn date instanceof Date && isFinite( date ) ? date.getTime() : '';\n\t};\n\n\tts.addParser({\n\t\tid : 'shortDate', // 'mmddyyyy', 'ddmmyyyy' or 'yyyymmdd'\n\t\tis : function( str ) {\n\t\t\tstr = ( str || '' ).replace( ts.regex.spaces, ' ' ).replace( ts.regex.shortDateReplace, '/' );\n\t\t\treturn ts.regex.shortDateTest.test( str );\n\t\t},\n\t\tformat : function( str, table, cell, cellIndex ) {\n\t\t\tif ( str ) {\n\t\t\t\tvar c = table.config,\n\t\t\t\t\t$header = c.$headerIndexed[ cellIndex ],\n\t\t\t\t\tformat = $header.length && $header.data( 'dateFormat' ) ||\n\t\t\t\t\t\tts.getData( $header, ts.getColumnData( table, c.headers, cellIndex ), 'dateFormat' ) ||\n\t\t\t\t\t\tc.dateFormat;\n\t\t\t\t// save format because getData can be slow...\n\t\t\t\tif ( $header.length ) {\n\t\t\t\t\t$header.data( 'dateFormat', format );\n\t\t\t\t}\n\t\t\t\treturn ts.convertFormat( str, format ) || str;\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t// match 24 hour time & 12 hours time + am/pm - see http://regexr.com/3c3tk\n\tts.regex.timeTest = /^(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)$|^((?:[01]\\d|[2][0-4]):[0-5]\\d)$/i;\n\tts.regex.timeMatch = /(0?[1-9]|1[0-2]):([0-5]\\d)(\\s[AP]M)|((?:[01]\\d|[2][0-4]):[0-5]\\d)/i;\n\tts.addParser({\n\t\tid : 'time',\n\t\tis : function( str ) {\n\t\t\treturn ts.regex.timeTest.test( str );\n\t\t},\n\t\tformat : function( str ) {\n\t\t\t// isolate time... ignore month, day and year\n\t\t\tvar temp,\n\t\t\t\ttimePart = ( str || '' ).match( ts.regex.timeMatch ),\n\t\t\t\torig = new Date( str ),\n\t\t\t\t// no time component? default to 00:00 by leaving it out, but only if str is defined\n\t\t\t\ttime = str && ( timePart !== null ? timePart[ 0 ] : '00:00 AM' ),\n\t\t\t\tdate = time ? new Date( '2000/01/01 ' + time.replace( ts.regex.dateReplace, '$1 $2' ) ) : time;\n\t\t\tif ( date instanceof Date && isFinite( date ) ) {\n\t\t\t\ttemp = orig instanceof Date && isFinite( orig ) ? orig.getTime() : 0;\n\t\t\t\t// if original string was a valid date, add it to the decimal so the column sorts in some kind of order\n\t\t\t\t// luckily new Date() ignores the decimals\n\t\t\t\treturn temp ? parseFloat( date.getTime() + '.' + orig.getTime() ) : date.getTime();\n\t\t\t}\n\t\t\treturn str;\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\tts.addParser({\n\t\tid : 'metadata',\n\t\tis : function() {\n\t\t\treturn false;\n\t\t},\n\t\tformat : function( str, table, cell ) {\n\t\t\tvar c = table.config,\n\t\t\tp = ( !c.parserMetadataName ) ? 'sortValue' : c.parserMetadataName;\n\t\t\treturn $( cell ).metadata()[ p ];\n\t\t},\n\t\ttype : 'numeric'\n\t});\n\n\t/*\n\t\t██████ ██████ █████▄ █████▄ ▄████▄\n\t\t  ▄█▀  ██▄▄   ██▄▄██ ██▄▄██ ██▄▄██\n\t\t▄█▀    ██▀▀   ██▀▀██ ██▀▀█  ██▀▀██\n\t\t██████ ██████ █████▀ ██  ██ ██  ██\n\t\t*/\n\t// add default widgets\n\tts.addWidget({\n\t\tid : 'zebra',\n\t\tpriority : 90,\n\t\tformat : function( table, c, wo ) {\n\t\t\tvar $visibleRows, $row, count, isEven, tbodyIndex, rowIndex, len,\n\t\t\t\tchild = new RegExp( c.cssChildRow, 'i' ),\n\t\t\t\t$tbodies = c.$tbodies.add( $( c.namespace + '_extra_table' ).children( 'tbody:not(.' + c.cssInfoBlock + ')' ) );\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t// loop through the visible rows\n\t\t\t\tcount = 0;\n\t\t\t\t$visibleRows = $tbodies.eq( tbodyIndex ).children( 'tr:visible' ).not( c.selectorRemove );\n\t\t\t\tlen = $visibleRows.length;\n\t\t\t\tfor ( rowIndex = 0; rowIndex < len; rowIndex++ ) {\n\t\t\t\t\t$row = $visibleRows.eq( rowIndex );\n\t\t\t\t\t// style child rows the same way the parent row was styled\n\t\t\t\t\tif ( !child.test( $row[ 0 ].className ) ) { count++; }\n\t\t\t\t\tisEven = ( count % 2 === 0 );\n\t\t\t\t\t$row\n\t\t\t\t\t\t.removeClass( wo.zebra[ isEven ? 1 : 0 ] )\n\t\t\t\t\t\t.addClass( wo.zebra[ isEven ? 0 : 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremove : function( table, c, wo, refreshing ) {\n\t\t\tif ( refreshing ) { return; }\n\t\t\tvar tbodyIndex, $tbody,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\ttoRemove = ( wo.zebra || [ 'even', 'odd' ] ).join( ' ' );\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody\n\t\t\t\t$tbody.children().removeClass( toRemove );\n\t\t\t\tts.processTbody( table, $tbody, false ); // restore tbody\n\t\t\t}\n\t\t}\n\t});\n\n})( jQuery );\nreturn jQuery.tablesorter;}));\n","(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery){\n\n/*!\n* tablesorter (FORK) pager plugin\n* updated 2018-08-27 (v2.31.0)\n*/\n!function(M){\"use strict\";var T=M.tablesorter;M.extend({tablesorterPager:new function(){this.defaults={container:null,ajaxUrl:null,customAjaxUrl:function(e,t){return t},ajaxError:null,ajaxObject:{dataType:\"json\"},processAjaxOnInit:!0,ajaxProcessing:function(e){return e},output:\"{startRow} to {endRow} of {totalRows} rows\",updateArrows:!0,page:0,pageReset:0,size:10,maxOptionSize:20,savePages:!0,storageKey:\"tablesorter-pager\",fixedHeight:!1,countChildRows:!1,removeRows:!1,cssFirst:\".first\",cssPrev:\".prev\",cssNext:\".next\",cssLast:\".last\",cssGoto:\".gotoPage\",cssPageDisplay:\".pagedisplay\",cssPageSize:\".pagesize\",cssErrorRow:\"tablesorter-errorRow\",cssDisabled:\"disabled\",totalRows:0,totalPages:0,filteredRows:0,filteredPages:0,ajaxCounter:0,currentFilters:[],startRow:0,endRow:0,$size:null,last:{}};var f=\"filterInit filterStart filterEnd sortEnd disablePager enablePager destroyPager updateComplete pageSize pageSet pageAndSize pagerUpdate refreshComplete \",u=this,h=function(e,t,a){var i,s=\"addClass\",r=\"removeClass\",o=t.cssDisabled,n=!!a,l=n||0===t.page,g=I(e,t),c=n||t.page===g-1||0===g;t.updateArrows&&((i=t.$container.find(t.cssFirst+\",\"+t.cssPrev))[l?s:r](o),i.each(function(){this.ariaDisabled=l}),(i=t.$container.find(t.cssNext+\",\"+t.cssLast))[c?s:r](o),i.each(function(){this.ariaDisabled=c}))},w=function(e,t){var a,i,s,r=e.config,o=r.$table.hasClass(\"hasFilters\");if(o&&!t.ajax)if(T.isEmptyObject(r.cache))t.filteredRows=t.totalRows=r.$tbodies.eq(0).children(\"tr\").not(t.countChildRows?\"\":\".\"+r.cssChildRow).length;else for(t.filteredRows=0,s=(a=r.cache[0].normalized).length,i=0;i<s;i++)t.filteredRows+=t.regexRows.test(a[i][r.columns].$row[0].className)?0:1;else o||(t.filteredRows=t.totalRows)},y=function(e,n,t){if(!n.initializing){var a,i,s,r,o,l,g,c,d=e.config,p=d.namespace+\"pager\",f=A(n,n.size,\"get\");if(\"all\"===f&&(f=n.totalRows),n.countChildRows&&(i[i.length]=d.cssChildRow),n.totalPages=Math.ceil(n.totalRows/f),d.totalRows=n.totalRows,N(e,n),w(e,n),d.filteredRows=n.filteredRows,n.filteredPages=Math.ceil(n.filteredRows/f)||0,0<=I(e,n)){if(i=f*n.page>n.filteredRows&&t,n.page=i?n.pageReset||0:n.page,n.startRow=i?f*n.page+1:0===n.filteredRows?0:f*n.page+1,n.endRow=Math.min(n.filteredRows,n.totalRows,f*(n.page+1)),s=n.$container.find(n.cssPageDisplay),\"function\"==typeof n.output?a=n.output(e,n):(c=s.attr(\"data-pager-output\"+(n.filteredRows<n.totalRows?\"-filtered\":\"\"))||n.output,a=(n.ajaxData&&n.ajaxData.output&&n.ajaxData.output||c).replace(/\\{page([\\-+]\\d+)?\\}/gi,function(e,t){return n.totalPages?n.page+(t?parseInt(t,10):1):0}).replace(/\\{\\w+(\\s*:\\s*\\w+)?\\}/gi,function(e){var t,a,i=e.replace(/[{}\\s]/g,\"\"),s=i.split(\":\"),r=n.ajaxData,o=/(rows?|pages?)$/i.test(i)?0:\"\";return/(startRow|page)/.test(s[0])&&\"input\"===s[1]?(t=(\"\"+(\"page\"===s[0]?n.totalPages:n.totalRows)).length,a=\"page\"===s[0]?n.page+1:n.startRow,'<input type=\"text\" class=\"ts-'+s[0]+'\" style=\"max-width:'+t+'em\" value=\"'+a+'\"/>'):1<s.length&&r&&r[s[0]]?r[s[0]][s[1]]:n[i]||(r?r[i]:o)||o})),(r=n.$container.find(n.cssGoto)).length){for(i=\"\",l=(g=b(e,n)).length,o=0;o<l;o++)i+='<option value=\"'+g[o]+'\">'+g[o]+\"</option>\";r.html(i).val(n.page+1)}s.length&&(s[\"INPUT\"===s[0].nodeName?\"val\":\"html\"](a),s.find(\".ts-startRow, .ts-page\").unbind(\"change\"+p).bind(\"change\"+p,function(){var e=M(this).val(),t=M(this).hasClass(\"ts-startRow\")?Math.floor(e/f)+1:e;d.$table.triggerHandler(\"pageSet\"+p,[t])}))}h(e,n),R(e,n),n.initialized&&!1!==t&&(T.debug(d,\"pager\")&&console.log(\"Pager >> Triggering pagerComplete\"),d.$table.triggerHandler(\"pagerComplete\",n),n.savePages&&T.storage&&T.storage(e,n.storageKey,{page:n.page,size:f===n.totalRows?\"all\":f}))}},b=function(e,t){var a,i,s,r,o,n,l=I(e,t)||1,g=5*Math.ceil(l/t.maxOptionSize/5),c=l>t.maxOptionSize,d=t.page+1,p=g,f=l-g,u=[1];for(a=c?g:1;a<=l;)u[u.length]=a,a+=c?g:1;if(u[u.length]=l,c){for(s=[],(p=d-(i=Math.max(Math.floor(t.maxOptionSize/g)-1,5)))<1&&(p=1),l<(f=d+i)&&(f=l),a=p;a<=f;a++)s[s.length]=a;g/2<(o=(u=M.grep(u,function(e,t){return M.inArray(e,u)===t})).length)-(n=s.length)&&o+n>t.maxOptionSize&&(r=Math.floor(o/2)-Math.floor(n/2),Array.prototype.splice.apply(u,[r,n])),u=u.concat(s)}return u=M.grep(u,function(e,t){return M.inArray(e,u)===t}).sort(function(e,t){return e-t})},R=function(e,t){var a,i,s,r=e.config,o=r.$tbodies.eq(0);o.find(\"tr.pagerSavedHeightSpacer\").remove(),t.fixedHeight&&!t.isDisabled&&(i=M.data(e,\"pagerSavedHeight\"))&&(s=0,1<M(e).css(\"border-spacing\").split(\" \").length&&(s=M(e).css(\"border-spacing\").split(\" \")[1].replace(/[^-\\d\\.]/g,\"\")),5<(a=i-o.height()+s*t.size-s)&&M.data(e,\"pagerLastSize\")===t.size&&o.children(\"tr:visible\").length<(\"all\"===t.size?t.totalRows:t.size)&&o.append('<tr class=\"pagerSavedHeightSpacer '+r.selectorRemove.slice(1)+'\" style=\"height:'+a+'px;\"></tr>'))},z=function(e,t){var a,i=e.config,s=i.$tbodies.eq(0);s.find(\"tr.pagerSavedHeightSpacer\").remove(),s.children(\"tr:visible\").length||s.append('<tr class=\"pagerSavedHeightSpacer '+i.selectorRemove.slice(1)+'\"><td>&nbsp</td></tr>'),a=s.children(\"tr\").eq(0).height()*(\"all\"===t.size?t.totalRows:t.size),M.data(e,\"pagerSavedHeight\",a),R(e,t),M.data(e,\"pagerLastSize\",t.size)},x=function(e,t){if(!t.ajaxUrl){var a,i=0,s=e.config,r=s.$tbodies.eq(0).children(\"tr\"),o=r.length,n=\"all\"===t.size?t.totalRows:t.size,l=t.page*n,g=l+n,c=0,d=0;for(t.cacheIndex=[],a=0;a<o;a++)t.regexFiltered.test(r[a].className)||(d===l&&r[a].className.match(s.cssChildRow)?r[a].style.display=\"none\":(r[a].style.display=l<=d&&d<g?\"\":\"none\",c!==d&&l<=d&&d<g&&(t.cacheIndex[t.cacheIndex.length]=a,c=d),(d+=r[a].className.match(s.cssChildRow+\"|\"+s.selectorRemove.slice(1))&&!t.countChildRows?0:1)===g&&\"none\"!==r[a].style.display&&r[a].className.match(T.css.cssHasChild)&&(i=a)));if(0<i&&r[i].className.match(T.css.cssHasChild))for(;++i<o&&r[i].className.match(s.cssChildRow);)r[i].style.display=\"\"}},j=function(e,t){t.size=A(t,t.$container.find(t.cssPageSize).val(),\"get\"),F(e,t.size,t),h(e,t),t.removeRows||(x(e,t),M(e).bind(\"sortEnd filterEnd \".split(\" \").join(e.config.namespace+\"pager \"),function(){x(e,t)}))},P=function(e,t,a,i,s,r){if(\"function\"==typeof a.ajaxProcessing){t.config.$tbodies.eq(0).empty();var o,n,l,g,c,d,p,f,u,h,w,b,R,z,x,j=t.config,P=j.$table,v=\"\",m=a.ajaxProcessing(e,t,i)||[0,[]];if(T.showError(t),r)T.debug(j,\"pager\")&&console.error(\"Pager >> Ajax Error\",i,s,r),T.showError(t,i,s,r),j.$tbodies.eq(0).children(\"tr\").detach(),a.totalRows=0;else{if(M.isArray(m)?(R=m[(l=isNaN(m[0])&&!isNaN(m[1]))?1:0],a.totalRows=isNaN(R)?a.totalRows||0:R,j.totalRows=j.filteredRows=a.filteredRows=a.totalRows,w=0===a.totalRows?[]:m[l?0:1]||[],h=m[2]):(a.ajaxData=m,j.totalRows=a.totalRows=m.total,j.filteredRows=a.filteredRows=void 0!==m.filteredRows?m.filteredRows:m.total,h=m.headers,w=m.rows||[]),b=w&&w.length,w instanceof M)a.processAjaxOnInit&&(j.$tbodies.eq(0).empty(),j.$tbodies.eq(0).append(w));else if(b){for(o=0;o<b;o++){for(v+=\"<tr>\",n=0;n<w[o].length;n++)v+=/^\\s*<td/.test(w[o][n])?M.trim(w[o][n]):\"<td>\"+w[o][n]+\"</td>\";v+=\"</tr>\"}a.processAjaxOnInit&&j.$tbodies.eq(0).html(v)}if(a.processAjaxOnInit=!0,h)for(d=(g=P.hasClass(\"hasStickyHeaders\"))?j.widgetOptions.$sticky.children(\"thead:first\").children(\"tr:not(.\"+j.cssIgnoreRow+\")\").children():\"\",c=P.find(\"tfoot tr:first\").children(),z=(p=j.$headers.filter(\"th \")).length,n=0;n<z;n++)(f=p.eq(n)).find(\".\"+T.css.icon).length?(u=f.find(\".\"+T.css.icon).clone(!0),f.find(\".\"+T.css.headerIn).html(h[n]).append(u),g&&d.length&&(u=d.eq(n).find(\".\"+T.css.icon).clone(!0),d.eq(n).find(\".\"+T.css.headerIn).html(h[n]).append(u))):(f.find(\".\"+T.css.headerIn).html(h[n]),g&&d.length&&(a.$container=a.$container.add(j.widgetOptions.$sticky),d.eq(n).find(\".\"+T.css.headerIn).html(h[n]))),c.eq(n).html(h[n])}j.showProcessing&&T.isProcessing(t),x=A(a,a.size,\"get\"),a.totalPages=\"all\"===x?1:Math.ceil(a.totalRows/x),a.last.totalRows=a.totalRows,a.last.currentFilters=a.currentFilters,a.last.sortList=(j.sortList||[]).join(\",\"),y(t,a,!1),T.updateCache(j,function(){a.initialized&&setTimeout(function(){T.debug(j,\"pager\")&&console.log(\"Pager >> Triggering pagerChange\"),P.triggerHandler(\"pagerChange\",a),T.applyWidget(t),y(t,a,!0)},0)})}a.initialized||q(t,a)},v=function(e,a){var t,i,s=e.config,r=a.ajaxUrl?a.ajaxUrl.replace(/\\{page([\\-+]\\d+)?\\}/,function(e,t){return a.page+(t?parseInt(t,10):0)}).replace(/\\{size\\}/g,a.size):\"\",o=s.sortList,n=a.currentFilters||M(e).data(\"lastSearch\")||[],l=r.match(/\\{\\s*sort(?:List)?\\s*:\\s*(\\w*)\\s*\\}/),g=r.match(/\\{\\s*filter(?:List)?\\s*:\\s*(\\w*)\\s*\\}/),c=[];if(l){for(l=l[1],i=o.length,t=0;t<i;t++)c[c.length]=l+\"[\"+o[t][0]+\"]=\"+o[t][1];r=r.replace(/\\{\\s*sort(?:List)?\\s*:\\s*(\\w*)\\s*\\}/g,c.length?c.join(\"&\"):l),c=[]}if(g){for(g=g[1],i=n.length,t=0;t<i;t++)n[t]&&(c[c.length]=g+\"[\"+t+\"]=\"+encodeURIComponent(n[t]));r=r.replace(/\\{\\s*filter(?:List)?\\s*:\\s*(\\w*)\\s*\\}/g,c.length?c.join(\"&\"):g),a.currentFilters=n}return\"function\"==typeof a.customAjaxUrl&&(r=a.customAjaxUrl(e,r)),T.debug(s,\"pager\")&&console.log(\"Pager >> Ajax url = \"+r),r},m=function(e,t,a){var i,s,r,o,n=M(e),l=e.config,g=T.debug(l,\"pager\"),c=l.$table.hasClass(\"hasFilters\"),d=t&&t.length||0,p=\"all\"===a.size?a.totalRows:a.size,f=a.page*p;if(d<1)g&&console.warn(\"Pager >> No rows for pager to render\");else{if(a.page>=a.totalPages&&E(e,a),a.cacheIndex=[],a.isDisabled=!1,a.initialized&&(g&&console.log(\"Pager >> Triggering pagerChange\"),n.triggerHandler(\"pagerChange\",a)),a.removeRows){for(T.clearTableBody(e),i=T.processTbody(e,l.$tbodies.eq(0),!0),r=s=c?0:f,o=0;o<p&&s<t.length;)c&&a.regexFiltered.test(t[s][0].className)||f<++r&&o<=p&&(o++,a.cacheIndex[a.cacheIndex.length]=s,i.append(t[s])),s++;T.processTbody(e,i,!1)}else x(e,a);y(e,a),e.isUpdating&&(g&&console.log(\"Pager >> Triggering updateComplete\"),n.triggerHandler(\"updateComplete\",[e,!0]))}},C=function(e,t){var a,i,s;for(t.ajax?h(e,t,!0):(M.data(e,\"pagerLastPage\",t.page),M.data(e,\"pagerLastSize\",t.size),t.page=0,t.size=t.totalRows,t.totalPages=1,M(e).addClass(\"pagerDisabled\").removeAttr(\"aria-describedby\").find(\"tr.pagerSavedHeightSpacer\").remove(),m(e,e.config.rowsCopy,t),t.isDisabled=!0,T.applyWidget(e),T.debug(e.config,\"pager\")&&console.log(\"Pager >> Disabled\")),s=(i=t.$container.find(t.cssGoto+\",\"+t.cssPageSize+\", .ts-startRow, .ts-page\")).length,a=0;a<s;a++)i.eq(a).addClass(t.cssDisabled)[0].disabled=!0,i[a].ariaDisabled=!0},S=function(i){var s=i.config,r=s.pager;T.updateCache(s,function(){var e,t=[],a=i.config.cache[0].normalized;for(r.totalRows=a.length,e=0;e<r.totalRows;e++)t[t.length]=a[e][s.columns].$row;s.rowsCopy=t,$(i,r,!0)})},$=function(e,t,a){if(!t.isDisabled){var i,s,r,o,n,l,g,c,d=e.config,p=T.debug(d,\"pager\"),f=M(e),u=t.last;if(!1!==a&&t.initialized&&T.isEmptyObject(d.cache))return S(e);if(!t.ajax||!T.hasWidget(e,\"filter\")||d.widgetOptions.filter_initialized)if(N(e,t),w(e,t),u.currentFilters=\"\"===(u.currentFilters||[]).join(\"\")?[]:u.currentFilters,t.currentFilters=\"\"===(t.currentFilters||[]).join(\"\")?[]:t.currentFilters,u.page!==t.page||u.size!==t.size||u.totalRows!==t.totalRows||(u.currentFilters||[]).join(\",\")!==(t.currentFilters||[]).join(\",\")||(u.ajaxUrl||\"\")!==(t.ajaxObject.url||\"\")||(u.optAjaxUrl||\"\")!==(t.ajaxUrl||\"\")||u.sortList!==(d.sortList||[]).join(\",\"))p&&console.log(\"Pager >> Changing to page \"+t.page),t.last={page:t.page,size:t.size,sortList:(d.sortList||[]).join(\",\"),totalRows:t.totalRows,currentFilters:t.currentFilters||[],ajaxUrl:t.ajaxObject.url||\"\",optAjaxUrl:t.ajaxUrl||\"\"},t.ajax?t.processAjaxOnInit||T.isEmptyObject(t.initialRows)?(n=v(s=e,r=t),l=M(document),g=s.config,c=g.namespace+\"pager\",\"\"!==n&&(g.showProcessing&&T.isProcessing(s,!0),l.bind(\"ajaxError\"+c,function(e,t,a,i){P(null,s,r,t,a,i),l.unbind(\"ajaxError\"+c)}),o=++r.ajaxCounter,r.last.ajaxUrl=n,r.ajaxObject.url=n,r.ajaxObject.success=function(e,t,a){o<r.ajaxCounter||(P(e,s,r,a),l.unbind(\"ajaxError\"+c),\"function\"==typeof r.oldAjaxSuccess&&r.oldAjaxSuccess(e))},T.debug(g,\"pager\")&&console.log(\"Pager >> Ajax initialized\",r.ajaxObject),M.ajax(r.ajaxObject))):(t.processAjaxOnInit=!0,i=t.initialRows,t.totalRows=void 0!==i.total?i.total:p&&console.error(\"Pager >> No initial total page set!\")||0,t.filteredRows=void 0!==i.filtered?i.filtered:p&&console.error(\"Pager >> No initial filtered page set!\")||0,q(e,t)):t.ajax||m(e,d.rowsCopy,t),M.data(e,\"pagerLastPage\",t.page),t.initialized&&!1!==a&&(p&&console.log(\"Pager >> Triggering pageMoved\"),f.triggerHandler(\"pageMoved\",t),T.applyWidget(e),e.isUpdating&&(p&&console.log(\"Pager >> Triggering updateComplete\"),f.triggerHandler(\"updateComplete\",[e,!0])))}},I=function(e,t){return T.hasWidget(e,\"filter\")?Math.min(t.totalPages,t.filteredPages):t.totalPages},N=function(e,t){var a=I(e,t)-1;return t.page=parseInt(t.page,10),(t.page<0||isNaN(t.page))&&(t.page=0),t.page>a&&0<=a&&(t.page=a),t.page},A=function(e,t,a){var i=parseInt(t,10)||e.size||e.settings.size||10;return e.initialized&&(/all/i.test(i+\" \"+t)||i===e.totalRows)?e.$container.find(e.cssPageSize+' option[value=\"all\"]').length?\"all\":e.totalRows:\"get\"===a?i:e.size},F=function(e,t,a){a.size=A(a,t,\"get\"),a.$container.find(a.cssPageSize).val(a.size),M.data(e,\"pagerLastPage\",N(e,a)),M.data(e,\"pagerLastSize\",a.size),a.totalPages=\"all\"===a.size?1:Math.ceil(a.totalRows/a.size),a.filteredPages=\"all\"===a.size?1:Math.ceil(a.filteredRows/a.size)},O=function(e,t){t.page=0,$(e,t)},E=function(e,t){t.page=I(e,t)-1,$(e,t)},L=function(e,t){t.page++;var a=I(e,t)-1;t.page>=a&&(t.page=a),$(e,t)},D=function(e,t){t.page--,t.page<=0&&(t.page=0),$(e,t)},q=function(e,t){t.initialized=!0,t.initializing=!1,T.debug(e.config,\"pager\")&&console.log(\"Pager >> Triggering pagerInitialized\"),M(e).triggerHandler(\"pagerInitialized\",t),T.applyWidget(e),y(e,t)},U=function(e,t,a){var i,s,r,o=e.config;t.$container.find(t.cssGoto+\",\"+t.cssPageSize+\",.ts-startRow, .ts-page\").removeClass(t.cssDisabled).removeAttr(\"disabled\").each(function(){this.ariaDisabled=!1}),t.isDisabled=!1,t.page=M.data(e,\"pagerLastPage\")||t.page||0,s=(r=t.$container.find(t.cssPageSize)).find(\"option[selected]\").val(),t.size=M.data(e,\"pagerLastSize\")||A(t,s,\"get\"),t.totalPages=\"all\"===t.size?1:Math.ceil(I(e,t)/t.size),F(e,t.size,t),e.id&&!o.$table.attr(\"aria-describedby\")&&((i=(r=t.$container.find(t.cssPageDisplay)).attr(\"id\"))||(i=e.id+\"_pager_info\",r.attr(\"id\",i)),o.$table.attr(\"aria-describedby\",i)),z(e,t),a&&(T.update(o),F(e,t.size,t),$(e,t),j(e,t),T.debug(o,\"pager\")&&console.log(\"Pager >> Enabled\"))},H=function(o,e){var t,s,r,a,n=o.config,i=n.widgetOptions,l=T.debug(n,\"pager\"),g=n.pager=M.extend(!0,{},M.tablesorterPager.defaults,e),c=n.$table,d=n.namespace+\"pager\",p=g.$container=M(g.container).addClass(\"tablesorter-pager\").show();g.settings=M.extend(!0,{},M.tablesorterPager.defaults,e),l&&console.log(\"Pager >> Initializing\"),g.oldAjaxSuccess=g.oldAjaxSuccess||g.ajaxObject.success,n.appender=u.appender,g.initializing=!0,g.savePages&&T.storage&&(t=T.storage(o,g.storageKey)||{},g.page=isNaN(t.page)?g.page:t.page,g.size=\"all\"===t.size?t.size:(isNaN(t.size)?g.size:t.size)||g.setSize||10,F(o,g.size,g)),g.regexRows=new RegExp(\"(\"+(i.filter_filteredRow||\"filtered\")+\"|\"+n.selectorRemove.slice(1)+\"|\"+n.cssChildRow+\")\"),g.regexFiltered=new RegExp(i.filter_filteredRow||\"filtered\"),c.unbind(f.split(\" \").join(d+\" \").replace(/\\s+/g,\" \")).bind(\"filterInit filterStart \".split(\" \").join(d+\" \"),function(e,t){var a;if(g.currentFilters=M.isArray(t)?t:n.$table.data(\"lastSearch\"),g.ajax&&\"filterInit\"===e.type)return $(o,g,!1);a=T.filter.equalFilters?T.filter.equalFilters(n,n.lastSearch,g.currentFilters):(n.lastSearch||[]).join(\"\")!==(g.currentFilters||[]).join(\"\"),\"filterStart\"!==e.type||!1===g.pageReset||a||(g.page=g.pageReset)}).bind(\"filterEnd sortEnd \".split(\" \").join(d+\" \"),function(){g.currentFilters=n.$table.data(\"lastSearch\"),(g.initialized||g.initializing)&&(n.delayInit&&n.rowsCopy&&0===n.rowsCopy.length&&S(o),y(o,g,!1),$(o,g,!1),T.applyWidget(o))}).bind(\"disablePager\"+d,function(e){e.stopPropagation(),C(o,g)}).bind(\"enablePager\"+d,function(e){e.stopPropagation(),U(o,g,!0)}).bind(\"destroyPager\"+d,function(e){var t,a,i,s,r;e.stopPropagation(),a=g,i=(t=o).config,s=i.namespace+\"pager\",r=[a.cssFirst,a.cssPrev,a.cssNext,a.cssLast,a.cssGoto,a.cssPageSize].join(\",\"),C(t,a),a.$container.hide().find(r).unbind(s),i.appender=null,i.$table.unbind(s),T.storage&&T.storage(t,a.storageKey,\"\"),delete i.pager,delete i.rowsCopy}).bind(\"resetToLoadState\"+d,function(e){var t,a;e.stopPropagation(),a=g,(t=o).config.pager=M.extend(!0,{},M.tablesorterPager.defaults,a.settings),H(t,a.settings)}).bind(\"updateComplete\"+d,function(e,t,a){if(e.stopPropagation(),t&&!a&&!g.ajax){var i=n.$tbodies.eq(0).children(\"tr\").not(n.selectorRemove);g.totalRows=i.length-(g.countChildRows?0:i.filter(\".\"+n.cssChildRow).length),g.totalPages=\"all\"===g.size?1:Math.ceil(g.totalRows/g.size),i.length&&n.rowsCopy&&0===n.rowsCopy.length&&S(t),g.page>=g.totalPages&&E(t,g),x(t,g),z(t,g),y(t,g,!0)}}).bind(\"pageSize refreshComplete \".split(\" \").join(d+\" \"),function(e,t){e.stopPropagation(),F(o,A(g,t,\"get\"),g),$(o,g),x(o,g),y(o,g,!1)}).bind(\"pageSet pagerUpdate \".split(\" \").join(d+\" \"),function(e,t){e.stopPropagation(),\"pagerUpdate\"===e.type&&(t=void 0===t?g.page+1:t,g.last.page=!0),g.page=(parseInt(t,10)||1)-1,$(o,g,!0),y(o,g,!1)}).bind(\"pageAndSize\"+d,function(e,t,a){e.stopPropagation(),g.page=(parseInt(t,10)||1)-1,F(o,A(g,a,\"get\"),g),$(o,g,!0),x(o,g),y(o,g,!1)}),s=[g.cssFirst,g.cssPrev,g.cssNext,g.cssLast],r=[O,D,L,E],l&&!p.length&&console.warn('Pager >> \"container\" not found'),p.find(s.join(\",\")).attr(\"tabindex\",0).unbind(\"click\"+d).bind(\"click\"+d,function(e){e.stopPropagation();var t,a=M(this),i=s.length;if(!a.hasClass(g.cssDisabled))for(t=0;t<i;t++)if(a.is(s[t])){r[t](o,g);break}}),(a=p.find(g.cssGoto)).length?a.unbind(\"change\"+d).bind(\"change\"+d,function(){g.page=M(this).val()-1,$(o,g,!0),y(o,g,!1)}):l&&console.warn('Pager >> \"goto\" selector not found'),(a=p.find(g.cssPageSize)).length?(a.find(\"option\").removeAttr(\"selected\"),a.unbind(\"change\"+d).bind(\"change\"+d,function(){if(!M(this).hasClass(g.cssDisabled)){var e=M(this).val();F(o,e,g),$(o,g),z(o,g)}return!1})):l&&console.warn('Pager >> \"size\" selector not found'),g.initialized=!1,c.triggerHandler(\"pagerBeforeInitialized\",g),U(o,g,!1),\"string\"==typeof g.ajaxUrl?(g.ajax=!0,n.widgetOptions.filter_serversideFiltering=!0,n.serverSideSorting=!0,$(o,g)):(g.ajax=!1,T.appendCache(n,!0),j(o,g)),g.ajax||g.initialized||(g.initializing=!1,g.initialized=!0,F(o,g.size,g),$(o,g),l&&console.log(\"Pager >> Triggering pagerInitialized\"),n.$table.triggerHandler(\"pagerInitialized\",g),n.widgetOptions.filter_initialized&&T.hasWidget(o,\"filter\")||y(o,g,!1)),n.widgetInit.pager=!0};u.appender=function(e,t){var a=e.config,i=a.pager;i.ajax||(a.rowsCopy=t,i.totalRows=i.countChildRows?a.$tbodies.eq(0).children(\"tr\").length:t.length,i.size=M.data(e,\"pagerLastSize\")||i.size||i.settings.size||10,i.totalPages=\"all\"===i.size?1:Math.ceil(i.totalRows/i.size),m(e,t,i),y(e,i,!1))},u.construct=function(e){return this.each(function(){this.config&&this.hasInitialized&&H(this,e)})}}}),T.showError=function(e,t,a,i){var s=M(e),r=s[0].config,o=r&&r.widgetOptions,n=r.pager&&r.pager.cssErrorRow||o&&o.pager_css&&o.pager_css.errorRow||\"tablesorter-errorRow\",l=typeof t,g=!0,c=\"\",d=function(){r.$table.find(\"thead\").find(r.selectorRemove).remove()};if(s.length){if(\"function\"==typeof r.pager.ajaxError){if(!1===(g=r.pager.ajaxError(r,t,a,i)))return d();c=g}else if(\"function\"==typeof o.pager_ajaxError){if(!1===(g=o.pager_ajaxError(r,t,a,i)))return d();c=g}if(\"\"===c)if(\"object\"===l)c=0===t.status?\"Not connected, verify Network\":404===t.status?\"Requested page not found [404]\":500===t.status?\"Internal Server Error [500]\":\"parsererror\"===i?\"Requested JSON parse failed\":\"timeout\"===i?\"Time out error\":\"abort\"===i?\"Ajax Request aborted\":\"Uncaught error: \"+t.statusText+\" [\"+t.status+\"]\";else{if(\"string\"!==l)return d();c=t}M(/tr\\>/.test(c)?c:'<tr><td colspan=\"'+r.columns+'\">'+c+\"</td></tr>\").click(function(){M(this).remove()}).appendTo(r.$table.find(\"thead:first\")).addClass(n+\" \"+r.selectorRemove.slice(1)).attr({role:\"alert\",\"aria-live\":\"assertive\"})}else console.error(\"tablesorter showError: no table parameter passed\")},M.fn.extend({tablesorterPager:M.tablesorterPager.construct})}(jQuery);return jQuery;}));\n","/*! tablesorter (FORK) - updated 2018-08-27 (v2.31.0)*/\n/* Includes widgets ( storage,uitheme,columns,filter,stickyHeaders,resizable,saveSort ) */\n(function(factory){if (typeof define === 'function' && define.amd){define(['jquery'], factory);} else if (typeof module === 'object' && typeof module.exports === 'object'){module.exports = factory(require('jquery'));} else {factory(jQuery);}}(function(jQuery) {\n/*! Widget: storage - updated 2018-03-18 (v2.30.0) */\n/*global JSON:false */\n;(function ($, window, document) {\n\t'use strict';\n\n\tvar ts = $.tablesorter || {};\n\n\t// update defaults for validator; these values must be falsy!\n\t$.extend(true, ts.defaults, {\n\t\tfixedUrl: '',\n\t\twidgetOptions: {\n\t\t\tstorage_fixedUrl: '',\n\t\t\tstorage_group: '',\n\t\t\tstorage_page: '',\n\t\t\tstorage_storageType: '',\n\t\t\tstorage_tableId: '',\n\t\t\tstorage_useSessionStorage: ''\n\t\t}\n\t});\n\n\t// *** Store data in local storage, with a cookie fallback ***\n\t/* IE7 needs JSON library for JSON.stringify - (http://caniuse.com/#search=json)\n\t   if you need it, then include https://github.com/douglascrockford/JSON-js\n\n\t   $.parseJSON is not available is jQuery versions older than 1.4.1, using older\n\t   versions will only allow storing information for one page at a time\n\n\t   // *** Save data (JSON format only) ***\n\t   // val must be valid JSON... use http://jsonlint.com/ to ensure it is valid\n\t   var val = { \"mywidget\" : \"data1\" }; // valid JSON uses double quotes\n\t   // $.tablesorter.storage(table, key, val);\n\t   $.tablesorter.storage(table, 'tablesorter-mywidget', val);\n\n\t   // *** Get data: $.tablesorter.storage(table, key); ***\n\t   v = $.tablesorter.storage(table, 'tablesorter-mywidget');\n\t   // val may be empty, so also check for your data\n\t   val = (v && v.hasOwnProperty('mywidget')) ? v.mywidget : '';\n\t   alert(val); // 'data1' if saved, or '' if not\n\t*/\n\tts.storage = function(table, key, value, options) {\n\t\ttable = $(table)[0];\n\t\tvar cookieIndex, cookies, date,\n\t\t\thasStorage = false,\n\t\t\tvalues = {},\n\t\t\tc = table.config,\n\t\t\two = c && c.widgetOptions,\n\t\t\tdebug = ts.debug(c, 'storage'),\n\t\t\tstorageType = (\n\t\t\t\t( options && options.storageType ) || ( wo && wo.storage_storageType )\n\t\t\t).toString().charAt(0).toLowerCase(),\n\t\t\t// deprecating \"useSessionStorage\"; any storageType setting overrides it\n\t\t\tsession = storageType ? '' :\n\t\t\t\t( options && options.useSessionStorage ) || ( wo && wo.storage_useSessionStorage ),\n\t\t\t$table = $(table),\n\t\t\t// id from (1) options ID, (2) table 'data-table-group' attribute, (3) widgetOptions.storage_tableId,\n\t\t\t// (4) table ID, then (5) table index\n\t\t\tid = options && options.id ||\n\t\t\t\t$table.attr( options && options.group || wo && wo.storage_group || 'data-table-group') ||\n\t\t\t\two && wo.storage_tableId || table.id || $('.tablesorter').index( $table ),\n\t\t\t// url from (1) options url, (2) table 'data-table-page' attribute, (3) widgetOptions.storage_fixedUrl,\n\t\t\t// (4) table.config.fixedUrl (deprecated), then (5) window location path\n\t\t\turl = options && options.url ||\n\t\t\t\t$table.attr(options && options.page || wo && wo.storage_page || 'data-table-page') ||\n\t\t\t\two && wo.storage_fixedUrl || c && c.fixedUrl || window.location.pathname;\n\n\t\t// skip if using cookies\n\t\tif (storageType !== 'c') {\n\t\t\tstorageType = (storageType === 's' || session) ? 'sessionStorage' : 'localStorage';\n\t\t\t// https://gist.github.com/paulirish/5558557\n\t\t\tif (storageType in window) {\n\t\t\t\ttry {\n\t\t\t\t\twindow[storageType].setItem('_tmptest', 'temp');\n\t\t\t\t\thasStorage = true;\n\t\t\t\t\twindow[storageType].removeItem('_tmptest');\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn( storageType + ' is not supported in this browser' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (debug) {\n\t\t\tconsole.log('Storage >> Using', hasStorage ? storageType : 'cookies');\n\t\t}\n\t\t// *** get value ***\n\t\tif ($.parseJSON) {\n\t\t\tif (hasStorage) {\n\t\t\t\tvalues = $.parseJSON( window[storageType][key] || 'null' ) || {};\n\t\t\t} else {\n\t\t\t\t// old browser, using cookies\n\t\t\t\tcookies = document.cookie.split(/[;\\s|=]/);\n\t\t\t\t// add one to get from the key to the value\n\t\t\t\tcookieIndex = $.inArray(key, cookies) + 1;\n\t\t\t\tvalues = (cookieIndex !== 0) ? $.parseJSON(cookies[cookieIndex] || 'null') || {} : {};\n\t\t\t}\n\t\t}\n\t\t// allow value to be an empty string too\n\t\tif (typeof value !== 'undefined' && window.JSON && JSON.hasOwnProperty('stringify')) {\n\t\t\t// add unique identifiers = url pathname > table ID/index on page > data\n\t\t\tif (!values[url]) {\n\t\t\t\tvalues[url] = {};\n\t\t\t}\n\t\t\tvalues[url][id] = value;\n\t\t\t// *** set value ***\n\t\t\tif (hasStorage) {\n\t\t\t\twindow[storageType][key] = JSON.stringify(values);\n\t\t\t} else {\n\t\t\t\tdate = new Date();\n\t\t\t\tdate.setTime(date.getTime() + (31536e+6)); // 365 days\n\t\t\t\tdocument.cookie = key + '=' + (JSON.stringify(values)).replace(/\\\"/g, '\\\"') + '; expires=' + date.toGMTString() + '; path=/';\n\t\t\t}\n\t\t} else {\n\t\t\treturn values && values[url] ? values[url][id] : '';\n\t\t}\n\t};\n\n})(jQuery, window, document);\n\n/*! Widget: uitheme - updated 2018-03-18 (v2.30.0) */\n;(function ($) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\tts.themes = {\n\t\t'bootstrap' : {\n\t\t\ttable        : 'table table-bordered table-striped',\n\t\t\tcaption      : 'caption',\n\t\t\t// header class names\n\t\t\theader       : 'bootstrap-header', // give the header a gradient background (theme.bootstrap_2.css)\n\t\t\tsortNone     : '',\n\t\t\tsortAsc      : '',\n\t\t\tsortDesc     : '',\n\t\t\tactive       : '', // applied when column is sorted\n\t\t\thover        : '', // custom css required - a defined bootstrap style may not override other classes\n\t\t\t// icon class names\n\t\t\ticons        : '', // add 'bootstrap-icon-white' to make them white; this icon class is added to the <i> in the header\n\t\t\ticonSortNone : 'bootstrap-icon-unsorted', // class name added to icon when column is not sorted\n\t\t\ticonSortAsc  : 'glyphicon glyphicon-chevron-up', // class name added to icon when column has ascending sort\n\t\t\ticonSortDesc : 'glyphicon glyphicon-chevron-down', // class name added to icon when column has descending sort\n\t\t\tfilterRow    : '', // filter row class\n\t\t\tfooterRow    : '',\n\t\t\tfooterCells  : '',\n\t\t\teven         : '', // even row zebra striping\n\t\t\todd          : ''  // odd row zebra striping\n\t\t},\n\t\t'jui' : {\n\t\t\ttable        : 'ui-widget ui-widget-content ui-corner-all', // table classes\n\t\t\tcaption      : 'ui-widget-content',\n\t\t\t// header class names\n\t\t\theader       : 'ui-widget-header ui-corner-all ui-state-default', // header classes\n\t\t\tsortNone     : '',\n\t\t\tsortAsc      : '',\n\t\t\tsortDesc     : '',\n\t\t\tactive       : 'ui-state-active', // applied when column is sorted\n\t\t\thover        : 'ui-state-hover',  // hover class\n\t\t\t// icon class names\n\t\t\ticons        : 'ui-icon', // icon class added to the <i> in the header\n\t\t\ticonSortNone : 'ui-icon-carat-2-n-s ui-icon-caret-2-n-s', // class name added to icon when column is not sorted\n\t\t\ticonSortAsc  : 'ui-icon-carat-1-n ui-icon-caret-1-n', // class name added to icon when column has ascending sort\n\t\t\ticonSortDesc : 'ui-icon-carat-1-s ui-icon-caret-1-s', // class name added to icon when column has descending sort\n\t\t\tfilterRow    : '',\n\t\t\tfooterRow    : '',\n\t\t\tfooterCells  : '',\n\t\t\teven         : 'ui-widget-content', // even row zebra striping\n\t\t\todd          : 'ui-state-default'   // odd row zebra striping\n\t\t}\n\t};\n\n\t$.extend(ts.css, {\n\t\twrapper : 'tablesorter-wrapper' // ui theme & resizable\n\t});\n\n\tts.addWidget({\n\t\tid: 'uitheme',\n\t\tpriority: 10,\n\t\tformat: function(table, c, wo) {\n\t\t\tvar i, tmp, hdr, icon, time, $header, $icon, $tfoot, $h, oldtheme, oldremove, oldIconRmv, hasOldTheme,\n\t\t\t\tthemesAll = ts.themes,\n\t\t\t\t$table = c.$table.add( $( c.namespace + '_extra_table' ) ),\n\t\t\t\t$headers = c.$headers.add( $( c.namespace + '_extra_headers' ) ),\n\t\t\t\ttheme = c.theme || 'jui',\n\t\t\t\tthemes = themesAll[theme] || {},\n\t\t\t\tremove = $.trim( [ themes.sortNone, themes.sortDesc, themes.sortAsc, themes.active ].join( ' ' ) ),\n\t\t\t\ticonRmv = $.trim( [ themes.iconSortNone, themes.iconSortDesc, themes.iconSortAsc ].join( ' ' ) ),\n\t\t\t\tdebug = ts.debug(c, 'uitheme');\n\t\t\tif (debug) { time = new Date(); }\n\t\t\t// initialization code - run once\n\t\t\tif (!$table.hasClass('tablesorter-' + theme) || c.theme !== c.appliedTheme || !wo.uitheme_applied) {\n\t\t\t\two.uitheme_applied = true;\n\t\t\t\toldtheme = themesAll[c.appliedTheme] || {};\n\t\t\t\thasOldTheme = !$.isEmptyObject(oldtheme);\n\t\t\t\toldremove =  hasOldTheme ? [ oldtheme.sortNone, oldtheme.sortDesc, oldtheme.sortAsc, oldtheme.active ].join( ' ' ) : '';\n\t\t\t\toldIconRmv = hasOldTheme ? [ oldtheme.iconSortNone, oldtheme.iconSortDesc, oldtheme.iconSortAsc ].join( ' ' ) : '';\n\t\t\t\tif (hasOldTheme) {\n\t\t\t\t\two.zebra[0] = $.trim( ' ' + wo.zebra[0].replace(' ' + oldtheme.even, '') );\n\t\t\t\t\two.zebra[1] = $.trim( ' ' + wo.zebra[1].replace(' ' + oldtheme.odd, '') );\n\t\t\t\t\tc.$tbodies.children().removeClass( [ oldtheme.even, oldtheme.odd ].join(' ') );\n\t\t\t\t}\n\t\t\t\t// update zebra stripes\n\t\t\t\tif (themes.even) { wo.zebra[0] += ' ' + themes.even; }\n\t\t\t\tif (themes.odd) { wo.zebra[1] += ' ' + themes.odd; }\n\t\t\t\t// add caption style\n\t\t\t\t$table.children('caption')\n\t\t\t\t\t.removeClass(oldtheme.caption || '')\n\t\t\t\t\t.addClass(themes.caption);\n\t\t\t\t// add table/footer class names\n\t\t\t\t$tfoot = $table\n\t\t\t\t\t// remove other selected themes\n\t\t\t\t\t.removeClass( (c.appliedTheme ? 'tablesorter-' + (c.appliedTheme || '') : '') + ' ' + (oldtheme.table || '') )\n\t\t\t\t\t.addClass('tablesorter-' + theme + ' ' + (themes.table || '')) // add theme widget class name\n\t\t\t\t\t.children('tfoot');\n\t\t\t\tc.appliedTheme = c.theme;\n\n\t\t\t\tif ($tfoot.length) {\n\t\t\t\t\t$tfoot\n\t\t\t\t\t\t// if oldtheme.footerRow or oldtheme.footerCells are undefined, all class names are removed\n\t\t\t\t\t\t.children('tr').removeClass(oldtheme.footerRow || '').addClass(themes.footerRow)\n\t\t\t\t\t\t.children('th, td').removeClass(oldtheme.footerCells || '').addClass(themes.footerCells);\n\t\t\t\t}\n\t\t\t\t// update header classes\n\t\t\t\t$headers\n\t\t\t\t\t.removeClass( (hasOldTheme ? [ oldtheme.header, oldtheme.hover, oldremove ].join(' ') : '') || '' )\n\t\t\t\t\t.addClass(themes.header)\n\t\t\t\t\t.not('.sorter-false')\n\t\t\t\t\t.unbind('mouseenter.tsuitheme mouseleave.tsuitheme')\n\t\t\t\t\t.bind('mouseenter.tsuitheme mouseleave.tsuitheme', function(event) {\n\t\t\t\t\t\t// toggleClass with switch added in jQuery 1.3\n\t\t\t\t\t\t$(this)[ event.type === 'mouseenter' ? 'addClass' : 'removeClass' ](themes.hover || '');\n\t\t\t\t\t});\n\n\t\t\t\t$headers.each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\tif (!$this.find('.' + ts.css.wrapper).length) {\n\t\t\t\t\t\t// Firefox needs this inner div to position the icon & resizer correctly\n\t\t\t\t\t\t$this.wrapInner('<div class=\"' + ts.css.wrapper + '\" style=\"position:relative;height:100%;width:100%\"></div>');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (c.cssIcon) {\n\t\t\t\t\t// if c.cssIcon is '', then no <i> is added to the header\n\t\t\t\t\t$headers\n\t\t\t\t\t\t.find('.' + ts.css.icon)\n\t\t\t\t\t\t.removeClass(hasOldTheme ? [ oldtheme.icons, oldIconRmv ].join(' ') : '')\n\t\t\t\t\t\t.addClass(themes.icons || '');\n\t\t\t\t}\n\t\t\t\t// filter widget initializes after uitheme\n\t\t\t\tif (ts.hasWidget( c.table, 'filter' )) {\n\t\t\t\t\ttmp = function() {\n\t\t\t\t\t\t$table.children('thead').children('.' + ts.css.filterRow)\n\t\t\t\t\t\t\t.removeClass(hasOldTheme ? oldtheme.filterRow || '' : '')\n\t\t\t\t\t\t\t.addClass(themes.filterRow || '');\n\t\t\t\t\t};\n\t\t\t\t\tif (wo.filter_initialized) {\n\t\t\t\t\t\ttmp();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$table.one('filterInit', function() {\n\t\t\t\t\t\t\ttmp();\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\tfor (i = 0; i < c.columns; i++) {\n\t\t\t\t$header = c.$headers\n\t\t\t\t\t.add($(c.namespace + '_extra_headers'))\n\t\t\t\t\t.not('.sorter-false')\n\t\t\t\t\t.filter('[data-column=\"' + i + '\"]');\n\t\t\t\t$icon = (ts.css.icon) ? $header.find('.' + ts.css.icon) : $();\n\t\t\t\t$h = $headers.not('.sorter-false').filter('[data-column=\"' + i + '\"]:last');\n\t\t\t\tif ($h.length) {\n\t\t\t\t\t$header.removeClass(remove);\n\t\t\t\t\t$icon.removeClass(iconRmv);\n\t\t\t\t\tif ($h[0].sortDisabled) {\n\t\t\t\t\t\t// no sort arrows for disabled columns!\n\t\t\t\t\t\t$icon.removeClass(themes.icons || '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\thdr = themes.sortNone;\n\t\t\t\t\t\ticon = themes.iconSortNone;\n\t\t\t\t\t\tif ($h.hasClass(ts.css.sortAsc)) {\n\t\t\t\t\t\t\thdr = [ themes.sortAsc, themes.active ].join(' ');\n\t\t\t\t\t\t\ticon = themes.iconSortAsc;\n\t\t\t\t\t\t} else if ($h.hasClass(ts.css.sortDesc)) {\n\t\t\t\t\t\t\thdr = [ themes.sortDesc, themes.active ].join(' ');\n\t\t\t\t\t\t\ticon = themes.iconSortDesc;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$header.addClass(hdr);\n\t\t\t\t\t\t$icon.addClass(icon || '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (debug) {\n\t\t\t\tconsole.log('uitheme >> Applied ' + theme + ' theme' + ts.benchmark(time));\n\t\t\t}\n\t\t},\n\t\tremove: function(table, c, wo, refreshing) {\n\t\t\tif (!wo.uitheme_applied) { return; }\n\t\t\tvar $table = c.$table,\n\t\t\t\ttheme = c.appliedTheme || 'jui',\n\t\t\t\tthemes = ts.themes[ theme ] || ts.themes.jui,\n\t\t\t\t$headers = $table.children('thead').children(),\n\t\t\t\tremove = themes.sortNone + ' ' + themes.sortDesc + ' ' + themes.sortAsc,\n\t\t\t\ticonRmv = themes.iconSortNone + ' ' + themes.iconSortDesc + ' ' + themes.iconSortAsc;\n\t\t\t$table.removeClass('tablesorter-' + theme + ' ' + themes.table);\n\t\t\two.uitheme_applied = false;\n\t\t\tif (refreshing) { return; }\n\t\t\t$table.find(ts.css.header).removeClass(themes.header);\n\t\t\t$headers\n\t\t\t\t.unbind('mouseenter.tsuitheme mouseleave.tsuitheme') // remove hover\n\t\t\t\t.removeClass(themes.hover + ' ' + remove + ' ' + themes.active)\n\t\t\t\t.filter('.' + ts.css.filterRow)\n\t\t\t\t.removeClass(themes.filterRow);\n\t\t\t$headers.find('.' + ts.css.icon).removeClass(themes.icons + ' ' + iconRmv);\n\t\t}\n\t});\n\n})(jQuery);\n\n/*! Widget: columns - updated 5/24/2017 (v2.28.11) */\n;(function ($) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\tts.addWidget({\n\t\tid: 'columns',\n\t\tpriority: 65,\n\t\toptions : {\n\t\t\tcolumns : [ 'primary', 'secondary', 'tertiary' ]\n\t\t},\n\t\tformat: function(table, c, wo) {\n\t\t\tvar $tbody, tbodyIndex, $rows, rows, $row, $cells, remove, indx,\n\t\t\t$table = c.$table,\n\t\t\t$tbodies = c.$tbodies,\n\t\t\tsortList = c.sortList,\n\t\t\tlen = sortList.length,\n\t\t\t// removed c.widgetColumns support\n\t\t\tcss = wo && wo.columns || [ 'primary', 'secondary', 'tertiary' ],\n\t\t\tlast = css.length - 1;\n\t\t\tremove = css.join(' ');\n\t\t\t// check if there is a sort (on initialization there may not be one)\n\t\t\tfor (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // detach tbody\n\t\t\t\t$rows = $tbody.children('tr');\n\t\t\t\t// loop through the visible rows\n\t\t\t\t$rows.each(function() {\n\t\t\t\t\t$row = $(this);\n\t\t\t\t\tif (this.style.display !== 'none') {\n\t\t\t\t\t\t// remove all columns class names\n\t\t\t\t\t\t$cells = $row.children().removeClass(remove);\n\t\t\t\t\t\t// add appropriate column class names\n\t\t\t\t\t\tif (sortList && sortList[0]) {\n\t\t\t\t\t\t\t// primary sort column class\n\t\t\t\t\t\t\t$cells.eq(sortList[0][0]).addClass(css[0]);\n\t\t\t\t\t\t\tif (len > 1) {\n\t\t\t\t\t\t\t\tfor (indx = 1; indx < len; indx++) {\n\t\t\t\t\t\t\t\t\t// secondary, tertiary, etc sort column classes\n\t\t\t\t\t\t\t\t\t$cells.eq(sortList[indx][0]).addClass( css[indx] || css[last] );\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\t\t\t\tts.processTbody(table, $tbody, false);\n\t\t\t}\n\t\t\t// add classes to thead and tfoot\n\t\t\trows = wo.columns_thead !== false ? [ 'thead tr' ] : [];\n\t\t\tif (wo.columns_tfoot !== false) {\n\t\t\t\trows.push('tfoot tr');\n\t\t\t}\n\t\t\tif (rows.length) {\n\t\t\t\t$rows = $table.find( rows.join(',') ).children().removeClass(remove);\n\t\t\t\tif (len) {\n\t\t\t\t\tfor (indx = 0; indx < len; indx++) {\n\t\t\t\t\t\t// add primary. secondary, tertiary, etc sort column classes\n\t\t\t\t\t\t$rows.filter('[data-column=\"' + sortList[indx][0] + '\"]').addClass(css[indx] || css[last]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremove: function(table, c, wo) {\n\t\t\tvar tbodyIndex, $tbody,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\tremove = (wo.columns || [ 'primary', 'secondary', 'tertiary' ]).join(' ');\n\t\t\tc.$headers.removeClass(remove);\n\t\t\tc.$table.children('tfoot').children('tr').children('th, td').removeClass(remove);\n\t\t\tfor (tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody(table, $tbodies.eq(tbodyIndex), true); // remove tbody\n\t\t\t\t$tbody.children('tr').each(function() {\n\t\t\t\t\t$(this).children().removeClass(remove);\n\t\t\t\t});\n\t\t\t\tts.processTbody(table, $tbody, false); // restore tbody\n\t\t\t}\n\t\t}\n\t});\n\n})(jQuery);\n\n/*! Widget: filter - updated 2018-03-18 (v2.30.0) *//*\n * Requires tablesorter v2.8+ and jQuery 1.7+\n * by Rob Garrison\n */\n;( function ( $ ) {\n\t'use strict';\n\tvar tsf, tsfRegex,\n\t\tts = $.tablesorter || {},\n\t\ttscss = ts.css,\n\t\ttskeyCodes = ts.keyCodes;\n\n\t$.extend( tscss, {\n\t\tfilterRow      : 'tablesorter-filter-row',\n\t\tfilter         : 'tablesorter-filter',\n\t\tfilterDisabled : 'disabled',\n\t\tfilterRowHide  : 'hideme'\n\t});\n\n\t$.extend( tskeyCodes, {\n\t\tbackSpace : 8,\n\t\tescape : 27,\n\t\tspace : 32,\n\t\tleft : 37,\n\t\tdown : 40\n\t});\n\n\tts.addWidget({\n\t\tid: 'filter',\n\t\tpriority: 50,\n\t\toptions : {\n\t\t\tfilter_cellFilter    : '',    // css class name added to the filter cell ( string or array )\n\t\t\tfilter_childRows     : false, // if true, filter includes child row content in the search\n\t\t\tfilter_childByColumn : false, // ( filter_childRows must be true ) if true = search child rows by column; false = search all child row text grouped\n\t\t\tfilter_childWithSibs : true,  // if true, include matching child row siblings\n\t\t\tfilter_columnAnyMatch: true,  // if true, allows using '#:{query}' in AnyMatch searches ( column:query )\n\t\t\tfilter_columnFilters : true,  // if true, a filter will be added to the top of each table column\n\t\t\tfilter_cssFilter     : '',    // css class name added to the filter row & each input in the row ( tablesorter-filter is ALWAYS added )\n\t\t\tfilter_defaultAttrib : 'data-value', // data attribute in the header cell that contains the default filter value\n\t\t\tfilter_defaultFilter : {},    // add a default column filter type '~{query}' to make fuzzy searches default; '{q1} AND {q2}' to make all searches use a logical AND.\n\t\t\tfilter_excludeFilter : {},    // filters to exclude, per column\n\t\t\tfilter_external      : '',    // jQuery selector string ( or jQuery object ) of external filters\n\t\t\tfilter_filteredRow   : 'filtered', // class added to filtered rows; define in css with \"display:none\" to hide the filtered-out rows\n\t\t\tfilter_filterLabel   : 'Filter \"{{label}}\" column by...', // Aria-label added to filter input/select; see #1495\n\t\t\tfilter_formatter     : null,  // add custom filter elements to the filter row\n\t\t\tfilter_functions     : null,  // add custom filter functions using this option\n\t\t\tfilter_hideEmpty     : true,  // hide filter row when table is empty\n\t\t\tfilter_hideFilters   : false, // collapse filter row when mouse leaves the area\n\t\t\tfilter_ignoreCase    : true,  // if true, make all searches case-insensitive\n\t\t\tfilter_liveSearch    : true,  // if true, search column content while the user types ( with a delay )\n\t\t\tfilter_matchType     : { 'input': 'exact', 'select': 'exact' }, // global query settings ('exact' or 'match'); overridden by \"filter-match\" or \"filter-exact\" class\n\t\t\tfilter_onlyAvail     : 'filter-onlyAvail', // a header with a select dropdown & this class name will only show available ( visible ) options within the drop down\n\t\t\tfilter_placeholder   : { search : '', select : '' }, // default placeholder text ( overridden by any header 'data-placeholder' setting )\n\t\t\tfilter_reset         : null,  // jQuery selector string of an element used to reset the filters\n\t\t\tfilter_resetOnEsc    : true,  // Reset filter input when the user presses escape - normalized across browsers\n\t\t\tfilter_saveFilters   : false, // Use the $.tablesorter.storage utility to save the most recent filters\n\t\t\tfilter_searchDelay   : 300,   // typing delay in milliseconds before starting a search\n\t\t\tfilter_searchFiltered: true,  // allow searching through already filtered rows in special circumstances; will speed up searching in large tables if true\n\t\t\tfilter_selectSource  : null,  // include a function to return an array of values to be added to the column filter select\n\t\t\tfilter_selectSourceSeparator : '|', // filter_selectSource array text left of the separator is added to the option value, right into the option text\n\t\t\tfilter_serversideFiltering : false, // if true, must perform server-side filtering b/c client-side filtering is disabled, but the ui and events will still be used.\n\t\t\tfilter_startsWith    : false, // if true, filter start from the beginning of the cell contents\n\t\t\tfilter_useParsedData : false  // filter all data using parsed content\n\t\t},\n\t\tformat: function( table, c, wo ) {\n\t\t\tif ( !c.$table.hasClass( 'hasFilters' ) ) {\n\t\t\t\ttsf.init( table, c, wo );\n\t\t\t}\n\t\t},\n\t\tremove: function( table, c, wo, refreshing ) {\n\t\t\tvar tbodyIndex, $tbody,\n\t\t\t\t$table = c.$table,\n\t\t\t\t$tbodies = c.$tbodies,\n\t\t\t\tevents = (\n\t\t\t\t\t'addRows updateCell update updateRows updateComplete appendCache filterReset ' +\n\t\t\t\t\t'filterAndSortReset filterFomatterUpdate filterEnd search stickyHeadersInit '\n\t\t\t\t).split( ' ' ).join( c.namespace + 'filter ' );\n\t\t\t$table\n\t\t\t\t.removeClass( 'hasFilters' )\n\t\t\t\t// add filter namespace to all BUT search\n\t\t\t\t.unbind( events.replace( ts.regex.spaces, ' ' ) )\n\t\t\t\t// remove the filter row even if refreshing, because the column might have been moved\n\t\t\t\t.find( '.' + tscss.filterRow ).remove();\n\t\t\two.filter_initialized = false;\n\t\t\tif ( refreshing ) { return; }\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < $tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody( table, $tbodies.eq( tbodyIndex ), true ); // remove tbody\n\t\t\t\t$tbody.children().removeClass( wo.filter_filteredRow ).show();\n\t\t\t\tts.processTbody( table, $tbody, false ); // restore tbody\n\t\t\t}\n\t\t\tif ( wo.filter_reset ) {\n\t\t\t\t$( document ).undelegate( wo.filter_reset, 'click' + c.namespace + 'filter' );\n\t\t\t}\n\t\t}\n\t});\n\n\ttsf = ts.filter = {\n\n\t\t// regex used in filter 'check' functions - not for general use and not documented\n\t\tregex: {\n\t\t\tregex     : /^\\/((?:\\\\\\/|[^\\/])+)\\/([migyu]{0,5})?$/, // regex to test for regex\n\t\t\tchild     : /tablesorter-childRow/, // child row class name; this gets updated in the script\n\t\t\tfiltered  : /filtered/, // filtered (hidden) row class name; updated in the script\n\t\t\ttype      : /undefined|number/, // check type\n\t\t\texact     : /(^[\\\"\\'=]+)|([\\\"\\'=]+$)/g, // exact match (allow '==')\n\t\t\toperators : /[<>=]/g, // replace operators\n\t\t\tquery     : '(q|query)', // replace filter queries\n\t\t\twild01    : /\\?/g, // wild card match 0 or 1\n\t\t\twild0More : /\\*/g, // wild care match 0 or more\n\t\t\tquote     : /\\\"/g,\n\t\t\tisNeg1    : /(>=?\\s*-\\d)/,\n\t\t\tisNeg2    : /(<=?\\s*\\d)/\n\t\t},\n\t\t// function( c, data ) { }\n\t\t// c = table.config\n\t\t// data.$row = jQuery object of the row currently being processed\n\t\t// data.$cells = jQuery object of all cells within the current row\n\t\t// data.filters = array of filters for all columns ( some may be undefined )\n\t\t// data.filter = filter for the current column\n\t\t// data.iFilter = same as data.filter, except lowercase ( if wo.filter_ignoreCase is true )\n\t\t// data.exact = table cell text ( or parsed data if column parser enabled; may be a number & not a string )\n\t\t// data.iExact = same as data.exact, except lowercase ( if wo.filter_ignoreCase is true; may be a number & not a string )\n\t\t// data.cache = table cell text from cache, so it has been parsed ( & in all lower case if c.ignoreCase is true )\n\t\t// data.cacheArray = An array of parsed content from each table cell in the row being processed\n\t\t// data.index = column index; table = table element ( DOM )\n\t\t// data.parsed = array ( by column ) of boolean values ( from filter_useParsedData or 'filter-parsed' class )\n\t\ttypes: {\n\t\t\tor : function( c, data, vars ) {\n\t\t\t\t// look for \"|\", but not if it is inside of a regular expression\n\t\t\t\tif ( ( tsfRegex.orTest.test( data.iFilter ) || tsfRegex.orSplit.test( data.filter ) ) &&\n\t\t\t\t\t// this test for regex has potential to slow down the overall search\n\t\t\t\t\t!tsfRegex.regex.test( data.filter ) ) {\n\t\t\t\t\tvar indx, filterMatched, query, regex,\n\t\t\t\t\t\t// duplicate data but split filter\n\t\t\t\t\t\tdata2 = $.extend( {}, data ),\n\t\t\t\t\t\tfilter = data.filter.split( tsfRegex.orSplit ),\n\t\t\t\t\t\tiFilter = data.iFilter.split( tsfRegex.orSplit ),\n\t\t\t\t\t\tlen = filter.length;\n\t\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\t\tdata2.nestedFilters = true;\n\t\t\t\t\t\tdata2.filter = '' + ( tsf.parseFilter( c, filter[ indx ], data ) || '' );\n\t\t\t\t\t\tdata2.iFilter = '' + ( tsf.parseFilter( c, iFilter[ indx ], data ) || '' );\n\t\t\t\t\t\tquery = '(' + ( tsf.parseFilter( c, data2.filter, data ) || '' ) + ')';\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// use try/catch, because query may not be a valid regex if \"|\" is contained within a partial regex search,\n\t\t\t\t\t\t\t// e.g \"/(Alex|Aar\" -> Uncaught SyntaxError: Invalid regular expression: /(/(Alex)/: Unterminated group\n\t\t\t\t\t\t\tregex = new RegExp( data.isMatch ? query : '^' + query + '$', c.widgetOptions.filter_ignoreCase ? 'i' : '' );\n\t\t\t\t\t\t\t// filterMatched = data2.filter === '' && indx > 0 ? true\n\t\t\t\t\t\t\t// look for an exact match with the 'or' unless the 'filter-match' class is found\n\t\t\t\t\t\t\tfilterMatched = regex.test( data2.exact ) || tsf.processTypes( c, data2, vars );\n\t\t\t\t\t\t\tif ( filterMatched ) {\n\t\t\t\t\t\t\t\treturn filterMatched;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// may be null from processing types\n\t\t\t\t\treturn filterMatched || false;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for an AND or && operator ( logical and )\n\t\t\tand : function( c, data, vars ) {\n\t\t\t\tif ( tsfRegex.andTest.test( data.filter ) ) {\n\t\t\t\t\tvar indx, filterMatched, result, query, regex,\n\t\t\t\t\t\t// duplicate data but split filter\n\t\t\t\t\t\tdata2 = $.extend( {}, data ),\n\t\t\t\t\t\tfilter = data.filter.split( tsfRegex.andSplit ),\n\t\t\t\t\t\tiFilter = data.iFilter.split( tsfRegex.andSplit ),\n\t\t\t\t\t\tlen = filter.length;\n\t\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\t\tdata2.nestedFilters = true;\n\t\t\t\t\t\tdata2.filter = '' + ( tsf.parseFilter( c, filter[ indx ], data ) || '' );\n\t\t\t\t\t\tdata2.iFilter = '' + ( tsf.parseFilter( c, iFilter[ indx ], data ) || '' );\n\t\t\t\t\t\tquery = ( '(' + ( tsf.parseFilter( c, data2.filter, data ) || '' ) + ')' )\n\t\t\t\t\t\t\t// replace wild cards since /(a*)/i will match anything\n\t\t\t\t\t\t\t.replace( tsfRegex.wild01, '\\\\S{1}' ).replace( tsfRegex.wild0More, '\\\\S*' );\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// use try/catch just in case RegExp is invalid\n\t\t\t\t\t\t\tregex = new RegExp( data.isMatch ? query : '^' + query + '$', c.widgetOptions.filter_ignoreCase ? 'i' : '' );\n\t\t\t\t\t\t\t// look for an exact match with the 'and' unless the 'filter-match' class is found\n\t\t\t\t\t\t\tresult = ( regex.test( data2.exact ) || tsf.processTypes( c, data2, vars ) );\n\t\t\t\t\t\t\tif ( indx === 0 ) {\n\t\t\t\t\t\t\t\tfilterMatched = result;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfilterMatched = filterMatched && result;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// may be null from processing types\n\t\t\t\t\treturn filterMatched || false;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for regex\n\t\t\tregex: function( c, data ) {\n\t\t\t\tif ( tsfRegex.regex.test( data.filter ) ) {\n\t\t\t\t\tvar matches,\n\t\t\t\t\t\t// cache regex per column for optimal speed\n\t\t\t\t\t\tregex = data.filter_regexCache[ data.index ] || tsfRegex.regex.exec( data.filter ),\n\t\t\t\t\t\tisRegex = regex instanceof RegExp;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif ( !isRegex ) {\n\t\t\t\t\t\t\t// force case insensitive search if ignoreCase option set?\n\t\t\t\t\t\t\t// if ( c.ignoreCase && !regex[2] ) { regex[2] = 'i'; }\n\t\t\t\t\t\t\tdata.filter_regexCache[ data.index ] = regex = new RegExp( regex[1], regex[2] );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatches = regex.test( data.exact );\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\tmatches = false;\n\t\t\t\t\t}\n\t\t\t\t\treturn matches;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for operators >, >=, < or <=\n\t\t\toperators: function( c, data ) {\n\t\t\t\t// ignore empty strings... because '' < 10 is true\n\t\t\t\tif ( tsfRegex.operTest.test( data.iFilter ) && data.iExact !== '' ) {\n\t\t\t\t\tvar cachedValue, result, txt,\n\t\t\t\t\t\ttable = c.table,\n\t\t\t\t\t\tparsed = data.parsed[ data.index ],\n\t\t\t\t\t\tquery = ts.formatFloat( data.iFilter.replace( tsfRegex.operators, '' ), table ),\n\t\t\t\t\t\tparser = c.parsers[ data.index ] || {},\n\t\t\t\t\t\tsavedSearch = query;\n\t\t\t\t\t// parse filter value in case we're comparing numbers ( dates )\n\t\t\t\t\tif ( parsed || parser.type === 'numeric' ) {\n\t\t\t\t\t\ttxt = $.trim( '' + data.iFilter.replace( tsfRegex.operators, '' ) );\n\t\t\t\t\t\tresult = tsf.parseFilter( c, txt, data, true );\n\t\t\t\t\t\tquery = ( typeof result === 'number' && result !== '' && !isNaN( result ) ) ? result : query;\n\t\t\t\t\t}\n\t\t\t\t\t// iExact may be numeric - see issue #149;\n\t\t\t\t\t// check if cached is defined, because sometimes j goes out of range? ( numeric columns )\n\t\t\t\t\tif ( ( parsed || parser.type === 'numeric' ) && !isNaN( query ) &&\n\t\t\t\t\t\ttypeof data.cache !== 'undefined' ) {\n\t\t\t\t\t\tcachedValue = data.cache;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttxt = isNaN( data.iExact ) ? data.iExact.replace( ts.regex.nondigit, '' ) : data.iExact;\n\t\t\t\t\t\tcachedValue = ts.formatFloat( txt, table );\n\t\t\t\t\t}\n\t\t\t\t\tif ( tsfRegex.gtTest.test( data.iFilter ) ) {\n\t\t\t\t\t\tresult = tsfRegex.gteTest.test( data.iFilter ) ? cachedValue >= query : cachedValue > query;\n\t\t\t\t\t} else if ( tsfRegex.ltTest.test( data.iFilter ) ) {\n\t\t\t\t\t\tresult = tsfRegex.lteTest.test( data.iFilter ) ? cachedValue <= query : cachedValue < query;\n\t\t\t\t\t}\n\t\t\t\t\t// keep showing all rows if nothing follows the operator\n\t\t\t\t\tif ( !result && savedSearch === '' ) {\n\t\t\t\t\t\tresult = true;\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for a not match\n\t\t\tnotMatch: function( c, data ) {\n\t\t\t\tif ( tsfRegex.notTest.test( data.iFilter ) ) {\n\t\t\t\t\tvar indx,\n\t\t\t\t\t\ttxt = data.iFilter.replace( '!', '' ),\n\t\t\t\t\t\tfilter = tsf.parseFilter( c, txt, data ) || '';\n\t\t\t\t\tif ( tsfRegex.exact.test( filter ) ) {\n\t\t\t\t\t\t// look for exact not matches - see #628\n\t\t\t\t\t\tfilter = filter.replace( tsfRegex.exact, '' );\n\t\t\t\t\t\treturn filter === '' ? true : $.trim( filter ) !== data.iExact;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tindx = data.iExact.search( $.trim( filter ) );\n\t\t\t\t\t\treturn filter === '' ? true :\n\t\t\t\t\t\t\t// return true if not found\n\t\t\t\t\t\t\tdata.anyMatch ? indx < 0 :\n\t\t\t\t\t\t\t// return false if found\n\t\t\t\t\t\t\t!( c.widgetOptions.filter_startsWith ? indx === 0 : indx >= 0 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for quotes or equals to get an exact match; ignore type since iExact could be numeric\n\t\t\texact: function( c, data ) {\n\t\t\t\t/*jshint eqeqeq:false */\n\t\t\t\tif ( tsfRegex.exact.test( data.iFilter ) ) {\n\t\t\t\t\tvar txt = data.iFilter.replace( tsfRegex.exact, '' ),\n\t\t\t\t\t\tfilter = tsf.parseFilter( c, txt, data ) || '';\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\treturn data.anyMatch ? $.inArray( filter, data.rowArray ) >= 0 : filter == data.iExact;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for a range ( using ' to ' or ' - ' ) - see issue #166; thanks matzhu!\n\t\t\trange : function( c, data ) {\n\t\t\t\tif ( tsfRegex.toTest.test( data.iFilter ) ) {\n\t\t\t\t\tvar result, tmp, range1, range2,\n\t\t\t\t\t\ttable = c.table,\n\t\t\t\t\t\tindex = data.index,\n\t\t\t\t\t\tparsed = data.parsed[index],\n\t\t\t\t\t\t// make sure the dash is for a range and not indicating a negative number\n\t\t\t\t\t\tquery = data.iFilter.split( tsfRegex.toSplit );\n\n\t\t\t\t\ttmp = query[0].replace( ts.regex.nondigit, '' ) || '';\n\t\t\t\t\trange1 = ts.formatFloat( tsf.parseFilter( c, tmp, data ), table );\n\t\t\t\t\ttmp = query[1].replace( ts.regex.nondigit, '' ) || '';\n\t\t\t\t\trange2 = ts.formatFloat( tsf.parseFilter( c, tmp, data ), table );\n\t\t\t\t\t// parse filter value in case we're comparing numbers ( dates )\n\t\t\t\t\tif ( parsed || c.parsers[ index ].type === 'numeric' ) {\n\t\t\t\t\t\tresult = c.parsers[ index ].format( '' + query[0], table, c.$headers.eq( index ), index );\n\t\t\t\t\t\trange1 = ( result !== '' && !isNaN( result ) ) ? result : range1;\n\t\t\t\t\t\tresult = c.parsers[ index ].format( '' + query[1], table, c.$headers.eq( index ), index );\n\t\t\t\t\t\trange2 = ( result !== '' && !isNaN( result ) ) ? result : range2;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ( parsed || c.parsers[ index ].type === 'numeric' ) && !isNaN( range1 ) && !isNaN( range2 ) ) {\n\t\t\t\t\t\tresult = data.cache;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttmp = isNaN( data.iExact ) ? data.iExact.replace( ts.regex.nondigit, '' ) : data.iExact;\n\t\t\t\t\t\tresult = ts.formatFloat( tmp, table );\n\t\t\t\t\t}\n\t\t\t\t\tif ( range1 > range2 ) {\n\t\t\t\t\t\ttmp = range1; range1 = range2; range2 = tmp; // swap\n\t\t\t\t\t}\n\t\t\t\t\treturn ( result >= range1 && result <= range2 ) || ( range1 === '' || range2 === '' );\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// Look for wild card: ? = single, * = multiple, or | = logical OR\n\t\t\twild : function( c, data ) {\n\t\t\t\tif ( tsfRegex.wildOrTest.test( data.iFilter ) ) {\n\t\t\t\t\tvar query = '' + ( tsf.parseFilter( c, data.iFilter, data ) || '' );\n\t\t\t\t\t// look for an exact match with the 'or' unless the 'filter-match' class is found\n\t\t\t\t\tif ( !tsfRegex.wildTest.test( query ) && data.nestedFilters ) {\n\t\t\t\t\t\tquery = data.isMatch ? query : '^(' + query + ')$';\n\t\t\t\t\t}\n\t\t\t\t\t// parsing the filter may not work properly when using wildcards =/\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn new RegExp(\n\t\t\t\t\t\t\tquery.replace( tsfRegex.wild01, '\\\\S{1}' ).replace( tsfRegex.wild0More, '\\\\S*' ),\n\t\t\t\t\t\t\tc.widgetOptions.filter_ignoreCase ? 'i' : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.test( data.exact );\n\t\t\t\t\t} catch ( error ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\t// fuzzy text search; modified from https://github.com/mattyork/fuzzy ( MIT license )\n\t\t\tfuzzy: function( c, data ) {\n\t\t\t\tif ( tsfRegex.fuzzyTest.test( data.iFilter ) ) {\n\t\t\t\t\tvar indx,\n\t\t\t\t\t\tpatternIndx = 0,\n\t\t\t\t\t\tlen = data.iExact.length,\n\t\t\t\t\t\ttxt = data.iFilter.slice( 1 ),\n\t\t\t\t\t\tpattern = tsf.parseFilter( c, txt, data ) || '';\n\t\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\t\tif ( data.iExact[ indx ] === pattern[ patternIndx ] ) {\n\t\t\t\t\t\t\tpatternIndx += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn patternIndx === pattern.length;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\tinit: function( table ) {\n\t\t\t// filter language options\n\t\t\tts.language = $.extend( true, {}, {\n\t\t\t\tto  : 'to',\n\t\t\t\tor  : 'or',\n\t\t\t\tand : 'and'\n\t\t\t}, ts.language );\n\n\t\t\tvar options, string, txt, $header, column, val, fxn, noSelect,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tprocessStr = function(prefix, str, suffix) {\n\t\t\t\t\tstr = str.trim();\n\t\t\t\t\t// don't include prefix/suffix if str is empty\n\t\t\t\t\treturn str === '' ? '' : (prefix || '') + str + (suffix || '');\n\t\t\t\t};\n\t\t\tc.$table.addClass( 'hasFilters' );\n\t\t\tc.lastSearch = [];\n\n\t\t\t// define timers so using clearTimeout won't cause an undefined error\n\t\t\two.filter_searchTimer = null;\n\t\t\two.filter_initTimer = null;\n\t\t\two.filter_formatterCount = 0;\n\t\t\two.filter_formatterInit = [];\n\t\t\two.filter_anyColumnSelector = '[data-column=\"all\"],[data-column=\"any\"]';\n\t\t\two.filter_multipleColumnSelector = '[data-column*=\"-\"],[data-column*=\",\"]';\n\n\t\t\tval = '\\\\{' + tsfRegex.query + '\\\\}';\n\t\t\t$.extend( tsfRegex, {\n\t\t\t\tchild : new RegExp( c.cssChildRow ),\n\t\t\t\tfiltered : new RegExp( wo.filter_filteredRow ),\n\t\t\t\talreadyFiltered : new RegExp( '(\\\\s+(-' + processStr('|', ts.language.or) + processStr('|', ts.language.to) + ')\\\\s+)', 'i' ),\n\t\t\t\ttoTest : new RegExp( '\\\\s+(-' + processStr('|', ts.language.to) + ')\\\\s+', 'i' ),\n\t\t\t\ttoSplit : new RegExp( '(?:\\\\s+(?:-' + processStr('|', ts.language.to) + ')\\\\s+)', 'gi' ),\n\t\t\t\tandTest : new RegExp( '\\\\s+(' + processStr('', ts.language.and, '|') + '&&)\\\\s+', 'i' ),\n\t\t\t\tandSplit : new RegExp( '(?:\\\\s+(?:' + processStr('', ts.language.and, '|') + '&&)\\\\s+)', 'gi' ),\n\t\t\t\torTest : new RegExp( '(\\\\|' + processStr('|\\\\s+', ts.language.or, '\\\\s+') + ')', 'i' ),\n\t\t\t\torSplit : new RegExp( '(?:\\\\|' + processStr('|\\\\s+(?:', ts.language.or, ')\\\\s+') + ')', 'gi' ),\n\t\t\t\tiQuery : new RegExp( val, 'i' ),\n\t\t\t\tigQuery : new RegExp( val, 'ig' ),\n\t\t\t\toperTest : /^[<>]=?/,\n\t\t\t\tgtTest  : />/,\n\t\t\t\tgteTest : />=/,\n\t\t\t\tltTest  : /</,\n\t\t\t\tlteTest : /<=/,\n\t\t\t\tnotTest : /^\\!/,\n\t\t\t\twildOrTest : /[\\?\\*\\|]/,\n\t\t\t\twildTest : /\\?\\*/,\n\t\t\t\tfuzzyTest : /^~/,\n\t\t\t\texactTest : /[=\\\"\\|!]/\n\t\t\t});\n\n\t\t\t// don't build filter row if columnFilters is false or all columns are set to 'filter-false'\n\t\t\t// see issue #156\n\t\t\tval = c.$headers.filter( '.filter-false, .parser-false' ).length;\n\t\t\tif ( wo.filter_columnFilters !== false && val !== c.$headers.length ) {\n\t\t\t\t// build filter row\n\t\t\t\ttsf.buildRow( table, c, wo );\n\t\t\t}\n\n\t\t\ttxt = 'addRows updateCell update updateRows updateComplete appendCache filterReset ' +\n\t\t\t\t'filterAndSortReset filterResetSaved filterEnd search '.split( ' ' ).join( c.namespace + 'filter ' );\n\t\t\tc.$table.bind( txt, function( event, filter ) {\n\t\t\t\tval = wo.filter_hideEmpty &&\n\t\t\t\t\t$.isEmptyObject( c.cache ) &&\n\t\t\t\t\t!( c.delayInit && event.type === 'appendCache' );\n\t\t\t\t// hide filter row using the 'filtered' class name\n\t\t\t\tc.$table.find( '.' + tscss.filterRow ).toggleClass( wo.filter_filteredRow, val ); // fixes #450\n\t\t\t\tif ( !/(search|filter)/.test( event.type ) ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\ttsf.buildDefault( table, true );\n\t\t\t\t}\n\t\t\t\t// Add filterAndSortReset - see #1361\n\t\t\t\tif ( event.type === 'filterReset' || event.type === 'filterAndSortReset' ) {\n\t\t\t\t\tc.$table.find( '.' + tscss.filter ).add( wo.filter_$externalFilters ).val( '' );\n\t\t\t\t\tif ( event.type === 'filterAndSortReset' ) {\n\t\t\t\t\t\tts.sortReset( this.config, function() {\n\t\t\t\t\t\t\ttsf.searching( table, [] );\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttsf.searching( table, [] );\n\t\t\t\t\t}\n\t\t\t\t} else if ( event.type === 'filterResetSaved' ) {\n\t\t\t\t\tts.storage( table, 'tablesorter-filters', '' );\n\t\t\t\t} else if ( event.type === 'filterEnd' ) {\n\t\t\t\t\ttsf.buildDefault( table, true );\n\t\t\t\t} else {\n\t\t\t\t\t// send false argument to force a new search; otherwise if the filter hasn't changed,\n\t\t\t\t\t// it will return\n\t\t\t\t\tfilter = event.type === 'search' ? filter :\n\t\t\t\t\t\tevent.type === 'updateComplete' ? c.$table.data( 'lastSearch' ) : '';\n\t\t\t\t\tif ( /(update|add)/.test( event.type ) && event.type !== 'updateComplete' ) {\n\t\t\t\t\t\t// force a new search since content has changed\n\t\t\t\t\t\tc.lastCombinedFilter = null;\n\t\t\t\t\t\tc.lastSearch = [];\n\t\t\t\t\t\t// update filterFormatters after update (& small delay) - Fixes #1237\n\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\tc.$table.triggerHandler( 'filterFomatterUpdate' );\n\t\t\t\t\t\t}, 100);\n\t\t\t\t\t}\n\t\t\t\t\t// pass true ( skipFirst ) to prevent the tablesorter.setFilters function from skipping the first\n\t\t\t\t\t// input ensures all inputs are updated when a search is triggered on the table\n\t\t\t\t\t// $( 'table' ).trigger( 'search', [...] );\n\t\t\t\t\ttsf.searching( table, filter, true );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t// reset button/link\n\t\t\tif ( wo.filter_reset ) {\n\t\t\t\tif ( wo.filter_reset instanceof $ ) {\n\t\t\t\t\t// reset contains a jQuery object, bind to it\n\t\t\t\t\two.filter_reset.click( function() {\n\t\t\t\t\t\tc.$table.triggerHandler( 'filterReset' );\n\t\t\t\t\t});\n\t\t\t\t} else if ( $( wo.filter_reset ).length ) {\n\t\t\t\t\t// reset is a jQuery selector, use event delegation\n\t\t\t\t\t$( document )\n\t\t\t\t\t\t.undelegate( wo.filter_reset, 'click' + c.namespace + 'filter' )\n\t\t\t\t\t\t.delegate( wo.filter_reset, 'click' + c.namespace + 'filter', function() {\n\t\t\t\t\t\t\t// trigger a reset event, so other functions ( filter_formatter ) know when to reset\n\t\t\t\t\t\t\tc.$table.triggerHandler( 'filterReset' );\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( wo.filter_functions ) {\n\t\t\t\tfor ( column = 0; column < c.columns; column++ ) {\n\t\t\t\t\tfxn = ts.getColumnData( table, wo.filter_functions, column );\n\t\t\t\t\tif ( fxn ) {\n\t\t\t\t\t\t// remove 'filter-select' from header otherwise the options added here are replaced with\n\t\t\t\t\t\t// all options\n\t\t\t\t\t\t$header = c.$headerIndexed[ column ].removeClass( 'filter-select' );\n\t\t\t\t\t\t// don't build select if 'filter-false' or 'parser-false' set\n\t\t\t\t\t\tnoSelect = !( $header.hasClass( 'filter-false' ) || $header.hasClass( 'parser-false' ) );\n\t\t\t\t\t\toptions = '';\n\t\t\t\t\t\tif ( fxn === true && noSelect ) {\n\t\t\t\t\t\t\ttsf.buildSelect( table, column );\n\t\t\t\t\t\t} else if ( typeof fxn === 'object' && noSelect ) {\n\t\t\t\t\t\t\t// add custom drop down list\n\t\t\t\t\t\t\tfor ( string in fxn ) {\n\t\t\t\t\t\t\t\tif ( typeof string === 'string' ) {\n\t\t\t\t\t\t\t\t\toptions += options === '' ?\n\t\t\t\t\t\t\t\t\t\t'<option value=\"\">' +\n\t\t\t\t\t\t\t\t\t\t\t( $header.data( 'placeholder' ) ||\n\t\t\t\t\t\t\t\t\t\t\t\t$header.attr( 'data-placeholder' ) ||\n\t\t\t\t\t\t\t\t\t\t\t\two.filter_placeholder.select ||\n\t\t\t\t\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t\t\t\t) +\n\t\t\t\t\t\t\t\t\t\t'</option>' : '';\n\t\t\t\t\t\t\t\t\tval = string;\n\t\t\t\t\t\t\t\t\ttxt = string;\n\t\t\t\t\t\t\t\t\tif ( string.indexOf( wo.filter_selectSourceSeparator ) >= 0 ) {\n\t\t\t\t\t\t\t\t\t\tval = string.split( wo.filter_selectSourceSeparator );\n\t\t\t\t\t\t\t\t\t\ttxt = val[1];\n\t\t\t\t\t\t\t\t\t\tval = val[0];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\toptions += '<option ' +\n\t\t\t\t\t\t\t\t\t\t( txt === val ? '' : 'data-function-name=\"' + string + '\" ' ) +\n\t\t\t\t\t\t\t\t\t\t'value=\"' + val + '\">' + txt + '</option>';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tc.$table\n\t\t\t\t\t\t\t\t.find( 'thead' )\n\t\t\t\t\t\t\t\t.find( 'select.' + tscss.filter + '[data-column=\"' + column + '\"]' )\n\t\t\t\t\t\t\t\t.append( options );\n\t\t\t\t\t\t\ttxt = wo.filter_selectSource;\n\t\t\t\t\t\t\tfxn = typeof txt === 'function' ? true : ts.getColumnData( table, txt, column );\n\t\t\t\t\t\t\tif ( fxn ) {\n\t\t\t\t\t\t\t\t// updating so the extra options are appended\n\t\t\t\t\t\t\t\ttsf.buildSelect( c.table, column, '', true, $header.hasClass( wo.filter_onlyAvail ) );\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// not really updating, but if the column has both the 'filter-select' class &\n\t\t\t// filter_functions set to true, it would append the same options twice.\n\t\t\ttsf.buildDefault( table, true );\n\n\t\t\ttsf.bindSearch( table, c.$table.find( '.' + tscss.filter ), true );\n\t\t\tif ( wo.filter_external ) {\n\t\t\t\ttsf.bindSearch( table, wo.filter_external );\n\t\t\t}\n\n\t\t\tif ( wo.filter_hideFilters ) {\n\t\t\t\ttsf.hideFilters( c );\n\t\t\t}\n\n\t\t\t// show processing icon\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\ttxt = 'filterStart filterEnd '.split( ' ' ).join( c.namespace + 'filter-sp ' );\n\t\t\t\tc.$table\n\t\t\t\t\t.unbind( txt.replace( ts.regex.spaces, ' ' ) )\n\t\t\t\t\t.bind( txt, function( event, columns ) {\n\t\t\t\t\t// only add processing to certain columns to all columns\n\t\t\t\t\t$header = ( columns ) ?\n\t\t\t\t\t\tc.$table\n\t\t\t\t\t\t\t.find( '.' + tscss.header )\n\t\t\t\t\t\t\t.filter( '[data-column]' )\n\t\t\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\t\t\treturn columns[ $( this ).data( 'column' ) ] !== '';\n\t\t\t\t\t\t\t}) : '';\n\t\t\t\t\tts.isProcessing( table, event.type === 'filterStart', columns ? $header : '' );\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// set filtered rows count ( intially unfiltered )\n\t\t\tc.filteredRows = c.totalRows;\n\n\t\t\t// add default values\n\t\t\ttxt = 'tablesorter-initialized pagerBeforeInitialized '.split( ' ' ).join( c.namespace + 'filter ' );\n\t\t\tc.$table\n\t\t\t.unbind( txt.replace( ts.regex.spaces, ' ' ) )\n\t\t\t.bind( txt, function() {\n\t\t\t\ttsf.completeInit( this );\n\t\t\t});\n\t\t\t// if filter widget is added after pager has initialized; then set filter init flag\n\t\t\tif ( c.pager && c.pager.initialized && !wo.filter_initialized ) {\n\t\t\t\tc.$table.triggerHandler( 'filterFomatterUpdate' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\ttsf.filterInitComplete( c );\n\t\t\t\t}, 100 );\n\t\t\t} else if ( !wo.filter_initialized ) {\n\t\t\t\ttsf.completeInit( table );\n\t\t\t}\n\t\t},\n\t\tcompleteInit: function( table ) {\n\t\t\t// redefine 'c' & 'wo' so they update properly inside this callback\n\t\t\tvar c = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tfilters = tsf.setDefaults( table, c, wo ) || [];\n\t\t\tif ( filters.length ) {\n\t\t\t\t// prevent delayInit from triggering a cache build if filters are empty\n\t\t\t\tif ( !( c.delayInit && filters.join( '' ) === '' ) ) {\n\t\t\t\t\tts.setFilters( table, filters, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.$table.triggerHandler( 'filterFomatterUpdate' );\n\t\t\t// trigger init after setTimeout to prevent multiple filterStart/End/Init triggers\n\t\t\tsetTimeout( function() {\n\t\t\t\tif ( !wo.filter_initialized ) {\n\t\t\t\t\ttsf.filterInitComplete( c );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t},\n\n\t\t// $cell parameter, but not the config, is passed to the filter_formatters,\n\t\t// so we have to work with it instead\n\t\tformatterUpdated: function( $cell, column ) {\n\t\t\t// prevent error if $cell is undefined - see #1056\n\t\t\tvar $table = $cell && $cell.closest( 'table' );\n\t\t\tvar config = $table.length && $table[0].config,\n\t\t\t\two = config && config.widgetOptions;\n\t\t\tif ( wo && !wo.filter_initialized ) {\n\t\t\t\t// add updates by column since this function\n\t\t\t\t// may be called numerous times before initialization\n\t\t\t\two.filter_formatterInit[ column ] = 1;\n\t\t\t}\n\t\t},\n\t\tfilterInitComplete: function( c ) {\n\t\t\tvar indx, len,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tcount = 0,\n\t\t\t\tcompleted = function() {\n\t\t\t\t\two.filter_initialized = true;\n\t\t\t\t\t// update lastSearch - it gets cleared often\n\t\t\t\t\tc.lastSearch = c.$table.data( 'lastSearch' );\n\t\t\t\t\tc.$table.triggerHandler( 'filterInit', c );\n\t\t\t\t\ttsf.findRows( c.table, c.lastSearch || [] );\n\t\t\t\t\tif (ts.debug(c, 'filter')) {\n\t\t\t\t\t\tconsole.log('Filter >> Widget initialized');\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\tif ( $.isEmptyObject( wo.filter_formatter ) ) {\n\t\t\t\tcompleted();\n\t\t\t} else {\n\t\t\t\tlen = wo.filter_formatterInit.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tif ( wo.filter_formatterInit[ indx ] === 1 ) {\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclearTimeout( wo.filter_initTimer );\n\t\t\t\tif ( !wo.filter_initialized && count === wo.filter_formatterCount ) {\n\t\t\t\t\t// filter widget initialized\n\t\t\t\t\tcompleted();\n\t\t\t\t} else if ( !wo.filter_initialized ) {\n\t\t\t\t\t// fall back in case a filter_formatter doesn't call\n\t\t\t\t\t// $.tablesorter.filter.formatterUpdated( $cell, column ), and the count is off\n\t\t\t\t\two.filter_initTimer = setTimeout( function() {\n\t\t\t\t\t\tcompleted();\n\t\t\t\t\t}, 500 );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// encode or decode filters for storage; see #1026\n\t\tprocessFilters: function( filters, encode ) {\n\t\t\tvar indx,\n\t\t\t\t// fixes #1237; previously returning an encoded \"filters\" value\n\t\t\t\tresult = [],\n\t\t\t\tmode = encode ? encodeURIComponent : decodeURIComponent,\n\t\t\t\tlen = filters.length;\n\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\tif ( filters[ indx ] ) {\n\t\t\t\t\tresult[ indx ] = mode( filters[ indx ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tsetDefaults: function( table, c, wo ) {\n\t\t\tvar isArray, saved, indx, col, $filters,\n\t\t\t\t// get current ( default ) filters\n\t\t\t\tfilters = ts.getFilters( table ) || [];\n\t\t\tif ( wo.filter_saveFilters && ts.storage ) {\n\t\t\t\tsaved = ts.storage( table, 'tablesorter-filters' ) || [];\n\t\t\t\tisArray = $.isArray( saved );\n\t\t\t\t// make sure we're not just getting an empty array\n\t\t\t\tif ( !( isArray && saved.join( '' ) === '' || !isArray ) ) {\n\t\t\t\t\tfilters = tsf.processFilters( saved );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if no filters saved, then check default settings\n\t\t\tif ( filters.join( '' ) === '' ) {\n\t\t\t\t// allow adding default setting to external filters\n\t\t\t\t$filters = c.$headers.add( wo.filter_$externalFilters )\n\t\t\t\t\t.filter( '[' + wo.filter_defaultAttrib + ']' );\n\t\t\t\tfor ( indx = 0; indx <= c.columns; indx++ ) {\n\t\t\t\t\t// include data-column='all' external filters\n\t\t\t\t\tcol = indx === c.columns ? 'all' : indx;\n\t\t\t\t\tfilters[ indx ] = $filters\n\t\t\t\t\t\t.filter( '[data-column=\"' + col + '\"]' )\n\t\t\t\t\t\t.attr( wo.filter_defaultAttrib ) || filters[indx] || '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.$table.data( 'lastSearch', filters );\n\t\t\treturn filters;\n\t\t},\n\t\tparseFilter: function( c, filter, data, parsed ) {\n\t\t\treturn parsed || data.parsed[ data.index ] ?\n\t\t\t\tc.parsers[ data.index ].format( filter, c.table, [], data.index ) :\n\t\t\t\tfilter;\n\t\t},\n\t\tbuildRow: function( table, c, wo ) {\n\t\t\tvar $filter, col, column, $header, makeSelect, disabled, name, ffxn, tmp,\n\t\t\t\t// c.columns defined in computeThIndexes()\n\t\t\t\tcellFilter = wo.filter_cellFilter,\n\t\t\t\tcolumns = c.columns,\n\t\t\t\tarry = $.isArray( cellFilter ),\n\t\t\t\tbuildFilter = '<tr role=\"search\" class=\"' + tscss.filterRow + ' ' + c.cssIgnoreRow + '\">';\n\t\t\tfor ( column = 0; column < columns; column++ ) {\n\t\t\t\tif ( c.$headerIndexed[ column ].length ) {\n\t\t\t\t\t// account for entire column set with colspan. See #1047\n\t\t\t\t\ttmp = c.$headerIndexed[ column ] && c.$headerIndexed[ column ][0].colSpan || 0;\n\t\t\t\t\tif ( tmp > 1 ) {\n\t\t\t\t\t\tbuildFilter += '<td data-column=\"' + column + '-' + ( column + tmp - 1 ) + '\" colspan=\"' + tmp + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuildFilter += '<td data-column=\"' + column + '\"';\n\t\t\t\t\t}\n\t\t\t\t\tif ( arry ) {\n\t\t\t\t\t\tbuildFilter += ( cellFilter[ column ] ? ' class=\"' + cellFilter[ column ] + '\"' : '' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuildFilter += ( cellFilter !== '' ? ' class=\"' + cellFilter + '\"' : '' );\n\t\t\t\t\t}\n\t\t\t\t\tbuildFilter += '></td>';\n\t\t\t\t}\n\t\t\t}\n\t\t\tc.$filters = $( buildFilter += '</tr>' )\n\t\t\t\t.appendTo( c.$table.children( 'thead' ).eq( 0 ) )\n\t\t\t\t.children( 'td' );\n\t\t\t// build each filter input\n\t\t\tfor ( column = 0; column < columns; column++ ) {\n\t\t\t\tdisabled = false;\n\t\t\t\t// assuming last cell of a column is the main column\n\t\t\t\t$header = c.$headerIndexed[ column ];\n\t\t\t\tif ( $header && $header.length ) {\n\t\t\t\t\t// $filter = c.$filters.filter( '[data-column=\"' + column + '\"]' );\n\t\t\t\t\t$filter = tsf.getColumnElm( c, c.$filters, column );\n\t\t\t\t\tffxn = ts.getColumnData( table, wo.filter_functions, column );\n\t\t\t\t\tmakeSelect = ( wo.filter_functions && ffxn && typeof ffxn !== 'function' ) ||\n\t\t\t\t\t\t$header.hasClass( 'filter-select' );\n\t\t\t\t\t// get data from jQuery data, metadata, headers option or header class name\n\t\t\t\t\tcol = ts.getColumnData( table, c.headers, column );\n\t\t\t\t\tdisabled = ts.getData( $header[0], col, 'filter' ) === 'false' ||\n\t\t\t\t\t\tts.getData( $header[0], col, 'parser' ) === 'false';\n\n\t\t\t\t\tif ( makeSelect ) {\n\t\t\t\t\t\tbuildFilter = $( '<select>' ).appendTo( $filter );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tffxn = ts.getColumnData( table, wo.filter_formatter, column );\n\t\t\t\t\t\tif ( ffxn ) {\n\t\t\t\t\t\t\two.filter_formatterCount++;\n\t\t\t\t\t\t\tbuildFilter = ffxn( $filter, column );\n\t\t\t\t\t\t\t// no element returned, so lets go find it\n\t\t\t\t\t\t\tif ( buildFilter && buildFilter.length === 0 ) {\n\t\t\t\t\t\t\t\tbuildFilter = $filter.children( 'input' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// element not in DOM, so lets attach it\n\t\t\t\t\t\t\tif ( buildFilter && ( buildFilter.parent().length === 0 ||\n\t\t\t\t\t\t\t\t( buildFilter.parent().length && buildFilter.parent()[0] !== $filter[0] ) ) ) {\n\t\t\t\t\t\t\t\t$filter.append( buildFilter );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbuildFilter = $( '<input type=\"search\">' ).appendTo( $filter );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( buildFilter ) {\n\t\t\t\t\t\t\ttmp = $header.data( 'placeholder' ) ||\n\t\t\t\t\t\t\t\t$header.attr( 'data-placeholder' ) ||\n\t\t\t\t\t\t\t\two.filter_placeholder.search || '';\n\t\t\t\t\t\t\tbuildFilter.attr( 'placeholder', tmp );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( buildFilter ) {\n\t\t\t\t\t\t// add filter class name\n\t\t\t\t\t\tname = ( $.isArray( wo.filter_cssFilter ) ?\n\t\t\t\t\t\t\t( typeof wo.filter_cssFilter[column] !== 'undefined' ? wo.filter_cssFilter[column] || '' : '' ) :\n\t\t\t\t\t\t\two.filter_cssFilter ) || '';\n\t\t\t\t\t\t// copy data-column from table cell (it will include colspan)\n\t\t\t\t\t\tbuildFilter.addClass( tscss.filter + ' ' + name );\n\t\t\t\t\t\tname = wo.filter_filterLabel;\n\t\t\t\t\t\ttmp = name.match(/{{([^}]+?)}}/g);\n\t\t\t\t\t\tif (!tmp) {\n\t\t\t\t\t\t\ttmp = [ '{{label}}' ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$.each(tmp, function(indx, attr) {\n\t\t\t\t\t\t\tvar regex = new RegExp(attr, 'g'),\n\t\t\t\t\t\t\t\tdata = $header.attr('data-' + attr.replace(/{{|}}/g, '')),\n\t\t\t\t\t\t\t\ttext = typeof data === 'undefined' ? $header.text() : data;\n\t\t\t\t\t\t\tname = name.replace( regex, $.trim( text ) );\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbuildFilter.attr({\n\t\t\t\t\t\t\t'data-column': $filter.attr( 'data-column' ),\n\t\t\t\t\t\t\t'aria-label': name\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif ( disabled ) {\n\t\t\t\t\t\t\tbuildFilter.attr( 'placeholder', '' ).addClass( tscss.filterDisabled )[0].disabled = true;\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\tbindSearch: function( table, $el, internal ) {\n\t\t\ttable = $( table )[0];\n\t\t\t$el = $( $el ); // allow passing a selector string\n\t\t\tif ( !$el.length ) { return; }\n\t\t\tvar tmp,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tnamespace = c.namespace + 'filter',\n\t\t\t\t$ext = wo.filter_$externalFilters;\n\t\t\tif ( internal !== true ) {\n\t\t\t\t// save anyMatch element\n\t\t\t\ttmp = wo.filter_anyColumnSelector + ',' + wo.filter_multipleColumnSelector;\n\t\t\t\two.filter_$anyMatch = $el.filter( tmp );\n\t\t\t\tif ( $ext && $ext.length ) {\n\t\t\t\t\two.filter_$externalFilters = wo.filter_$externalFilters.add( $el );\n\t\t\t\t} else {\n\t\t\t\t\two.filter_$externalFilters = $el;\n\t\t\t\t}\n\t\t\t\t// update values ( external filters added after table initialization )\n\t\t\t\tts.setFilters( table, c.$table.data( 'lastSearch' ) || [], internal === false );\n\t\t\t}\n\t\t\t// unbind events\n\t\t\ttmp = ( 'keypress keyup keydown search change input '.split( ' ' ).join( namespace + ' ' ) );\n\t\t\t$el\n\t\t\t// use data attribute instead of jQuery data since the head is cloned without including\n\t\t\t// the data/binding\n\t\t\t.attr( 'data-lastSearchTime', new Date().getTime() )\n\t\t\t.unbind( tmp.replace( ts.regex.spaces, ' ' ) )\n\t\t\t.bind( 'keydown' + namespace, function( event ) {\n\t\t\t\tif ( event.which === tskeyCodes.escape && !table.config.widgetOptions.filter_resetOnEsc ) {\n\t\t\t\t\t// prevent keypress event\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.bind( 'keyup' + namespace, function( event ) {\n\t\t\t\two = table.config.widgetOptions; // make sure \"wo\" isn't cached\n\t\t\t\tvar column = parseInt( $( this ).attr( 'data-column' ), 10 ),\n\t\t\t\t\tliveSearch = typeof wo.filter_liveSearch === 'boolean' ? wo.filter_liveSearch :\n\t\t\t\t\t\tts.getColumnData( table, wo.filter_liveSearch, column );\n\t\t\t\tif ( typeof liveSearch === 'undefined' ) {\n\t\t\t\t\tliveSearch = wo.filter_liveSearch.fallback || false;\n\t\t\t\t}\n\t\t\t\t$( this ).attr( 'data-lastSearchTime', new Date().getTime() );\n\t\t\t\t// emulate what webkit does.... escape clears the filter\n\t\t\t\tif ( event.which === tskeyCodes.escape ) {\n\t\t\t\t\t// make sure to restore the last value on escape\n\t\t\t\t\tthis.value = wo.filter_resetOnEsc ? '' : c.lastSearch[column];\n\t\t\t\t\t// don't return if the search value is empty ( all rows need to be revealed )\n\t\t\t\t} else if ( this.value !== '' && (\n\t\t\t\t\t// liveSearch can contain a min value length; ignore arrow and meta keys, but allow backspace\n\t\t\t\t\t( typeof liveSearch === 'number' && this.value.length < liveSearch ) ||\n\t\t\t\t\t// let return & backspace continue on, but ignore arrows & non-valid characters\n\t\t\t\t\t( event.which !== tskeyCodes.enter && event.which !== tskeyCodes.backSpace &&\n\t\t\t\t\t\t( event.which < tskeyCodes.space || ( event.which >= tskeyCodes.left && event.which <= tskeyCodes.down ) ) ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t\t// live search\n\t\t\t\t} else if ( liveSearch === false ) {\n\t\t\t\t\tif ( this.value !== '' && event.which !== tskeyCodes.enter ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// change event = no delay; last true flag tells getFilters to skip newest timed input\n\t\t\t\ttsf.searching( table, true, true, column );\n\t\t\t})\n\t\t\t// include change for select - fixes #473\n\t\t\t.bind( 'search change keypress input blur '.split( ' ' ).join( namespace + ' ' ), function( event ) {\n\t\t\t\t// don't get cached data, in case data-column changes dynamically\n\t\t\t\tvar column = parseInt( $( this ).attr( 'data-column' ), 10 ),\n\t\t\t\t\teventType = event.type,\n\t\t\t\t\tliveSearch = typeof wo.filter_liveSearch === 'boolean' ?\n\t\t\t\t\t\two.filter_liveSearch :\n\t\t\t\t\t\tts.getColumnData( table, wo.filter_liveSearch, column );\n\t\t\t\tif ( table.config.widgetOptions.filter_initialized &&\n\t\t\t\t\t// immediate search if user presses enter\n\t\t\t\t\t( event.which === tskeyCodes.enter ||\n\t\t\t\t\t\t// immediate search if a \"search\" or \"blur\" is triggered on the input\n\t\t\t\t\t\t( eventType === 'search' || eventType === 'blur' ) ||\n\t\t\t\t\t\t// change & input events must be ignored if liveSearch !== true\n\t\t\t\t\t\t( eventType === 'change' || eventType === 'input' ) &&\n\t\t\t\t\t\t// prevent search if liveSearch is a number\n\t\t\t\t\t\t( liveSearch === true || liveSearch !== true && event.target.nodeName !== 'INPUT' ) &&\n\t\t\t\t\t\t// don't allow 'change' or 'input' event to process if the input value\n\t\t\t\t\t\t// is the same - fixes #685\n\t\t\t\t\t\tthis.value !== c.lastSearch[column]\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t// init search with no delay\n\t\t\t\t\t$( this ).attr( 'data-lastSearchTime', new Date().getTime() );\n\t\t\t\t\ttsf.searching( table, eventType !== 'keypress', true, column );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tsearching: function( table, filter, skipFirst, column ) {\n\t\t\tvar liveSearch,\n\t\t\t\two = table.config.widgetOptions;\n\t\t\tif (typeof column === 'undefined') {\n\t\t\t\t// no delay\n\t\t\t\tliveSearch = false;\n\t\t\t} else {\n\t\t\t\tliveSearch = typeof wo.filter_liveSearch === 'boolean' ?\n\t\t\t\t\two.filter_liveSearch :\n\t\t\t\t\t// get column setting, or set to fallback value, or default to false\n\t\t\t\t\tts.getColumnData( table, wo.filter_liveSearch, column );\n\t\t\t\tif ( typeof liveSearch === 'undefined' ) {\n\t\t\t\t\tliveSearch = wo.filter_liveSearch.fallback || false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tclearTimeout( wo.filter_searchTimer );\n\t\t\tif ( typeof filter === 'undefined' || filter === true ) {\n\t\t\t\t// delay filtering\n\t\t\t\two.filter_searchTimer = setTimeout( function() {\n\t\t\t\t\ttsf.checkFilters( table, filter, skipFirst );\n\t\t\t\t}, liveSearch ? wo.filter_searchDelay : 10 );\n\t\t\t} else {\n\t\t\t\t// skip delay\n\t\t\t\ttsf.checkFilters( table, filter, skipFirst );\n\t\t\t}\n\t\t},\n\t\tequalFilters: function (c, filter1, filter2) {\n\t\t\tvar indx,\n\t\t\t\tf1 = [],\n\t\t\t\tf2 = [],\n\t\t\t\tlen = c.columns + 1; // add one to include anyMatch filter\n\t\t\tfilter1 = $.isArray(filter1) ? filter1 : [];\n\t\t\tfilter2 = $.isArray(filter2) ? filter2 : [];\n\t\t\tfor (indx = 0; indx < len; indx++) {\n\t\t\t\tf1[indx] = filter1[indx] || '';\n\t\t\t\tf2[indx] = filter2[indx] || '';\n\t\t\t}\n\t\t\treturn f1.join(',') === f2.join(',');\n\t\t},\n\t\tcheckFilters: function( table, filter, skipFirst ) {\n\t\t\tvar c = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tfilterArray = $.isArray( filter ),\n\t\t\t\tfilters = ( filterArray ) ? filter : ts.getFilters( table, true ),\n\t\t\t\tcurrentFilters = filters || []; // current filter values\n\t\t\t// prevent errors if delay init is set\n\t\t\tif ( $.isEmptyObject( c.cache ) ) {\n\t\t\t\t// update cache if delayInit set & pager has initialized ( after user initiates a search )\n\t\t\t\tif ( c.delayInit && ( !c.pager || c.pager && c.pager.initialized ) ) {\n\t\t\t\t\tts.updateCache( c, function() {\n\t\t\t\t\t\ttsf.checkFilters( table, false, skipFirst );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// add filter array back into inputs\n\t\t\tif ( filterArray ) {\n\t\t\t\tts.setFilters( table, filters, false, skipFirst !== true );\n\t\t\t\tif ( !wo.filter_initialized ) {\n\t\t\t\t\tc.lastSearch = [];\n\t\t\t\t\tc.lastCombinedFilter = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( wo.filter_hideFilters ) {\n\t\t\t\t// show/hide filter row as needed\n\t\t\t\tc.$table\n\t\t\t\t\t.find( '.' + tscss.filterRow )\n\t\t\t\t\t.triggerHandler( tsf.hideFiltersCheck( c ) ? 'mouseleave' : 'mouseenter' );\n\t\t\t}\n\t\t\t// return if the last search is the same; but filter === false when updating the search\n\t\t\t// see example-widget-filter.html filter toggle buttons\n\t\t\tif ( tsf.equalFilters(c, c.lastSearch, currentFilters) && filter !== false ) {\n\t\t\t\treturn;\n\t\t\t} else if ( filter === false ) {\n\t\t\t\t// force filter refresh\n\t\t\t\tc.lastCombinedFilter = '';\n\t\t\t\tc.lastSearch = [];\n\t\t\t}\n\t\t\t// define filter inside it is false\n\t\t\tfilters = filters || [];\n\t\t\t// convert filters to strings - see #1070\n\t\t\tfilters = Array.prototype.map ?\n\t\t\t\tfilters.map( String ) :\n\t\t\t\t// for IE8 & older browsers - maybe not the best method\n\t\t\t\tfilters.join( '\\ufffd' ).split( '\\ufffd' );\n\n\t\t\tif ( wo.filter_initialized ) {\n\t\t\t\tc.$table.triggerHandler( 'filterStart', [ filters ] );\n\t\t\t}\n\t\t\tif ( c.showProcessing ) {\n\t\t\t\t// give it time for the processing icon to kick in\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\ttsf.findRows( table, filters, currentFilters );\n\t\t\t\t\treturn false;\n\t\t\t\t}, 30 );\n\t\t\t} else {\n\t\t\t\ttsf.findRows( table, filters, currentFilters );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\thideFiltersCheck: function( c ) {\n\t\t\tif (typeof c.widgetOptions.filter_hideFilters === 'function') {\n\t\t\t\tvar val = c.widgetOptions.filter_hideFilters( c );\n\t\t\t\tif (typeof val === 'boolean') {\n\t\t\t\t\treturn val;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ts.getFilters( c.$table ).join( '' ) === '';\n\t\t},\n\t\thideFilters: function( c, $table ) {\n\t\t\tvar timer;\n\t\t\t( $table || c.$table )\n\t\t\t\t.find( '.' + tscss.filterRow )\n\t\t\t\t.addClass( tscss.filterRowHide )\n\t\t\t\t.bind( 'mouseenter mouseleave', function( e ) {\n\t\t\t\t\t// save event object - http://bugs.jquery.com/ticket/12140\n\t\t\t\t\tvar event = e,\n\t\t\t\t\t\t$row = $( this );\n\t\t\t\t\tclearTimeout( timer );\n\t\t\t\t\ttimer = setTimeout( function() {\n\t\t\t\t\t\tif ( /enter|over/.test( event.type ) ) {\n\t\t\t\t\t\t\t$row.removeClass( tscss.filterRowHide );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// don't hide if input has focus\n\t\t\t\t\t\t\t// $( ':focus' ) needs jQuery 1.6+\n\t\t\t\t\t\t\tif ( $( document.activeElement ).closest( 'tr' )[0] !== $row[0] ) {\n\t\t\t\t\t\t\t\t// don't hide row if any filter has a value\n\t\t\t\t\t\t\t\t$row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 200 );\n\t\t\t\t})\n\t\t\t\t.find( 'input, select' ).bind( 'focus blur', function( e ) {\n\t\t\t\t\tvar event = e,\n\t\t\t\t\t\t$row = $( this ).closest( 'tr' );\n\t\t\t\t\tclearTimeout( timer );\n\t\t\t\t\ttimer = setTimeout( function() {\n\t\t\t\t\t\tclearTimeout( timer );\n\t\t\t\t\t\t// don't hide row if any filter has a value\n\t\t\t\t\t\t$row.toggleClass( tscss.filterRowHide, tsf.hideFiltersCheck( c ) && event.type !== 'focus' );\n\t\t\t\t\t}, 200 );\n\t\t\t\t});\n\t\t},\n\t\tdefaultFilter: function( filter, mask ) {\n\t\t\tif ( filter === '' ) { return filter; }\n\t\t\tvar regex = tsfRegex.iQuery,\n\t\t\t\tmaskLen = mask.match( tsfRegex.igQuery ).length,\n\t\t\t\tquery = maskLen > 1 ? $.trim( filter ).split( /\\s/ ) : [ $.trim( filter ) ],\n\t\t\t\tlen = query.length - 1,\n\t\t\t\tindx = 0,\n\t\t\t\tval = mask;\n\t\t\tif ( len < 1 && maskLen > 1 ) {\n\t\t\t\t// only one 'word' in query but mask has >1 slots\n\t\t\t\tquery[1] = query[0];\n\t\t\t}\n\t\t\t// replace all {query} with query words...\n\t\t\t// if query = 'Bob', then convert mask from '!{query}' to '!Bob'\n\t\t\t// if query = 'Bob Joe Frank', then convert mask '{q} OR {q}' to 'Bob OR Joe OR Frank'\n\t\t\twhile ( regex.test( val ) ) {\n\t\t\t\tval = val.replace( regex, query[indx++] || '' );\n\t\t\t\tif ( regex.test( val ) && indx < len && ( query[indx] || '' ) !== '' ) {\n\t\t\t\t\tval = mask.replace( regex, val );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn val;\n\t\t},\n\t\tgetLatestSearch: function( $input ) {\n\t\t\tif ( $input ) {\n\t\t\t\treturn $input.sort( function( a, b ) {\n\t\t\t\t\treturn $( b ).attr( 'data-lastSearchTime' ) - $( a ).attr( 'data-lastSearchTime' );\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn $input || $();\n\t\t},\n\t\tfindRange: function( c, val, ignoreRanges ) {\n\t\t\t// look for multiple columns '1-3,4-6,8' in data-column\n\t\t\tvar temp, ranges, range, start, end, singles, i, indx, len,\n\t\t\t\tcolumns = [];\n\t\t\tif ( /^[0-9]+$/.test( val ) ) {\n\t\t\t\t// always return an array\n\t\t\t\treturn [ parseInt( val, 10 ) ];\n\t\t\t}\n\t\t\t// process column range\n\t\t\tif ( !ignoreRanges && /-/.test( val ) ) {\n\t\t\t\tranges = val.match( /(\\d+)\\s*-\\s*(\\d+)/g );\n\t\t\t\tlen = ranges ? ranges.length : 0;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\trange = ranges[indx].split( /\\s*-\\s*/ );\n\t\t\t\t\tstart = parseInt( range[0], 10 ) || 0;\n\t\t\t\t\tend = parseInt( range[1], 10 ) || ( c.columns - 1 );\n\t\t\t\t\tif ( start > end ) {\n\t\t\t\t\t\ttemp = start; start = end; end = temp; // swap\n\t\t\t\t\t}\n\t\t\t\t\tif ( end >= c.columns ) {\n\t\t\t\t\t\tend = c.columns - 1;\n\t\t\t\t\t}\n\t\t\t\t\tfor ( ; start <= end; start++ ) {\n\t\t\t\t\t\tcolumns[ columns.length ] = start;\n\t\t\t\t\t}\n\t\t\t\t\t// remove processed range from val\n\t\t\t\t\tval = val.replace( ranges[ indx ], '' );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// process single columns\n\t\t\tif ( !ignoreRanges && /,/.test( val ) ) {\n\t\t\t\tsingles = val.split( /\\s*,\\s*/ );\n\t\t\t\tlen = singles.length;\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( singles[ i ] !== '' ) {\n\t\t\t\t\t\tindx = parseInt( singles[ i ], 10 );\n\t\t\t\t\t\tif ( indx < c.columns ) {\n\t\t\t\t\t\t\tcolumns[ columns.length ] = indx;\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// return all columns\n\t\t\tif ( !columns.length ) {\n\t\t\t\tfor ( indx = 0; indx < c.columns; indx++ ) {\n\t\t\t\t\tcolumns[ columns.length ] = indx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn columns;\n\t\t},\n\t\tgetColumnElm: function( c, $elements, column ) {\n\t\t\t// data-column may contain multiple columns '1-3,5-6,8'\n\t\t\t// replaces: c.$filters.filter( '[data-column=\"' + column + '\"]' );\n\t\t\treturn $elements.filter( function() {\n\t\t\t\tvar cols = tsf.findRange( c, $( this ).attr( 'data-column' ) );\n\t\t\t\treturn $.inArray( column, cols ) > -1;\n\t\t\t});\n\t\t},\n\t\tmultipleColumns: function( c, $input ) {\n\t\t\t// look for multiple columns '1-3,4-6,8' in data-column\n\t\t\tvar wo = c.widgetOptions,\n\t\t\t\t// only target 'all' column inputs on initialization\n\t\t\t\t// & don't target 'all' column inputs if they don't exist\n\t\t\t\ttargets = wo.filter_initialized || !$input.filter( wo.filter_anyColumnSelector ).length,\n\t\t\t\tval = $.trim( tsf.getLatestSearch( $input ).attr( 'data-column' ) || '' );\n\t\t\treturn tsf.findRange( c, val, !targets );\n\t\t},\n\t\tprocessTypes: function( c, data, vars ) {\n\t\t\tvar ffxn,\n\t\t\t\tfilterMatched = null,\n\t\t\t\tmatches = null;\n\t\t\tfor ( ffxn in tsf.types ) {\n\t\t\t\tif ( $.inArray( ffxn, vars.excludeMatch ) < 0 && matches === null ) {\n\t\t\t\t\tmatches = tsf.types[ffxn]( c, data, vars );\n\t\t\t\t\tif ( matches !== null ) {\n\t\t\t\t\t\tdata.matchedOn = ffxn;\n\t\t\t\t\t\tfilterMatched = matches;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn filterMatched;\n\t\t},\n\t\tmatchType: function( c, columnIndex ) {\n\t\t\tvar isMatch,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\t$el = c.$headerIndexed[ columnIndex ];\n\t\t\t// filter-exact > filter-match > filter_matchType for type\n\t\t\tif ( $el.hasClass( 'filter-exact' ) ) {\n\t\t\t\tisMatch = false;\n\t\t\t} else if ( $el.hasClass( 'filter-match' ) ) {\n\t\t\t\tisMatch = true;\n\t\t\t} else {\n\t\t\t\t// filter-select is not applied when filter_functions are used, so look for a select\n\t\t\t\tif ( wo.filter_columnFilters ) {\n\t\t\t\t\t$el = c.$filters\n\t\t\t\t\t\t.find( '.' + tscss.filter )\n\t\t\t\t\t\t.add( wo.filter_$externalFilters )\n\t\t\t\t\t\t.filter( '[data-column=\"' + columnIndex + '\"]' );\n\t\t\t\t} else if ( wo.filter_$externalFilters ) {\n\t\t\t\t\t$el = wo.filter_$externalFilters.filter( '[data-column=\"' + columnIndex + '\"]' );\n\t\t\t\t}\n\t\t\t\tisMatch = $el.length ?\n\t\t\t\t\tc.widgetOptions.filter_matchType[ ( $el[ 0 ].nodeName || '' ).toLowerCase() ] === 'match' :\n\t\t\t\t\t// default to exact, if no inputs found\n\t\t\t\t\tfalse;\n\t\t\t}\n\t\t\treturn isMatch;\n\t\t},\n\t\tprocessRow: function( c, data, vars ) {\n\t\t\tvar result, filterMatched,\n\t\t\t\tfxn, ffxn, txt,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tshowRow = true,\n\t\t\t\thasAnyMatchInput = wo.filter_$anyMatch && wo.filter_$anyMatch.length,\n\n\t\t\t\t// if wo.filter_$anyMatch data-column attribute is changed dynamically\n\t\t\t\t// we don't want to do an \"anyMatch\" search on one column using data\n\t\t\t\t// for the entire row - see #998\n\t\t\t\tcolumnIndex = wo.filter_$anyMatch && wo.filter_$anyMatch.length ?\n\t\t\t\t\t// look for multiple columns '1-3,4-6,8'\n\t\t\t\t\ttsf.multipleColumns( c, wo.filter_$anyMatch ) :\n\t\t\t\t\t[];\n\t\t\tdata.$cells = data.$row.children();\n\t\t\tdata.matchedOn = null;\n\t\t\tif ( data.anyMatchFlag && columnIndex.length > 1 || ( data.anyMatchFilter && !hasAnyMatchInput ) ) {\n\t\t\t\tdata.anyMatch = true;\n\t\t\t\tdata.isMatch = true;\n\t\t\t\tdata.rowArray = data.$cells.map( function( i ) {\n\t\t\t\t\tif ( $.inArray( i, columnIndex ) > -1 || ( data.anyMatchFilter && !hasAnyMatchInput ) ) {\n\t\t\t\t\t\tif ( data.parsed[ i ] ) {\n\t\t\t\t\t\t\ttxt = data.cacheArray[ i ];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttxt = data.rawArray[ i ];\n\t\t\t\t\t\t\ttxt = $.trim( wo.filter_ignoreCase ? txt.toLowerCase() : txt );\n\t\t\t\t\t\t\tif ( c.sortLocaleCompare ) {\n\t\t\t\t\t\t\t\ttxt = ts.replaceAccents( txt );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn txt;\n\t\t\t\t\t}\n\t\t\t\t}).get();\n\t\t\t\tdata.filter = data.anyMatchFilter;\n\t\t\t\tdata.iFilter = data.iAnyMatchFilter;\n\t\t\t\tdata.exact = data.rowArray.join( ' ' );\n\t\t\t\tdata.iExact = wo.filter_ignoreCase ? data.exact.toLowerCase() : data.exact;\n\t\t\t\tdata.cache = data.cacheArray.slice( 0, -1 ).join( ' ' );\n\t\t\t\tvars.excludeMatch = vars.noAnyMatch;\n\t\t\t\tfilterMatched = tsf.processTypes( c, data, vars );\n\t\t\t\tif ( filterMatched !== null ) {\n\t\t\t\t\tshowRow = filterMatched;\n\t\t\t\t} else {\n\t\t\t\t\tif ( wo.filter_startsWith ) {\n\t\t\t\t\t\tshowRow = false;\n\t\t\t\t\t\t// data.rowArray may not contain all columns\n\t\t\t\t\t\tcolumnIndex = Math.min( c.columns, data.rowArray.length );\n\t\t\t\t\t\twhile ( !showRow && columnIndex > 0 ) {\n\t\t\t\t\t\t\tcolumnIndex--;\n\t\t\t\t\t\t\tshowRow = showRow || data.rowArray[ columnIndex ].indexOf( data.iFilter ) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowRow = ( data.iExact + data.childRowText ).indexOf( data.iFilter ) >= 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata.anyMatch = false;\n\t\t\t\t// no other filters to process\n\t\t\t\tif ( data.filters.join( '' ) === data.filter ) {\n\t\t\t\t\treturn showRow;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {\n\t\t\t\tdata.filter = data.filters[ columnIndex ];\n\t\t\t\tdata.index = columnIndex;\n\n\t\t\t\t// filter types to exclude, per column\n\t\t\t\tvars.excludeMatch = vars.excludeFilter[ columnIndex ];\n\n\t\t\t\t// ignore if filter is empty or disabled\n\t\t\t\tif ( data.filter ) {\n\t\t\t\t\tdata.cache = data.cacheArray[ columnIndex ];\n\t\t\t\t\tresult = data.parsed[ columnIndex ] ? data.cache : data.rawArray[ columnIndex ] || '';\n\t\t\t\t\tdata.exact = c.sortLocaleCompare ? ts.replaceAccents( result ) : result; // issue #405\n\t\t\t\t\tdata.iExact = !tsfRegex.type.test( typeof data.exact ) && wo.filter_ignoreCase ?\n\t\t\t\t\t\tdata.exact.toLowerCase() : data.exact;\n\t\t\t\t\tdata.isMatch = tsf.matchType( c, columnIndex );\n\n\t\t\t\t\tresult = showRow; // if showRow is true, show that row\n\n\t\t\t\t\t// in case select filter option has a different value vs text 'a - z|A through Z'\n\t\t\t\t\tffxn = wo.filter_columnFilters ?\n\t\t\t\t\t\tc.$filters.add( wo.filter_$externalFilters )\n\t\t\t\t\t\t\t.filter( '[data-column=\"' + columnIndex + '\"]' )\n\t\t\t\t\t\t\t.find( 'select option:selected' )\n\t\t\t\t\t\t\t.attr( 'data-function-name' ) || '' : '';\n\t\t\t\t\t// replace accents - see #357\n\t\t\t\t\tif ( c.sortLocaleCompare ) {\n\t\t\t\t\t\tdata.filter = ts.replaceAccents( data.filter );\n\t\t\t\t\t}\n\n\t\t\t\t\t// replace column specific default filters - see #1088\n\t\t\t\t\tif ( wo.filter_defaultFilter && tsfRegex.iQuery.test( vars.defaultColFilter[ columnIndex ] ) ) {\n\t\t\t\t\t\tdata.filter = tsf.defaultFilter( data.filter, vars.defaultColFilter[ columnIndex ] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// data.iFilter = case insensitive ( if wo.filter_ignoreCase is true ),\n\t\t\t\t\t// data.filter = case sensitive\n\t\t\t\t\tdata.iFilter = wo.filter_ignoreCase ? ( data.filter || '' ).toLowerCase() : data.filter;\n\t\t\t\t\tfxn = vars.functions[ columnIndex ];\n\t\t\t\t\tfilterMatched = null;\n\t\t\t\t\tif ( fxn ) {\n\t\t\t\t\t\tif ( typeof fxn === 'function' ) {\n\t\t\t\t\t\t\t// filter callback( exact cell content, parser normalized content,\n\t\t\t\t\t\t\t// filter input value, column index, jQuery row object )\n\t\t\t\t\t\t\tfilterMatched = fxn( data.exact, data.cache, data.filter, columnIndex, data.$row, c, data );\n\t\t\t\t\t\t} else if ( typeof fxn[ ffxn || data.filter ] === 'function' ) {\n\t\t\t\t\t\t\t// selector option function\n\t\t\t\t\t\t\ttxt = ffxn || data.filter;\n\t\t\t\t\t\t\tfilterMatched =\n\t\t\t\t\t\t\t\tfxn[ txt ]( data.exact, data.cache, data.filter, columnIndex, data.$row, c, data );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( filterMatched === null ) {\n\t\t\t\t\t\t// cycle through the different filters\n\t\t\t\t\t\t// filters return a boolean or null if nothing matches\n\t\t\t\t\t\tfilterMatched = tsf.processTypes( c, data, vars );\n\t\t\t\t\t\t// select with exact match; ignore \"and\" or \"or\" within the text; fixes #1486\n\t\t\t\t\t\ttxt = fxn === true && (data.matchedOn === 'and' || data.matchedOn === 'or');\n\t\t\t\t\t\tif ( filterMatched !== null && !txt) {\n\t\t\t\t\t\t\tresult = filterMatched;\n\t\t\t\t\t\t// Look for match, and add child row data for matching\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// check fxn (filter-select in header) after filter types are checked\n\t\t\t\t\t\t\t// without this, the filter + jQuery UI selectmenu demo was breaking\n\t\t\t\t\t\t\tif ( fxn === true ) {\n\t\t\t\t\t\t\t\t// default selector uses exact match unless 'filter-match' class is found\n\t\t\t\t\t\t\t\tresult = data.isMatch ?\n\t\t\t\t\t\t\t\t\t// data.iExact may be a number\n\t\t\t\t\t\t\t\t\t( '' + data.iExact ).search( data.iFilter ) >= 0 :\n\t\t\t\t\t\t\t\t\tdata.filter === data.exact;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttxt = ( data.iExact + data.childRowText ).indexOf( tsf.parseFilter( c, data.iFilter, data ) );\n\t\t\t\t\t\t\t\tresult = ( ( !wo.filter_startsWith && txt >= 0 ) || ( wo.filter_startsWith && txt === 0 ) );\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\tresult = filterMatched;\n\t\t\t\t\t}\n\t\t\t\t\tshowRow = ( result ) ? showRow : false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn showRow;\n\t\t},\n\t\tfindRows: function( table, filters, currentFilters ) {\n\t\t\tif (\n\t\t\t\ttsf.equalFilters(table.config, table.config.lastSearch, currentFilters) ||\n\t\t\t\t!table.config.widgetOptions.filter_initialized\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar len, norm_rows, rowData, $rows, $row, rowIndex, tbodyIndex, $tbody, columnIndex,\n\t\t\t\tisChild, childRow, lastSearch, showRow, showParent, time, val, indx,\n\t\t\t\tnotFiltered, searchFiltered, query, injected, res, id, txt,\n\t\t\t\tstoredFilters = $.extend( [], filters ),\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tdebug = ts.debug(c, 'filter'),\n\t\t\t\t// data object passed to filters; anyMatch is a flag for the filters\n\t\t\t\tdata = {\n\t\t\t\t\tanyMatch: false,\n\t\t\t\t\tfilters: filters,\n\t\t\t\t\t// regex filter type cache\n\t\t\t\t\tfilter_regexCache : []\n\t\t\t\t},\n\t\t\t\tvars = {\n\t\t\t\t\t// anyMatch really screws up with these types of filters\n\t\t\t\t\tnoAnyMatch: [ 'range',  'operators' ],\n\t\t\t\t\t// cache filter variables that use ts.getColumnData in the main loop\n\t\t\t\t\tfunctions : [],\n\t\t\t\t\texcludeFilter : [],\n\t\t\t\t\tdefaultColFilter : [],\n\t\t\t\t\tdefaultAnyFilter : ts.getColumnData( table, wo.filter_defaultFilter, c.columns, true ) || ''\n\t\t\t\t};\n\t\t\t// parse columns after formatter, in case the class is added at that point\n\t\t\tdata.parsed = [];\n\t\t\tfor ( columnIndex = 0; columnIndex < c.columns; columnIndex++ ) {\n\t\t\t\tdata.parsed[ columnIndex ] = wo.filter_useParsedData ||\n\t\t\t\t\t// parser has a \"parsed\" parameter\n\t\t\t\t\t( c.parsers && c.parsers[ columnIndex ] && c.parsers[ columnIndex ].parsed ||\n\t\t\t\t\t// getData may not return 'parsed' if other 'filter-' class names exist\n\t\t\t\t\t// ( e.g. <th class=\"filter-select filter-parsed\"> )\n\t\t\t\t\tts.getData && ts.getData( c.$headerIndexed[ columnIndex ],\n\t\t\t\t\t\tts.getColumnData( table, c.headers, columnIndex ), 'filter' ) === 'parsed' ||\n\t\t\t\t\tc.$headerIndexed[ columnIndex ].hasClass( 'filter-parsed' ) );\n\n\t\t\t\tvars.functions[ columnIndex ] =\n\t\t\t\t\tts.getColumnData( table, wo.filter_functions, columnIndex ) ||\n\t\t\t\t\tc.$headerIndexed[ columnIndex ].hasClass( 'filter-select' );\n\t\t\t\tvars.defaultColFilter[ columnIndex ] =\n\t\t\t\t\tts.getColumnData( table, wo.filter_defaultFilter, columnIndex ) || '';\n\t\t\t\tvars.excludeFilter[ columnIndex ] =\n\t\t\t\t\t( ts.getColumnData( table, wo.filter_excludeFilter, columnIndex, true ) || '' ).split( /\\s+/ );\n\t\t\t}\n\n\t\t\tif ( debug ) {\n\t\t\t\tconsole.log( 'Filter >> Starting filter widget search', filters );\n\t\t\t\ttime = new Date();\n\t\t\t}\n\t\t\t// filtered rows count\n\t\t\tc.filteredRows = 0;\n\t\t\tc.totalRows = 0;\n\t\t\tcurrentFilters = ( storedFilters || [] );\n\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) {\n\t\t\t\t$tbody = ts.processTbody( table, c.$tbodies.eq( tbodyIndex ), true );\n\t\t\t\t// skip child rows & widget added ( removable ) rows - fixes #448 thanks to @hempel!\n\t\t\t\t// $rows = $tbody.children( 'tr' ).not( c.selectorRemove );\n\t\t\t\tcolumnIndex = c.columns;\n\t\t\t\t// convert stored rows into a jQuery object\n\t\t\t\tnorm_rows = c.cache[ tbodyIndex ].normalized;\n\t\t\t\t$rows = $( $.map( norm_rows, function( el ) {\n\t\t\t\t\treturn el[ columnIndex ].$row.get();\n\t\t\t\t}) );\n\n\t\t\t\tif ( currentFilters.join('') === '' || wo.filter_serversideFiltering ) {\n\t\t\t\t\t$rows\n\t\t\t\t\t\t.removeClass( wo.filter_filteredRow )\n\t\t\t\t\t\t.not( '.' + c.cssChildRow )\n\t\t\t\t\t\t.css( 'display', '' );\n\t\t\t\t} else {\n\t\t\t\t\t// filter out child rows\n\t\t\t\t\t$rows = $rows.not( '.' + c.cssChildRow );\n\t\t\t\t\tlen = $rows.length;\n\n\t\t\t\t\tif ( ( wo.filter_$anyMatch && wo.filter_$anyMatch.length ) ||\n\t\t\t\t\t\ttypeof filters[c.columns] !== 'undefined' ) {\n\t\t\t\t\t\tdata.anyMatchFlag = true;\n\t\t\t\t\t\tdata.anyMatchFilter = '' + (\n\t\t\t\t\t\t\tfilters[ c.columns ] ||\n\t\t\t\t\t\t\two.filter_$anyMatch && tsf.getLatestSearch( wo.filter_$anyMatch ).val() ||\n\t\t\t\t\t\t\t''\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( wo.filter_columnAnyMatch ) {\n\t\t\t\t\t\t\t// specific columns search\n\t\t\t\t\t\t\tquery = data.anyMatchFilter.split( tsfRegex.andSplit );\n\t\t\t\t\t\t\tinjected = false;\n\t\t\t\t\t\t\tfor ( indx = 0; indx < query.length; indx++ ) {\n\t\t\t\t\t\t\t\tres = query[ indx ].split( ':' );\n\t\t\t\t\t\t\t\tif ( res.length > 1 ) {\n\t\t\t\t\t\t\t\t\t// make the column a one-based index ( non-developers start counting from one :P )\n\t\t\t\t\t\t\t\t\tif ( isNaN( res[0] ) ) {\n\t\t\t\t\t\t\t\t\t\t$.each( c.headerContent, function( i, txt ) {\n\t\t\t\t\t\t\t\t\t\t\t// multiple matches are possible\n\t\t\t\t\t\t\t\t\t\t\tif ( txt.toLowerCase().indexOf( res[0] ) > -1 ) {\n\t\t\t\t\t\t\t\t\t\t\t\tid = i;\n\t\t\t\t\t\t\t\t\t\t\t\tfilters[ id ] = res[1];\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} else {\n\t\t\t\t\t\t\t\t\t\tid = parseInt( res[0], 10 ) - 1;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif ( id >= 0 && id < c.columns ) { // if id is an integer\n\t\t\t\t\t\t\t\t\t\tfilters[ id ] = res[1];\n\t\t\t\t\t\t\t\t\t\tquery.splice( indx, 1 );\n\t\t\t\t\t\t\t\t\t\tindx--;\n\t\t\t\t\t\t\t\t\t\tinjected = true;\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\tif ( injected ) {\n\t\t\t\t\t\t\t\tdata.anyMatchFilter = query.join( ' && ' );\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// optimize searching only through already filtered rows - see #313\n\t\t\t\t\tsearchFiltered = wo.filter_searchFiltered;\n\t\t\t\t\tlastSearch = c.lastSearch || c.$table.data( 'lastSearch' ) || [];\n\t\t\t\t\tif ( searchFiltered ) {\n\t\t\t\t\t\t// cycle through all filters; include last ( columnIndex + 1 = match any column ). Fixes #669\n\t\t\t\t\t\tfor ( indx = 0; indx < columnIndex + 1; indx++ ) {\n\t\t\t\t\t\t\tval = filters[indx] || '';\n\t\t\t\t\t\t\t// break out of loop if we've already determined not to search filtered rows\n\t\t\t\t\t\t\tif ( !searchFiltered ) { indx = columnIndex; }\n\t\t\t\t\t\t\t// search already filtered rows if...\n\t\t\t\t\t\t\tsearchFiltered = searchFiltered && lastSearch.length &&\n\t\t\t\t\t\t\t\t// there are no changes from beginning of filter\n\t\t\t\t\t\t\t\tval.indexOf( lastSearch[indx] || '' ) === 0 &&\n\t\t\t\t\t\t\t\t// if there is NOT a logical 'or', or range ( 'to' or '-' ) in the string\n\t\t\t\t\t\t\t\t!tsfRegex.alreadyFiltered.test( val ) &&\n\t\t\t\t\t\t\t\t// if we are not doing exact matches, using '|' ( logical or ) or not '!'\n\t\t\t\t\t\t\t\t!tsfRegex.exactTest.test( val ) &&\n\t\t\t\t\t\t\t\t// don't search only filtered if the value is negative\n\t\t\t\t\t\t\t\t// ( '> -10' => '> -100' will ignore hidden rows )\n\t\t\t\t\t\t\t\t!( tsfRegex.isNeg1.test( val ) || tsfRegex.isNeg2.test( val ) ) &&\n\t\t\t\t\t\t\t\t// if filtering using a select without a 'filter-match' class ( exact match ) - fixes #593\n\t\t\t\t\t\t\t\t!( val !== '' && c.$filters && c.$filters.filter( '[data-column=\"' + indx + '\"]' ).find( 'select' ).length &&\n\t\t\t\t\t\t\t\t\t!tsf.matchType( c, indx ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnotFiltered = $rows.not( '.' + wo.filter_filteredRow ).length;\n\t\t\t\t\t// can't search when all rows are hidden - this happens when looking for exact matches\n\t\t\t\t\tif ( searchFiltered && notFiltered === 0 ) { searchFiltered = false; }\n\t\t\t\t\tif ( debug ) {\n\t\t\t\t\t\tconsole.log( 'Filter >> Searching through ' +\n\t\t\t\t\t\t\t( searchFiltered && notFiltered < len ? notFiltered : 'all' ) + ' rows' );\n\t\t\t\t\t}\n\t\t\t\t\tif ( data.anyMatchFlag ) {\n\t\t\t\t\t\tif ( c.sortLocaleCompare ) {\n\t\t\t\t\t\t\t// replace accents\n\t\t\t\t\t\t\tdata.anyMatchFilter = ts.replaceAccents( data.anyMatchFilter );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( wo.filter_defaultFilter && tsfRegex.iQuery.test( vars.defaultAnyFilter ) ) {\n\t\t\t\t\t\t\tdata.anyMatchFilter = tsf.defaultFilter( data.anyMatchFilter, vars.defaultAnyFilter );\n\t\t\t\t\t\t\t// clear search filtered flag because default filters are not saved to the last search\n\t\t\t\t\t\t\tsearchFiltered = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// make iAnyMatchFilter lowercase unless both filter widget & core ignoreCase options are true\n\t\t\t\t\t\t// when c.ignoreCase is true, the cache contains all lower case data\n\t\t\t\t\t\tdata.iAnyMatchFilter = !( wo.filter_ignoreCase && c.ignoreCase ) ?\n\t\t\t\t\t\t\tdata.anyMatchFilter :\n\t\t\t\t\t\t\tdata.anyMatchFilter.toLowerCase();\n\t\t\t\t\t}\n\n\t\t\t\t\t// loop through the rows\n\t\t\t\t\tfor ( rowIndex = 0; rowIndex < len; rowIndex++ ) {\n\n\t\t\t\t\t\ttxt = $rows[ rowIndex ].className;\n\t\t\t\t\t\t// the first row can never be a child row\n\t\t\t\t\t\tisChild = rowIndex && tsfRegex.child.test( txt );\n\t\t\t\t\t\t// skip child rows & already filtered rows\n\t\t\t\t\t\tif ( isChild || ( searchFiltered && tsfRegex.filtered.test( txt ) ) ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata.$row = $rows.eq( rowIndex );\n\t\t\t\t\t\tdata.rowIndex = rowIndex;\n\t\t\t\t\t\tdata.cacheArray = norm_rows[ rowIndex ];\n\t\t\t\t\t\trowData = data.cacheArray[ c.columns ];\n\t\t\t\t\t\tdata.rawArray = rowData.raw;\n\t\t\t\t\t\tdata.childRowText = '';\n\n\t\t\t\t\t\tif ( !wo.filter_childByColumn ) {\n\t\t\t\t\t\t\ttxt = '';\n\t\t\t\t\t\t\t// child row cached text\n\t\t\t\t\t\t\tchildRow = rowData.child;\n\t\t\t\t\t\t\t// so, if 'table.config.widgetOptions.filter_childRows' is true and there is\n\t\t\t\t\t\t\t// a match anywhere in the child row, then it will make the row visible\n\t\t\t\t\t\t\t// checked here so the option can be changed dynamically\n\t\t\t\t\t\t\tfor ( indx = 0; indx < childRow.length; indx++ ) {\n\t\t\t\t\t\t\t\ttxt += ' ' + childRow[indx].join( ' ' ) || '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdata.childRowText = wo.filter_childRows ?\n\t\t\t\t\t\t\t\t( wo.filter_ignoreCase ? txt.toLowerCase() : txt ) :\n\t\t\t\t\t\t\t\t'';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tshowRow = false;\n\t\t\t\t\t\tshowParent = tsf.processRow( c, data, vars );\n\t\t\t\t\t\t$row = rowData.$row;\n\n\t\t\t\t\t\t// don't pass reference to val\n\t\t\t\t\t\tval = showParent ? true : false;\n\t\t\t\t\t\tchildRow = rowData.$row.filter( ':gt(0)' );\n\t\t\t\t\t\tif ( wo.filter_childRows && childRow.length ) {\n\t\t\t\t\t\t\tif ( wo.filter_childByColumn ) {\n\t\t\t\t\t\t\t\tif ( !wo.filter_childWithSibs ) {\n\t\t\t\t\t\t\t\t\t// hide all child rows\n\t\t\t\t\t\t\t\t\tchildRow.addClass( wo.filter_filteredRow );\n\t\t\t\t\t\t\t\t\t// if only showing resulting child row, only include parent\n\t\t\t\t\t\t\t\t\t$row = $row.eq( 0 );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// cycle through each child row\n\t\t\t\t\t\t\t\tfor ( indx = 0; indx < childRow.length; indx++ ) {\n\t\t\t\t\t\t\t\t\tdata.$row = childRow.eq( indx );\n\t\t\t\t\t\t\t\t\tdata.cacheArray = rowData.child[ indx ];\n\t\t\t\t\t\t\t\t\tdata.rawArray = data.cacheArray;\n\t\t\t\t\t\t\t\t\tval = tsf.processRow( c, data, vars );\n\t\t\t\t\t\t\t\t\t// use OR comparison on child rows\n\t\t\t\t\t\t\t\t\tshowRow = showRow || val;\n\t\t\t\t\t\t\t\t\tif ( !wo.filter_childWithSibs && val ) {\n\t\t\t\t\t\t\t\t\t\tchildRow.eq( indx ).removeClass( wo.filter_filteredRow );\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\t// keep parent row match even if no child matches... see #1020\n\t\t\t\t\t\t\tshowRow = showRow || showParent;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tshowRow = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$row\n\t\t\t\t\t\t\t.toggleClass( wo.filter_filteredRow, !showRow )[0]\n\t\t\t\t\t\t\t.display = showRow ? '' : 'none';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tc.filteredRows += $rows.not( '.' + wo.filter_filteredRow ).length;\n\t\t\t\tc.totalRows += $rows.length;\n\t\t\t\tts.processTbody( table, $tbody, false );\n\t\t\t}\n\t\t\t// lastCombinedFilter is no longer used internally\n\t\t\tc.lastCombinedFilter = storedFilters.join(''); // save last search\n\t\t\t// don't save 'filters' directly since it may have altered ( AnyMatch column searches )\n\t\t\tc.lastSearch = storedFilters;\n\t\t\tc.$table.data( 'lastSearch', storedFilters );\n\t\t\tif ( wo.filter_saveFilters && ts.storage ) {\n\t\t\t\tts.storage( table, 'tablesorter-filters', tsf.processFilters( storedFilters, true ) );\n\t\t\t}\n\t\t\tif ( debug ) {\n\t\t\t\tconsole.log( 'Filter >> Completed search' + ts.benchmark(time) );\n\t\t\t}\n\t\t\tif ( wo.filter_initialized ) {\n\t\t\t\tc.$table.triggerHandler( 'filterBeforeEnd', c );\n\t\t\t\tc.$table.triggerHandler( 'filterEnd', c );\n\t\t\t}\n\t\t\tsetTimeout( function() {\n\t\t\t\tts.applyWidget( c.table ); // make sure zebra widget is applied\n\t\t\t}, 0 );\n\t\t},\n\t\tgetOptionSource: function( table, column, onlyAvail ) {\n\t\t\ttable = $( table )[0];\n\t\t\tvar c = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tarry = false,\n\t\t\t\tsource = wo.filter_selectSource,\n\t\t\t\tlast = c.$table.data( 'lastSearch' ) || [],\n\t\t\t\tfxn = typeof source === 'function' ? true : ts.getColumnData( table, source, column );\n\n\t\t\tif ( onlyAvail && last[column] !== '' ) {\n\t\t\t\tonlyAvail = false;\n\t\t\t}\n\n\t\t\t// filter select source option\n\t\t\tif ( fxn === true ) {\n\t\t\t\t// OVERALL source\n\t\t\t\tarry = source( table, column, onlyAvail );\n\t\t\t} else if ( fxn instanceof $ || ( $.type( fxn ) === 'string' && fxn.indexOf( '</option>' ) >= 0 ) ) {\n\t\t\t\t// selectSource is a jQuery object or string of options\n\t\t\t\treturn fxn;\n\t\t\t} else if ( $.isArray( fxn ) ) {\n\t\t\t\tarry = fxn;\n\t\t\t} else if ( $.type( source ) === 'object' && fxn ) {\n\t\t\t\t// custom select source function for a SPECIFIC COLUMN\n\t\t\t\tarry = fxn( table, column, onlyAvail );\n\t\t\t\t// abort - updating the selects from an external method\n\t\t\t\tif (arry === null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( arry === false ) {\n\t\t\t\t// fall back to original method\n\t\t\t\tarry = tsf.getOptions( table, column, onlyAvail );\n\t\t\t}\n\n\t\t\treturn tsf.processOptions( table, column, arry );\n\n\t\t},\n\t\tprocessOptions: function( table, column, arry ) {\n\t\t\tif ( !$.isArray( arry ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttable = $( table )[0];\n\t\t\tvar cts, txt, indx, len, parsedTxt, str,\n\t\t\t\tc = table.config,\n\t\t\t\tvalidColumn = typeof column !== 'undefined' && column !== null && column >= 0 && column < c.columns,\n\t\t\t\tdirection = validColumn ? c.$headerIndexed[ column ].hasClass( 'filter-select-sort-desc' ) : false,\n\t\t\t\tparsed = [];\n\t\t\t// get unique elements and sort the list\n\t\t\t// if $.tablesorter.sortText exists ( not in the original tablesorter ),\n\t\t\t// then natural sort the list otherwise use a basic sort\n\t\t\tarry = $.grep( arry, function( value, indx ) {\n\t\t\t\tif ( value.text ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn $.inArray( value, arry ) === indx;\n\t\t\t});\n\t\t\tif ( validColumn && c.$headerIndexed[ column ].hasClass( 'filter-select-nosort' ) ) {\n\t\t\t\t// unsorted select options\n\t\t\t\treturn arry;\n\t\t\t} else {\n\t\t\t\tlen = arry.length;\n\t\t\t\t// parse select option values\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\ttxt = arry[ indx ];\n\t\t\t\t\t// check for object\n\t\t\t\t\tstr = txt.text ? txt.text : txt;\n\t\t\t\t\t// sortNatural breaks if you don't pass it strings\n\t\t\t\t\tparsedTxt = ( validColumn && c.parsers && c.parsers.length &&\n\t\t\t\t\t\tc.parsers[ column ].format( str, table, [], column ) || str ).toString();\n\t\t\t\t\tparsedTxt = c.widgetOptions.filter_ignoreCase ? parsedTxt.toLowerCase() : parsedTxt;\n\t\t\t\t\t// parse array data using set column parser; this DOES NOT pass the original\n\t\t\t\t\t// table cell to the parser format function\n\t\t\t\t\tif ( txt.text ) {\n\t\t\t\t\t\ttxt.parsed = parsedTxt;\n\t\t\t\t\t\tparsed[ parsed.length ] = txt;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparsed[ parsed.length ] = {\n\t\t\t\t\t\t\ttext : txt,\n\t\t\t\t\t\t\t// check parser length - fixes #934\n\t\t\t\t\t\t\tparsed : parsedTxt\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// sort parsed select options\n\t\t\t\tcts = c.textSorter || '';\n\t\t\t\tparsed.sort( function( a, b ) {\n\t\t\t\t\tvar x = direction ? b.parsed : a.parsed,\n\t\t\t\t\t\ty = direction ? a.parsed : b.parsed;\n\t\t\t\t\tif ( validColumn && typeof cts === 'function' ) {\n\t\t\t\t\t\t// custom OVERALL text sorter\n\t\t\t\t\t\treturn cts( x, y, true, column, table );\n\t\t\t\t\t} else if ( validColumn && typeof cts === 'object' && cts.hasOwnProperty( column ) ) {\n\t\t\t\t\t\t// custom text sorter for a SPECIFIC COLUMN\n\t\t\t\t\t\treturn cts[column]( x, y, true, column, table );\n\t\t\t\t\t} else if ( ts.sortNatural ) {\n\t\t\t\t\t\t// fall back to natural sort\n\t\t\t\t\t\treturn ts.sortNatural( x, y );\n\t\t\t\t\t}\n\t\t\t\t\t// using an older version! do a basic sort\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t\t// rebuild arry from sorted parsed data\n\t\t\t\tarry = [];\n\t\t\t\tlen = parsed.length;\n\t\t\t\tfor ( indx = 0; indx < len; indx++ ) {\n\t\t\t\t\tarry[ arry.length ] = parsed[indx];\n\t\t\t\t}\n\t\t\t\treturn arry;\n\t\t\t}\n\t\t},\n\t\tgetOptions: function( table, column, onlyAvail ) {\n\t\t\ttable = $( table )[0];\n\t\t\tvar rowIndex, tbodyIndex, len, row, cache, indx, child, childLen,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tarry = [];\n\t\t\tfor ( tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++ ) {\n\t\t\t\tcache = c.cache[tbodyIndex];\n\t\t\t\tlen = c.cache[tbodyIndex].normalized.length;\n\t\t\t\t// loop through the rows\n\t\t\t\tfor ( rowIndex = 0; rowIndex < len; rowIndex++ ) {\n\t\t\t\t\t// get cached row from cache.row ( old ) or row data object\n\t\t\t\t\t// ( new; last item in normalized array )\n\t\t\t\t\trow = cache.row ?\n\t\t\t\t\t\tcache.row[ rowIndex ] :\n\t\t\t\t\t\tcache.normalized[ rowIndex ][ c.columns ].$row[0];\n\t\t\t\t\t// check if has class filtered\n\t\t\t\t\tif ( onlyAvail && row.className.match( wo.filter_filteredRow ) ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// get non-normalized cell content\n\t\t\t\t\tif ( wo.filter_useParsedData ||\n\t\t\t\t\t\tc.parsers[column].parsed ||\n\t\t\t\t\t\tc.$headerIndexed[column].hasClass( 'filter-parsed' ) ) {\n\t\t\t\t\t\tarry[ arry.length ] = '' + cache.normalized[ rowIndex ][ column ];\n\t\t\t\t\t\t// child row parsed data\n\t\t\t\t\t\tif ( wo.filter_childRows && wo.filter_childByColumn ) {\n\t\t\t\t\t\t\tchildLen = cache.normalized[ rowIndex ][ c.columns ].$row.length - 1;\n\t\t\t\t\t\t\tfor ( indx = 0; indx < childLen; indx++ ) {\n\t\t\t\t\t\t\t\tarry[ arry.length ] = '' + cache.normalized[ rowIndex ][ c.columns ].child[ indx ][ column ];\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// get raw cached data instead of content directly from the cells\n\t\t\t\t\t\tarry[ arry.length ] = cache.normalized[ rowIndex ][ c.columns ].raw[ column ];\n\t\t\t\t\t\t// child row unparsed data\n\t\t\t\t\t\tif ( wo.filter_childRows && wo.filter_childByColumn ) {\n\t\t\t\t\t\t\tchildLen = cache.normalized[ rowIndex ][ c.columns ].$row.length;\n\t\t\t\t\t\t\tfor ( indx = 1; indx < childLen; indx++ ) {\n\t\t\t\t\t\t\t\tchild =  cache.normalized[ rowIndex ][ c.columns ].$row.eq( indx ).children().eq( column );\n\t\t\t\t\t\t\t\tarry[ arry.length ] = '' + ts.getElementText( c, child, column );\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 arry;\n\t\t},\n\t\tbuildSelect: function( table, column, arry, updating, onlyAvail ) {\n\t\t\ttable = $( table )[0];\n\t\t\tcolumn = parseInt( column, 10 );\n\t\t\tif ( !table.config.cache || $.isEmptyObject( table.config.cache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar indx, val, txt, t, $filters, $filter, option,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tnode = c.$headerIndexed[ column ],\n\t\t\t\t// t.data( 'placeholder' ) won't work in jQuery older than 1.4.3\n\t\t\t\toptions = '<option value=\"\">' +\n\t\t\t\t\t( node.data( 'placeholder' ) ||\n\t\t\t\t\t\tnode.attr( 'data-placeholder' ) ||\n\t\t\t\t\t\two.filter_placeholder.select || ''\n\t\t\t\t\t) + '</option>',\n\t\t\t\t// Get curent filter value\n\t\t\t\tcurrentValue = c.$table\n\t\t\t\t\t.find( 'thead' )\n\t\t\t\t\t.find( 'select.' + tscss.filter + '[data-column=\"' + column + '\"]' )\n\t\t\t\t\t.val();\n\n\t\t\t// nothing included in arry ( external source ), so get the options from\n\t\t\t// filter_selectSource or column data\n\t\t\tif ( typeof arry === 'undefined' || arry === '' ) {\n\t\t\t\tarry = tsf.getOptionSource( table, column, onlyAvail );\n\t\t\t\t// abort, selects are updated by an external method\n\t\t\t\tif (arry === null) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( $.isArray( arry ) ) {\n\t\t\t\t// build option list\n\t\t\t\tfor ( indx = 0; indx < arry.length; indx++ ) {\n\t\t\t\t\toption = arry[ indx ];\n\t\t\t\t\tif ( option.text ) {\n\t\t\t\t\t\t// OBJECT!! add data-function-name in case the value is set in filter_functions\n\t\t\t\t\t\toption['data-function-name'] = typeof option.value === 'undefined' ? option.text : option.value;\n\n\t\t\t\t\t\t// support jQuery < v1.8, otherwise the below code could be shortened to\n\t\t\t\t\t\t// options += $( '<option>', option )[ 0 ].outerHTML;\n\t\t\t\t\t\toptions += '<option';\n\t\t\t\t\t\tfor ( val in option ) {\n\t\t\t\t\t\t\tif ( option.hasOwnProperty( val ) && val !== 'text' ) {\n\t\t\t\t\t\t\t\toptions += ' ' + val + '=\"' + option[ val ].replace( tsfRegex.quote, '&quot;' ) + '\"';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( !option.value ) {\n\t\t\t\t\t\t\toptions += ' value=\"' + option.text.replace( tsfRegex.quote, '&quot;' ) + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t\toptions += '>' + option.text.replace( tsfRegex.quote, '&quot;' ) + '</option>';\n\t\t\t\t\t\t// above code is needed in jQuery < v1.8\n\n\t\t\t\t\t\t// make sure we don't turn an object into a string (objects without a \"text\" property)\n\t\t\t\t\t} else if ( '' + option !== '[object Object]' ) {\n\t\t\t\t\t\ttxt = option = ( '' + option ).replace( tsfRegex.quote, '&quot;' );\n\t\t\t\t\t\tval = txt;\n\t\t\t\t\t\t// allow including a symbol in the selectSource array\n\t\t\t\t\t\t// 'a-z|A through Z' so that 'a-z' becomes the option value\n\t\t\t\t\t\t// and 'A through Z' becomes the option text\n\t\t\t\t\t\tif ( txt.indexOf( wo.filter_selectSourceSeparator ) >= 0 ) {\n\t\t\t\t\t\t\tt = txt.split( wo.filter_selectSourceSeparator );\n\t\t\t\t\t\t\tval = t[0];\n\t\t\t\t\t\t\ttxt = t[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// replace quotes - fixes #242 & ignore empty strings\n\t\t\t\t\t\t// see http://stackoverflow.com/q/14990971/145346\n\t\t\t\t\t\toptions += option !== '' ?\n\t\t\t\t\t\t\t'<option ' +\n\t\t\t\t\t\t\t\t( val === txt ? '' : 'data-function-name=\"' + option + '\" ' ) +\n\t\t\t\t\t\t\t\t'value=\"' + val + '\">' + txt +\n\t\t\t\t\t\t\t'</option>' : '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// clear arry so it doesn't get appended twice\n\t\t\t\tarry = [];\n\t\t\t}\n\n\t\t\t// update all selects in the same column ( clone thead in sticky headers &\n\t\t\t// any external selects ) - fixes 473\n\t\t\t$filters = ( c.$filters ? c.$filters : c.$table.children( 'thead' ) )\n\t\t\t\t.find( '.' + tscss.filter );\n\t\t\tif ( wo.filter_$externalFilters ) {\n\t\t\t\t$filters = $filters && $filters.length ?\n\t\t\t\t\t$filters.add( wo.filter_$externalFilters ) :\n\t\t\t\t\two.filter_$externalFilters;\n\t\t\t}\n\t\t\t$filter = $filters.filter( 'select[data-column=\"' + column + '\"]' );\n\n\t\t\t// make sure there is a select there!\n\t\t\tif ( $filter.length ) {\n\t\t\t\t$filter[ updating ? 'html' : 'append' ]( options );\n\t\t\t\tif ( !$.isArray( arry ) ) {\n\t\t\t\t\t// append options if arry is provided externally as a string or jQuery object\n\t\t\t\t\t// options ( default value ) was already added\n\t\t\t\t\t$filter.append( arry ).val( currentValue );\n\t\t\t\t}\n\t\t\t\t$filter.val( currentValue );\n\t\t\t}\n\t\t},\n\t\tbuildDefault: function( table, updating ) {\n\t\t\tvar columnIndex, $header, noSelect,\n\t\t\t\tc = table.config,\n\t\t\t\two = c.widgetOptions,\n\t\t\t\tcolumns = c.columns;\n\t\t\t// build default select dropdown\n\t\t\tfor ( columnIndex = 0; columnIndex < columns; columnIndex++ ) {\n\t\t\t\t$header = c.$headerIndexed[columnIndex];\n\t\t\t\tnoSelect = !( $header.hasClass( 'filter-false' ) || $header.hasClass( 'parser-false' ) );\n\t\t\t\t// look for the filter-select class; build/update it if found\n\t\t\t\tif ( ( $header.hasClass( 'filter-select' ) ||\n\t\t\t\t\tts.getColumnData( table, wo.filter_functions, columnIndex ) === true ) && noSelect ) {\n\t\t\t\t\ttsf.buildSelect( table, columnIndex, '', updating, $header.hasClass( wo.filter_onlyAvail ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// filter regex variable\n\ttsfRegex = tsf.regex;\n\n\tts.getFilters = function( table, getRaw, setFilters, skipFirst ) {\n\t\tvar i, $filters, $column, cols,\n\t\t\tfilters = [],\n\t\t\tc = table ? $( table )[0].config : '',\n\t\t\two = c ? c.widgetOptions : '';\n\t\tif ( ( getRaw !== true && wo && !wo.filter_columnFilters ) ||\n\t\t\t// setFilters called, but last search is exactly the same as the current\n\t\t\t// fixes issue #733 & #903 where calling update causes the input values to reset\n\t\t\t( $.isArray(setFilters) && tsf.equalFilters(c, setFilters, c.lastSearch) )\n\t\t) {\n\t\t\treturn $( table ).data( 'lastSearch' ) || [];\n\t\t}\n\t\tif ( c ) {\n\t\t\tif ( c.$filters ) {\n\t\t\t\t$filters = c.$filters.find( '.' + tscss.filter );\n\t\t\t}\n\t\t\tif ( wo.filter_$externalFilters ) {\n\t\t\t\t$filters = $filters && $filters.length ?\n\t\t\t\t\t$filters.add( wo.filter_$externalFilters ) :\n\t\t\t\t\two.filter_$externalFilters;\n\t\t\t}\n\t\t\tif ( $filters && $filters.length ) {\n\t\t\t\tfilters = setFilters || [];\n\t\t\t\tfor ( i = 0; i < c.columns + 1; i++ ) {\n\t\t\t\t\tcols = ( i === c.columns ?\n\t\t\t\t\t\t// 'all' columns can now include a range or set of columms ( data-column='0-2,4,6-7' )\n\t\t\t\t\t\two.filter_anyColumnSelector + ',' + wo.filter_multipleColumnSelector :\n\t\t\t\t\t\t'[data-column=\"' + i + '\"]' );\n\t\t\t\t\t$column = $filters.filter( cols );\n\t\t\t\t\tif ( $column.length ) {\n\t\t\t\t\t\t// move the latest search to the first slot in the array\n\t\t\t\t\t\t$column = tsf.getLatestSearch( $column );\n\t\t\t\t\t\tif ( $.isArray( setFilters ) ) {\n\t\t\t\t\t\t\t// skip first ( latest input ) to maintain cursor position while typing\n\t\t\t\t\t\t\tif ( skipFirst && $column.length > 1 ) {\n\t\t\t\t\t\t\t\t$column = $column.slice( 1 );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( i === c.columns ) {\n\t\t\t\t\t\t\t\t// prevent data-column='all' from filling data-column='0,1' ( etc )\n\t\t\t\t\t\t\t\tcols = $column.filter( wo.filter_anyColumnSelector );\n\t\t\t\t\t\t\t\t$column = cols.length ? cols : $column;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t$column\n\t\t\t\t\t\t\t\t.val( setFilters[ i ] )\n\t\t\t\t\t\t\t\t// must include a namespace here; but not c.namespace + 'filter'?\n\t\t\t\t\t\t\t\t.trigger( 'change' + c.namespace );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfilters[i] = $column.val() || '';\n\t\t\t\t\t\t\t// don't change the first... it will move the cursor\n\t\t\t\t\t\t\tif ( i === c.columns ) {\n\t\t\t\t\t\t\t\t// don't update range columns from 'all' setting\n\t\t\t\t\t\t\t\t$column\n\t\t\t\t\t\t\t\t\t.slice( 1 )\n\t\t\t\t\t\t\t\t\t.filter( '[data-column*=\"' + $column.attr( 'data-column' ) + '\"]' )\n\t\t\t\t\t\t\t\t\t.val( filters[ i ] );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$column\n\t\t\t\t\t\t\t\t\t.slice( 1 )\n\t\t\t\t\t\t\t\t\t.val( filters[ i ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// save any match input dynamically\n\t\t\t\t\t\tif ( i === c.columns && $column.length ) {\n\t\t\t\t\t\t\two.filter_$anyMatch = $column;\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\treturn filters;\n\t};\n\n\tts.setFilters = function( table, filter, apply, skipFirst ) {\n\t\tvar c = table ? $( table )[0].config : '',\n\t\t\tvalid = ts.getFilters( table, true, filter, skipFirst );\n\t\t// default apply to \"true\"\n\t\tif ( typeof apply === 'undefined' ) {\n\t\t\tapply = true;\n\t\t}\n\t\tif ( c && apply ) {\n\t\t\t// ensure new set filters are applied, even if the search is the same\n\t\t\tc.lastCombinedFilter = null;\n\t\t\tc.lastSearch = [];\n\t\t\ttsf.searching( c.table, filter, skipFirst );\n\t\t\tc.$table.triggerHandler( 'filterFomatterUpdate' );\n\t\t}\n\t\treturn valid.length !== 0;\n\t};\n\n})( jQuery );\n\n/*! Widget: stickyHeaders - updated 9/27/2017 (v2.29.0) *//*\n * Requires tablesorter v2.8+ and jQuery 1.4.3+\n * by Rob Garrison\n */\n;(function ($, window) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\t$.extend(ts.css, {\n\t\tsticky    : 'tablesorter-stickyHeader', // stickyHeader\n\t\tstickyVis : 'tablesorter-sticky-visible',\n\t\tstickyHide: 'tablesorter-sticky-hidden',\n\t\tstickyWrap: 'tablesorter-sticky-wrapper'\n\t});\n\n\t// Add a resize event to table headers\n\tts.addHeaderResizeEvent = function(table, disable, settings) {\n\t\ttable = $(table)[0]; // make sure we're using a dom element\n\t\tif ( !table.config ) { return; }\n\t\tvar defaults = {\n\t\t\t\ttimer : 250\n\t\t\t},\n\t\t\toptions = $.extend({}, defaults, settings),\n\t\t\tc = table.config,\n\t\t\two = c.widgetOptions,\n\t\t\tcheckSizes = function( triggerEvent ) {\n\t\t\t\tvar index, headers, $header, sizes, width, height,\n\t\t\t\t\tlen = c.$headers.length;\n\t\t\t\two.resize_flag = true;\n\t\t\t\theaders = [];\n\t\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t\t$header = c.$headers.eq( index );\n\t\t\t\t\tsizes = $header.data( 'savedSizes' ) || [ 0, 0 ]; // fixes #394\n\t\t\t\t\twidth = $header[0].offsetWidth;\n\t\t\t\t\theight = $header[0].offsetHeight;\n\t\t\t\t\tif ( width !== sizes[0] || height !== sizes[1] ) {\n\t\t\t\t\t\t$header.data( 'savedSizes', [ width, height ] );\n\t\t\t\t\t\theaders.push( $header[0] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( headers.length && triggerEvent !== false ) {\n\t\t\t\t\tc.$table.triggerHandler( 'resize', [ headers ] );\n\t\t\t\t}\n\t\t\t\two.resize_flag = false;\n\t\t\t};\n\t\tclearInterval(wo.resize_timer);\n\t\tif (disable) {\n\t\t\two.resize_flag = false;\n\t\t\treturn false;\n\t\t}\n\t\tcheckSizes( false );\n\t\two.resize_timer = setInterval(function() {\n\t\t\tif (wo.resize_flag) { return; }\n\t\t\tcheckSizes();\n\t\t}, options.timer);\n\t};\n\n\tfunction getStickyOffset(c, wo) {\n\t\tvar $el = isNaN(wo.stickyHeaders_offset) ? $(wo.stickyHeaders_offset) : [];\n\t\treturn $el.length ?\n\t\t\t$el.height() || 0 :\n\t\t\tparseInt(wo.stickyHeaders_offset, 10) || 0;\n\t}\n\n\t// Sticky headers based on this awesome article:\n\t// http://css-tricks.com/13465-persistent-headers/\n\t// and https://github.com/jmosbech/StickyTableHeaders by Jonas Mosbech\n\t// **************************\n\tts.addWidget({\n\t\tid: 'stickyHeaders',\n\t\tpriority: 54, // sticky widget must be initialized after the filter & before pager widget!\n\t\toptions: {\n\t\t\tstickyHeaders : '',       // extra class name added to the sticky header row\n\t\t\tstickyHeaders_appendTo : null, // jQuery selector or object to phycially attach the sticky headers\n\t\t\tstickyHeaders_attachTo : null, // jQuery selector or object to attach scroll listener to (overridden by xScroll & yScroll settings)\n\t\t\tstickyHeaders_xScroll : null, // jQuery selector or object to monitor horizontal scroll position (defaults: xScroll > attachTo > window)\n\t\t\tstickyHeaders_yScroll : null, // jQuery selector or object to monitor vertical scroll position (defaults: yScroll > attachTo > window)\n\t\t\tstickyHeaders_offset : 0, // number or jquery selector targeting the position:fixed element\n\t\t\tstickyHeaders_filteredToTop: true, // scroll table top into view after filtering\n\t\t\tstickyHeaders_cloneId : '-sticky', // added to table ID, if it exists\n\t\t\tstickyHeaders_addResizeEvent : true, // trigger 'resize' event on headers\n\t\t\tstickyHeaders_includeCaption : true, // if false and a caption exist, it won't be included in the sticky header\n\t\t\tstickyHeaders_zIndex : 2 // The zIndex of the stickyHeaders, allows the user to adjust this to their needs\n\t\t},\n\t\tformat: function(table, c, wo) {\n\t\t\t// filter widget doesn't initialize on an empty table. Fixes #449\n\t\t\tif ( c.$table.hasClass('hasStickyHeaders') || ($.inArray('filter', c.widgets) >= 0 && !c.$table.hasClass('hasFilters')) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar index, len, $t,\n\t\t\t\t$table = c.$table,\n\t\t\t\t// add position: relative to attach element, hopefully it won't cause trouble.\n\t\t\t\t$attach = $(wo.stickyHeaders_attachTo || wo.stickyHeaders_appendTo),\n\t\t\t\tnamespace = c.namespace + 'stickyheaders ',\n\t\t\t\t// element to watch for the scroll event\n\t\t\t\t$yScroll = $(wo.stickyHeaders_yScroll || wo.stickyHeaders_attachTo || window),\n\t\t\t\t$xScroll = $(wo.stickyHeaders_xScroll || wo.stickyHeaders_attachTo || window),\n\t\t\t\t$thead = $table.children('thead:first'),\n\t\t\t\t$header = $thead.children('tr').not('.sticky-false').children(),\n\t\t\t\t$tfoot = $table.children('tfoot'),\n\t\t\t\tstickyOffset = getStickyOffset(c, wo),\n\t\t\t\t// is this table nested? If so, find parent sticky header wrapper (div, not table)\n\t\t\t\t$nestedSticky = $table.parent().closest('.' + ts.css.table).hasClass('hasStickyHeaders') ?\n\t\t\t\t\t$table.parent().closest('table.tablesorter')[0].config.widgetOptions.$sticky.parent() : [],\n\t\t\t\tnestedStickyTop = $nestedSticky.length ? $nestedSticky.height() : 0,\n\t\t\t\t// clone table, then wrap to make sticky header\n\t\t\t\t$stickyTable = wo.$sticky = $table.clone()\n\t\t\t\t\t.addClass('containsStickyHeaders ' + ts.css.sticky + ' ' + wo.stickyHeaders + ' ' + c.namespace.slice(1) + '_extra_table' )\n\t\t\t\t\t.wrap('<div class=\"' + ts.css.stickyWrap + '\">'),\n\t\t\t\t$stickyWrap = $stickyTable.parent()\n\t\t\t\t\t.addClass(ts.css.stickyHide)\n\t\t\t\t\t.css({\n\t\t\t\t\t\tposition   : $attach.length ? 'absolute' : 'fixed',\n\t\t\t\t\t\tpadding    : parseInt( $stickyTable.parent().parent().css('padding-left'), 10 ),\n\t\t\t\t\t\ttop        : stickyOffset + nestedStickyTop,\n\t\t\t\t\t\tleft       : 0,\n\t\t\t\t\t\tvisibility : 'hidden',\n\t\t\t\t\t\tzIndex     : wo.stickyHeaders_zIndex || 2\n\t\t\t\t\t}),\n\t\t\t\t$stickyThead = $stickyTable.children('thead:first'),\n\t\t\t\t$stickyCells,\n\t\t\t\tlaststate = '',\n\t\t\t\tsetWidth = function($orig, $clone) {\n\t\t\t\t\tvar index, width, border, $cell, $this,\n\t\t\t\t\t\t$cells = $orig.filter(':visible'),\n\t\t\t\t\t\tlen = $cells.length;\n\t\t\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t\t\t$cell = $clone.filter(':visible').eq(index);\n\t\t\t\t\t\t$this = $cells.eq(index);\n\t\t\t\t\t\t// code from https://github.com/jmosbech/StickyTableHeaders\n\t\t\t\t\t\tif ($this.css('box-sizing') === 'border-box') {\n\t\t\t\t\t\t\twidth = $this.outerWidth();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif ($cell.css('border-collapse') === 'collapse') {\n\t\t\t\t\t\t\t\tif (window.getComputedStyle) {\n\t\t\t\t\t\t\t\t\twidth = parseFloat( window.getComputedStyle($this[0], null).width );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// ie8 only\n\t\t\t\t\t\t\t\t\tborder = parseFloat( $this.css('border-width') );\n\t\t\t\t\t\t\t\t\twidth = $this.outerWidth() - parseFloat( $this.css('padding-left') ) - parseFloat( $this.css('padding-right') ) - border;\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\twidth = $this.width();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$cell.css({\n\t\t\t\t\t\t\t'width': width,\n\t\t\t\t\t\t\t'min-width': width,\n\t\t\t\t\t\t\t'max-width': width\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tgetLeftPosition = function(yWindow) {\n\t\t\t\t\tif (yWindow === false && $nestedSticky.length) {\n\t\t\t\t\t\treturn $table.position().left;\n\t\t\t\t\t}\n\t\t\t\t\treturn $attach.length ?\n\t\t\t\t\t\tparseInt($attach.css('padding-left'), 10) || 0 :\n\t\t\t\t\t\t$table.offset().left - parseInt($table.css('margin-left'), 10) - $(window).scrollLeft();\n\t\t\t\t},\n\t\t\t\tresizeHeader = function() {\n\t\t\t\t\t$stickyWrap.css({\n\t\t\t\t\t\tleft : getLeftPosition(),\n\t\t\t\t\t\twidth: $table.outerWidth()\n\t\t\t\t\t});\n\t\t\t\t\tsetWidth( $table, $stickyTable );\n\t\t\t\t\tsetWidth( $header, $stickyCells );\n\t\t\t\t},\n\t\t\t\tscrollSticky = function( resizing ) {\n\t\t\t\t\tif (!$table.is(':visible')) { return; } // fixes #278\n\t\t\t\t\t// Detect nested tables - fixes #724\n\t\t\t\t\tnestedStickyTop = $nestedSticky.length ? $nestedSticky.offset().top - $yScroll.scrollTop() + $nestedSticky.height() : 0;\n\t\t\t\t\tvar tmp,\n\t\t\t\t\t\toffset = $table.offset(),\n\t\t\t\t\t\tstickyOffset = getStickyOffset(c, wo),\n\t\t\t\t\t\tyWindow = $.isWindow( $yScroll[0] ), // $.isWindow needs jQuery 1.4.3\n\t\t\t\t\t\tyScroll = yWindow ?\n\t\t\t\t\t\t\t$yScroll.scrollTop() :\n\t\t\t\t\t\t\t// use parent sticky position if nested AND inside of a scrollable element - see #1512\n\t\t\t\t\t\t\t$nestedSticky.length ? parseInt($nestedSticky[0].style.top, 10) : $yScroll.offset().top,\n\t\t\t\t\t\tattachTop = $attach.length ? yScroll : $yScroll.scrollTop(),\n\t\t\t\t\t\tcaptionHeight = wo.stickyHeaders_includeCaption ? 0 : $table.children( 'caption' ).height() || 0,\n\t\t\t\t\t\tscrollTop = attachTop + stickyOffset + nestedStickyTop - captionHeight,\n\t\t\t\t\t\ttableHeight = $table.height() - ($stickyWrap.height() + ($tfoot.height() || 0)) - captionHeight,\n\t\t\t\t\t\tisVisible = ( scrollTop > offset.top ) && ( scrollTop < offset.top + tableHeight ) ? 'visible' : 'hidden',\n\t\t\t\t\t\tstate = isVisible === 'visible' ? ts.css.stickyVis : ts.css.stickyHide,\n\t\t\t\t\t\tneedsUpdating = !$stickyWrap.hasClass( state ),\n\t\t\t\t\t\tcssSettings = { visibility : isVisible };\n\t\t\t\t\tif ($attach.length) {\n\t\t\t\t\t\t// attached sticky headers always need updating\n\t\t\t\t\t\tneedsUpdating = true;\n\t\t\t\t\t\tcssSettings.top = yWindow ? scrollTop - $attach.offset().top : $attach.scrollTop();\n\t\t\t\t\t}\n\t\t\t\t\t// adjust when scrolling horizontally - fixes issue #143\n\t\t\t\t\ttmp = getLeftPosition(yWindow);\n\t\t\t\t\tif (tmp !== parseInt($stickyWrap.css('left'), 10)) {\n\t\t\t\t\t\tneedsUpdating = true;\n\t\t\t\t\t\tcssSettings.left = tmp;\n\t\t\t\t\t}\n\t\t\t\t\tcssSettings.top = ( cssSettings.top || 0 ) +\n\t\t\t\t\t\t// If nested AND inside of a scrollable element, only add parent sticky height\n\t\t\t\t\t\t(!yWindow && $nestedSticky.length ? $nestedSticky.height() : stickyOffset + nestedStickyTop);\n\t\t\t\t\tif (needsUpdating) {\n\t\t\t\t\t\t$stickyWrap\n\t\t\t\t\t\t\t.removeClass( ts.css.stickyVis + ' ' + ts.css.stickyHide )\n\t\t\t\t\t\t\t.addClass( state )\n\t\t\t\t\t\t\t.css(cssSettings);\n\t\t\t\t\t}\n\t\t\t\t\tif (isVisible !== laststate || resizing) {\n\t\t\t\t\t\t// make sure the column widths match\n\t\t\t\t\t\tresizeHeader();\n\t\t\t\t\t\tlaststate = isVisible;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t// only add a position relative if a position isn't already defined\n\t\t\tif ($attach.length && !$attach.css('position')) {\n\t\t\t\t$attach.css('position', 'relative');\n\t\t\t}\n\t\t\t// fix clone ID, if it exists - fixes #271\n\t\t\tif ($stickyTable.attr('id')) { $stickyTable[0].id += wo.stickyHeaders_cloneId; }\n\t\t\t// clear out cloned table, except for sticky header\n\t\t\t// include caption & filter row (fixes #126 & #249) - don't remove cells to get correct cell indexing\n\t\t\t$stickyTable.find('> thead:gt(0), tr.sticky-false').hide();\n\t\t\t$stickyTable.find('> tbody, > tfoot').remove();\n\t\t\t$stickyTable.find('caption').toggle(wo.stickyHeaders_includeCaption);\n\t\t\t// issue #172 - find td/th in sticky header\n\t\t\t$stickyCells = $stickyThead.children().children();\n\t\t\t$stickyTable.css({ height:0, width:0, margin: 0 });\n\t\t\t// remove resizable block\n\t\t\t$stickyCells.find('.' + ts.css.resizer).remove();\n\t\t\t// update sticky header class names to match real header after sorting\n\t\t\t$table\n\t\t\t\t.addClass('hasStickyHeaders')\n\t\t\t\t.bind('pagerComplete' + namespace, function() {\n\t\t\t\t\tresizeHeader();\n\t\t\t\t});\n\n\t\t\tts.bindEvents(table, $stickyThead.children().children('.' + ts.css.header));\n\n\t\t\tif (wo.stickyHeaders_appendTo) {\n\t\t\t\t$(wo.stickyHeaders_appendTo).append( $stickyWrap );\n\t\t\t} else {\n\t\t\t\t// add stickyheaders AFTER the table. If the table is selected by ID, the original one (first) will be returned.\n\t\t\t\t$table.after( $stickyWrap );\n\t\t\t}\n\n\t\t\t// onRenderHeader is defined, we need to do something about it (fixes #641)\n\t\t\tif (c.onRenderHeader) {\n\t\t\t\t$t = $stickyThead.children('tr').children();\n\t\t\t\tlen = $t.length;\n\t\t\t\tfor ( index = 0; index < len; index++ ) {\n\t\t\t\t\t// send second parameter\n\t\t\t\t\tc.onRenderHeader.apply( $t.eq( index ), [ index, c, $stickyTable ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// make it sticky!\n\t\t\t$xScroll.add($yScroll)\n\t\t\t\t.unbind( ('scroll resize '.split(' ').join( namespace )).replace(/\\s+/g, ' ') )\n\t\t\t\t.bind('scroll resize '.split(' ').join( namespace ), function( event ) {\n\t\t\t\t\tscrollSticky( event.type === 'resize' );\n\t\t\t\t});\n\t\t\tc.$table\n\t\t\t\t.unbind('stickyHeadersUpdate' + namespace)\n\t\t\t\t.bind('stickyHeadersUpdate' + namespace, function() {\n\t\t\t\t\tscrollSticky( true );\n\t\t\t\t});\n\n\t\t\tif (wo.stickyHeaders_addResizeEvent) {\n\t\t\t\tts.addHeaderResizeEvent(table);\n\t\t\t}\n\n\t\t\t// look for filter widget\n\t\t\tif ($table.hasClass('hasFilters') && wo.filter_columnFilters) {\n\t\t\t\t// scroll table into view after filtering, if sticky header is active - #482\n\t\t\t\t$table.bind('filterEnd' + namespace, function() {\n\t\t\t\t\t// $(':focus') needs jQuery 1.6+\n\t\t\t\t\tvar $td = $(document.activeElement).closest('td'),\n\t\t\t\t\t\tcolumn = $td.parent().children().index($td);\n\t\t\t\t\t// only scroll if sticky header is active\n\t\t\t\t\tif ($stickyWrap.hasClass(ts.css.stickyVis) && wo.stickyHeaders_filteredToTop) {\n\t\t\t\t\t\t// scroll to original table (not sticky clone)\n\t\t\t\t\t\twindow.scrollTo(0, $table.position().top);\n\t\t\t\t\t\t// give same input/select focus; check if c.$filters exists; fixes #594\n\t\t\t\t\t\tif (column >= 0 && c.$filters) {\n\t\t\t\t\t\t\tc.$filters.eq(column).find('a, select, input').filter(':visible').focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tts.filter.bindSearch( $table, $stickyCells.find('.' + ts.css.filter) );\n\t\t\t\t// support hideFilters\n\t\t\t\tif (wo.filter_hideFilters) {\n\t\t\t\t\tts.filter.hideFilters(c, $stickyTable);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// resize table (Firefox)\n\t\t\tif (wo.stickyHeaders_addResizeEvent) {\n\t\t\t\t$table.bind('resize' + c.namespace + 'stickyheaders', function() {\n\t\t\t\t\tresizeHeader();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// make sure sticky is visible if page is partially scrolled\n\t\t\tscrollSticky( true );\n\t\t\t$table.triggerHandler('stickyHeadersInit');\n\n\t\t},\n\t\tremove: function(table, c, wo) {\n\t\t\tvar namespace = c.namespace + 'stickyheaders ';\n\t\t\tc.$table\n\t\t\t\t.removeClass('hasStickyHeaders')\n\t\t\t\t.unbind( ('pagerComplete resize filterEnd stickyHeadersUpdate '.split(' ').join(namespace)).replace(/\\s+/g, ' ') )\n\t\t\t\t.next('.' + ts.css.stickyWrap).remove();\n\t\t\tif (wo.$sticky && wo.$sticky.length) { wo.$sticky.remove(); } // remove cloned table\n\t\t\t$(window)\n\t\t\t\t.add(wo.stickyHeaders_xScroll)\n\t\t\t\t.add(wo.stickyHeaders_yScroll)\n\t\t\t\t.add(wo.stickyHeaders_attachTo)\n\t\t\t\t.unbind( ('scroll resize '.split(' ').join(namespace)).replace(/\\s+/g, ' ') );\n\t\t\tts.addHeaderResizeEvent(table, true);\n\t\t}\n\t});\n\n})(jQuery, window);\n\n/*! Widget: resizable - updated 2018-03-26 (v2.30.2) */\n/*jshint browser:true, jquery:true, unused:false */\n;(function ($, window) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\t$.extend(ts.css, {\n\t\tresizableContainer : 'tablesorter-resizable-container',\n\t\tresizableHandle    : 'tablesorter-resizable-handle',\n\t\tresizableNoSelect  : 'tablesorter-disableSelection',\n\t\tresizableStorage   : 'tablesorter-resizable'\n\t});\n\n\t// Add extra scroller css\n\t$(function() {\n\t\tvar s = '<style>' +\n\t\t\t'body.' + ts.css.resizableNoSelect + ' { -ms-user-select: none; -moz-user-select: -moz-none;' +\n\t\t\t\t'-khtml-user-select: none; -webkit-user-select: none; user-select: none; }' +\n\t\t\t'.' + ts.css.resizableContainer + ' { position: relative; height: 1px; }' +\n\t\t\t// make handle z-index > than stickyHeader z-index, so the handle stays above sticky header\n\t\t\t'.' + ts.css.resizableHandle + ' { position: absolute; display: inline-block; width: 8px;' +\n\t\t\t\t'top: 1px; cursor: ew-resize; z-index: 3; user-select: none; -moz-user-select: none; }' +\n\t\t\t'</style>';\n\t\t$('head').append(s);\n\t});\n\n\tts.resizable = {\n\t\tinit : function( c, wo ) {\n\t\t\tif ( c.$table.hasClass( 'hasResizable' ) ) { return; }\n\t\t\tc.$table.addClass( 'hasResizable' );\n\n\t\t\tvar noResize, $header, column, storedSizes, tmp,\n\t\t\t\t$table = c.$table,\n\t\t\t\t$parent = $table.parent(),\n\t\t\t\tmarginTop = parseInt( $table.css( 'margin-top' ), 10 ),\n\n\t\t\t// internal variables\n\t\t\tvars = wo.resizable_vars = {\n\t\t\t\tuseStorage : ts.storage && wo.resizable !== false,\n\t\t\t\t$wrap : $parent,\n\t\t\t\tmouseXPosition : 0,\n\t\t\t\t$target : null,\n\t\t\t\t$next : null,\n\t\t\t\toverflow : $parent.css('overflow') === 'auto' ||\n\t\t\t\t\t$parent.css('overflow') === 'scroll' ||\n\t\t\t\t\t$parent.css('overflow-x') === 'auto' ||\n\t\t\t\t\t$parent.css('overflow-x') === 'scroll',\n\t\t\t\tstoredSizes : []\n\t\t\t};\n\n\t\t\t// set default widths\n\t\t\tts.resizableReset( c.table, true );\n\n\t\t\t// now get measurements!\n\t\t\tvars.tableWidth = $table.width();\n\t\t\t// attempt to autodetect\n\t\t\tvars.fullWidth = Math.abs( $parent.width() - vars.tableWidth ) < 20;\n\n\t\t\t/*\n\t\t\t// Hacky method to determine if table width is set to 'auto'\n\t\t\t// http://stackoverflow.com/a/20892048/145346\n\t\t\tif ( !vars.fullWidth ) {\n\t\t\t\ttmp = $table.width();\n\t\t\t\t$header = $table.wrap('<span>').parent(); // temp variable\n\t\t\t\tstoredSizes = parseInt( $table.css( 'margin-left' ), 10 ) || 0;\n\t\t\t\t$table.css( 'margin-left', storedSizes + 50 );\n\t\t\t\tvars.tableWidth = $header.width() > tmp ? 'auto' : tmp;\n\t\t\t\t$table.css( 'margin-left', storedSizes ? storedSizes : '' );\n\t\t\t\t$header = null;\n\t\t\t\t$table.unwrap('<span>');\n\t\t\t}\n\t\t\t*/\n\n\t\t\tif ( vars.useStorage && vars.overflow ) {\n\t\t\t\t// save table width\n\t\t\t\tts.storage( c.table, 'tablesorter-table-original-css-width', vars.tableWidth );\n\t\t\t\ttmp = ts.storage( c.table, 'tablesorter-table-resized-width' ) || 'auto';\n\t\t\t\tts.resizable.setWidth( $table, tmp, true );\n\t\t\t}\n\t\t\two.resizable_vars.storedSizes = storedSizes = ( vars.useStorage ?\n\t\t\t\tts.storage( c.table, ts.css.resizableStorage ) :\n\t\t\t\t[] ) || [];\n\t\t\tts.resizable.setWidths( c, wo, storedSizes );\n\t\t\tts.resizable.updateStoredSizes( c, wo );\n\n\t\t\two.$resizable_container = $( '<div class=\"' + ts.css.resizableContainer + '\">' )\n\t\t\t\t.css({ top : marginTop })\n\t\t\t\t.insertBefore( $table );\n\t\t\t// add container\n\t\t\tfor ( column = 0; column < c.columns; column++ ) {\n\t\t\t\t$header = c.$headerIndexed[ column ];\n\t\t\t\ttmp = ts.getColumnData( c.table, c.headers, column );\n\t\t\t\tnoResize = ts.getData( $header, tmp, 'resizable' ) === 'false';\n\t\t\t\tif ( !noResize ) {\n\t\t\t\t\t$( '<div class=\"' + ts.css.resizableHandle + '\">' )\n\t\t\t\t\t\t.appendTo( wo.$resizable_container )\n\t\t\t\t\t\t.attr({\n\t\t\t\t\t\t\t'data-column' : column,\n\t\t\t\t\t\t\t'unselectable' : 'on'\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.data( 'header', $header )\n\t\t\t\t\t\t.bind( 'selectstart', false );\n\t\t\t\t}\n\t\t\t}\n\t\t\tts.resizable.bindings( c, wo );\n\t\t},\n\n\t\tupdateStoredSizes : function( c, wo ) {\n\t\t\tvar column, $header,\n\t\t\t\tlen = c.columns,\n\t\t\t\tvars = wo.resizable_vars;\n\t\t\tvars.storedSizes = [];\n\t\t\tfor ( column = 0; column < len; column++ ) {\n\t\t\t\t$header = c.$headerIndexed[ column ];\n\t\t\t\tvars.storedSizes[ column ] = $header.is(':visible') ? $header.width() : 0;\n\t\t\t}\n\t\t},\n\n\t\tsetWidth : function( $el, width, overflow ) {\n\t\t\t// overflow tables need min & max width set as well\n\t\t\t$el.css({\n\t\t\t\t'width' : width,\n\t\t\t\t'min-width' : overflow ? width : '',\n\t\t\t\t'max-width' : overflow ? width : ''\n\t\t\t});\n\t\t},\n\n\t\tsetWidths : function( c, wo, storedSizes ) {\n\t\t\tvar column, $temp,\n\t\t\t\tvars = wo.resizable_vars,\n\t\t\t\t$extra = $( c.namespace + '_extra_headers' ),\n\t\t\t\t$col = c.$table.children( 'colgroup' ).children( 'col' );\n\t\t\tstoredSizes = storedSizes || vars.storedSizes || [];\n\t\t\t// process only if table ID or url match\n\t\t\tif ( storedSizes.length ) {\n\t\t\t\tfor ( column = 0; column < c.columns; column++ ) {\n\t\t\t\t\t// set saved resizable widths\n\t\t\t\t\tts.resizable.setWidth( c.$headerIndexed[ column ], storedSizes[ column ], vars.overflow );\n\t\t\t\t\tif ( $extra.length ) {\n\t\t\t\t\t\t// stickyHeaders needs to modify min & max width as well\n\t\t\t\t\t\t$temp = $extra.eq( column ).add( $col.eq( column ) );\n\t\t\t\t\t\tts.resizable.setWidth( $temp, storedSizes[ column ], vars.overflow );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t$temp = $( c.namespace + '_extra_table' );\n\t\t\t\tif ( $temp.length && !ts.hasWidget( c.table, 'scroller' ) ) {\n\t\t\t\t\tts.resizable.setWidth( $temp, c.$table.outerWidth(), vars.overflow );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetHandlePosition : function( c, wo ) {\n\t\t\tvar startPosition,\n\t\t\t\ttableHeight = c.$table.height(),\n\t\t\t\t$handles = wo.$resizable_container.children(),\n\t\t\t\thandleCenter = Math.floor( $handles.width() / 2 );\n\n\t\t\tif ( ts.hasWidget( c.table, 'scroller' ) ) {\n\t\t\t\ttableHeight = 0;\n\t\t\t\tc.$table.closest( '.' + ts.css.scrollerWrap ).children().each(function() {\n\t\t\t\t\tvar $this = $(this);\n\t\t\t\t\t// center table has a max-height set\n\t\t\t\t\ttableHeight += $this.filter('[style*=\"height\"]').length ? $this.height() : $this.children('table').height();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif ( !wo.resizable_includeFooter && c.$table.children('tfoot').length ) {\n\t\t\t\ttableHeight -= c.$table.children('tfoot').height();\n\t\t\t}\n\t\t\t// subtract out table left position from resizable handles. Fixes #864\n\t\t\t// jQuery v3.3.0+ appears to include the start position with the $header.position().left; see #1544\n\t\t\tstartPosition = parseFloat($.fn.jquery) >= 3.3 ? 0 : c.$table.position().left;\n\t\t\t$handles.each( function() {\n\t\t\t\tvar $this = $(this),\n\t\t\t\t\tcolumn = parseInt( $this.attr( 'data-column' ), 10 ),\n\t\t\t\t\tcolumns = c.columns - 1,\n\t\t\t\t\t$header = $this.data( 'header' );\n\t\t\t\tif ( !$header ) { return; } // see #859\n\t\t\t\tif (\n\t\t\t\t\t!$header.is(':visible') ||\n\t\t\t\t\t( !wo.resizable_addLastColumn && ts.resizable.checkVisibleColumns(c, column) )\n\t\t\t\t) {\n\t\t\t\t\t$this.hide();\n\t\t\t\t} else if ( column < columns || column === columns && wo.resizable_addLastColumn ) {\n\t\t\t\t\t$this.css({\n\t\t\t\t\t\tdisplay: 'inline-block',\n\t\t\t\t\t\theight : tableHeight,\n\t\t\t\t\t\tleft : $header.position().left - startPosition + $header.outerWidth() - handleCenter\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Fixes #1485\n\t\tcheckVisibleColumns: function( c, column ) {\n\t\t\tvar i,\n\t\t\t\tlen = 0;\n\t\t\tfor ( i = column + 1; i < c.columns; i++ ) {\n\t\t\t\tlen += c.$headerIndexed[i].is( ':visible' ) ? 1 : 0;\n\t\t\t}\n\t\t\treturn len === 0;\n\t\t},\n\n\t\t// prevent text selection while dragging resize bar\n\t\ttoggleTextSelection : function( c, wo, toggle ) {\n\t\t\tvar namespace = c.namespace + 'tsresize';\n\t\t\two.resizable_vars.disabled = toggle;\n\t\t\t$( 'body' ).toggleClass( ts.css.resizableNoSelect, toggle );\n\t\t\tif ( toggle ) {\n\t\t\t\t$( 'body' )\n\t\t\t\t\t.attr( 'unselectable', 'on' )\n\t\t\t\t\t.bind( 'selectstart' + namespace, false );\n\t\t\t} else {\n\t\t\t\t$( 'body' )\n\t\t\t\t\t.removeAttr( 'unselectable' )\n\t\t\t\t\t.unbind( 'selectstart' + namespace );\n\t\t\t}\n\t\t},\n\n\t\tbindings : function( c, wo ) {\n\t\t\tvar namespace = c.namespace + 'tsresize';\n\t\t\two.$resizable_container.children().bind( 'mousedown', function( event ) {\n\t\t\t\t// save header cell and mouse position\n\t\t\t\tvar column,\n\t\t\t\t\tvars = wo.resizable_vars,\n\t\t\t\t\t$extras = $( c.namespace + '_extra_headers' ),\n\t\t\t\t\t$header = $( event.target ).data( 'header' );\n\n\t\t\t\tcolumn = parseInt( $header.attr( 'data-column' ), 10 );\n\t\t\t\tvars.$target = $header = $header.add( $extras.filter('[data-column=\"' + column + '\"]') );\n\t\t\t\tvars.target = column;\n\n\t\t\t\t// if table is not as wide as it's parent, then resize the table\n\t\t\t\tvars.$next = event.shiftKey || wo.resizable_targetLast ?\n\t\t\t\t\t$header.parent().children().not( '.resizable-false' ).filter( ':last' ) :\n\t\t\t\t\t$header.nextAll( ':not(.resizable-false)' ).eq( 0 );\n\n\t\t\t\tcolumn = parseInt( vars.$next.attr( 'data-column' ), 10 );\n\t\t\t\tvars.$next = vars.$next.add( $extras.filter('[data-column=\"' + column + '\"]') );\n\t\t\t\tvars.next = column;\n\n\t\t\t\tvars.mouseXPosition = event.pageX;\n\t\t\t\tts.resizable.updateStoredSizes( c, wo );\n\t\t\t\tts.resizable.toggleTextSelection(c, wo, true );\n\t\t\t});\n\n\t\t\t$( document )\n\t\t\t\t.bind( 'mousemove' + namespace, function( event ) {\n\t\t\t\t\tvar vars = wo.resizable_vars;\n\t\t\t\t\t// ignore mousemove if no mousedown\n\t\t\t\t\tif ( !vars.disabled || vars.mouseXPosition === 0 || !vars.$target ) { return; }\n\t\t\t\t\tif ( wo.resizable_throttle ) {\n\t\t\t\t\t\tclearTimeout( vars.timer );\n\t\t\t\t\t\tvars.timer = setTimeout( function() {\n\t\t\t\t\t\t\tts.resizable.mouseMove( c, wo, event );\n\t\t\t\t\t\t}, isNaN( wo.resizable_throttle ) ? 5 : wo.resizable_throttle );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tts.resizable.mouseMove( c, wo, event );\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.bind( 'mouseup' + namespace, function() {\n\t\t\t\t\tif (!wo.resizable_vars.disabled) { return; }\n\t\t\t\t\tts.resizable.toggleTextSelection( c, wo, false );\n\t\t\t\t\tts.resizable.stopResize( c, wo );\n\t\t\t\t\tts.resizable.setHandlePosition( c, wo );\n\t\t\t\t});\n\n\t\t\t// resizeEnd event triggered by scroller widget\n\t\t\t$( window ).bind( 'resize' + namespace + ' resizeEnd' + namespace, function() {\n\t\t\t\tts.resizable.setHandlePosition( c, wo );\n\t\t\t});\n\n\t\t\t// right click to reset columns to default widths\n\t\t\tc.$table\n\t\t\t\t.bind( 'columnUpdate pagerComplete resizableUpdate '.split( ' ' ).join( namespace + ' ' ), function() {\n\t\t\t\t\tts.resizable.setHandlePosition( c, wo );\n\t\t\t\t})\n\t\t\t\t.bind( 'resizableReset' + namespace, function() {\n\t\t\t\t\tts.resizableReset( c.table );\n\t\t\t\t})\n\t\t\t\t.find( 'thead:first' )\n\t\t\t\t.add( $( c.namespace + '_extra_table' ).find( 'thead:first' ) )\n\t\t\t\t.bind( 'contextmenu' + namespace, function() {\n\t\t\t\t\t// $.isEmptyObject() needs jQuery 1.4+; allow right click if already reset\n\t\t\t\t\tvar allowClick = wo.resizable_vars.storedSizes.length === 0;\n\t\t\t\t\tts.resizableReset( c.table );\n\t\t\t\t\tts.resizable.setHandlePosition( c, wo );\n\t\t\t\t\two.resizable_vars.storedSizes = [];\n\t\t\t\t\treturn allowClick;\n\t\t\t\t});\n\n\t\t},\n\n\t\tmouseMove : function( c, wo, event ) {\n\t\t\tif ( wo.resizable_vars.mouseXPosition === 0 || !wo.resizable_vars.$target ) { return; }\n\t\t\t// resize columns\n\t\t\tvar column,\n\t\t\t\ttotal = 0,\n\t\t\t\tvars = wo.resizable_vars,\n\t\t\t\t$next = vars.$next,\n\t\t\t\ttar = vars.storedSizes[ vars.target ],\n\t\t\t\tleftEdge = event.pageX - vars.mouseXPosition;\n\t\t\tif ( vars.overflow ) {\n\t\t\t\tif ( tar + leftEdge > 0 ) {\n\t\t\t\t\tvars.storedSizes[ vars.target ] += leftEdge;\n\t\t\t\t\tts.resizable.setWidth( vars.$target, vars.storedSizes[ vars.target ], true );\n\t\t\t\t\t// update the entire table width\n\t\t\t\t\tfor ( column = 0; column < c.columns; column++ ) {\n\t\t\t\t\t\ttotal += vars.storedSizes[ column ];\n\t\t\t\t\t}\n\t\t\t\t\tts.resizable.setWidth( c.$table.add( $( c.namespace + '_extra_table' ) ), total );\n\t\t\t\t}\n\t\t\t\tif ( !$next.length ) {\n\t\t\t\t\t// if expanding right-most column, scroll the wrapper\n\t\t\t\t\tvars.$wrap[0].scrollLeft = c.$table.width();\n\t\t\t\t}\n\t\t\t} else if ( vars.fullWidth ) {\n\t\t\t\tvars.storedSizes[ vars.target ] += leftEdge;\n\t\t\t\tvars.storedSizes[ vars.next ] -= leftEdge;\n\t\t\t\tts.resizable.setWidths( c, wo );\n\t\t\t} else {\n\t\t\t\tvars.storedSizes[ vars.target ] += leftEdge;\n\t\t\t\tts.resizable.setWidths( c, wo );\n\t\t\t}\n\t\t\tvars.mouseXPosition = event.pageX;\n\t\t\t// dynamically update sticky header widths\n\t\t\tc.$table.triggerHandler('stickyHeadersUpdate');\n\t\t},\n\n\t\tstopResize : function( c, wo ) {\n\t\t\tvar vars = wo.resizable_vars;\n\t\t\tts.resizable.updateStoredSizes( c, wo );\n\t\t\tif ( vars.useStorage ) {\n\t\t\t\t// save all column widths\n\t\t\t\tts.storage( c.table, ts.css.resizableStorage, vars.storedSizes );\n\t\t\t\tts.storage( c.table, 'tablesorter-table-resized-width', c.$table.width() );\n\t\t\t}\n\t\t\tvars.mouseXPosition = 0;\n\t\t\tvars.$target = vars.$next = null;\n\t\t\t// will update stickyHeaders, just in case, see #912\n\t\t\tc.$table.triggerHandler('stickyHeadersUpdate');\n\t\t\tc.$table.triggerHandler('resizableComplete');\n\t\t}\n\t};\n\n\t// this widget saves the column widths if\n\t// $.tablesorter.storage function is included\n\t// **************************\n\tts.addWidget({\n\t\tid: 'resizable',\n\t\tpriority: 40,\n\t\toptions: {\n\t\t\tresizable : true, // save column widths to storage\n\t\t\tresizable_addLastColumn : false,\n\t\t\tresizable_includeFooter: true,\n\t\t\tresizable_widths : [],\n\t\t\tresizable_throttle : false, // set to true (5ms) or any number 0-10 range\n\t\t\tresizable_targetLast : false\n\t\t},\n\t\tinit: function(table, thisWidget, c, wo) {\n\t\t\tts.resizable.init( c, wo );\n\t\t},\n\t\tformat: function( table, c, wo ) {\n\t\t\tts.resizable.setHandlePosition( c, wo );\n\t\t},\n\t\tremove: function( table, c, wo, refreshing ) {\n\t\t\tif (wo.$resizable_container) {\n\t\t\t\tvar namespace = c.namespace + 'tsresize';\n\t\t\t\tc.$table.add( $( c.namespace + '_extra_table' ) )\n\t\t\t\t\t.removeClass('hasResizable')\n\t\t\t\t\t.children( 'thead' )\n\t\t\t\t\t.unbind( 'contextmenu' + namespace );\n\n\t\t\t\two.$resizable_container.remove();\n\t\t\t\tts.resizable.toggleTextSelection( c, wo, false );\n\t\t\t\tts.resizableReset( table, refreshing );\n\t\t\t\t$( document ).unbind( 'mousemove' + namespace + ' mouseup' + namespace );\n\t\t\t}\n\t\t}\n\t});\n\n\tts.resizableReset = function( table, refreshing ) {\n\t\t$( table ).each(function() {\n\t\t\tvar index, $t,\n\t\t\t\tc = this.config,\n\t\t\t\two = c && c.widgetOptions,\n\t\t\t\tvars = wo.resizable_vars;\n\t\t\tif ( table && c && c.$headerIndexed.length ) {\n\t\t\t\t// restore the initial table width\n\t\t\t\tif ( vars.overflow && vars.tableWidth ) {\n\t\t\t\t\tts.resizable.setWidth( c.$table, vars.tableWidth, true );\n\t\t\t\t\tif ( vars.useStorage ) {\n\t\t\t\t\t\tts.storage( table, 'tablesorter-table-resized-width', vars.tableWidth );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor ( index = 0; index < c.columns; index++ ) {\n\t\t\t\t\t$t = c.$headerIndexed[ index ];\n\t\t\t\t\tif ( wo.resizable_widths && wo.resizable_widths[ index ] ) {\n\t\t\t\t\t\tts.resizable.setWidth( $t, wo.resizable_widths[ index ], vars.overflow );\n\t\t\t\t\t} else if ( !$t.hasClass( 'resizable-false' ) ) {\n\t\t\t\t\t\t// don't clear the width of any column that is not resizable\n\t\t\t\t\t\tts.resizable.setWidth( $t, '', vars.overflow );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// reset stickyHeader widths\n\t\t\t\tc.$table.triggerHandler( 'stickyHeadersUpdate' );\n\t\t\t\tif ( ts.storage && !refreshing ) {\n\t\t\t\t\tts.storage( this, ts.css.resizableStorage, [] );\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n})( jQuery, window );\n\n/*! Widget: saveSort - updated 2018-03-19 (v2.30.1) *//*\n* Requires tablesorter v2.16+\n* by Rob Garrison\n*/\n;(function ($) {\n\t'use strict';\n\tvar ts = $.tablesorter || {};\n\n\tfunction getStoredSortList(c) {\n\t\tvar stored = ts.storage( c.table, 'tablesorter-savesort' );\n\t\treturn (stored && stored.hasOwnProperty('sortList') && $.isArray(stored.sortList)) ? stored.sortList : [];\n\t}\n\n\tfunction sortListChanged(c, sortList) {\n\t\treturn (sortList || getStoredSortList(c)).join(',') !== c.sortList.join(',');\n\t}\n\n\t// this widget saves the last sort only if the\n\t// saveSort widget option is true AND the\n\t// $.tablesorter.storage function is included\n\t// **************************\n\tts.addWidget({\n\t\tid: 'saveSort',\n\t\tpriority: 20,\n\t\toptions: {\n\t\t\tsaveSort : true\n\t\t},\n\t\tinit: function(table, thisWidget, c, wo) {\n\t\t\t// run widget format before all other widgets are applied to the table\n\t\t\tthisWidget.format(table, c, wo, true);\n\t\t},\n\t\tformat: function(table, c, wo, init) {\n\t\t\tvar time,\n\t\t\t\t$table = c.$table,\n\t\t\t\tsaveSort = wo.saveSort !== false, // make saveSort active/inactive; default to true\n\t\t\t\tsortList = { 'sortList' : c.sortList },\n\t\t\t\tdebug = ts.debug(c, 'saveSort');\n\t\t\tif (debug) {\n\t\t\t\ttime = new Date();\n\t\t\t}\n\t\t\tif ($table.hasClass('hasSaveSort')) {\n\t\t\t\tif (saveSort && table.hasInitialized && ts.storage && sortListChanged(c)) {\n\t\t\t\t\tts.storage( table, 'tablesorter-savesort', sortList );\n\t\t\t\t\tif (debug) {\n\t\t\t\t\t\tconsole.log('saveSort >> Saving last sort: ' + c.sortList + ts.benchmark(time));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// set table sort on initial run of the widget\n\t\t\t\t$table.addClass('hasSaveSort');\n\t\t\t\tsortList = '';\n\t\t\t\t// get data\n\t\t\t\tif (ts.storage) {\n\t\t\t\t\tsortList = getStoredSortList(c);\n\t\t\t\t\tif (debug) {\n\t\t\t\t\t\tconsole.log('saveSort >> Last sort loaded: \"' + sortList + '\"' + ts.benchmark(time));\n\t\t\t\t\t}\n\t\t\t\t\t$table.bind('saveSortReset', function(event) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\tts.storage( table, 'tablesorter-savesort', '' );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// init is true when widget init is run, this will run this widget before all other widgets have initialized\n\t\t\t\t// this method allows using this widget in the original tablesorter plugin; but then it will run all widgets twice.\n\t\t\t\tif (init && sortList && sortList.length > 0) {\n\t\t\t\t\tc.sortList = sortList;\n\t\t\t\t} else if (table.hasInitialized && sortList && sortList.length > 0) {\n\t\t\t\t\t// update sort change\n\t\t\t\t\tif (sortListChanged(c, sortList)) {\n\t\t\t\t\t\tts.sortOn(c, sortList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremove: function(table, c) {\n\t\t\tc.$table.removeClass('hasSaveSort');\n\t\t\t// clear storage\n\t\t\tif (ts.storage) { ts.storage( table, 'tablesorter-savesort', '' ); }\n\t\t}\n\t});\n\n})(jQuery);\nreturn jQuery.tablesorter;}));\n"],"sourceRoot":""}