{"version":3,"sources":["catalogManager.js","citySelect.js","filters.js","init.js","jquery.floatThead.js","menu.js","nadaviOffers.js","popups.js","product_cat.js","pt.js","sales.js","scripts.js","site.js","ymWidgetLoader.js"],"names":["catManager","overlay","$","select","wrapper","filters","filtersD","filterInStock","mFilterInStock","showFilters","hideFilters","showMoreFiltersBtn","showLessFiltersBtn","showMoreFiltersBtnMobile","showLessFiltersBtnMobile","productsHtml","prodEl","totalCount","parseInt","text","replace","tabsCounter","metaTitleCategory","categoryName","MaxBrandsNumber","priceMin","priceMax","mpriceMin","mpriceMax","brandInput","mbrandInput","brandScroll","mbrandScroll","resultButton","loadButton","page","filtersData","count","query","url","tmpl","templates","message","category","pagination","inStock","init","region","me","this","undefined","initFiltersQueryData","views","tags","renderBlueStars","buttonsInit","filtersInit","paginationDiv","length","items","itemsOnPage","currentPage","cssStyle","hrefTextPrefix","edges","prevText","nextText","onPageClick","inputFilters","window","scrollTo","updatePagination","itemsCount","console","log","hide","show","prop","delayKeyup","el","val","bind","index","attr","find","toString","value","toLowerCase","each","indexOf","parent","removeClass","addClass","hasClass","that","head","title","option","on","e","preventDefault","html","button","data","siblings","generateFiltersData","loadProducts","document","scrollTop","focus","brandParent","mbrandParent","ref","scrollTopMax","scrollHeight","clientHeight","link","companies","split","map","x","j","brands","buttonD","sortBy","sortDesc","substring","keys","Object","i","search","k","encodeURIComponent","join","history","pushState","location","pathname","declOfNum","declOfNumSubFunction","titles","number","Math","abs","cases","_titles","arguments","_number","apply","inputPage","get","done","result","Count","Products","render","appendTo","checkedBrandsMobile","checkedBrands","brandName","first","newHeader","newTitle","fail","alert","always","rating","star","asin","PI","citySelect","city","cityTitle","cityList","mselect","mcityTitle","mcity","wrapperMobile","regionName","geoBaseId","mobiGuruId","textChangeFunc","queryChange","pt","cookie","checkRegion","setText","getLocation","mButtonsInit","isTouch","active","onOptionClick","mCityListClean","input","cityAjax","empty","ajax","dataType","success","cityTmpl","is","blur","autocomplete","isSort","serviceUrl","minChars","transformResult","response","json","suggestions","dataItem","name","geobaseid","mobiguruid","onSelect","suggestion","Name","GeoBaseId","MobiGuruId","getCity","setCookie","setQuery","set","path","expires","match","pl","decode","s","decodeURIComponent","urlParams","exec","ready","click","event","target","closest","toggleClass","root","documentElement","root_class","className","floatThead","defaults","headerCellSelector","zIndex","position","top","bottom","scrollContainer","responsiveContainer","getSizingRow","$table","floatTableClass","floatWrapperClass","floatContainerClass","copyTableClass","autoReflow","debug","support","bootstrap","datatables","jqueryUI","perfectScrollbar","util","_","hasOwnProperty","prototype","has","obj","key","call","TypeError","push","idCounter","uniqueId","prefix","id","debounce","func","wait","immediate","timeout","args","context","timestamp","Date","callNow","setTimeout","later","last","canObserveMutations","MutationObserver","ieVersion","a","b","createElement","c","all","innerHTML","documentMode","isFF","test","navigator","userAgent","isWebkit","isTableWidthBug","$test","css","append","ret","width","remove","createElements","$window","matchMedia","_beforePrint","onbeforeprint","_afterPrint","onafterprint","triggerHandler","getClosestScrollContainer","$elem","parentElement","getComputedStyle","getPropertyValue","body","str","error","tableWidth","$fthCells","isOuter","fn","w","offsetWidth","mObs","isFunction","isString","command","Array","slice","filter","$this","opts","r","extend","v","jquery","floatTheadId","Error","$header","children","$tbody","unbind","one","scrollingTop","scrollingBottom","headerFloated","scrollbarOffset","vertical","horizontal","scWidth","d","style","cssText","appendChild","clientWidth","removeChild","scrollbarWidth","lastColumnCount","$scrollContainer","locked","$responsiveContainer","responsive","isResponsiveContainerActive","useAbsolutePositioning","$caption","haveCaption","captionAlignTop","$fthGrp","display","border-spacing","height","border-collapse","visibility","wrappedContainer","$wrapper","absoluteToFixedOnScroll","$floatTable","$floatColGroup","$tableColGroup","existingColGroup","$fthRow","$floatContainer","floatTableHidden","$newHeader","$sizerRow","$sizerCells","$tableCells","$headerCells","prepend","cellpadding","cellspacing","border","tableDisplayCss","borderCollapse","margin","border-bottom-width","makeRelative","$container","alwaysWrap","positionCss","$containerWrap","paddingLeft","paddingRight","wrap","clear","before","marginTop","willChange","updateScrollingOffsets","layoutFixed","table-layout","layoutAuto","originalTableWidth","originalTableMinWidth","eventName","_setHeaderHeight","headerHeight","outerHeight","tableBorderTopHeight","refloat","tw","unfloat","detach","isHeaderFloatingLogical","triggerFloatEvent","isFloating","changePositioning","isAbsolute","reflow","numCols","$headerColumns","content","cells","cols","psuedo","eq","columnNum","scrollLeft","rect","$rowCells","$cols","widths","getBoundingClientRect","right","left","floatContainerBorderWidth","side","calculateFloatContainerPosFn","floatEnd","scrollingContainerTop","tableContainerGap","captionHeight","captionScrollOffset","floatContainerHeight","tableOffset","offset","tableLeftGap","tableTopGap","containerOffset","getScrollContainerLeft","windowTop","windowLeft","scrollContainerLeft","eventType","isTableHidden","offsetHeight","tableHeight","gap","round","repositionFloatContainerFn","oldTop","oldLeft","oldScrollLeft","pos","setWidth","setHeight","transform","-webkit-transform","-moz-transform","-ms-transform","-o-transform","floatContainerWidth","percent","outerWidth","setFloatWidth","calculateScrollBarSize","sw","offsetv","sh","th","offseth","ensureReflow","flow","calculateFloatContainerPos","repositionFloatContainer","windowScrollEvent","windowScrollDoneEvent","containerScrollEvent","printEvent","mql","matches","beforePrint","afterPrint","matchMediaPrint","reflowEvent","addListener","cb","winWidth","debouncedCb","winWidthNew","windowResize","dataTableSettings","table","nTable","isDatatable","mutationElement","wasTableRelated","nodes","nodeName","addedNodes","removedNodes","observe","childList","subtree","destroy","ns","replaceWith","disconnect","off","unwrap","removeListener","setHeaderHeight","getFloatContainer","getRowGroups","add","jQuery","module","exports","require","ratingTable","compare","p","href","formatHelper","format","formatFunction","urlHelper","urlformat","helpers","y","parseFloat","starColorClass","shapeClass","sortRating","ratingColumn","dec","separator","n","decPlaces","decSeparator","sign","toFixed","g","substr","parentForm","sortVal","submit","instock","userValKey","validatePrice","NaN","Infinity","fadeTo","characteristics","userMinPrice","userMaxPrice","oldMinPrice","oldMaxPrice","type","serialize","tooltip","tooltip2","config","previewMinValue","previewMaxValue","slider","fieldMin","fieldMax","PriceMax","PriceMin","needfilterByPrice","startMin","startMax","setInputValues","minVal","maxVal","needSetUserVal","clearInputRegEx","max","min","setUserValues","updateSlider","chagedMax","existUserValue","prMin","prMax","hisMaxPrice","chg","range","start","handles","step","PriceStep","slide","values","noUiSlider","sliderFields","newValue","menuArrows","createCarousel","owlCarousel","nav","navText","navElement","dots","drop","dropGroup","wrapWidth","sum","_this","wrapAll","item","menu","trigger","removeAttr","nadaviOffers","productName","cachedRoot","block","block2","minimalBuyLink","minimalBuyLink2","loader","more","moreButton","bunnerBuyBottom","buyButton","clid","countCache","totalCache","showNext","isAdSown","isRobot","isFirstLoad","sort","order","priceSorter","priceMobileSorter","sortMobile","sortMobileTitle","provider","tab","styleClass","filterBlock","filterMultiBlock","filterMultiButton","filterPlainBlock","filterData","filterChilds","filterChecked","filtersObj","needFilter","needFilterOnLoad","minimalLink","getClid","cenyLink","initContextMenu","activeConfig","isFilterBlockFilled","next","value_label","prev","activeMultiConfig","filtersRadio","tempArray","nameArray","indx","element","arrayRadio","filterText","reduce","acc","arr","valueRadio","filtersName","isChange","parentlink","redirect","loadShops","change","checkedRadio","reset","buyButtonClear","method","filterType","filterValue","childs","JSON","stringify","filterLoaded","buyButtonFill","clone","idx","activeFilter","loadPage","showMessage","tinysort","price","shopId","modelId","shopUrl","shopName","currency","currencyCode","cur","txt","goalUrl","now","shopBuyUrl","loggingClick","generateQuickGuid","random","buyUrl","guid","yaMetric","yaCounter23506804","yaCounter46271199","yaCounter47153493","yaCounter47165784","reachGoal","ga","hitCallback","open","contextMenu","selector","build","$trigger","types","opentab","opt","$menu","openwindow","copyurl","clipboard","Clipboard","clearSelection","areaurl","customName","sep1","Sort","shopSorter","shopMobileSorter","Order","Childs","childsFilter","Checked","checkedFilter","metricMatches","RegExp","endStr","endIndex","endMatches","cookieDurationMinutes","isError","isFilter","popups","activityIndicatorOn","activityIndicatorOff","overlayOn","overlayOff","captionOn","description","captionOff","closeButtonOn","instance","quitImageLightbox","closeButtonOff","navigationOn","images","navItems","switchImageLightbox","navigationUpdate","navigationOff","arrowsOn","$arrows","arrowsOff","cssTransitionSupport","WebkitTransition","MozTransition","OTransition","transition","cssTransitionTranslateX","positionX","speed","options","wasTouched","hasTouch","hasPointers","pointerType","MSPOINTER_TYPE_MOUSE","isCssTransitionSupport","pointerEnabled","msPointerEnabled","imageLightbox","animationSpeed","preloadNext","enableKeyboard","quitOnEnd","quitOnImgClick","quitOnDocClick","onStart","onEnd","onLoadStart","onLoadEnd","setImage","image","tmpImage","Image","src","onload","imageWidth","imageHeight","ratio","loadImage","direction","inProgress","targets","quitLightbox","params","opacity","swipeDiff","animate","removeImage","imagePosLeft","nextTarget","swipeStart","swipeEnd","originalEvent","posX","pageX","offsetLeft","touches","addTargets","newTargets","keyCode","tmpTarget","currentIndex","zoomImageLightbox","zoomTargets","addToImageLightbox","comments","toggle","parents","comparer","redTextClass","loadScriptsDynamically","scale","rangeMin","rangeMax","fields","setFilterByPrice","after","user","reloadUserInfo","comment","needAddCommentAfterLogin","addComment","subscribe","userLogged","popup","emailContainer","setChecked","today","showDate","setDate","getDate","checked","email","errorsContainer","infoContainer","categories","needToShow","loc","lastIndexOf","targetValue","date","setTime","getTime","toUTCString","updatedCookie","propName","propValue","del","recaptcha","isLoaded","grecaptcha","sitekey","loaded","relateId","commentsContainer","trim","reloadComments","addSuccess","initReply","changePage","subscriptions","btn","userNameField","recapthcaResponseField","isValid","parentId","pagenumber","userName","textarea","callback","needAuthorize","initOverlay","sales","productId","yandexProductId","regionId","colors","modifications","selected","loadOffer","hubInit","colorsDropDownFill","activeFilters","activeColorFilter","grep","f","Type","selectedColorId","Values","Id","cnt","forEach","fv","Color","settings","setup","$compare","$head","$body","$speed","$scrollPane","scrollPositionX","jScrollPane","verticalDragMinHeight","verticalDragMaxHeight","horizontalDragMinWidth","horizontalDragMaxWidth","$scrollPaneAPI","headPosition","$headPosition","resize","$scrollTop","onPageScroll","$headH","$rowProperty","$rowValue","$rowPropertyH","$rowValueH","$tProducts","$tProperties","$tValues","reinitialise","paddingTop","parentH","innerHeight","$position","$params","$startLine","$stopLine","$tooltip","mouseenter","mouseleave","$toggle","$toggleH","$togglePos","$content","$tooltip2","ifScroll","formFunc","placeholder","win","throttle","svg4everybody","mobileMenu","mainButton","mainMenu","mainLinks","subMenu","topButton","mtabs","mtabsShow","mtabsClose","mMenuCategory","mMenuCategoryShow","getMenuItems","Url","header","scroll","fadeIn","fadeOut","ms","timer","keyup","clearTimeout","ymWidgetLoader","ymWidgetSrc","ymw","ptw","msort","mcitySelect","overviewYmWidgets","overviewPtWidgets","ymWidgetScript","offersInitFunc","experimentLoadPtWidget","ymWidgetIsload","loadYmWidget","loadOffers","overviewWidgetIsLoad","script","showPtWidget","hideYmWidget"],"mappings":"AAAA,aAEAA,WAAa,CACXC,QAASC,EAAE,iBACXC,OAAQD,EAAE,gBACVE,QAASF,EAAE,iBACXG,QAASH,EAAE,iBACXI,SAAUJ,EAAE,YACZK,cAAeL,EAAE,0BACjBM,eAAgBN,EAAE,4BAClBO,YAAaP,EAAE,sBACfQ,YAAaR,EAAE,sBACfS,mBAAoBT,EAAE,uBACtBU,mBAAoBV,EAAE,uBACtBW,yBAA0BX,EAAE,8BAC5BY,yBAA0BZ,EAAE,8BAC5Ba,aAAcb,EAAE,cAChBc,OAAQd,EAAE,cACVe,WAAYC,SAAShB,EAAE,wBAAwBiB,OAAOC,QAAQ,IAAK,IAAIA,QAAQ,IAAK,KACpFC,YAAanB,EAAE,kBACfoB,kBAAmB,GACnBC,aAAc,GACdC,gBAAiB,GACjBC,SAAUvB,EAAE,gCACZwB,SAAUxB,EAAE,8BACZyB,UAAWzB,EAAE,iCACb0B,UAAW1B,EAAE,+BACb2B,WAAY3B,EAAE,4BACd4B,YAAa5B,EAAE,6BACf6B,YAAa7B,EAAE,yBACf8B,aAAc9B,EAAE,2BAChB+B,aAAc/B,EAAE,kBAChBgC,WAAYhC,EAAE,gBACdiC,KAAM,EACNC,YAAa,GACbC,MAAO,GACPC,MAAOC,IAAI,KACXC,KAAMtC,EAAEuC,UAAU,gBAClBC,QAASxC,EAAEuC,UAAU,gBACrBE,SAAUzC,EAAE,gBACZ0C,WAAY,KACZC,SAAS,EACTC,KAAM,SAAcxB,EAAmBC,EAAcY,EAAMY,EAAQF,GACjE,IAAIG,EAAKC,KACTA,KAAKF,OAASA,EACdE,KAAK3B,kBAAoBA,EACzB2B,KAAK1B,aAAeA,EACpB0B,KAAKd,KAAOA,EACZc,KAAKJ,QAAUA,OAEIK,IAAfD,KAAKX,OACPU,EAAGG,uBAGLjD,EAAEkD,MAAMC,KAAK,aAAcL,EAAGM,iBAC9BN,EAAGO,cACHP,EAAGQ,cACH,IAAIC,EAAgBvD,EAAE,eAElBuD,EAAcC,SAChBV,EAAGJ,WAAaa,EAAcb,WAAW,CACvCe,MAAOX,EAAG/B,WACV2C,YAAaZ,EAAGX,MAChBwB,YAAa1B,EACb2B,SAAU,cACVC,eAAgB,IAChBC,MAAO,EACPC,SAAU,IACVC,SAAU,IACVC,YAAa,SAAqBhC,GAChCa,EAAGoB,aAAajC,GAChBjC,EAAEmE,QAAQC,SAAS,EAAG,UAK9BC,iBAAkB,SAA0BpC,EAAMqC,GAChD,IAAIxB,EAAKC,KACTwB,QAAQC,IAAIF,GAERxB,EAAGJ,aACD4B,EAAa,EACftE,EAAE,eAAeyE,OAEjBzE,EAAE,eAAe0E,OAGfzC,GAAMa,EAAGJ,WAAWA,WAAW,WAAYT,GAC3CqC,GAAYxB,EAAGJ,WAAWA,WAAW,cAAe4B,KAG5DhB,YAAa,WACX,IAAIR,EAAKC,KACLD,EAAGzC,eAAeyC,EAAGzC,cAAcsE,KAAK,UAAW7B,EAAGH,SAC1DG,EAAGxC,eAAeqE,KAAK,UAAW7B,EAAGH,SACrCG,EAAGvB,SAASqD,WAAW,SAAUC,GAC/BA,EAAGC,IAAID,EAAGC,MAAM5D,QAAQ,QAAS,KACjC4B,EAAGrB,UAAUqD,IAAID,EAAGC,OACpBhC,EAAGoB,gBACF,MACHpB,EAAGrB,UAAUmD,WAAW,SAAUC,GAChCA,EAAGC,IAAID,EAAGC,MAAM5D,QAAQ,QAAS,KAER,EAArB4B,EAAGvB,SAASiC,QACdV,EAAGvB,SAASuD,IAAID,EAAGC,OAGrBhC,EAAGoB,gBACF,MACHpB,EAAGtB,SAASoD,WAAW,SAAUC,GAC/BA,EAAGC,IAAID,EAAGC,MAAM5D,QAAQ,QAAS,KACjC4B,EAAGpB,UAAUoD,IAAID,EAAGC,OACpBhC,EAAGoB,gBACF,MACHpB,EAAGpB,UAAUkD,WAAW,SAAUC,GAChCA,EAAGC,IAAID,EAAGC,MAAM5D,QAAQ,QAAS,KAER,EAArB4B,EAAGtB,SAASgC,QACdV,EAAGtB,SAASsD,IAAID,EAAGC,OAGrBhC,EAAGoB,gBACF,MACHlE,EAAE,iBAAiB+E,KAAK,SAAU,WAChC,IAAIC,EAAQhF,EAAE+C,MAAMkC,KAAK,cAGzB,OAFAnC,EAAG3C,QAAQ+E,KAAK,+BAAiCF,EAAQ,MAAML,KAAK,UAAW3E,EAAE+C,MAAM4B,KAAK,YAC5F7B,EAAGoB,gBACI,IAETpB,EAAGzC,cAAc0E,KAAK,SAAU,WAG9B,OAFAjC,EAAGH,QAAU3C,EAAE+C,MAAM4B,KAAK,WAAWQ,WACrCrC,EAAGoB,gBACI,IAETpB,EAAGxC,eAAeyE,KAAK,SAAU,WAG/B,OAFAjC,EAAGH,QAAU3C,EAAE+C,MAAM4B,KAAK,WAAWQ,WACrCrC,EAAGoB,gBACI,IAETlE,EAAE,mBAAmB+E,KAAK,SAAU,WAClC,IAAIC,EAAQhF,EAAE+C,MAAMkC,KAAK,cAOzB,OALyB,EAArBnC,EAAG1C,SAASoD,QACdV,EAAG1C,SAAS8E,KAAK,6BAA+BF,EAAQ,MAAML,KAAK,UAAW3E,EAAE+C,MAAM4B,KAAK,YAG7F7B,EAAGoB,gBACI,IAETpB,EAAGnB,WAAWoD,KAAK,QAAS,WAC1B,IAAIK,EAAQpF,EAAE+C,MAAM+B,MAAMO,cACtBlD,EAAQ,EAkCZ,OAjCAnC,EAAE,iBAAiBsF,KAAK,WAGY,IAFjBtF,EAAE+C,MAAMkC,KAAK,cAAcI,cAE7BE,QAAQH,IACrBjD,IACAnC,EAAE+C,MAAMyC,SAASC,YAAY,WAE7BzF,EAAE+C,MAAMyC,SAASE,SAAS,YAI1BvD,GAAS,IACXW,EAAGnB,WAAW6D,SAASA,SAASA,SAASC,YAAY,uBAEjD3C,EAAGjB,YAAY8D,SAAS,6BAC1B7C,EAAGpC,mBAAmB+D,OACtB3B,EAAGlC,yBAAyB6D,SAE5B3B,EAAGrC,mBAAmBgE,OACtB3B,EAAGnC,yBAAyB8D,UAG9B3B,EAAGnB,WAAW6D,SAASA,SAASA,SAASE,SAAS,uBAE9C5C,EAAGjB,YAAY8D,SAAS,6BAC1B7C,EAAGpC,mBAAmBgE,OACtB5B,EAAGlC,yBAAyB8D,SAE5B5B,EAAGrC,mBAAmBiE,OACtB5B,EAAGnC,yBAAyB+D,UAIzB,IAET5B,EAAGlB,YAAYmD,KAAK,QAAS,WAC3B,IAAIK,EAAQpF,EAAE+C,MAAM+B,MAAMO,cACtBlD,EAAQ,EAmEZ,OAjE2B,EAAvBW,EAAGnB,WAAW6B,QAChBxD,EAAE,iBAAiBsF,KAAK,WAGY,IAFjBtF,EAAE+C,MAAMkC,KAAK,cAAcI,cAE7BE,QAAQH,GACrBpF,EAAE+C,MAAMyC,SAASC,YAAY,UAE7BzF,EAAE+C,MAAMyC,SAASE,SAAS,YAKhC1F,EAAE,mBAAmBsF,KAAK,WAGU,IAFjBtF,EAAE+C,MAAMkC,KAAK,cAAcI,cAE7BE,QAAQH,IACrBjD,IACAnC,EAAE+C,MAAMyC,SAASC,YAAY,WAE7BzF,EAAE+C,MAAMyC,SAASE,SAAS,YAI1BvD,GAAS,IACXW,EAAGlB,YAAY4D,SAASA,SAASA,SAASC,YAAY,yBAElD3C,EAAGhB,aAAa6D,SAAS,+BACA,EAAvB7C,EAAGnB,WAAW6B,QAChBV,EAAGpC,mBAAmB+D,OAGxB3B,EAAGlC,yBAAyB6D,SAED,EAAvB3B,EAAGnB,WAAW6B,QAChBV,EAAGrC,mBAAmBgE,OAGxB3B,EAAGnC,yBAAyB8D,QAGH,EAAvB3B,EAAGnB,WAAW6B,QAChBV,EAAGnB,WAAW6D,SAASA,SAASA,SAASC,YAAY,yBAGvD3C,EAAGlB,YAAY4D,SAASA,SAASA,SAASE,SAAS,yBAE/C5C,EAAGhB,aAAa6D,SAAS,+BACA,EAAvB7C,EAAGnB,WAAW6B,QAChBV,EAAGpC,mBAAmBgE,OAGxB5B,EAAGlC,yBAAyB8D,SAED,EAAvB5B,EAAGnB,WAAW6B,QAChBV,EAAGrC,mBAAmBiE,OAGxB5B,EAAGnC,yBAAyB+D,QAGH,EAAvB5B,EAAGnB,WAAW6B,QAChBV,EAAGnB,WAAW6D,SAASA,SAASA,SAASE,SAAS,yBAI/C,KAGXrC,YAAa,WACX,IAAIP,EAAKC,KACTD,EAAG7C,OAAOqF,KAAK,WACb,IAAIM,EAAO5F,EAAE+C,MACT8C,EAAOD,EAAKV,KAAK,qBACjBY,EAAQF,EAAKV,KAAK,sBAClBa,EAASH,EAAKV,KAAK,uBACvBW,EAAKG,GAAG,QAAS,SAAUC,GACzBA,EAAEC,iBACFN,EAAKF,SAAS,QACd5C,EAAG/C,QAAQ2E,SAEbqB,EAAOC,GAAG,QAAS,WACjB,IAAIZ,EAAQpF,EAAE+C,MAAMoD,OAChBC,EAASpG,EAAE,mBAAmBkF,KAAK,uBAAyBlF,EAAE+C,MAAMsD,KAAK,UAAY,MAoEzF,OAnEAT,EAAKH,YAAY,QACjBK,EAAMK,KAAKf,GACXtC,EAAG/C,QAAQ0E,OAES,EAAhB2B,EAAO5C,SACL4C,EAAOT,SAAS,UACdS,EAAOT,SAAS,gBAClBS,EAAOX,YAAY,eACnBW,EAAOV,SAAS,eAEhBU,EAAOX,YAAY,aACnBW,EAAOV,SAAS,gBAEiB,UAA1BU,EAAOC,KAAK,WACjBD,EAAOT,SAAS,eAClBS,EAAOX,YAAY,eAEnBW,EAAOX,YAAY,aAGrBW,EAAOZ,SAASc,WAAWpB,KAAK,UAAUO,YAAY,UACtDW,EAAOV,SAAS,UAChBU,EAAOV,SAAS,cACmB,WAA1BU,EAAOC,KAAK,YACjBD,EAAOT,SAAS,eAClBS,EAAOX,YAAY,eAEnBW,EAAOX,YAAY,aAGrBW,EAAOZ,SAASc,WAAWpB,KAAK,UAAUO,YAAY,UACtDW,EAAOV,SAAS,UAChBU,EAAOV,SAAS,iBAIhB1F,EAAE+C,MAAM4C,SAAS,UACf3F,EAAE+C,MAAM4C,SAAS,gBACnB3F,EAAE+C,MAAM0C,YAAY,eACpBzF,EAAE+C,MAAM2C,SAAS,eAEjB1F,EAAE+C,MAAM0C,YAAY,aACpBzF,EAAE+C,MAAM2C,SAAS,gBAEiB,UAA3B1F,EAAE+C,MAAMsD,KAAK,WAClBrG,EAAE+C,MAAM4C,SAAS,eACnB3F,EAAE+C,MAAM0C,YAAY,eAEpBzF,EAAE+C,MAAM0C,YAAY,aAGtBM,EAAON,YAAY,UACnBzF,EAAE+C,MAAM2C,SAAS,UACjB1F,EAAE+C,MAAM2C,SAAS,cACmB,WAA3B1F,EAAE+C,MAAMsD,KAAK,YAClBrG,EAAE+C,MAAM4C,SAAS,eACnB3F,EAAE+C,MAAM0C,YAAY,eAEpBzF,EAAE+C,MAAM0C,YAAY,aAGtBM,EAAON,YAAY,UACnBzF,EAAE+C,MAAM2C,SAAS,UACjB1F,EAAE+C,MAAM2C,SAAS,gBAGnB5C,EAAGoB,gBACI,MAGXpB,EAAG/C,QAAQiG,GAAG,QAAS,SAAUC,GAC/BA,EAAEC,iBACFpD,EAAG7C,OAAOwF,YAAY,QACtB3C,EAAG/C,QAAQ0E,SAEb3B,EAAGf,aAAaiE,GAAG,QAAS,SAAUC,GACpCA,EAAEC,iBACFpD,EAAG5C,QAAQuF,YAAY,QACvB3C,EAAG3C,QAAQsF,YAAY,UAEzB3C,EAAGd,WAAWgE,GAAG,QAAS,SAAUC,GAClCA,EAAEC,iBACFpD,EAAGb,OACHa,EAAGyD,sBACHzD,EAAG0D,iBAEL1D,EAAGvC,YAAYyF,GAAG,QAAS,SAAUC,GACnCA,EAAEC,iBACFpD,EAAG5C,QAAQwF,SAAS,QACpB5C,EAAG3C,QAAQuF,SAAS,QACpB1F,EAAEyG,UAAUC,UAAU,KAExB5D,EAAGtC,YAAYwF,GAAG,QAAS,SAAUC,GACnCA,EAAEC,iBACFpD,EAAG5C,QAAQuF,YAAY,QACvB3C,EAAG3C,QAAQsF,YAAY,UAEzB3C,EAAGrC,mBAAmBuF,GAAG,QAAS,WAOhC,OANAlD,EAAGjB,YAAY6D,SAAS,4BACxB1F,EAAE+C,MAAM0B,OACR3B,EAAGnB,WAAWgF,QACd7D,EAAGpC,mBAAmBgE,OACtB5B,EAAGnC,yBAAyB8D,OAC5B3B,EAAGlC,yBAAyB8D,QACrB,IAET5B,EAAGnC,yBAAyBqF,GAAG,QAAS,WAWtC,OAVAlD,EAAGhB,aAAa4D,SAAS,8BACzB1F,EAAE+C,MAAM0B,OAE2B,EAA/B3B,EAAGpC,mBAAmB8C,SACxBV,EAAGjB,YAAY6D,SAAS,4BACxB5C,EAAGpC,mBAAmBgE,OACtB5B,EAAGrC,mBAAmBgE,QAGxB3B,EAAGlC,yBAAyB8D,QACrB,IAET5B,EAAGpC,mBAAmBsF,GAAG,QAAS,WAChC,IAAI7D,EAAQ,EACRyE,EAAc9D,EAAGnB,WAAW6D,SAASA,SAASA,SAgBlD,OAfA1C,EAAGjB,YAAY4D,YAAY,4BAC3BzF,EAAE+C,MAAM0B,OACR3B,EAAGnB,WAAWmD,IAAI,IAClB9E,EAAE,iBAAiBsF,KAAK,WACtBnD,IACAnC,EAAE+C,MAAMyC,SAASC,YAAY,YAGnB,GAARtD,IAAeyE,EAAYjB,SAAS,wBACtCiB,EAAYlB,SAAS,uBAGvB5C,EAAGlC,yBAAyB6D,OAC5B3B,EAAGrC,mBAAmBiE,OACtB5B,EAAGnC,yBAAyB+D,QACrB,IAET5B,EAAGlC,yBAAyBoF,GAAG,QAAS,WACtC,IAAI7D,EAAQ,EACR0E,EAAe/D,EAAGlB,YAAY4D,SAASA,SAASA,SAwBpD,GAvBA1C,EAAGhB,aAAa2D,YAAY,8BAC5BzF,EAAE+C,MAAM0B,OAE2B,EAA/B3B,EAAGpC,mBAAmB8C,SACxBV,EAAGjB,YAAY4D,YAAY,4BAC3B3C,EAAGpC,mBAAmB+D,OACtB3B,EAAGnB,WAAWmD,IAAI,IAClB9E,EAAE,iBAAiBsF,KAAK,WACtBtF,EAAE+C,MAAMyC,SAASC,YAAY,YAE/B3C,EAAGrC,mBAAmBiE,QAGxB5B,EAAGlB,YAAYkD,IAAI,IACnB9E,EAAE,mBAAmBsF,KAAK,WACxBnD,IACAnC,EAAE+C,MAAMyC,SAASC,YAAY,YAGnB,GAARtD,IAAe0E,EAAalB,SAAS,0BACvCkB,EAAanB,SAAS,yBAGW,EAA/B5C,EAAGpC,mBAAmB8C,OAAY,CACpC,IAAIoD,EAAc9D,EAAGnB,WAAW6D,SAASA,SAASA,SAEtC,GAARrD,IAAeyE,EAAYjB,SAAS,wBACtCiB,EAAYlB,SAAS,uBAKzB,OADA5C,EAAGnC,yBAAyB+D,QACrB,IAET5B,EAAGjB,YAAYmE,GAAG,SAAU,SAAUC,GACpC,IAEIa,EAFAlB,EAAO7C,KACP6D,EAAc9D,EAAGnB,WAAW6D,SAASA,SAASA,SAElDsB,EAA2B,MAArBlB,EAAKmB,aAAuBnB,EAAKmB,aAAenB,EAAKoB,aAAepB,EAAKqB,aAE3ErB,EAAKc,UAAYI,EAAM,GACzBF,EAAYnB,YAAY,uBAExBmB,EAAYlB,SAAS,uBAGA,IAAnBE,EAAKc,UACPE,EAAYnB,YAAY,2BAExBmB,EAAYlB,SAAS,6BAGzB5C,EAAGhB,aAAakE,GAAG,SAAU,SAAUC,GACrC,IAEIa,EAFAlB,EAAO7C,KACP6D,EAAc9D,EAAGlB,YAAY4D,SAASA,SAASA,SAEnDsB,EAA2B,MAArBlB,EAAKmB,aAAuBnB,EAAKmB,aAAenB,EAAKoB,aAAepB,EAAKqB,aAE3ErB,EAAKc,UAAYI,EAAM,GACzBF,EAAYnB,YAAY,yBAExBmB,EAAYlB,SAAS,yBAGA,IAAnBE,EAAKc,UACPE,EAAYnB,YAAY,6BAExBmB,EAAYlB,SAAS,+BAGzB1F,EAAE,mBAAmBgG,GAAG,QAAS,SAAUC,GACzCA,GAAKA,EAAEC,iBACP,IAAIgB,EAAOlH,EAAE+C,MACTqD,EAASc,EAAKhC,KAAK,UACnBa,EAASjD,EAAG7C,OAAOiF,KAAK,oCAAsCkB,EAAOC,KAAK,UAAY,MACtFP,EAAQhD,EAAG7C,OAAOiF,KAAK,sBAEvBkB,EAAOT,SAAS,UACdS,EAAOT,SAAS,gBAClBS,EAAOX,YAAY,eACnBW,EAAOV,SAAS,aAChBK,EAAON,YAAY,eACnBM,EAAOL,SAAS,eAEhBU,EAAOX,YAAY,aACnBW,EAAOV,SAAS,eAChBK,EAAON,YAAY,aACnBM,EAAOL,SAAS,gBAEiB,UAA1BU,EAAOC,KAAK,WACjBD,EAAOT,SAAS,gBAClBS,EAAOX,YAAY,eACnBM,EAAON,YAAY,iBAEnBW,EAAOX,YAAY,aACnBM,EAAON,YAAY,cAGrByB,EAAKZ,WAAWpB,KAAK,UAAUO,YAAY,UAC3CM,EAAOO,WAAWb,YAAY,UAC9BW,EAAOV,SAAS,UAChBU,EAAOV,SAAS,aAChBK,EAAOL,SAAS,UAChBK,EAAOL,SAAS,cACmB,WAA1BU,EAAOC,KAAK,YACjBD,EAAOT,SAAS,gBAClBS,EAAOX,YAAY,eACnBM,EAAON,YAAY,iBAEnBW,EAAOX,YAAY,aACnBM,EAAON,YAAY,cAGrByB,EAAKZ,WAAWpB,KAAK,UAAUO,YAAY,UAC3CM,EAAOO,WAAWb,YAAY,UAC9BW,EAAOV,SAAS,UAChBU,EAAOV,SAAS,eAChBK,EAAOL,SAAS,UAChBK,EAAOL,SAAS,gBAGlBI,EAAMK,KAAKJ,EAAOI,QAClBrD,EAAGoB,kBAGPA,aAAc,SAAsBjC,GAClC,IAAIa,EAAKC,KACTD,EAAGb,KAAOA,GAAc,EACxBa,EAAG/B,WAAa,EAChB+B,EAAGyD,sBACHzD,EAAG0D,aAAa1D,EAAGb,OAErBgB,qBAAsB,WACpB,IAAIH,EAAKC,KAsBT,GApB0B,KAAtBD,EAAGV,MAAMb,WACXuB,EAAGZ,YAAYX,SAAWuB,EAAGV,MAAMb,SAEV,EAArBuB,EAAGvB,SAASiC,QACdV,EAAGvB,SAASuD,IAAIhC,EAAGZ,YAAYX,UAGjCuB,EAAGrB,UAAUqD,IAAIhC,EAAGZ,YAAYX,WAGR,KAAtBuB,EAAGV,MAAMZ,WACXsB,EAAGZ,YAAYV,SAAWsB,EAAGV,MAAMZ,SAEV,EAArBsB,EAAGtB,SAASgC,QACdV,EAAGtB,SAASsD,IAAIhC,EAAGZ,YAAYV,UAGjCsB,EAAGpB,UAAUoD,IAAIhC,EAAGZ,YAAYX,WAG9BuB,EAAGV,MAAM+E,UAKX,IAJA,IAAIA,EAAYrE,EAAGV,MAAM+E,UAAUC,MAAM,KAAKC,IAAI,SAAUC,GAC1D,OAAOA,EAAEjC,gBAGFkC,EAAI,EAAGA,EAAIJ,EAAU3D,OAAQ+D,IACX,EAArBzE,EAAG1C,SAASoD,QACdxD,EAAE,uBAAyBmH,EAAUI,GAAK,MAAM5C,KAAK,WAAW,GAGlE3E,EAAE,yBAA2BmH,EAAUI,GAAK,MAAM5C,KAAK,WAAW,GAIlE7B,EAAGV,MAAMO,UACPG,EAAGzC,eAAeyC,EAAGzC,cAAcsE,KAAK,UAA+B,QAApB7B,EAAGV,MAAMO,SAChEG,EAAGxC,eAAeqE,KAAK,UAA+B,QAApB7B,EAAGV,MAAMO,WAG/C4D,oBAAqB,WACnB,IAAIzD,EAAKC,KACLyE,EAAS,GAEb,GAAyB,EAArB1E,EAAG1C,SAASoD,OAAY,CAC1BV,EAAGZ,YAAYX,SAAWuB,EAAGvB,SAASuD,MACtChC,EAAGZ,YAAYV,SAAWsB,EAAGtB,SAASsD,MACtC9E,EAAE,yBAAyBsF,KAAK,WAC9BkC,GAAUxH,EAAE+C,MAAMkC,KAAK,cAAgB,MAEzC,IAAIwC,EAAUzH,EAAE,qBAChB8C,EAAGZ,YAAYwF,OAASD,EAAQpB,KAAK,UACrCvD,EAAGZ,YAAYyF,SAAWF,EAAQ9B,SAAS,eAAiB,OAAS,YAChE,CACL7C,EAAGZ,YAAYX,SAAWuB,EAAGrB,UAAUqD,MACvChC,EAAGZ,YAAYV,SAAWsB,EAAGpB,UAAUoD,MACvC9E,EAAE,2BAA2BsF,KAAK,WAChCkC,GAAUxH,EAAE+C,MAAMkC,KAAK,cAAgB,MAEzC,IAAImB,EAASpG,EAAE,4BACf8C,EAAGZ,YAAYwF,OAAStB,EAAOC,KAAK,UACpCvD,EAAGZ,YAAYyF,SAAWvB,EAAOT,SAAS,eAAiB,OAAS,QAGlE6B,EAAOhE,SACTgE,EAASA,EAAOI,UAAU,EAAGJ,EAAOhE,OAAS,IAG/CV,EAAGZ,YAAYS,QAAUG,EAAGH,QAC5BG,EAAGZ,YAAYiF,UAAYK,EAC3B1E,EAAGZ,YAAYC,MAAQW,EAAGX,MAC1BW,EAAGZ,YAAYD,KAAOa,EAAGb,KACzBa,EAAGZ,YAAYW,OAASC,EAAGD,OAG3B,IAFA,IAAIgF,EAAOC,OAAOD,KAAK/E,EAAGZ,aAEjB6F,EAAI,EAAGA,EAAIF,EAAKrE,OAAQuE,IAC1BjF,EAAGZ,YAAY2F,EAAKE,YAChBjF,EAAGZ,YAAY2F,EAAKE,IAI/B,IAAIC,EAASF,OAAOD,KAAK/E,EAAGZ,aAAamF,IAAI,SAAUY,GACrD,OAAOC,mBAAmBD,GAAK,IAAMnF,EAAGZ,YAAY+F,KACnDE,KAAK,KACRC,QAAQC,UAAU,GAAI,UAAWlE,OAAOmE,SAASC,SAAW,IAAMP,IAEpEQ,UAAW,WAGkB,SAAvBC,EAAqDC,EAAQC,GAE/D,OAAOD,EAAsB,GAD7BC,EAASC,KAAKC,IAAIF,IACK,KAAWA,EAAS,IAAM,GAAK,EAAIG,EAAMH,EAAS,GAAK,EAAIA,EAAS,GAAK,IAJlG,IAAIG,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAO5B,OAAO,SAAUC,GACf,OAAyB,IAArBC,UAAUxF,OACL,SAAUyF,GACf,OAAOR,EAAqBM,EAASE,IAGhCR,EAAqBS,MAAM,KAAMF,YAdnC,GAkBXxC,aAAc,SAAsB2C,GAClC,IAAIrG,EAAKC,KACTD,EAAGhC,OAAO4E,SAAS,WACnB5C,EAAGd,WAAWwD,SAASf,OACvBzE,EAAEoJ,IAAI,cAAetG,EAAGZ,aAAamH,KAAK,SAAUC,GAClDxG,EAAG/B,WAAaC,SAASsI,EAAOC,OAChCzG,EAAG3B,YAAYF,KAAK,IAAMqI,EAAOC,MAAQ,KAEZ,EAAzBD,EAAOE,SAAShG,QAClBV,EAAGf,aAAad,KAAK,WAAaqI,EAAOC,MAAQ,IAAMzG,EAAG0F,UAAU,CAAC,QAAS,SAAU,WAAYc,EAAOC,QAE3F,IAAZzG,EAAGb,MAAckH,EACnBrG,EAAGjC,aAAasF,KAAKrD,EAAGR,KAAKmH,OAAOH,IAEpCtJ,EAAE8C,EAAGR,KAAKmH,OAAOH,IAASI,SAAS5G,EAAGjC,cAGpCyI,EAAOC,MAAQzG,EAAGX,OAA6C,EAApCmH,EAAOC,MAAQzG,EAAGb,KAAOa,EAAGX,OACzDW,EAAGd,WAAWwD,SAASd,SAGzB5B,EAAGf,aAAad,KAAK,qBACrB6B,EAAGjC,aAAasF,KAAKrD,EAAGN,QAAQiH,WAIlC,IAAIE,EAAsB3J,EAAE,+CACxB4J,EAAgB5J,EAAE,2CAClB6J,EAAY,KAEa,IAAzBD,EAAcpG,SAChBqG,EAAYD,EAAcE,QAAQ7E,KAAK,eAGN,IAA/B0E,EAAoBnG,SACtBqG,EAAYF,EAAoBG,QAAQ7E,KAAK,eAG/C,IAAI8E,EAAyB,MAAbF,EAAoB/G,EAAGzB,aAAe,IAAMwI,EAAY,aAAe/G,EAAGzB,aAAe,aACrG2I,EAAwB,MAAbH,EAAoB/G,EAAGzB,aAAe,IAAMwI,EAAY,qBAAuB/G,EAAGzB,aAAagE,cAAgB,IAAMwE,EAAY,qBAAuB/G,EAAG1B,kBAC1KqF,SAASX,MAAQkE,EACjBlH,EAAGL,SAASxB,KAAK8I,GACjBjH,EAAGuB,iBAAiBvB,EAAGb,KAAMqH,EAAOC,SACnCU,KAAK,WACNC,MAAM,uFACLC,OAAO,WACRrH,EAAGhC,OAAO2E,YAAY,cAG1BrC,gBAAiB,SAAyBgC,GAGxC,IAFA,IAAIgF,EAAS,GAEJC,EAAO,EAAGA,GAAQ,EAAGA,IAAQ,CACpC,IAAI/C,EAAI+C,GAAQjF,EAAQ,EAAIiF,EAAOjF,EAAQ,GAA0B,GAArBiF,EAAO,EAAIjF,GAAc,EAEzEgF,GAAU,iHADuC,KAAxCxB,KAAK0B,KAAK,EAAIhD,EAAI,GAAKsB,KAAK2B,GAAK,IACuF,mBAGnI,OAAOH;ACxsBX,aAEA,IAAII,WAAa,CACfC,KAAMzK,EAAE,cACR0K,UAAW1K,EAAE,qBACb2K,SAAU3K,EAAE,cACZD,QAASC,EAAE,iBACXC,OAAQD,EAAE,gBACV4K,QAAS5K,EAAE,uBACX6K,WAAY7K,EAAE,oBACd8K,MAAO9K,EAAE,cACT+K,cAAe/K,EAAE,cACjBgL,WAAY,KACZC,UAAW,EACXC,WAAY,EACZC,eAAgB,KAChBC,aAAa,EACbxI,KAAM,SAAcoI,EAAYG,EAAgBC,GAC9CrI,KAAKiI,WAA2B,MAAdA,GAAoC,IAAdA,EAAmBK,GAAGC,OAAOlC,IAAI,cAAgB4B,EACzFjI,KAAKkI,UAA2C,OAA/BI,GAAGC,OAAOlC,IAAI,cAAwD,cAA/BiC,GAAGC,OAAOlC,IAAI,aAA+B,KAAOiC,GAAGC,OAAOlC,IAAI,aAC1HrG,KAAKmI,WAA6C,OAAhCG,GAAGC,OAAOlC,IAAI,eAA0D,cAAhCiC,GAAGC,OAAOlC,IAAI,cAAgC,KAAOiC,GAAGC,OAAOlC,IAAI,cAC7HrG,KAAKoI,eAAiBA,EACtBpI,KAAKqI,YAAcA,EACnBrI,KAAK0B,OAEA1B,KAAKwI,cAIRxI,KAAKyI,QAAQzI,KAAKiI,WAAYjI,KAAKkI,UAAWlI,KAAKmI,aAHnDnI,KAAK0B,OACL1B,KAAK0I,eAKP1I,KAAKM,cACLN,KAAK2I,gBAEPH,YAAa,WACX,IAAIzI,EAAKC,KACT,OAAqB,MAAjBD,EAAGkI,YAAuC,IAAjBlI,EAAGkI,aACX,OAAjBlI,EAAGmI,WAAuC,IAAjBnI,EAAGmI,WAC5BI,GAAGC,OAAOlC,IAAI,gBAAkBtG,EAAGkI,aAGzCU,aAAc,WACZ,IAAI5I,EAAKC,KACTD,EAAG8H,QAAQ5E,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GACpDA,EAAEC,iBACFpD,EAAGgI,MAAM5F,KAAK,YAAYO,YAAY,UACtC,IAAImG,EAAS9I,EAAGgI,MAAM5F,KAAK,sBAAwBpC,EAAGmI,UAAY,MAClEjL,EAAEyG,UAAUC,UAAU,GACtBkF,EAAOlG,SAAS,UAChB5C,EAAGiI,cAAcrF,SAAS,QAC1B5C,EAAGgI,MAAMpF,SAAS,UAGA,SAAhBmG,EAAuC5F,GACzCA,EAAEC,iBACFlG,EAAE+C,MAAMyC,SAASN,KAAK,YAAYO,YAAY,UAC9CzF,EAAE+C,MAAM2C,SAAS,UACjB5C,EAAG0I,QAAQxL,EAAE+C,MAAM9B,OAAQjB,EAAE+C,MAAMkC,KAAK,mBAAoBjF,EAAE+C,MAAMkC,KAAK,qBACzEnC,EAAGgI,MAAMrF,YAAY,QACrB3C,EAAGiI,cAActF,YAAY,QAOV,SAAjBqG,IACEnB,EAAShF,SAAS,YACpBoG,EAAMjH,IAAI,IACVkH,EAAStG,SAAS,UAClBiF,EAASlF,YAAY,UACrBuG,EAASC,SAlBb,IASID,EAAWhM,EAAE,mBACb2K,EAAW3K,EAAE,uBACb+L,EAAQ/L,EAAE,oBAWdA,EAAE,qBAAqBgG,GAAGlD,EAAG6I,QAAU,MAAQ,QAASE,GACxDE,EAAM/F,GAAG,uBAAwB,SAAUC,GACzC,IAAIb,EAAQ2G,EAAMjH,MAEL,IAATM,GACF0G,IAGiB,EAAf1G,EAAM5B,SACRwI,EAASC,QACTjM,EAAEkM,KAAK,CACL7J,IAAK,wBACL8J,SAAU,OACV9F,KAAM,CACJjE,MAAOgD,GAETgH,QAAS,SAAiB/F,GACxB,IAAIgG,EAAWrM,EAAEuC,UAAU,aAEvB8D,EAAKiD,QAAUjD,EAAKiD,OAAO9F,OAC7BxD,EAAEqM,EAAS5C,OAAOpD,EAAKiD,SAASI,SAASsC,GAEzChM,EAAEqM,EAAS5C,OAAOpD,IAAOqD,SAASsC,GAGpCrB,EAASjF,SAAS,UAClBsG,EAASvG,YAAY,UACrBzF,EAAE,0BAA0BgG,GAAGlD,EAAG6I,QAAU,MAAQ,QAASE,SAKrE7L,EAAE,iBAAiBgG,GAAGlD,EAAG6I,QAAU,MAAQ,QAASG,IAEtDzI,YAAa,WACX,IAAIP,EAAKC,KAqBTD,EAAG2H,KAAK1F,KAAKjC,EAAG6I,QAAU,MAAQ,QAnBhB,SAAqB1F,GACrCA,EAAEC,iBACF,IAAI0F,EAAS5L,EAAE,uCAAyC8C,EAAGmI,UAAY,MAcvE,OAZKnI,EAAG6H,SAAS2B,GAAG,aAMlBxJ,EAAG6H,SAASlG,OACZ3B,EAAG/C,QAAQ0E,OACXmH,EAAOnG,YAAY,UACnBzF,EAAE,WAAWyF,YAAY,cARzBzF,EAAE,WAAW0F,SAAS,YACtBkG,EAAOlG,SAAS,UAChB5C,EAAG/C,QAAQ2E,OACX5B,EAAG6H,SAASjG,SAQP,IAIT5B,EAAG/C,QAAQiG,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GACpDA,EAAEC,iBAEElG,EAAE,WAAW2F,SAAS,WACxB3F,EAAE,yBAAyBuM,OAC3BvM,EAAE,WAAWyF,YAAY,UAG3B3C,EAAG7C,OAAOwF,YAAY,QAEG,EAArB3C,EAAG6H,SAASnH,QAAcV,EAAG6H,SAAS2B,GAAG,cAC3CxJ,EAAG6H,SAASzF,KAAK,YAAYO,YAAY,UACzCzF,EAAE,sBAAsBwM,aAAa,QACrC1J,EAAG6H,SAASlG,OACZ3B,EAAG/C,QAAQ0E,OACXzE,EAAE,WAAWyF,YAAY,YACzBzF,EAAE,sBAAsB8E,IAAI,IAC5B9E,EAAE,sBAAsBwM,aAAa,UAGvC1J,EAAG/C,QAAQ0E,SAEbzE,EAAE,gBAAgBgG,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GAC3DA,EAAEC,iBACFpD,EAAG6H,SAASzF,KAAK,YAAYO,YAAY,UACzCzF,EAAE+C,MAAM2C,SAAS,UACjB5C,EAAG0I,QAAQxL,EAAE+C,MAAM9B,OAAQjB,EAAE+C,MAAMkC,KAAK,mBAAoBjF,EAAE+C,MAAMkC,KAAK,qBACzEnC,EAAG6H,SAASlG,OACZzE,EAAE,6BAA6ByE,OAC/B3B,EAAG/C,QAAQ0E,OACXzE,EAAE,WAAWyF,YAAY,YACzB3C,EAAG2J,QAAS,IAEdzM,EAAE,sBAAsBwM,aAAa,CACnCE,WAAY,wBACZP,SAAU,OACVQ,SAAU,EACVC,gBAAiB,SAAyBC,GACxC,GAAIA,EAASvD,QAAUuD,EAASvD,OAAO9F,OAAQ,CAC7C,IAAIsJ,EAAOD,EAASvD,OACpB,MAAO,CACLyD,YAAa/M,EAAEqH,IAAIyF,EAAM,SAAUE,GACjC,MAAO,CACL5H,MAAO4H,EAASC,KAChBC,UAAWF,EAASE,UACpBC,WAAYH,EAASG,eAM7B,OAAO,MAETC,SAAU,SAAkBC,GAC1BvK,EAAG0I,QAAQ6B,EAAWjI,MAAOiI,EAAWH,UAAWG,EAAWF,YAC9DrK,EAAG6H,SAASzF,KAAK,YAAYO,YAAY,UACzC3C,EAAG6H,SAASlG,OACZ3B,EAAG/C,QAAQ0E,OACXzE,EAAE,WAAWyF,YAAY,YACzBzF,EAAE,sBAAsB8E,IAAI,QAIlC2G,YAAa,WACX,IACIhB,EADA3H,EAAKC,KAqBT,OAlBKD,EAAGyI,gBACNd,EAAO3H,EAAGkI,YAGZhL,EAAEkM,KAAK,CACL7J,IAAK,uBACLgE,KAAM,CACJoE,KAAMA,GAER2B,QAAS,SAAiB/F,GACxB,GAAIA,GAAQA,EAAKiH,KAEf,OADAxK,EAAG0I,QAAQnF,EAAKiH,KAAMjH,EAAKkH,UAAWlH,EAAKmH,YACpCnH,EAEPvD,EAAG0I,QAAQ,SAAU,KAAM,QAI1B,CACL8B,KAAQ,SACRC,UAAa,KACbC,WAAc,MAGlBC,QAAS,WAIP,MAAO,CACLH,KAJkC,MAAnBvK,KAAKiI,YAAyC,IAAnBjI,KAAKiI,WAAmBK,GAAGC,OAAOlC,IAAI,cAAgBrG,KAAKiI,WAKrGuC,UAJgC,MAAlBxK,KAAKkI,WAAuC,IAAlBlI,KAAKkI,UAAkBI,GAAGC,OAAOlC,IAAI,aAAerG,KAAKkI,UAKjGuC,WAJkC,MAAnBzK,KAAKmI,YAAyC,IAAnBnI,KAAKmI,WAAmBG,GAAGC,OAAOlC,IAAI,cAAgBrG,KAAKmI,aAOzGM,QAAS,SAAiBvK,EAAMgK,EAAWC,GACzCnI,KAAKiI,WAAa/J,EAClB8B,KAAKkI,UAAYA,EACjBlI,KAAKmI,WAAaA,EAClBnI,KAAK2K,YACDzM,GAAuB,GAAfA,EAAKuC,OAAaT,KAAK0B,OAAY1B,KAAK2B,OACzB,MAAvB3B,KAAKoI,gBAAwBpI,KAAKoI,eAAelK,GACjD8B,KAAKqI,aAAarI,KAAK4K,WAEvB5K,KAAK0H,OACP1H,KAAK0H,KAAKxJ,KAAK,MAAQA,GACvB8B,KAAK0H,KAAKxF,KAAK,kBAAmBgG,GAClClI,KAAK0H,KAAKxF,KAAK,mBAAoBiG,IAGjCnI,KAAK8H,aACP9H,KAAK8H,WAAW5J,KAAK,MAAQA,GAC7B8B,KAAK2H,UAAUzJ,KAAK,MAAQA,GAC5B8B,KAAK8H,WAAW5F,KAAK,kBAAmBgG,GACxClI,KAAK8H,WAAW5F,KAAK,mBAAoBiG,KAG7CzG,KAAM,WACA1B,KAAK0H,MAAM1H,KAAK0H,KAAKjF,SAASf,OAC9B1B,KAAK6H,SAAS7H,KAAK6H,QAAQlF,SAAS,WAE1ChB,KAAM,WACA3B,KAAK0H,MAAM1H,KAAK0H,KAAKjF,SAASd,OAC9B3B,KAAK6H,SAAS7H,KAAK6H,QAAQnF,YAAY,WAE7CiI,UAAW,WACTrC,GAAGC,OAAOsC,IAAI,YAAa7K,KAAKkI,UAAW,CACzC4C,KAAM,IACNC,QAAS,MAEXzC,GAAGC,OAAOsC,IAAI,aAAc7K,KAAKmI,WAAY,CAC3C2C,KAAM,IACNC,QAAS,MAEXzC,GAAGC,OAAOsC,IAAI,aAAc7K,KAAKiI,WAAY,CAC3C6C,KAAM,IACNC,QAAS,OAGbH,SAAU,WAYR,IAXA,IAAII,EACAC,EAAK,MAEThG,EAAS,qBACLiG,EAAS,SAAgBC,GAC3B,OAAOC,mBAAmBD,EAAEhN,QAAQ8M,EAAI,OAEtC5L,EAAQ+B,OAAOmE,SAASN,OAAOJ,UAAU,GAEzCwG,EAAY,GAETL,EAAQ/F,EAAOqG,KAAKjM,IACzBgM,EAAUH,EAAOF,EAAM,KAAOE,EAAOF,EAAM,IAG7CK,EAAgB,KAAIrL,KAAKiI,WACrBhD,EAASF,OAAOD,KAAKuG,GAAW/G,IAAI,SAAUY,GAChD,OAAOC,mBAAmBD,GAAK,IAAMmG,EAAUnG,KAC9CE,KAAK,KACRC,QAAQC,UAAU,GAAI,GAAIlE,OAAOmE,SAASC,SAAW,IAAMP;AC1S/D,aAEAhI,EAAEyG,UAAU6H,MAAM,WAChBtO,EAAE,QAAQuO,MAAM,SAAUC,GACxB,GAAiE,EAA7DxO,EAAEwO,EAAMC,QAAQC,QAAQ,4BAA4BlL,OAAY,OAAO,EAC3ExD,EAAE,yCAAyCyF,YAAY,YAEzDzF,EAAE,qEAAqEuO,MAAM,SAAUC,GACrF,OAAiG,EAA7FxO,EAAEwO,EAAMC,QAAQC,QAAQ,4DAA4DlL,SACxFxD,EAAE+C,MAAM4L,YAAY,UAAUrI,SAAS,WAAWb,YAAY,WACvD;ACVX,aAEA,IAAImJ,KAAOnI,SAASoI,gBAChBC,WAAaF,KAAKG,UACtBD,WAAaA,WAAW5N,QAAQ,QAAS;ACJzC,cAgBA,SAAWlB,IAKTA,GAAEgP,WAAahP,GAAEgP,YAAc,GAC/BhP,GAAEgP,WAAWC,SAAW,CACtBC,mBAAoB,6BAEpBC,OAAQ,KAERC,SAAU,OAEVC,IAAK,EAELC,OAAQ,EAERC,gBAAiB,WAEf,OAAOvP,GAAE,KAEXwP,oBAAqB,WAEnB,OAAOxP,GAAE,KAEXyP,aAAc,SAAsBC,GAIlC,OAAOA,EAAOxK,KAAK,qCAErByK,gBAAiB,mBACjBC,kBAAmB,qBACnBC,oBAAqB,uBACrBC,gBAAgB,EAEhBC,YAAY,EAEZC,OAAO,EAEPC,QAAS,CAEPC,WAAW,EACXC,YAAY,EACZC,UAAU,EACVC,kBAAkB,IAItB,IAAIC,GAAOnM,OAAOoM,GAAK,WACrB,IAAI3K,EAAO,GACP4K,EAAiB1I,OAAO2I,UAAUD,eAGtC5K,EAAK8K,IAAM,SAAUC,EAAKC,GACxB,OAAOJ,EAAeK,KAAKF,EAAKC,IAGlChL,EAAKiC,KAAOC,OAAOD,MAAQ,SAAU8I,GACnC,GAAIA,IAAQ7I,OAAO6I,GAAM,MAAM,IAAIG,UAAU,kBAC7C,IAAIjJ,EAAO,GAEX,IAAK,IAAI+I,KAAOD,EACV/K,EAAK8K,IAAIC,EAAKC,IAAM/I,EAAKkJ,KAAKH,GAGpC,OAAO/I,GAGT,IAAImJ,EAAY,EA4ChB,OA1CApL,EAAKqL,SAAW,SAAUC,GACxB,IAAIC,IAAOH,EAAY,GACvB,OAAOE,EAASA,EAASC,EAAKA,GAGhCnR,GAAEsF,KAxBa,CAAC,YAAa,WAAY,SAAU,SAAU,OAAQ,UAwBpD,WACf,IAAI2H,EAAOlK,KAEX6C,EAAK,KAAOqH,GAAQ,SAAU0D,GAC5B,OAAO7I,OAAO2I,UAAUtL,SAAS0L,KAAKF,IAAQ,WAAa1D,EAAO,OAItErH,EAAKwL,SAAW,SAAUC,EAAMC,EAAMC,GACpC,IAAIC,EAASC,EAAMC,EAASC,EAAWrI,EACvC,OAAO,WACLoI,EAAU3O,KACV0O,EAAOzI,UACP2I,EAAY,IAAIC,KAEhB,IAWIC,EAAUN,IAAcC,EAO5B,OAJEA,EADGA,GACOM,WAdA,SAASC,IACnB,IAAIC,EAAO,IAAIJ,KAASD,EAEpBK,EAAOV,EACTE,EAAUM,WAAWC,EAAOT,EAAOU,IAEnCR,EAAU,KACLD,IAAWjI,EAAS+H,EAAKnI,MAAMwI,EAASD,MAOnBH,GAG1BO,IAASvI,EAAS+H,EAAKnI,MAAMwI,EAASD,IACnCnI,IAIJ1D,EAhEc,GAmEnBqM,GAAkD,oBAArBC,iBAE7BC,GAAY,WACd,IAAK,IAAIC,EAAI,EAAGC,EAAI5L,SAAS6L,cAAc,KAAMC,EAAIF,EAAEG,KAAO,GAAIJ,EAAI,EAAIA,EAAGC,EAAEI,UAAY,oBAAmBL,EAAI,uBAAqBG,EAAE,KAIzI,OAAO,EAAIH,EAAIA,EAAI3L,SAASiM,aALd,GAQZC,EAAO,UAAUC,KAAKC,UAAUC,WAChCC,GAAW,WAAWH,KAAKC,UAAUC,WAEnCX,IAAaQ,GAAQI,KACzBZ,GAAY,IAId,IAAIa,EAAkB,WACpB,GAAID,GAAU,CACZ,IAAIE,EAAQjT,GAAE,SAASkT,IAAI,QAAS,GAAGC,OAAOnT,GAAE,WAAWkT,IAAI,YAAa,QAAQC,OAAOnT,GAAE,QAAQmT,OAAOnT,GAAE,QAAQmT,OAAOnT,GAAE,SAASkT,IAAI,YAAa,KAAKjS,KAAK,SACnKjB,GAAE,QAAQmT,OAAOF,GACjB,IAAIG,EAAqC,GAA/BH,EAAM/N,KAAK,SAASmO,QAE9B,OADAJ,EAAMK,SACCF,EAGT,OAAO,GAGLG,IAAkBZ,IAASR,GAE3BqB,GAAUxT,GAAEmE,QAEhB,IAAKA,OAAOsP,WAAY,CACtB,IAAIC,EAAevP,OAAOwP,cACtBC,EAAczP,OAAO0P,aAEzB1P,OAAOwP,cAAgB,WACrBD,GAAgBA,IAChBF,GAAQM,eAAe,gBAGzB3P,OAAO0P,aAAe,WACpBD,GAAeA,IACfJ,GAAQM,eAAe,eA2B3B,SAASC,GAA0BC,GACjC,IACIxO,EADOwO,EAAM,GACCC,cAElB,EAAG,CAED,GAAW,WADD9P,OAAO+P,iBAAiB1O,GAAQ2O,iBAAiB,YACrC,YACf3O,EAASA,EAAOyO,eAEzB,OAAIzO,GAAUiB,SAAS2N,KACdpU,GAAE,IAGJA,GAAEwF,GAGX,SAASwK,GAAMqE,GACblQ,QAAUA,OAAOI,SAAWJ,OAAOI,QAAQ+P,OAASnQ,OAAOI,QAAQ+P,MAAM,sBAAwBD,GA2CnG,SAASE,GAAW7E,EAAQ8E,EAAWC,GAErC,IAAIC,EAAKD,EAAU,aAAe,QAElC,GAAIzB,GAAmBtD,EAAOwD,IAAI,aAAc,CAC9C,IAAIyB,EAAI,EAEJF,IACFE,GAAK3T,SAAS0O,EAAOwD,IAAI,cAAe,IACxCyB,GAAK3T,SAAS0O,EAAOwD,IAAI,eAAgB,KAG3C,IAAK,IAAInL,EAAI,EAAGA,EAAIyM,EAAUhR,OAAQuE,IACpC4M,GAAKH,EAAUpL,IAAIrB,GAAG6M,YAGxB,OAAOD,EAEP,OAAOjF,EAAOgF,KAIlB1U,GAAE0U,GAAG1F,WAAa,SAAU3H,GAG1B,GAFAA,EAAMA,GAAO,GAET8K,GAAY,EACd,OAAOpP,KAGT,IAAI8R,GAAO,KAMX,GAJIvE,GAAKwE,WAAW9B,KAClBA,EAAkBA,KAGhB1C,GAAKyE,SAAS1N,GAAM,CACtB,IAAI2N,EAAU3N,EACVoK,EAAOwD,MAAMxE,UAAUyE,MAAMrE,KAAK7H,UAAW,GAC7CoK,EAAMrQ,KAmBV,OAlBAA,KAAKoS,OAAO,SAAS7P,KAAK,WACxB,IAAI8P,EAAQpV,GAAE+C,MACVsS,EAAOD,EAAM/O,KAAK,mBAElBgP,GACFD,EAAMpG,WAAWqG,GAGnB,IAAI1E,EAAMyE,EAAM/O,KAAK,uBAErB,GAAIsK,GAAOL,GAAKwE,WAAWnE,EAAIqE,IAAW,CACxC,IAAIM,EAAI3E,EAAIqE,GAAS9L,MAAMnG,KAAM0O,QAEvBzO,IAANsS,IACFlC,EAAMkC,MAILlC,EAGT,IAAIiC,GAAOrV,GAAEuV,OAAO,GAAIvV,GAAEgP,WAAWC,UAAY,GAAI5H,GAOrD,GANArH,GAAEsF,KAAK+B,EAAK,SAAUuJ,EAAK9L,GACnB8L,KAAO5Q,GAAEgP,WAAWC,WAAaoG,GAAKrF,OAC1CA,GAAM,SAAWY,EAAM,4FAA8FN,GAAKzI,KAAK7H,GAAEgP,WAAWC,UAAU9G,KAAK,SAI3JkN,GAAKrF,MAAO,CACd,IAAIwF,EAAIxV,GAAE0U,GAAGe,OAAOrO,MAAM,KAEA,GAAtBpG,SAASwU,EAAE,GAAI,KAAYxU,SAASwU,EAAE,GAAI,KAAO,GACnDxF,GAAM,kBAAoBhQ,GAAE0U,GAAGe,OAAS,gJAu6B5C,OAn6BA1S,KAAKoS,OAAO,SAAWE,GAAK1F,gBAAkB,KAAKrK,KAAK,WACtD,IAAIoQ,EAAepF,GAAKW,WACpBvB,EAAS1P,GAAE+C,MAEf,GAAI2M,EAAOrJ,KAAK,uBACd,OAAO,EAGT,IAAKqJ,EAAOpD,GAAG,SACb,MAAM,IAAIqJ,MAAM,kFAGlB1D,GAAsBoD,GAAKtF,YAAckC,GAEzC,IAAI2D,EAAUlG,EAAOmG,SAAS,eAC1BC,EAASpG,EAAOmG,SAAS,eAE7B,GAAsB,GAAlBD,EAAQpS,QAAgC,GAAjBsS,EAAOtS,OAahC,OAZI6R,GAAKrF,QACe,GAAlB4F,EAAQpS,OACVwM,GAAM,iCAENA,GAAM,kCAIVN,EAAOrJ,KAAK,kBAAmBgP,SAC/B3F,EAAOqG,OAAO,UAAUC,IAAI,SAAU,WACpCtG,EAAOV,WAAWqG,MAKlB3F,EAAOrJ,KAAK,oBACdqJ,EAAOqG,OAAO,UAGhBrG,EAAOrJ,KAAK,mBAAmB,GAC/B,IACI4P,EAAcC,EADdC,GAAgB,EAEhBC,EAAkB,CACpBC,SAAU,EACVC,WAAY,GAEVC,EApJR,WACE,IAAIC,EAAI/P,SAAS6L,cAAc,gBAC/BkE,EAAEC,MAAMC,QAAU,iGAClBjQ,SAAS2N,KAAKuC,YAAYH,GAC1B,IAAIlN,EAASkN,EAAE5B,YAAc4B,EAAEI,YAE/B,OADAnQ,SAAS2N,KAAKyC,YAAYL,GACnBlN,EA8ISwN,GACVC,EAAkB,GAEO,IAAzB1B,GAAK9F,kBACP8F,GAAK9F,gBAAkBwE,IAGzB,IAAIiD,EAAmB3B,GAAK9F,gBAAgBG,IAAW1P,GAAE,IAErDiX,EAAmC,EAA1BD,EAAiBxT,OAC1B0T,EAAuBD,EAASjX,GAAE,IAAMqV,GAAK7F,oBAAoBE,IAAW1P,GAAE,IAC9EmX,EAAaC,IACbC,EAAyB,KAER,QAAjBhC,GAAKjG,SACPiI,EAAyB,KACC,SAAjBhC,GAAKjG,SACdiI,GAAyB,EACC,YAAjBhC,GAAKjG,SACdiI,GAAyB,EAChBhC,GAAKrF,OACdA,GAAM,kGAAmGqF,GAAKjG,UAGlF,MAA1BiI,IAEFA,EAAyBJ,GAG3B,IAAIK,EAAW5H,EAAOxK,KAAK,WACvBqS,EAAiC,GAAnBD,EAAS9T,OAE3B,GAAI+T,EACF,IAAIC,EAAwF,SAArEF,EAASpE,IAAI,iBAAmBoE,EAASrS,KAAK,UAAY,OAGnF,IAAIwS,EAAUzX,GAAE,aAAakT,IAAI,CAC/BwE,QAAW,qBACXC,iBAAkB,EAClBC,OAAU,EACVC,kBAAmB,WACnBC,WAAc,WAEZC,GAAmB,EAEnBC,EAAWhY,GAAE,IAEbiY,EAA0B9F,IAAa,IAAM8E,GAAUI,EAEvDa,EAAclY,GAAE,YAChBmY,EAAiBnY,GAAE,eACnBoY,EAAiB1I,EAAOmG,SAAS,kBACjCwC,GAAmB,EAEM,GAAzBD,EAAe5U,SACjB4U,EAAiBpY,GAAE,eACnBqY,GAAmB,GAGrB,IAAIC,EAAUtY,GAAE,WAAWkT,IAAI,CAE7BwE,QAAW,YACXC,iBAAkB,EAClBC,OAAU,EACVC,kBAAmB,aAEjBU,EAAkBvY,GAAE,SAASkT,IAAI,WAAY,UAAUjO,KAAK,cAAe,QAC3EuT,GAAmB,EAEnBC,EAAazY,GAAE,YACf0Y,EAAY1Y,GAAE,6CACd2Y,EAAc3Y,GAAE,IAChB4Y,EAAc5Y,GAAE,IAEhB6Y,EAAe7Y,GAAE,IACjBwU,EAAYxU,GAAE,IAElByY,EAAWtF,OAAOuF,GAClBhJ,EAAOoJ,QAAQV,GAEX7E,KACFkE,EAAQtE,OAAOmF,GACf5I,EAAOyD,OAAOsE,IAGhBS,EAAY/E,OAAOgF,GACnBI,EAAgBpF,OAAO+E,GAEnB7C,GAAKvF,gBACPoI,EAAYjT,KAAK,QAASyK,EAAOzK,KAAK,UAGxCiT,EAAYjT,KAAK,CAEf8T,YAAerJ,EAAOzK,KAAK,eAC3B+T,YAAetJ,EAAOzK,KAAK,eAC3BgU,OAAUvJ,EAAOzK,KAAK,YAExB,IAAIiU,EAAkBxJ,EAAOwD,IAAI,WAoBjC,GAnBAgF,EAAYhF,IAAI,CACdiG,eAAkBzJ,EAAOwD,IAAI,kBAC7B+F,OAAUvJ,EAAOwD,IAAI,UACrBwE,QAAWwB,IAGRjC,GACHiB,EAAYhF,IAAI,QAAS,QAGJ,QAAnBgG,IACFV,GAAmB,GAGrBN,EAAYxS,SAAS2P,GAAK1F,iBAAiBuD,IAAI,CAC7CkG,OAAU,EACVC,sBAAuB,IAGrBhC,EAAwB,CAC1B,IAAIiC,EAAe,SAAsBC,EAAYC,GACnD,IAAIC,EAAcF,EAAWrG,IAAI,YAE7BwG,EAAiBH,EAErB,KAH+C,YAAfE,GAA4C,YAAfA,IAG3BD,EAAY,CAC5C,IAAItG,EAAM,CACRyG,YAAeJ,EAAWrG,IAAI,eAC9B0G,aAAgBL,EAAWrG,IAAI,iBAEjCqF,EAAgBrF,IAAIA,GACpBwG,EAAiBH,EAAWlT,KAAK,6BAA+BkT,EAAWM,KAAK7Z,GAAE,SAAS0F,SAAS2P,GAAKzF,mBAAmBsD,IAAI,CAC9H9D,SAAY,WACZ0K,MAAS,UACPtU,SACJ+T,EAAWlT,KAAK,2BAA4BqT,GAE5C3B,GAAmB,EAGrB,OAAO2B,GAGLzC,GACFe,EAAWsB,EAAatC,GAAkB,IACjC8B,QAAQP,IAEjBP,EAAWsB,EAAa5J,GACxBA,EAAOqK,OAAOxB,SAGhB7I,EAAOqK,OAAOxB,GAGhBA,EAAgBrF,IAAI,CAClB9D,SAAUiI,EAAyB,WAAa,QAChD2C,UAAW,EACX3K,IAAKgI,EAAyB,EAAI,OAClClI,OAAQkG,GAAKlG,OACb8K,WAAY,cAEd1B,EAAgB7S,SAAS2P,GAAKxF,qBAC9BqK,IACA,IAAIC,EAAc,CAChBC,eAAgB,SAEdC,EAAa,CACfD,eAAgB1K,EAAOwD,IAAI,gBAAkB,QAE3CoH,EAAqB5K,EAAO,GAAG+G,MAAMpD,OAAS,GAE9CkH,EAAwB7K,EAAOwD,IAAI,aAAe,GAEtD,SAASsH,EAAUvN,GACjB,OAAOA,EAAO,QAAUyI,EAAe,cAGzC,SAAS+E,IACP,IAAIC,EAAe,EAKnB,GAJA9E,EAAQC,SAAS,cAAcvQ,KAAK,WAClCoV,GAAgB1a,GAAE+C,MAAM4X,aAAY,KAGD,YAAjCjL,EAAOwD,IAAI,mBAAkC,CAC/C,IAAI0H,EAAuB5Z,SAAS0O,EAAOwD,IAAI,oBAAqB,IAC1ClS,SAAS0O,EAAOxK,KAAK,kBAAkBA,KAAK,YAAYgO,IAAI,oBAAqB,IAEvG0H,IACFF,GAAgBE,EAAuB,GAI3ClC,EAAUiC,YAAYD,GACtB/B,EAAYgC,YAAYD,GAkB1B,SAASR,IACPjE,GAAgB3F,GAAKwE,WAAWO,GAAKhG,KAAOgG,GAAKhG,IAAIK,GAAU2F,GAAKhG,MAAQ,EAC5E6G,GAAmB5F,GAAKwE,WAAWO,GAAK/F,QAAU+F,GAAK/F,OAAOI,GAAU2F,GAAK/F,SAAW,EA8D1F,SAASuL,IAEP,IAAK1E,EAAe,CAGlB,GAFAA,GAAgB,EAEZkB,EAAwB,CAE1B,IAAIyD,EAAKvG,GAAW7E,EAAQ8E,GAAW,GACpBwD,EAAS3E,QAExByH,GACFpL,EAAOwD,IAAI,WAAY4H,GAI3BpL,EAAOwD,IAAIiH,GACXjC,EAAYhF,IAAIiH,GAChBjC,EAAY/E,OAAOyC,GAEnBE,EAAOiE,OAAOtB,GAEdgC,KAIJ,SAASM,IAEH5E,IACFA,GAAgB,EAEZkB,GAEF3H,EAAO2D,MAAMiH,GAGf7B,EAAWuC,SACXtL,EAAOoJ,QAAQlD,GACflG,EAAOwD,IAAImH,GACXnC,EAAYhF,IAAImH,GAChB3K,EAAOwD,IAAI,WAAYqH,GAEvB7K,EAAOwD,IAAI,WAAYqB,GAAW7E,EAAQ8E,KAI9C,IAAIyG,GAA0B,EAG9B,SAASC,EAAkBC,GACrBF,GAA2BE,IAC7BF,EAA0BE,EAC1BzL,EAAOoE,eAAe,aAAc,CAACqH,EAAY5C,KAIrD,SAAS6C,EAAkBC,GACrBhE,GAA0BgE,IAC5BhE,EAAyBgE,EACzB9C,EAAgBrF,IAAI,CAClB9D,SAAUiI,EAAyB,WAAa,WAoBtD,SAASiE,IACP,IAAIvT,EACAwT,EAxIN,WACE,IAAIpZ,EACAqZ,EAAiB5F,EAAQ1Q,KAAKmQ,GAAKnG,oBAWvC,GATImJ,EACFlW,EAAQiW,EAAelT,KAAK,OAAO1B,QAEnCrB,EAAQ,EACRqZ,EAAelW,KAAK,WAClBnD,GAASnB,SAAShB,GAAE+C,MAAMkC,KAAK,YAAc,EAAG,OAIhD9C,GAAS4U,EAAiB,CAC5BA,EAAkB5U,EAMlB,IALA,IAGIsZ,EAHAC,EAAQ,GACRC,EAAO,GACPC,EAAS,GAGJtU,EAAI,EAAGA,EAAInF,EAAOmF,IACzBmU,EAAUD,EAAeK,GAAGvU,GAAGrG,OAC/Bya,EAAM3K,KAAK,0CAA4C0K,EAAU,OACjEE,EAAK5K,KAAK,UACV6K,EAAO7K,KAAK/Q,GAAE,WAAWkT,IAAI,CAC3BwE,QAAW,aACXE,OAAU,EACVvE,MAAS,UAIbsI,EAAOA,EAAKxT,KAAK,IACjBuT,EAAQA,EAAMvT,KAAK,IAEfoL,KACF+E,EAAQrM,QACRqM,EAAQnF,OAAOyI,GACfpH,EAAY8D,EAAQpT,KAAK,UAG3BwT,EAAUvS,KAAKuV,GACf/C,EAAcD,EAAUxT,KAAK,MAExBmT,GACHD,EAAejS,KAAKwV,GAGtB/C,EAAcR,EAAelT,KAAK,OAClCiT,EAAehS,KAAKwV,GACpB9C,EAAeV,EAAejT,KAAK,OAGrC,OAAO/C,EAoFO2Z,GAEd,OAAO,WAEL,IAAIC,EAAaxD,EAAgBwD,aACjCnD,EAAcR,EAAelT,KAAK,OAClC,IAvgBgBL,EAClBmX,EAsgBMC,EAvBR,SAAsBvM,EAAQwM,EAAO1H,EAAWrC,GAC9C,OAAIoB,GACKiB,EACErC,EACFkD,GAAK5F,aAAaC,EAAQwM,EAAO1H,GAEjC0H,EAiBSzM,CAAaC,EAAQkJ,EAAapE,EAAWrC,IAE7D,GAAI8J,EAAUzY,QAAU+X,GAAqB,EAAVA,EAAa,CAC9C,IAAKlD,EACH,IAAKtQ,EAAI,EAAGA,EAAIwT,EAASxT,IACvB6Q,EAAYiD,GAAG9T,GAAGmL,IAAI,QAAS,IAInC6H,IACA,IAAIoB,EAAS,GAEb,IAAKpU,EAAI,EAAGA,EAAIwT,EAASxT,IACvBoU,EAAOpU,IAphBKlD,EAohBeoX,EAAU7S,IAAIrB,QAnhB/CiU,GAAAA,EAAOnX,EAAGuX,yBACF/I,OAAS2I,EAAKK,MAAQL,EAAKM,MAqhB/B,IAAKvU,EAAI,EAAGA,EAAIwT,EAASxT,IACvB8Q,EAAagD,GAAG9T,GAAGsL,MAAM8I,EAAOpU,IAChC6Q,EAAYiD,GAAG9T,GAAGsL,MAAM8I,EAAOpU,IAGjC8S,SAEA3C,EAAY/E,OAAOyC,GACnBlG,EAAOwD,IAAImH,GACXnC,EAAYhF,IAAImH,GAEhBI,IAIFlC,EAAgBwD,WAAWA,GAC3BrM,EAAOoE,eAAe,WAAY,CAACyE,KAIvC,SAASgE,EAA0BC,GACjC,IAAIvD,EAASjC,EAAiB9D,IAAI,UAAYsJ,EAAO,UACjD7H,EAAI,EAMR,OAJIsE,IAAWA,EAAO1T,QAAQ,QAC5BoP,EAAI3T,SAASiY,EAAQ,KAGhBtE,EAGT,SAASyC,IACP,MAAiD,QAA1CF,EAAqBhE,IAAI,cASlC,SAASuJ,IACP,IAEIC,EAFAC,EAAwB3F,EAAiBtQ,YAGzCkW,EAAoB,EACpBC,EAAgBtF,EAAcD,EAASqD,aAAY,GAAQ,EAC3DmC,EAAsBtF,EAAkBqF,GAAiBA,EACzDE,EAAuBxE,EAAgBX,SACvCoF,EAActN,EAAOuN,SACrBC,EAAe,EAEfC,EAAc,EAElB,GAAIlG,EAAQ,CACV,IAAImG,EAAkBpG,EAAiBiG,SACvCL,EAAoBI,EAAY3N,IAAM+N,EAAgB/N,IAAMsN,EAExDpF,GAAeC,IACjBoF,GAAqBC,GAGvBK,EAAeX,EAA0B,QACzCY,EAAcZ,EAA0B,OACxCK,GAAqBO,OAErBT,EAAWM,EAAY3N,IAAM4G,EAAe8G,EAAuB7G,EAAkBE,EAAgBE,WAM1E,SAAzB+G,IACF,OAAQjG,IAAgCF,EAAuBF,GAAkB+E,cAAgB,EAJnG,IAAIuB,EAAY9J,GAAQ9M,YACpB6W,EAAa/J,GAAQuI,aAMrByB,EAAsBH,IAC1B,OAAO,SAAUI,GACftG,EAAaC,IACb,IAAIsG,EAAgBhO,EAAO,GAAGkF,aAAe,GAAKlF,EAAO,GAAGiO,cAAgB,EAE5E,IAAKD,GAAiBlF,EAKpB,OAJAA,GAAmB,EACnB1G,WAAW,WACTpC,EAAOoE,eAAe,WACrB,GACI,KAGT,GAAI4J,IAEFlF,GAAmB,GAEdnB,GACH,OAAO,KAIX,GAAiB,gBAAboG,EACFH,EAAY9J,GAAQ9M,YACpB6W,EAAa/J,GAAQuI,kBAChB,GAAiB,mBAAb0B,EACT,GAAIvG,EAAqB1T,OAAQ,CAC/B,IAAK2T,EACH,OAGFqG,EAAsBtG,EAAqB6E,kBAE3CY,EAAwB3F,EAAiBtQ,YACzC8W,EAAsBxG,EAAiB+E,iBAEnB,QAAb0B,IACTH,EAAY9J,GAAQ9M,YACpB6W,EAAa/J,GAAQuI,aACrBY,EAAwB3F,EAAiBtQ,YACzC8W,EAAsBH,KAGxB,IAAItK,MAAauK,EAAY,GAAKC,EAAa,GAA/C,CAKA,GAAItF,EAEAmD,EADe,oBAAbqC,QAKC,GAAiB,oBAAbA,EACT,OAAO,KAST,IAAIpO,EAAKiN,EANTU,EAActN,EAAOuN,SAEjB1F,GAAeC,IACjBwF,EAAY3N,KAAOwN,GAIrB,IAAIe,EAAclO,EAAOiL,cAEzB,GAAI1D,GAAUI,EAAwB,CAEpC,GAAyBsF,GAArBC,EAA4C,CAC9C,IAAIiB,EAAMjB,EAAoBD,EAAwBQ,EACtD9N,EAAY,EAANwO,EAAUA,EAAM,EACtB3C,GAAkB,QAElB7L,EAAM0I,EAAmBoF,EAAcR,EAEvCzB,GAAkB,GAGpBoB,EAAOY,OACGjG,GAAUI,GAEJqF,EAAWkB,EAAcd,EAArCQ,EACFjO,EAAMuO,EAAcb,EAAuBD,EAClCE,EAAY3N,KAAOiO,EAAYrH,GACxC5G,EAAM,EAEN0L,IACAG,GAAkB,KAElB7L,EAAM4G,EAAeqH,EAAYN,EAAY3N,IAAMuN,GAAqBpF,EAAkBqF,EAAgB,GAC1GhC,IAEAK,GAAkB,IAGpBoB,EAAOkB,GACEvG,IAAWI,GAEIsF,EAApBC,GAAyFgB,EAA5CjB,EAAwBC,GACvEvN,EAAM2N,EAAY3N,IAAMiO,EACxBvC,IACAG,GAAkB,KAElB7L,EAAM2N,EAAY3N,IAAMsN,EAAwBW,EAAYV,EAC5D/B,IACAK,GAAkB,IAGpBoB,EAAOU,EAAYV,KAAOkB,EAAsBD,GACtCtG,GAAWI,IAELqF,EAAWkB,EAAcd,EAArCQ,EACFjO,EAAMuO,EAAc3H,EAAeqH,EAAYZ,EAAWI,EACjDE,EAAY3N,IAAMiO,EAAYrH,GACvC5G,EAAM2N,EAAY3N,IAAMiO,EACxBzC,IACAK,GAAkB,KAIlB7L,EAAM4G,EACNiF,GAAkB,IAGpBoB,EAAOU,EAAYV,KAAOkB,EAAsBD,GAGlD,MAAO,CACLlO,IAAKzG,KAAKkV,MAAMzO,GAChBiN,KAAM1T,KAAKkV,MAAMxB,MAUvB,SAASyB,IACP,IAAIC,EAAS,KACTC,EAAU,KACVC,EAAgB,KACpB,OAAO,SAAUC,EAAKC,EAAUC,GAC9B,GAAW,MAAPF,IAAgBH,GAAUG,EAAI9O,KAAO4O,GAAWE,EAAI7B,MAAO,CAC7D,GAAkB,IAAdnK,GACFoG,EAAgBrF,IAAI,CAClB7D,IAAK8O,EAAI9O,IACTiN,KAAM6B,EAAI7B,WAEP,CACL,IAAIgC,EAAY,cAAgBH,EAAI7B,KAAO,kBAAoB6B,EAAI9O,IAAM,MACzEkJ,EAAgBrF,IAAI,CAClBqL,oBAAqBD,EACrBE,iBAAkBF,EAClBG,gBAAiBH,EACjBI,eAAgBJ,EAChBA,UAAaA,EACbjP,IAAO,EACPiN,KAAQ,IAIZ0B,EAASG,EAAI9O,IACb4O,EAAUE,EAAI7B,KAGZ8B,GA1aR,WACE,IAAItD,EAAKvG,GAAW7E,EAAQ8E,GAAW,GACnC+E,EAAapC,EAAaD,EAAuBF,EACjD3D,EAAQkG,EAAWlG,SAAWyH,EAC9B6D,EAAsD,UAAhCpF,EAAWrG,IAAI,cAA4BG,EAAQ+C,EAAgBC,SAAWhD,EAGxG,GAFAkF,EAAgBlF,MAAMsL,GAElB1H,EAAQ,CACV,IAAI2H,EAAU,IAAM9D,EAAK6D,EACzBzG,EAAYhF,IAAI,QAAS0L,EAAU,UAEnC1G,EAAY2G,WAAW/D,GAgarBgE,GAGET,GACF5D,IAGF,IAAIsB,GAAc5E,EAAaD,EAAuBF,GAAkB+E,aAEnE1E,GAA0B6G,GAAiBnC,IAC9CxD,EAAgBwD,WAAWA,GAC3BmC,EAAgBnC,IAStB,SAASgD,KAEP,GAAI/H,EAAiBxT,OACnB,GAAI6R,GAAKpF,SAAWoF,GAAKpF,QAAQI,kBAAoB2G,EAAiB3Q,OAAOgK,iBAC3E+F,EAAkB,CAChBE,WAAY,EACZD,SAAU,OAEP,CACL,GAA0C,UAAtCW,EAAiB9D,IAAI,cACvBkD,EAAgBE,WAAaC,MACxB,CACL,IAAIyI,EAAKhI,EAAiB3D,QACtByH,EAAKvG,GAAW7E,EAAQ8E,GACxByK,EAAUC,EAAKC,EAAK5I,EAAU,EAClCH,EAAgBE,WAAa0I,EAAKC,EAAUnE,EAAKvE,EAAU,EAG7D,GAA0C,UAAtCS,EAAiB9D,IAAI,cACvBkD,EAAgBC,SAAWE,MACtB,CACL,IAAI2I,EAAKlI,EAAiBY,SACtBuH,EAAKzP,EAAOkI,SACZwH,EAAUJ,EAAKlE,EAAKvE,EAAU,EAClCH,EAAgBC,SAAW6I,EAAKE,EAAUD,EAAK5I,EAAU,IAOjEwI,KAGmB,SAAfM,KACK/D,GACPgE,GAGFD,KACA,IAAIE,GAA6B9C,IAC7B+C,GAA2BzB,IAC/ByB,GAAyBD,GAA2B,SAAS,GAMrC,SAApBE,KACFD,GAAyBD,GAA2B,iBAAiB,GAEjEtH,GACFyH,KAIuB,SAAvBC,KACFH,GAAyBD,GAA2B,oBAAoB,GAoCzD,SAAbK,GAAiCC,GAE/BA,EAAIC,QACNC,KAEAC,KAtDJ,IA0DIC,GA1DAP,GAAwBpP,GAAKc,SAAS,WACxCoO,GAAyBD,GAA2B,qBAAqB,IACxE,GA2BCW,GAAc5P,GAAKc,SAAS,WAC1B1B,EAAOpD,GAAG,aAIdyS,KACA7E,IACAmF,KACAE,GAA6B9C,IAC7B+C,GAAyBD,GAA2B,WAAW,KAC9D,GAECQ,GAAc,WAChBhF,KAGEiF,GAAa,WACfnF,KAsDF,GAxCI1W,OAAOsP,YAActP,OAAOsP,WAAW,SAAS0M,aAClDF,GAAkB9b,OAAOsP,WAAW,UACpB0M,YAAYP,KAE5BpM,GAAQxN,GAAG,cAAe+Z,IAC1BvM,GAAQxN,GAAG,aAAcga,KAIvB/I,EAEEI,EACFL,EAAiBhR,GAAGwU,EAAU,UAAWmF,KAEzC3I,EAAiBhR,GAAGwU,EAAU,UAAWmF,IACzCnM,GAAQxN,GAAGwU,EAAU,UAAWiF,MAIlCvI,EAAqBlR,GAAGwU,EAAU,UAAWmF,IAC7CnM,GAAQxN,GAAGwU,EAAU,UAAWiF,KAGlCjM,GAAQxN,GAAGwU,EAAU,QAAS0F,IAt8BlC,SAAsB1F,EAAW4F,GAC/B,GAAiB,GAAbjO,GAAgB,CAElB,IAAIkO,EAAW7M,GAAQH,QACnBiN,EAAchQ,GAAKc,SAAS,WAC9B,IAAImP,EAAc/M,GAAQH,QAEtBgN,GAAYE,IACdF,EAAWE,EACXH,MAED,GACH5M,GAAQxN,GAAGwU,EAAW8F,QAEtB9M,GAAQxN,GAAGwU,EAAWlK,GAAKc,SAASgP,EAAI,IA07BxCI,CAAahG,EAAU,UArEC,WAClB9K,EAAOpD,GAAG,aAId4N,IACA6E,KACAM,KACAE,GAA6B9C,KAC7B+C,GAA2BzB,KACFwB,GAA2B,WAAW,GAAM,MA4DvE7P,EAAO1J,GAAG,SAAUka,IAEhB7K,GAAKpF,SAAWoF,GAAKpF,QAAQE,YA34BrC,SAAqBT,GACnB,GAAIA,EAAO+Q,kBACT,IAAK,IAAI1Y,EAAI,EAAGA,EAAI2H,EAAO+Q,kBAAkBjd,OAAQuE,IAAK,CACxD,IAAI2Y,EAAQhR,EAAO+Q,kBAAkB1Y,GAAG4Y,OAExC,GAAIjR,EAAO,IAAMgR,EACf,OAAO,EAKb,OAAO,EAg4B0CE,CAAYlR,IACzDA,EAAO1J,GAAG,SAAUka,IAAala,GAAG,OAAQka,IAAala,GAAG,OAAQka,IAGlE7K,GAAKpF,SAAWoF,GAAKpF,QAAQC,WAC/BsD,GAAQxN,GAAGwU,EAAU,gBAAiB0F,IAGpC7K,GAAKpF,SAAWoF,GAAKpF,QAAQG,UAC/BoD,GAAQxN,GAAGwU,EAAU,gBAAiB0F,IAGpCjO,GAAqB,CACvB,IAAI4O,GAAkB,KAElBvQ,GAAKwE,WAAWO,GAAKtF,cACvB8Q,GAAkBxL,GAAKtF,WAAWL,EAAQsH,IAI1C6J,GADGA,KACe7J,EAAiBxT,OAASwT,EAAiB,GAAKtH,EAAO,KAG3EmF,GAAO,IAAI3C,iBAAiB,SAAUjM,GAKpC,IAJA,IAAI6a,EAAkB,SAAyBC,GAC7C,OAAOA,GAASA,EAAM,KAA4B,SAArBA,EAAM,GAAGC,UAA4C,MAArBD,EAAM,GAAGC,UAAyC,MAArBD,EAAM,GAAGC,WAG5FjZ,EAAI,EAAGA,EAAI9B,EAAEzC,OAAQuE,IAC5B,IAAM+Y,EAAgB7a,EAAE8B,GAAGkZ,cAAeH,EAAgB7a,EAAE8B,GAAGmZ,cAAgB,CAC7EhB,KACA,UAIDiB,QAAQN,GAAiB,CAC5BO,WAAW,EACXC,SAAS,IAKb3R,EAAOrJ,KAAK,sBAAuB,CACjCib,QAAS,WACP,IAAIC,EAAK,QAAU7L,EA+CnB,OA9CAqF,IACArL,EAAOwD,IAAImH,GACXjC,EAAe9E,SACfC,IAAkBkE,EAAQnE,SAEtBmF,EAAWjT,SAAShC,QAEtBiV,EAAW+I,YAAY5L,GAGzBsF,GAAkB,GAEdjJ,KACF4C,GAAK4M,aACL5M,GAAO,MAGTnF,EAAOgS,IAAI,mBACX1K,EAAiB0K,IAAIH,GACrBrK,EAAqBwK,IAAIH,GAErBxJ,IACEf,EAAiBxT,OACnBwT,EAAiB2K,SAEjBjS,EAAOiS,UAIP1K,EACFD,EAAiB3Q,KAAK,4BAA4B,GAElDqJ,EAAOrJ,KAAK,4BAA4B,GAG1CqJ,EAAOwD,IAAI,WAAYqH,GACvBhC,EAAgBjF,SAChB5D,EAAOrJ,KAAK,uBAAuB,GACnCmN,GAAQkO,IAAIH,GAERtB,IACFA,GAAgB2B,eAAehC,IAGjCG,GAAcC,GAAa,aAEpB,WACL,OAAOtQ,EAAOV,WAAWqG,MAG7BiG,OAAQ,WACN4E,MAEF2B,gBAAiB,WACfpH,KAEFqH,kBAAmB,WACjB,OAAOvJ,GAETwJ,aAAc,WACZ,OAAI5L,EACKoC,EAAgBrT,KAAK,gBAAgB8c,IAAItS,EAAOmG,SAAS,gBAEzDnG,EAAOmG,SAAS,0BAKxB9S,MAtuCX,CAwuCG,WACD,IAAI/C,EAAImE,OAAO8d,OAOf,MALsB,oBAAXC,QAA0BA,OAAOC,UAAYniB,IAEtDA,EAAIoiB,QAAQ,WAGPpiB,EARN,IAWH,WACE,IAAIqiB,EAAcriB,EAAE,kBACpBA,EAAE,oBAAoBuO,MAAM,WAC1B,IAAI+T,EAAU,GACVngB,EAAQnC,EAAE,iBAAiBkF,KAAK,iBAAiB1B,OAIrD,GAHAxD,EAAEsF,KAAKtF,EAAE,iBAAiBkF,KAAK,iBAAkB,WAC/Cod,EAAQvR,KAAK,WAAa/Q,EAAE+C,MAAM+B,SAEtB,IAAV3C,EAAa+H,MAAM,oCAAoC,GAAY,GAAR/H,EAAY+H,MAAM,8CAA8C,GAAY,EAAR/H,EAAW,CAC5I,IAAIogB,EAAID,EAAQna,KAAK,KACrB5D,QAAQC,IAAI+d,GACZja,SAASka,KAAO,oBAAsBD,EAExC,OAAO,IAET,IAAIE,EAAe,CACjBC,OAAQC,GAENC,EAAY,CACdC,UAyOF,SAA2Bzd,GACzB,GAA+B,GAA3BA,EAAMG,QAAQ,UAChB,OAAOH,EAIT,OADAA,EAAQA,EAAMlE,QAAQ,SAAU,YA5OlClB,EAAEkD,MAAM4f,QAAQL,GAChBziB,EAAEkD,MAAM4f,QAAQF,GAChB5iB,EAAEkD,MAAMC,KAAK,SA8Ob,SAA2BiC,GACzB,IAAIgF,EAAS,GACTqM,EAAQ,GACRsM,EAAIJ,EAAuB,IAARvd,EAAa,EAAG,IAEnC2d,EAAI,KACNtM,EAAQ,yBAMV,OAHArM,GAAU,+BAAiCqM,EAAQ,KACnDrM,GAAU,sBAAwB2Y,EAAI,+BAAiCA,EAAI,SAC3E3Y,GAAU,WAxPZpK,EAAEkD,MAAMC,KAAK,OA4Pb,SAA0BiC,EAAO6H,GAC/B,IAAIqI,EAAI1M,KAAKkV,MAAMkF,WAAW5d,EAAMlE,QAAQ,IAAK,OAC7C+hB,EAAiB3N,GAAK,EAAI,QAAU,MACpC4N,EAAa,GAGfA,EADQ,IAAN5N,GAAiB,IAANA,EACA,OACE,IAANA,GAAiB,IAANA,EACP,OAEA,QAIf,MADa,sBAAwBrI,EAAO,KAAO0V,EAAevd,EAAMlE,QAAQ,IAAK,KAAM,EAAG,KAAO,qCAAuC+hB,EAAiB,IAAMC,EAAa,aAxQlLb,EAAYnd,KAAK,kBAAkBqJ,MAAM,CACvC7G,OAAQ,GAGPyb,GACH,IAAIC,EAAef,EAAYnd,KAAK,qBAkNpC,SAASyd,EAAevd,EAAOie,EAAKC,GAClC,IAAIC,EAAIne,EACJoe,EAAYH,EACZI,EAAeH,EAEfI,EAAOH,EAAI,EAAI,IAAM,GACrBxb,EAAI/G,SAASuiB,EAAI3a,KAAKC,KAAK0a,GAAK,GAAGI,QAAQH,IAAc,GACzDjc,EAAqB,GAAhBA,EAAIQ,EAAEvE,QAAc+D,EAAI,EAAI,EAErC,OADAqc,EAAIhb,KAAKC,IAAI0a,EAAIxb,GAAG4b,QAAQH,GAAWtO,MAAM,GACtCwO,GAAQnc,EAAIQ,EAAE8b,OAAO,EAAGtc,GALX,IAKgC,IAAMQ,EAAE8b,OAAOtc,GAAGrG,QAAQ,iBAAkB,QAA+B,OAAN0iB,EAAaH,EAAe7a,KAAKC,IAAI0a,EAAIxb,GAAG4b,QAAQH,GAAWtO,MAAM,GAAK,IAmDrM,SAASiO,EAAWld,GAClB,IAAI0B,EAAW3H,EAAE+C,MAAMsD,KAAK,YAG1BsB,EADc3E,MAAZ2E,GAGqB,GAAZA,EAGb3H,EAAE+C,MAAMsD,KAAK,WAAYsB,GACzB,IAAImc,EAAa9jB,EAAE,iBACnB8jB,EAAW5e,KAAK,wBAAwBJ,IAAI6C,GAC5Cmc,EAAW5e,KAAK,sBAAsBJ,IAAImB,EAAEI,KAAKqB,QACjD,IAAIqc,EAAU/jB,EAAEiG,EAAEwI,QAAQvJ,KAAK,mBAAmBjE,QAAUjB,EAAEiG,EAAEwI,QAAQxN,OAIxE,MAHgB,MAAZ8iB,IAAiBA,EAAU/jB,EAAEiG,EAAEwI,OAAOwF,eAAe/O,KAAK,mBAAmBjE,QACjF6iB,EAAW5e,KAAK,kCAAkCJ,IAAIif,GACtD/jB,EAAE,iBAAiBgkB,UACZ,EA9RTZ,EAAa7U,MAAM,CACjB7G,OAAQ,GAGPyb,GACHC,EAAa/c,KAAK,YAAY,GAC9Bgc,EAAYnd,KAAK,oBAAoBqJ,MAAM,CACzC7G,OAAQ,GAGPyb,GACHd,EAAYnd,KAAK,0BAA0Bc,GAAG,SA2P9C,SAAsBC,GACpB,IAAI6d,EAAa9jB,EAAE,iBACfikB,EAAUjkB,EAAE,0BAA0B2E,KAAK,WAC/Cmf,EAAW5e,KAAK,0BAA0BJ,IAAImf,GAC9CjkB,EAAE,iBAAiBgkB,WA9PrBhkB,EAAE,iBAAiBgkB,OAAO,SAAU/d,GAClC,IACIie,EAAa,YAEjB,SAASC,EAAc/e,GACrB,QAAmBgf,MAAVhf,GAA0BpC,MAAToC,GAAsBA,EAAQ,GAAKA,GAASif,EAAAA,GAAYjf,IAAUif,EAAAA,GAI9FrkB,EAAE,iBAAiBskB,OAAO,OAAQ,IAClCtkB,EAAE,YAAYsT,SACdtT,EAAE,aAAasT,SACfiR,gBAAgB3hB,OAEhB,IAAI4hB,EAAexjB,SAAShB,EAAE,oBAAoB8E,OAC9C2f,EAAezjB,SAAShB,EAAE,kBAAkB8E,OAE5C4f,EAAc1kB,EAAE,oBAAoBqG,KAAK6d,GACzCS,EAAc3kB,EAAE,kBAAkBqG,KAAK6d,GACtCC,EAAcK,IAAexkB,EAAE,oBAAoB8E,IAAI4f,GACvDP,EAAcM,IAAezkB,EAAE,kBAAkB8E,IAAI6f,GAC1D3kB,EAAEkM,KAAK,CACL0Y,KAAM,OACNviB,IAtBQ,uBAuBRgE,KAAMrG,EAAE,iBAAiB6kB,YACzBzY,QAAS,SAAiB/F,GACxBrG,EAAE,iBAAiBmG,KAAKnG,EAAEuC,UAAU,gBAAgBkH,OAAOpD,IAC3DrG,EAAE,iBAAiBskB,OAAO,OAAQ,GAClCQ,QAAQliB,OACRmiB,SAASniB,OAET2hB,gBAAgB3hB,OAChB,IAIIoiB,EACAC,EACAC,EANAC,EAASnlB,EAAE,2BACXolB,EAAWplB,EAAE,oCACbqlB,EAAWrlB,EAAE,mCAMbwB,EAAW6E,EAAKif,SAChB/jB,EAAW8E,EAAKkf,SAEhBpB,EAAcO,GAChBc,GAAkB,GAElBd,EAAcnjB,EAGZ4iB,EAAcQ,GAChBa,GAAkB,GAElBb,EAAcnjB,EAGhB,IAAIikB,EAAWf,EACXgB,EAAWf,EAuBf,SAASgB,EAAeC,EAAQC,EAAQC,GACtC,IAAIC,EAAkB,QAClBC,EAAMH,EAAO1gB,WAAWjE,QAAQ6kB,EAAiB,IACjDE,EAAML,EAAOzgB,WAAWjE,QAAQ6kB,EAAiB,IACrD/lB,EAAE,oBAAoB8E,IAAImhB,GAC1BjmB,EAAE,kBAAkB8E,IAAIkhB,GAEpBF,GAON,SAAuBG,EAAKD,GAC1BhmB,EAAE,oBAAoBqG,KAAK6d,EAAY+B,GACvCjmB,EAAE,kBAAkBqG,KAAK6d,EAAY8B,GACrCR,EAAyB,MAAPS,GAAsB,MAAPD,GAT/BE,CAAcD,EAAKD,GAiCvB,SAASG,EAAaC,GACpB,IAEIC,EAFAjB,EAAWplB,EAAE,oBACbqlB,EAAWrlB,EAAE,kBAEbimB,EAAMb,EAAStgB,MACfkhB,EAAMX,EAASvgB,MACfwhB,EAAQL,GAAO5f,EAAKkf,SACpBgB,EAAQP,GAAO3f,EAAKif,SAExB,GAAItC,WAAWuD,GAASvD,WAAWsD,GAGjC,GAFAnB,EAAOrgB,IAAI,CAACwhB,EAAOC,IAEfH,EACF,GAAW,IAAPJ,EAEFX,EAAShf,KAAK6d,EAAYqC,OACrB,CAEL,IAAIC,EAA+B,IAAjBngB,EAAKif,SAEvBe,EAAiBhB,EAAShf,KAAK6d,GAE3BsC,IAAgBH,GAAoC,GAAlBA,IAEpChB,EAAShf,KAAK6d,EAAYqC,OAInB,IAAPN,EAEFb,EAAS/e,KAAK6d,EAAYoC,KAG1BD,EAAiBjB,EAAS/e,KAAK6d,KAES,GAAlBmC,GAEpBjB,EAAS/e,KAAK6d,EAAYoC,GASpC,SAASd,EAAkBiB,GACzBzmB,EAAE,+BAA+B8E,IAAI2hB,GA5GnCjlB,EAAWmjB,IACbnjB,EAAWmjB,GAGED,EAAXnjB,IACFA,EAAWmjB,GAIbM,EAAS,CACP0B,MAAO,CAACnlB,EAAUC,GAClBmlB,MAAO,CAAClB,EAAUC,GAClBkB,QAAS,EACTC,KAAMxgB,EAAKygB,UACXC,MAAO,WACL,IAAIC,EAAShnB,EAAE+C,MAAM+B,MACrB6gB,EAAeqB,EAAO,GAAIA,EAAO,IAAI,KA0BzC7B,EAAOlZ,QACPmZ,EAAS1D,MACT2D,EAAS3D,MACT5P,WAAW,WAETqT,EAAO8B,WAAWjC,GAClBhlB,EAAE,yBAAyBiB,KAAKM,EAAW,OAC3CvB,EAAE,0BAA0BiB,KAAKO,EAAW,OAE5CmkB,EAAeF,EAAUC,GAAU,GACnCT,EAAkBG,EAAStgB,MAC3BogB,EAAkBG,EAASvgB,MAG3B,IAAIoiB,EAAelnB,EAAE,iCACrBknB,EAAapd,QAAQhF,IAAI2gB,GACzByB,EAAalV,OAAOlN,IAAI4gB,IAlFd,KAwIZ1lB,EAAE,oCAAoCgG,GAAG,cAAe,WACtD,IAAImhB,EAAWnnB,EAAE+C,MAAM+B,MAEnBmgB,GAAmBkC,IACrBhB,GAAa,GACblB,EAAkBkC,KAGtBnnB,EAAE,mCAAmCgG,GAAG,cAAe,WACrD,IAAImhB,EAAWnnB,EAAE+C,MAAM+B,MAEnBogB,GAAmBiC,IACrBhB,GAAa,GACbjB,EAAkBiC,QAK1BlhB,EAAEC,mBAEJlG,EAAE,uBAAuBgP,WAAW,CAClCI,SAAU,QACVW,YAAY,EACZZ,OAAQ,KA7OZ;ACnwCA,aAEA,IAAIiY,WAAa,CAAC,mGAAoG,oGAEtH,SAASC,eAAexN,GACtBA,EAAKyN,YAAY,CACf7jB,MAAO,EACP8jB,KAAK,EACLC,QAASJ,WACTK,WAAY,SACZC,MAAM,IAIV,SAASje,OAAOhG,EAAOoW,EAAM8N,EAAMC,GACjC,IAAIC,EAAYhO,EAAKxG,QACjByU,EAAM,EACN/f,EAAI,EACR8R,EAAK3U,KAAK,YAAYoO,SAEtB,IAAK,IAAItO,EAAQ,EAAGA,EAAQvB,EAAMD,OAAQwB,IAAS,CACjD,IAAI+iB,EAAQ/nB,EAAEyD,EAAMuB,IAEpB+iB,EAAM9iB,KAAK,aAAcD,GAEzB+iB,EAAM9iB,KAAK,aAAc8C,GAId8f,IAFXC,GAAOC,EAAM1U,WAGX0U,EAAM9iB,KAAK,aAAc8C,EAAI,GAE7B+f,EAAM,EACNA,GAAOC,EAAM1U,QACbrT,EAAE,gBAAkB+H,EAAI,MAAMigB,QAAQ,iDACtCjgB,KAIJ/H,EAAE,gBAAkB+H,EAAI,MAAMigB,QAAQ,iDACtCX,eAAexN,GACf7Z,EAAEsF,KAAK7B,EAAO,SAAUsE,EAAGlD,GACzB,IAAIojB,EAAOjoB,EAAE6E,GACbojB,EAAKjiB,GAAG,aAAc,WACpB,IAAIhB,EAAQijB,EAAK5hB,KAAK,SACtB5C,EAAMgC,YAAY,UAClBwiB,EAAKviB,SAAS,UACdiiB,EAAKjjB,OACLkjB,EAAUnjB,OACVmjB,EAAU/L,GAAG7W,GAAON,SAEtBujB,EAAKjiB,GAAG,aAAc,WACpB,IAAIhB,EAAQijB,EAAK5hB,KAAK,SAElB4hB,EAAKtiB,SAAS,WAChBlC,EAAMgC,YAAY,UAClBkiB,EAAKljB,SAELhB,EAAMgC,YAAY,UAClBwiB,EAAKviB,SAAS,UACdiiB,EAAKjjB,OACLkjB,EAAUnjB,OACVmjB,EAAU/L,GAAG7W,GAAON,YAI1B1E,EAAE,mBAAmBuO,MAAM,WACzB9K,EAAMgC,YAAY,UAClBkiB,EAAKljB,SAITzE,EAAE,WACA,IAAIkoB,EAAOloB,EAAE,YACT6Z,EAAOqO,EAAKhjB,KAAK,iBACjByiB,EAAOO,EAAKhjB,KAAK,iBACjB0iB,EAAYM,EAAKhjB,KAAK,uBACtBzB,EAAQzD,EAAE,iBACdA,EAAEmE,QAAQ6B,GAAG,SAAU,WACrB6T,EAAKsO,QAAQ,wBACbtO,EAAKpU,YAAY,cACjBoU,EAAK5N,QAEL,IAAK,IAAIlE,EAAI,EAAGA,EAAItE,EAAMD,OAAQuE,IAAK,CACrC,IAAIkgB,EAAOjoB,EAAEyD,EAAMsE,IACnBkgB,EAAKG,WAAW,cAChBvO,EAAK1G,OAAO8U,GAGdxe,OAAOhG,EAAOoW,EAAM8N,EAAMC,KAE5Bne,OAAOhG,EAAOoW,EAAM8N,EAAMC,GAC1BM,EAAKliB,GAAG,aAAc,WACpBvC,EAAMgC,YAAY,UAClBkiB,EAAKljB;AC9FT,aAEA4jB,aAAe,CACblX,GAAI,EACJmX,YAAa,GACbC,WAAY,GACZC,MAAOxoB,EAAE,gBACTyoB,OAAQzoB,EAAE,iBACVwC,QAASxC,EAAE,mBACX0oB,eAAgB1oB,EAAE,uBAClB2oB,gBAAiB3oB,EAAE,wBACnB4oB,OAAQ5oB,EAAE,gBACV6oB,KAAM7oB,EAAE,eACR8oB,WAAY9oB,EAAE,eAAekF,KAAK,KAClC6jB,gBAAiB/oB,EAAE,oBACnBgpB,UAAWhpB,EAAE,eACbipB,KAAM,GACN9nB,YAAanB,EAAE,sBACfD,QAASC,EAAE,iBACXC,OAAQD,EAAE,gBACVmC,MAAO,EACP+mB,WAAY,EACZC,WAAY,EACZlnB,KAAM,EACNmnB,SAAU,EACVC,UAAU,EACVC,SAAS,EACT3d,SAAS,EACT4d,aAAa,EACbppB,SAAS,EACTgT,QAAQ,EACR/Q,MAAOC,IAAI,KACXmnB,KAAM,GACNC,MAAO,GACPC,YAAa1pB,EAAE,gBACf2pB,kBAAmB3pB,EAAE,sBACrB4pB,WAAY5pB,EAAE,mBACd6pB,gBAAiB7pB,EAAE,mBAAmBkF,KAAK,sBAC3ChD,YAAa,GACbuI,KAAM,GACNqf,SAAU,GACVC,IAAK,EACLC,WAAY,GACZC,YAAajqB,EAAE,yBACfkqB,iBAAkBlqB,EAAE,wBACpBmqB,kBAAmBnqB,EAAE,uBACrBoqB,iBAAkBpqB,EAAE,wBACpBqqB,WAAY,GACZC,aAAc,GACdC,cAAe,GACfC,WAAY,GACZC,YAAY,EACZC,kBAAkB,EAClB9nB,KAAM,SAAcuO,EAAImX,EAAanmB,EAAOhC,EAASsqB,EAAYE,EAAahf,EAAS2d,EAAS7e,EAAMsf,EAAKC,GACzG,IAAIlnB,EAAKC,KAeT,GAdAD,EAAGqO,GAAKA,EACRrO,EAAGwlB,YAAcA,EACjBxlB,EAAGX,MAAQA,EACXW,EAAGomB,WAAa/mB,EAChBW,EAAGwmB,QAAUA,EACbxmB,EAAG6I,QAAUA,EACb7I,EAAG3C,QAAUA,EACb2C,EAAG2nB,WAAaA,EAChB3nB,EAAG4nB,iBAAmBD,EACtB3nB,EAAGmmB,KAAOnmB,EAAG8nB,UACb9nB,EAAG2H,KAAOA,EACV3H,EAAGinB,IAAMA,EACTjnB,EAAGknB,WAAaA,EAEI,KAAhBW,EAAoB,CACtB,IAAIE,EAAWF,EAAc,UAAYlgB,EAAO,SAAWA,EAAO,IAClE1H,KAAK2lB,eAAezjB,KAAK,OAAQ4lB,GAEC,EAA9B9nB,KAAK4lB,gBAAgBnlB,QACvBT,KAAK4lB,gBAAgB1jB,KAAK,OAAQ4lB,GAIjCxf,GAAGC,OAAOlC,IAAI,eAAgD,MAA/BiC,GAAGC,OAAOlC,IAAI,eAAwD,IAA/BiC,GAAGC,OAAOlC,IAAI,eACvFoB,WAAWgB,QAAQf,QAGFzH,IAAfD,KAAKX,QAAmC,IAAZjC,GAC9B2C,EAAGG,uBAGLH,EAAGO,cACHP,EAAGgoB,kBACH,IAAIC,EAAejoB,EAAGsnB,iBAAiBllB,KAAK,4BAA8BpC,EAAGqO,GAAK,MAElF,GAAoB,MAAhB4Z,GAA8C,EAAtBA,EAAavnB,OAAY,CACnDV,EAAG2nB,YAAc3nB,EAAGkoB,sBACpB,IAAI5lB,EAAQpF,EAAE+qB,GAAc9lB,KAAK,qBAC7Ba,EAAQ9F,EAAE+qB,GAAcE,KAAK,SAAShqB,OACtCiqB,EAAc,SAAWlrB,EAAE+qB,GAAc9lB,KAAK,MAClDjF,EAAE,wCAAwCsT,SAC1CtT,EAAE+qB,GAAcrc,QAAQ,kCAAkCyc,KAAK,+BAA+BhY,OAAO,8BAAgC+X,EAAc,KAAOplB,EAAQ,WAClK9F,EAAE+qB,GAAcpmB,KAAK,WAAW,GAChC3E,EAAE+qB,GAAcrlB,SAAS,UACzB5C,EAAGwnB,aAAe,CAACllB,GACnBpF,EAAE+qB,GAAcE,KAAK,SAAS/X,IAAI,cAAe,QAGnDpQ,EAAGsnB,iBAAiBllB,KAAK,qBAAqBI,KAAK,SAAUN,GAC3DlC,EAAG2nB,YAAc3nB,EAAGkoB,sBACpB,IAGI/C,EAAO,CACT9W,GAJOnQ,SAAShB,EAAE+C,MAAMkC,KAAK,sBAK7BG,MAJUpF,EAAE+C,MAAM+B,MAKlBmI,KAJSjN,EAAE+C,MAAMkC,KAAK,qBAMxBnC,EAAG0nB,WAAWzZ,KAAKkX,KAErB,IAAImD,EAAoBtoB,EAAGonB,iBAAiBhlB,KAAK,iBAAmBpC,EAAGqO,GAAK,MAE5E,GAAyB,MAArBia,GAAwD,EAA3BA,EAAkB5nB,OAAY,CAC7D,IAAI6nB,EAAevoB,EAAGonB,iBAAiBhlB,KAAK,qBAExComB,GADStqB,SAAS8B,EAAGonB,iBAAiBjlB,KAAK,eAC/B,IACZsmB,EAAY,GAChBvrB,EAAEqrB,GAAc/lB,KAAK,SAAUkmB,EAAMC,GACnCzrB,EAAEyrB,GAASjmB,SAAS2lB,KAAK,yBAAyB1lB,YAAY,UAC9DzF,EAAEyrB,GAASjmB,SAAS2lB,KAAK,yBAAyBjmB,KAAK,QAAQoO,WAGjE,IAAK,IAAIvL,EAAI,EAAGA,EAAIqjB,EAAkB5nB,OAAQuE,IAAK,CACjD,IAAI2jB,EAAa1rB,EAAEorB,EAAkBrjB,IAAIjD,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACtE,OAAOtG,SAASsG,KAEdqkB,EAAa3rB,EAAEorB,EAAkBrjB,IAAI9C,KAAK,cAC9CsmB,EAAUxa,KAAK4a,GAEf,IAAK,IAAIpkB,EAAI,EAAGA,EAAImkB,EAAWloB,OAAQ+D,IACrC+jB,EAAUva,KAAK2a,EAAWnkB,IAGlB,IAANQ,IACFujB,EAAYA,EAAUM,OAAO,SAAUC,EAAKhnB,EAAIkD,EAAG+jB,GAEjD,OADIA,EAAIvmB,QAAQV,KAAQkD,GAAK8jB,EAAItmB,QAAQV,GAAM,GAAGgnB,EAAI9a,KAAKlM,GACpDgnB,GACN,KAGL7rB,EAAEorB,EAAkBrjB,IAAIpD,KAAK,WAAW,GACxC3E,EAAEorB,EAAkBrjB,IAAIrC,SAAS,WACjC1F,EAAEorB,EAAkBrjB,IAAIvC,SAAS2lB,KAAK,yBAAyBzlB,SAAS,UACxE1F,EAAEorB,EAAkBrjB,IAAIvC,SAAS2lB,KAAK,yBAAyBhY,OAAO,uBAAyBwY,EAAa,WAG9G7oB,EAAGwnB,aAAegB,EAElB,IAASvjB,EAAI,EAAGA,EAAIsjB,EAAa7nB,OAAQuE,IAAK,CAC5C,IAAIgkB,EAAa/rB,EAAEqrB,EAAatjB,IAAIjD,MAChCknB,EAAchsB,EAAEqrB,EAAatjB,IAAI9C,KAAK,QAItCgnB,GAHAP,EAAa1rB,EAAEqrB,EAAatjB,IAAIjD,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACjE,OAAOtG,SAASsG,MAEH,GAMf,GAJ+B,IAA3BxE,EAAGwnB,aAAa9mB,QAAgByJ,OAAS+e,IAC3CC,GAAW,GAGTA,EAAU,CACO,MAAfF,GACF/rB,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,GAGtC,IAASsC,EAAI,EAAGA,EAAIzE,EAAGwnB,aAAa9mB,OAAQ+D,KACM,IAA5CmkB,EAAWnmB,QAAQzC,EAAGwnB,aAAa/iB,KACrCvH,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,IAMrB,EAAnBsmB,EAAU/nB,OACZV,EAAGqnB,kBAAkBlpB,KAAKsqB,EAAUpjB,KAAK,OAEzCrF,EAAGqnB,kBAAkBlpB,KAAK,sBAI9B6B,EAAGonB,iBAAiBhlB,KAAK,qBAAqBI,KAAK,SAAUN,GAO3D,IANA,IAAIgiB,EAAShnB,EAAE+C,MAAM+B,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GAClD,OAAOtG,SAASsG,KAEdlC,EAAQpF,EAAE+C,MAAMkC,KAAK,cACrBgI,EAAOjN,EAAE+C,MAAMyC,SAAS2lB,KAAK,yBAAyBlmB,KAAK,aAEtD8C,EAAI,EAAGA,EAAIif,EAAOxjB,OAAQuE,IAAK,CACtC,IACIkgB,EAAO,CACT9W,GAFO6V,EAAOjf,GAGd3C,MAAOA,EACP6H,KAAMA,GAERnK,EAAG0nB,WAAWzZ,KAAKkX,MAGvBnlB,EAAGsnB,iBAAiBllB,KAAK,qBAAqBc,GAAGlD,EAAG6I,QAAU,SAAW,QAAS,WAChF7I,EAAG2nB,YAAc3nB,EAAGkoB,sBACpB,IAAI5lB,EAAQpF,EAAE+C,MAAMkC,KAAK,qBACrBa,EAAQ9F,EAAE+C,MAAMkoB,KAAK,SAAShqB,OAC9BiqB,EAAc,SAAWlrB,EAAE+C,MAAMkC,KAAK,MACtCiC,EAAOlH,EAAE+C,MAAMkC,KAAK,oBACpBinB,EAAalsB,EAAE+C,MAAMkC,KAAK,0BAC1BknB,EAAW,GACfnsB,EAAE,wCAAwCsT,SAOxC6Y,EALEnsB,EAAE+C,MAAM4C,SAAS,WACnB3F,EAAE+C,MAAM4B,KAAK,UAAW,MACxB3E,EAAE+C,MAAM0C,YAAY,UACpB3C,EAAGwnB,aAAe,GAClBtqB,EAAE+C,MAAMkoB,KAAK,SAAS/X,IAAI,cAAe,UAC9BgZ,IAEXlsB,EAAE+C,MAAM2L,QAAQ,kCAAkCyc,KAAK,+BAA+BhY,OAAO,8BAAgC+X,EAAc,KAAOplB,EAAQ,WAC1JhD,EAAGsnB,iBAAiBllB,KAAK,4BAA4BO,YAAY,UAAUwlB,KAAK,SAAS/X,IAAI,cAAe,UAC5GlT,EAAE+C,MAAM4B,KAAK,WAAW,GACxB3E,EAAE+C,MAAM2C,SAAS,UACjB5C,EAAGwnB,aAAe,CAACllB,GACnBpF,EAAE+C,MAAMkoB,KAAK,SAAS/X,IAAI,cAAe,QAC9BhM,GAIbpE,EAAGsmB,SAAW,EACdtmB,EAAGb,KAAO,EACVa,EAAG0lB,MAAMvc,QAELnJ,EAAG3C,SACL2C,EAAGyD,sBAGL,IAAInE,EAAQC,IAAI,SACLA,IAAI,UAEF6pB,GACXppB,EAAGN,QAAQ2D,KAAK,IAAI1B,OACpB3B,EAAG+lB,KAAKpkB,OACR3B,EAAG8lB,OAAOlkB,OACVP,OAAOmE,SAASka,KAAO2J,EAAW,IAAM/pB,GAExCU,EAAGspB,YAGLpsB,EAAE+C,MAAMyC,SAASA,SAASC,YAAY,YAExC3C,EAAGonB,iBAAiBhlB,KAAK,qBAAqBmnB,OAAO,WACvCrsB,EAAE+C,MAAM+B,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACjD,OAAOtG,SAASsG,KADlB,IAGI2F,EAAOjN,EAAE+C,MAAMkC,KAAK,QACpBomB,EAAevoB,EAAGonB,iBAAiBhlB,KAAK,qBACxConB,EAAexpB,EAAGonB,iBAAiBhlB,KAAK,0CAExCgnB,GADSlrB,SAAS8B,EAAGonB,iBAAiBjlB,KAAK,eAC9BjF,EAAE+C,MAAMkC,KAAK,oBAC1BqmB,EAAY,GACZC,EAAY,GAChBvrB,EAAEqrB,GAAc/lB,KAAK,SAAUkmB,EAAMC,GACnCzrB,EAAEyrB,GAASjmB,SAAS2lB,KAAK,yBAAyB1lB,YAAY,UAC9DzF,EAAEyrB,GAASjmB,SAAS2lB,KAAK,yBAAyBjmB,KAAK,QAAQoO,WAEjExQ,EAAGynB,cAAgB,GAEnB,IAAK,IAAIxiB,EAAI,EAAGA,EAAIukB,EAAa9oB,OAAQuE,IAAK,CAC5C,IAAI2jB,EAAa1rB,EAAEssB,EAAavkB,IAAIjD,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACjE,OAAOtG,SAASsG,KAEdqkB,EAAa3rB,EAAEssB,EAAavkB,IAAI9C,KAAK,cACzCsmB,EAAUxa,KAAK4a,GAEf,IAAK,IAAIpkB,EAAI,EAAGA,EAAImkB,EAAWloB,OAAQ+D,IACrC+jB,EAAUva,KAAK2a,EAAWnkB,IAGlB,IAANQ,IACFujB,EAAYA,EAAUM,OAAO,SAAUC,EAAKhnB,EAAIkD,EAAG+jB,GAEjD,OADIA,EAAIvmB,QAAQV,KAAQkD,GAAK8jB,EAAItmB,QAAQV,GAAM,GAAGgnB,EAAI9a,KAAKlM,GACpDgnB,GACN,KAGL7rB,EAAEssB,EAAavkB,IAAIrC,SAAS,WAC5B1F,EAAEssB,EAAavkB,IAAIvC,SAAS2lB,KAAK,yBAAyBzlB,SAAS,UACnE1F,EAAEssB,EAAavkB,IAAIvC,SAAS2lB,KAAK,yBAAyBhY,OAAO,uBAAyBwY,EAAa,WACvG7oB,EAAGynB,cAAcxZ,KAAK/Q,EAAEssB,EAAavkB,IAAI9C,KAAK,OAGhDnC,EAAGwnB,aAAegB,EAElB,IAASvjB,EAAI,EAAGA,EAAIsjB,EAAa7nB,OAAQuE,IAAK,CAC5C,IAAIgkB,EAAa/rB,EAAEqrB,EAAatjB,IAAIjD,MAChCknB,EAAchsB,EAAEqrB,EAAatjB,IAAI9C,KAAK,QAItCgnB,GAHAP,EAAa1rB,EAAEqrB,EAAatjB,IAAIjD,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACjE,OAAOtG,SAASsG,MAEH,GAMf,GAJ+B,IAA3BxE,EAAGwnB,aAAa9mB,QAAgByJ,IAAS+e,IAC3CC,GAAW,GAGTA,EAAU,CACO,MAAfF,GACF/rB,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,IAGV,IAAxBqnB,EAAa9oB,QAAgB8oB,EAAarnB,KAAK,UAAY+mB,GAAuC,IAAxBM,EAAa9oB,SACzFxD,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,GAGtC,IAASsC,EAAI,EAAGA,EAAIzE,EAAGwnB,aAAa9mB,OAAQ+D,KACM,IAA5CmkB,EAAWnmB,QAAQzC,EAAGwnB,aAAa/iB,KACrCvH,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,IAMrB,EAAnBsmB,EAAU/nB,OACZV,EAAGqnB,kBAAkBlpB,KAAKsqB,EAAUpjB,KAAK,OAEzCrF,EAAGqnB,kBAAkBlpB,KAAK,sBAGxB6B,EAAG3C,SACL2C,EAAGyD,sBAGLzD,EAAGsmB,SAAW,EACdtmB,EAAGb,KAAO,EACVa,EAAG0lB,MAAMvc,QACT,IAAI7J,EAAQC,IAAI,SACZwL,EAAOxL,IAAI,SAEe,EAAzBS,EAAGwnB,aAAa9mB,QAAyC,IAA3BV,EAAGwnB,aAAa9mB,SAAiBqK,IAASqe,GAC3EppB,EAAGN,QAAQ2D,KAAK,IAAI1B,OACpB3B,EAAG+lB,KAAKpkB,OACR3B,EAAG8lB,OAAOlkB,OACVP,OAAOmE,SAASka,KAAO0J,EAAa,IAAM9pB,GAE1CU,EAAGspB,eAITG,MAAO,WACL,IAAIzpB,EAAKC,KACTD,EAAG2H,KAAO,KACV3H,EAAGsmB,SAAW,EACdtmB,EAAGb,KAAO,EAEK,MAAXa,EAAG2H,MAA2B,IAAX3H,EAAG2H,OACxB3H,EAAG0lB,MAAMvc,QAELnJ,EAAGmnB,aACLnnB,EAAGmnB,YAAYhe,UAIrBmgB,UAAW,WACT,IAAItpB,EAAKC,KACTD,EAAGN,QAAQ2D,KAAK,IAAI1B,OACpB3B,EAAG+lB,KAAKpkB,OACR3B,EAAG8lB,OAAOlkB,OACV5B,EAAG0pB,eAAe,4EAClB,IAAI3pB,EAAS2H,WAAWiD,UACxB3K,EAAG2H,KAAO5H,EAAOyK,KACjBxK,EAAGsmB,SAAW,EACdtmB,EAAGb,KAAO,EACVa,EAAG0lB,MAAMvc,QAEJnJ,EAAG4nB,mBACN5nB,EAAG2nB,WAAa3nB,EAAG4nB,kBAGrB1qB,EAAEkM,KAAK,CACLugB,OAAQ,OACRpqB,IAAK,2BACLgE,KAAM,CACJ8K,GAAIrO,EAAGqO,GACP1G,KAAM3H,EAAG2H,KACTQ,UAAWpI,EAAO0K,UAClBrC,WAAYrI,EAAO2K,WACnBuc,IAAKjnB,EAAGinB,IACR2C,WAAY5pB,EAAGunB,WAAWzF,KAC1B+H,YAAa7pB,EAAGunB,WAAWjlB,MAC3BqlB,WAAY3nB,EAAG2nB,WACfmC,OAAQ9pB,EAAGwnB,aAAaniB,KAAK,KAC7BhI,QAAS0sB,KAAKC,UAAUhqB,EAAG0nB,aAE7Bre,SAAU,OACVC,QAAS,SAAiB/F,GACxB,IAAIiD,EAAStJ,EAAEqG,GAAM8O,OAAO,yBACxB1R,EAAQzD,EAAEqG,GAAM8O,OAAOrS,EAAGknB,YAC1B7U,EAASnV,EAAEqG,GAAM8O,OAAO,mBACxB4X,EAAejqB,EAAGmnB,cAAgBnnB,EAAGkoB,sBASzC,GARAloB,EAAGgnB,SAAW9pB,EAAEsJ,GAAQrE,KAAK,iBAC7BnC,EAAGylB,WAAwB,YAAIvnB,SAAShB,EAAEsJ,GAAQrE,KAAK,sBACvDnC,EAAGylB,WAAoB,QAAIvoB,EAAEsJ,GAAQrE,KAAK,iBAC1CnC,EAAGylB,WAAqB,SAAIvoB,EAAEsJ,GAAQrE,KAAK,kBAC3CnC,EAAGylB,WAAuB,WAAIvoB,EAAEsJ,GAAQrE,KAAK,oBAC7CnC,EAAGylB,WAAsB,UAAIvoB,EAAEsJ,GAAQrE,KAAK,mBAC5CnC,EAAGqmB,WAAarmB,EAAGylB,WAAwB,YAER,EAA/BzlB,EAAGylB,WAAwB,YAAO,CACpC,GAAIzlB,EAAGwmB,SAAWxmB,EAAGymB,YACnBzmB,EAAGkqB,cAAclqB,EAAGylB,WAAqB,SAAGzlB,EAAGylB,WAAuB,WAAG,EAAGzlB,EAAGylB,WAAoB,QAAGzlB,EAAGylB,WAAsB,UAAGzlB,EAAGylB,WAAsB,WAC3JzlB,EAAGymB,aAAc,MACZ,CAqBL,GApBAzmB,EAAG0lB,MAAMriB,KAAK1C,GAES,EAAnBX,EAAG2lB,OAAOjlB,QACZV,EAAG2lB,OAAOtiB,KAAKnG,EAAEyD,GAAOwpB,SAGtBnqB,EAAGmnB,aAAennB,EAAGkoB,uBACkE,EAArFloB,EAAGmnB,YAAY/kB,KAAK,wDAAwD1B,SAC9EV,EAAGX,MAAQW,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAY7U,OAAO,SAAU+X,EAAKroB,GAC5D,MAAmB,UAAf/B,EAAGgnB,WAAyBhnB,EAAGunB,WAAWzF,OAEpB,SAAtB9hB,EAAGunB,WAAWzF,KACT5kB,EAAE6E,GAAII,KAAK,eAAiBnC,EAAGunB,WAAWjlB,WADnD,KAGC5B,OACHV,EAAGylB,WAAwB,YAAIzlB,EAAGX,MAC9BW,EAAGX,MAAQW,EAAGomB,aAAYpmB,EAAGX,MAAQW,EAAGomB,aAI5C6D,EAAc,CAGhB,GAFAjqB,EAAGmnB,YAAY9W,OAAOgC,GAElBrS,EAAGunB,WAAWzF,MAAQ9hB,EAAGunB,WAAWjlB,MAAO,CAC7C,IAAI+nB,EAAerqB,EAAGmnB,YAAY/kB,KAAK,4CAA8CpC,EAAGunB,WAAWjlB,MAAQ,MAE3G,GAA6B,EAAzBpF,EAAEmtB,GAAc3pB,OAAY,CAC9B,IAAIsC,EAAQ9F,EAAEmtB,GAAclC,KAAK,SAAShqB,OACtCiqB,EAAc,SAAWlrB,EAAEmtB,GAAcloB,KAAK,MAClDjF,EAAEmtB,GAAcze,QAAQ,kCAAkCyc,KAAK,+BAA+BhY,OAAO,iCAAmC+X,EAAc,KAAOplB,EAAQ,WACrK9F,EAAEmtB,GAAcxoB,KAAK,WAAW,GAChC3E,EAAEmtB,GAAcznB,SAAS,UACzB5C,EAAGX,MAAQW,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAY7U,OAAO,SAAU+X,EAAKroB,GAC5D,MAAmB,UAAf/B,EAAGgnB,WAAyBhnB,EAAGunB,WAAWzF,OAEpB,SAAtB9hB,EAAGunB,WAAWzF,KACT5kB,EAAE6E,GAAII,KAAK,eAAiBnC,EAAGunB,WAAWjlB,WADnD,KAGC5B,OACHV,EAAGylB,WAAwB,YAAIzlB,EAAGX,MAC9BW,EAAGX,MAAQW,EAAGomB,aAAYpmB,EAAGX,MAAQW,EAAGomB,aAIhDpmB,EAAGmnB,YAAY/kB,KAAK,+BAA+BqJ,MAAM,SAAUC,GACjE,OAAuE,EAAnExO,EAAEwO,EAAMC,QAAQC,QAAQ,kCAAkClL,SAC9DxD,EAAE+C,MAAM4L,YAAY,UAAUnJ,SAASc,SAAS,WAAWb,YAAY,WAChE,KAET3C,EAAGmnB,YAAY/kB,KAAK,iDAAiDc,GAAGlD,EAAG6I,QAAU,SAAW,QAAS,SAAU1F,GACjH,IAAIH,EAAQ9F,EAAE+C,MAAMkoB,KAAK,SAAShqB,OAC9BiqB,EAAc,SAAWlrB,EAAE+C,MAAMkC,KAAK,MAC1CjF,EAAE,2CAA2CsT,SAEzCtT,EAAE+C,MAAM4C,SAAS,WACnB7C,EAAGunB,WAAWzF,KAAO,KACrB9hB,EAAGunB,WAAWjlB,MAAQ,KACtBpF,EAAE+C,MAAM4B,KAAK,UAAW,MACxB3E,EAAE+C,MAAM0C,YAAY,UACpB3C,EAAGX,MAAQW,EAAGomB,WACdpmB,EAAGylB,WAAwB,YAAIzlB,EAAGqmB,aAElCrmB,EAAGmnB,YAAY/kB,KAAK,wDAAwDO,YAAY,UACxFzF,EAAE+C,MAAM2L,QAAQ,kCAAkCyc,KAAK,+BAA+BhY,OAAO,iCAAmC+X,EAAc,KAAOplB,EAAQ,WAC7JhD,EAAGunB,WAAWzF,KAAO5kB,EAAE+C,MAAMkC,KAAK,oBAClCnC,EAAGunB,WAAWjlB,MAAQpF,EAAE+C,MAAM+B,MAC9B9E,EAAE+C,MAAM4B,KAAK,WAAW,GACxB3E,EAAE+C,MAAM2C,SAAS,UACjB5C,EAAGX,MAAQW,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAY7U,OAAO,SAAU+X,EAAKroB,GAC5D,MAAmB,UAAf/B,EAAGgnB,WAAyBhnB,EAAGunB,WAAWzF,OAEpB,SAAtB9hB,EAAGunB,WAAWzF,KACT5kB,EAAE6E,GAAII,KAAK,eAAiBnC,EAAGunB,WAAWjlB,WADnD,KAGC5B,OACHV,EAAGylB,WAAwB,YAAIzlB,EAAGX,MAC9BW,EAAGX,MAAQW,EAAGomB,aAAYpmB,EAAGX,MAAQW,EAAGomB,aAG3B,UAAfpmB,EAAGgnB,SACLhnB,EAAGoB,eAEHpB,EAAGspB,YAGLpsB,EAAE+C,MAAMyC,SAASA,SAASC,YAAY,YAI1C3C,EAAGsqB,WAG8B,EAA/BtqB,EAAGylB,WAAwB,aAC7BzlB,EAAGimB,gBAAgBrkB,OAGjB5B,EAAGylB,WAAwB,YAAI,GACjCzlB,EAAGimB,gBAAgBtkB,YAEZ4B,EAAKsP,MACd7S,EAAGuqB,aAAY,GAAM,GAErBvqB,EAAGuqB,aAAY,GAAO,IAG1B/Y,MAAO,WACLxR,EAAGuqB,aAAY,GAAM,OAI3BD,SAAU,WACR,IAAItqB,EAAKC,KACTD,EAAGN,QAAQ2D,KAAK,IAAI1B,OAEJ,UAAZ3B,EAAG0mB,OACL1mB,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAYsD,SAAS,CACpCroB,KAAM,aACNwkB,MAAoB,QAAb3mB,EAAG2mB,MAAkB,MAAQ,SAGf,EAAnB3mB,EAAG2lB,OAAOjlB,QACZV,EAAG2lB,OAAOvjB,KAAKpC,EAAGknB,YAAYsD,SAAS,CACrCroB,KAAM,aACNwkB,MAAoB,QAAb3mB,EAAG2mB,MAAkB,MAAQ,UAK1C3mB,EAAG3B,YAAYF,KAAK,IAAM6B,EAAGylB,WAAwB,YAAI,KAAKpT,SAASzQ,OACvE5B,EAAGsmB,SAAWtmB,EAAGsmB,SAAWtmB,EAAGX,OAASW,EAAGylB,WAAwB,YAAIzlB,EAAGsmB,SAAWtmB,EAAGX,MAAQW,EAAGylB,WAAwB,YAC3HzlB,EAAG8lB,OAAOnkB,OACV3B,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAY7U,OAAO,SAAU+X,EAAKroB,GACjD,MAAmB,UAAf/B,EAAGgnB,WAAyBhnB,EAAGunB,WAAWzF,OAEpB,SAAtB9hB,EAAGunB,WAAWzF,KACT5kB,EAAE6E,GAAII,KAAK,eAAiBnC,EAAGunB,WAAWjlB,WADnD,KAGC+P,OAAO,OAASrS,EAAGsmB,SAAW,KAAK1kB,OAEf,EAAnB5B,EAAG2lB,OAAOjlB,QACZV,EAAG2lB,OAAOvjB,KAAKpC,EAAGknB,WAAa,OAASlnB,EAAGsmB,SAAW,KAAK1kB,OAG7C,IAAZ5B,EAAGb,MACLa,EAAG8lB,OAAOnkB,OACV3B,EAAGkqB,cAAclqB,EAAGylB,WAAqB,SAAGzlB,EAAGylB,WAAuB,WAAG,EAAGzlB,EAAGylB,WAAoB,QAAG,GAAIzlB,EAAGylB,WAAsB,YAEnIzlB,EAAG8lB,OAAOnkB,OAGK,KAAb3B,EAAGX,OAA+C,GAA/BW,EAAGylB,WAAwB,aAAUzlB,EAAGylB,WAAwB,cAAMzlB,EAAGsmB,UAC9FtmB,EAAG+lB,KAAKnkB,OAGO,IAAb5B,EAAGX,OACLW,EAAGuqB,aAAY,GAAO,IAG1BL,cAAe,SAAuB3qB,EAAKkrB,EAAOC,EAAQC,EAASC,EAASC,EAAUC,EAAUC,GAC9F,IAAI/qB,EAAKC,KACL+qB,EAAM,8BAEW,QAAjBD,IACFC,EAAMF,GAGR9qB,EAAGkmB,UAAU/jB,KAAK,eAAgB5C,GAClCS,EAAGkmB,UAAU/jB,KAAK,MAAO,YACzBnC,EAAGkmB,UAAU/jB,KAAK,eAAgBuoB,GAClC1qB,EAAGkmB,UAAU/jB,KAAK,gBAAiBwoB,GACnC3qB,EAAGkmB,UAAU/jB,KAAK,gBAAiByoB,GACnC5qB,EAAGkmB,UAAU/jB,KAAK,iBAAkB0oB,GACpC7qB,EAAGkmB,UAAUtjB,SAAS,gBACtB5C,EAAGkmB,UAAUvjB,YAAY,kBACzB3C,EAAGkmB,UAAU7iB,KAAK,aAAerD,EAAG6f,eAAe4K,GAAS,IAAMO,IAEpEtB,eAAgB,SAAwBuB,GACtC,IAAIjrB,EAAKC,KACTD,EAAGkmB,UAAUvjB,YAAY,gBACzB3C,EAAGkmB,UAAUtjB,SAAS,kBACtB5C,EAAGkmB,UAAUZ,WAAW,UACxBtlB,EAAGkmB,UAAUZ,WAAW,OACxBtlB,EAAGkmB,UAAUZ,WAAW,gBACxBtlB,EAAGkmB,UAAUZ,WAAW,iBACxBtlB,EAAGkmB,UAAUZ,WAAW,iBACxBtlB,EAAGkmB,UAAUZ,WAAW,kBACxBtlB,EAAGkmB,UAAU/jB,KAAK,OAAQ,KAC1BnC,EAAGkmB,UAAU7iB,KAAK4nB,IAEpBpL,eAAgB,SAAwBvd,GACtC,IAAIme,EAAIne,EAIJse,EAAOH,EAAI,EAAI,IAAM,GACrBxb,EAAI/G,SAASuiB,EAAI3a,KAAKC,KAAK0a,GAAK,GAAGI,QAJvB,IAI6C,GACzDpc,EAAqB,GAAhBA,EAAIQ,EAAEvE,QAAc+D,EAAI,EAAI,EAErC,OADAqc,EAAIhb,KAAKC,IAAI0a,EAAIxb,GAAG4b,QANJ,GAMuBzO,MAAM,GACtCwO,GAAQnc,EAAIQ,EAAE8b,OAAO,EAAGtc,GALX,IAKgC,IAAMQ,EAAE8b,OAAOtc,GAAGrG,QAAQ,iBAAkB,QAA+B,OAAN0iB,EANtG,GAMkIhb,KAAKC,IAAI0a,EAAIxb,GAAG4b,QAPrJ,GAOwKzO,MAAM,GAAK,KAErM7R,YAAa,WACX,IAAIP,EAAKC,KACTD,EAAGgmB,WAAW9iB,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GAYvD,OAXAA,EAAEC,iBAEEpD,EAAGwmB,SAAWxmB,EAAGymB,YACnBzmB,EAAGb,MAAQ,EAEXa,EAAGb,MAAQ,EAGba,EAAG+lB,KAAKpkB,OACR3B,EAAG8lB,OAAOlkB,OACV5B,EAAGsqB,YACI,IAETtqB,EAAG7C,OAAOqF,KAAK,WACb,IAAIM,EAAO5F,EAAE+C,MACT8C,EAAOD,EAAKV,KAAK,qBACjBY,EAAQF,EAAKV,KAAK,sBAClBa,EAASH,EAAKV,KAAK,uBACvBW,EAAKG,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GAC9CA,EAAEC,iBACFN,EAAKF,SAAS,QACd5C,EAAG/C,QAAQ2E,SAEbqB,EAAOC,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,WACtC,IAAIvG,EAAQpF,EAAE+C,MAAMoD,OACpBP,EAAKH,YAAY,QACjBM,EAAON,YAAY,UACnBzF,EAAE+C,MAAM2C,SAAS,UACjBI,EAAMK,KAAKf,GACXtC,EAAG/C,QAAQ0E,WAGfzE,EAAEyG,UAAUT,GAAG,kBAAmB,iBAAkB,WAClD,GAAIhG,EAAE+C,MAAM4C,SAAS,kBACnB,OAAO,EAGT,IAAIqoB,EAAU1lB,SAASka,KACnByL,GAAO,IAAIrc,KACX4b,EAASxtB,EAAE+C,MAAMkC,KAAK,gBACtBwoB,EAAUztB,EAAE+C,MAAMkC,KAAK,iBACvByoB,EAAU1tB,EAAE+C,MAAMkC,KAAK,iBACvB0oB,EAAW3tB,EAAE+C,MAAMkC,KAAK,kBACxBipB,EAAaluB,EAAE+C,MAAMkC,KAAK,gBAC9B,QAAIjF,EAAE+C,MAAMsD,KAAK,cAAgB4nB,EAAMjuB,EAAE+C,MAAMsD,KAAK,aAAe,OAEnErG,EAAE+C,MAAMsD,KAAK,YAAa4nB,GAC1BnrB,EAAGqrB,aAAaH,EAASP,EAASD,EAAQE,EAASC,EAAUO,IACtD,KAETprB,EAAG4mB,YAAY1jB,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GACxDA,EAAEC,iBACFpD,EAAG4mB,YAAYpjB,WAAWb,YAAY,UACtC3C,EAAG8mB,WAAW1kB,KAAK,WAAWO,YAAY,UAC1C3C,EAAG4mB,YAAYhkB,SAAS,UACxB5C,EAAG6mB,kBAAkBjkB,SAAS,UAC9B5C,EAAG+mB,gBAAgB1jB,KAAKrD,EAAG6mB,kBAAkBxjB,QAC7CrD,EAAG0mB,KAAO,QAE2B,QAAjC1mB,EAAG4mB,YAAYrjB,KAAK,UACtBvD,EAAG2mB,MAAQ,MACX3mB,EAAG4mB,YAAYrjB,KAAK,QAAS,QAAQX,SAAS,eAE9C5C,EAAG2mB,MAAQ,OACX3mB,EAAG4mB,YAAYrjB,KAAK,QAAS,OAAOZ,YAAY,cAGlD3C,EAAGoB,iBAELpB,EAAG6mB,kBAAkB3jB,GAAGlD,EAAG6I,QAAU,MAAQ,QAAS,SAAU1F,GAC9DA,EAAEC,iBAEyC,QAAvCpD,EAAG6mB,kBAAkBtjB,KAAK,UAC5BvD,EAAG2mB,MAAQ,MACX3mB,EAAG6mB,kBAAkBtjB,KAAK,QAAS,QAAQX,SAAS,eAEpD5C,EAAG2mB,MAAQ,OACX3mB,EAAG6mB,kBAAkBtjB,KAAK,QAAS,OAAOZ,YAAY,cAGxD3C,EAAG8mB,WAAW1kB,KAAK,WAAWO,YAAY,UAC1C3C,EAAG6mB,kBAAkBjkB,SAAS,UAC9B5C,EAAG+mB,gBAAgB1jB,KAAKrD,EAAG6mB,kBAAkBxjB,QAC7CrD,EAAG0mB,KAAO,QACV1mB,EAAGoB,kBAGPkqB,kBAAmB,WACjB,OAAOxlB,KAAKylB,SAASlpB,SAAS,IAAIyC,UAAU,EAAG,IAAMgB,KAAKylB,SAASlpB,SAAS,IAAIyC,UAAU,EAAG,KAE/FumB,aAAc,SAAsBH,EAASP,EAASD,EAAQE,EAASC,EAAUW,GAC/E,IAAIxrB,EAAKC,KACLwrB,EAAOzrB,EAAGsrB,oBACVI,EAAWrqB,OAAOsqB,mBAEnBtqB,OAAOuqB,mBAEPvqB,OAAOwqB,mBAEPxqB,OAAOyqB,uBAIc,IAAbJ,GACTA,EAASK,UAAU,eAGI,IAAd1qB,OAAO2qB,KAChB3qB,OAAO2qB,GAAG,OAAQ,QAAS,WAAY,SAAUd,EAAS,CACxDe,YAAe,WACbxqB,QAAQC,IAAI,aAGhBL,OAAO2qB,GAAG,2BAA4B,CACpC3d,GAAMod,IAERpqB,OAAO2qB,GAAG,oBAAqB,CAC7B3d,GAAMod,EACNthB,KAAQnK,EAAGwlB,cAEbnkB,OAAO2qB,GAAG,kBACVvqB,QAAQC,IAAI+pB,IAGd,IAAIlsB,EAAM,gCAAuCorB,GAAW,IAAM,YAAcD,GAAU,IAAM,eAAiB1qB,EAAGqO,IAAM,IAAM,aAAeuc,GAAW,IAAM,cAAgBC,GAAY,IAAM,YAAc7qB,EAAG2H,MAAQ,IAAM,UAAY3H,EAAGmmB,MAAQ,IAAM,cAAgBnmB,EAAGgnB,UAAY,IAAM,WAAa5hB,mBAAmBomB,GACnUnqB,OAAO6qB,KAAK3sB,IAEdyoB,gBAAiB,WACf,IAAIhoB,EAAKC,KACT/C,EAAEivB,YAAY,CACZC,SAAU,iBACVC,MAAO,SAAeC,GACpB,IAAI3gB,EAASzO,EAAEovB,EAAS,IACpB/sB,EAAMoM,EAAOxJ,KAAK,QAClB+oB,EAAU1lB,SAASka,KACnBgL,EAAS/e,EAAOxJ,KAAK,gBACrBwoB,EAAUhf,EAAOxJ,KAAK,iBACtByoB,EAAUjf,EAAOxJ,KAAK,iBACtB0oB,EAAW3tB,EAAE+C,MAAMkC,KAAK,kBACxBipB,EAAaluB,EAAE+C,MAAMkC,KAAK,gBAmC9B,OAjCAjF,EAAEivB,YAAYI,MAAMC,QAAU,SAAUrH,EAAMsH,EAAK3gB,GACjD5O,EAAE,+CAA+C0J,SAAS3G,MAAMiD,GAAG,QAAS,WAC1ElD,EAAGqrB,aAAaH,EAASP,EAASD,EAAQE,EAASC,EAAUO,GAC7DkB,EAAS,GAAG7gB,QACZK,EAAK4gB,MAAMrH,QAAQ,uBAIlBrlB,EAAG6I,UACN3L,EAAEivB,YAAYI,MAAMI,WAAa,SAAUxH,EAAMsH,EAAK3gB,GACpD5O,EAAE,4CAA4C0J,SAAS3G,MAAMiD,GAAG,QAAS,WACvElD,EAAGqrB,aAAaH,EAASP,EAASD,EAAQE,EAASC,EAAUO,GAC7D/pB,OAAO6qB,KAAK3sB,EAAK,SAAU,gFAC3BuM,EAAK4gB,MAAMrH,QAAQ,wBAKzBnoB,EAAEivB,YAAYI,MAAMK,QAAU,SAAUzH,EAAMsH,EAAK3gB,GACjD5O,EAAE,kCAAkC0J,SAAS3G,MAAM2C,SAAS,WAAWT,KAAK,sBAAuB5C,GACnG,IAAIstB,EAAY,IAAIC,UAAU,YAC9BD,EAAU3pB,GAAG,UAAW,SAAUC,GAChCnD,EAAGqrB,aAAaH,EAASP,EAASD,EAAQE,EAASC,EAAUO,GAC7DjoB,EAAE4pB,iBACFF,EAAUrO,UACV1S,EAAK4gB,MAAMrH,QAAQ,uBAIvBnoB,EAAEivB,YAAYI,MAAMS,QAAU,SAAU7H,EAAMsH,EAAK3gB,GACjD5O,EAAE,SAAWqC,EAAM,WAAWqH,SAAS3G,MAAM2C,SAAS,sBAGnD5C,EAAG6I,QAmBC,CACLlI,MAAO,CACLqsB,QAAS,CACPlL,KAAM,UACNmL,WAAY,WAEdT,QAAS,CACP1K,KAAM,UACNmL,WAAY,gBAEdC,KAAQ,YACRN,QAAS,CACP9K,KAAM,UACNmL,WAAY,aA/BX,CACLtsB,MAAO,CACL6rB,QAAS,CACP1K,KAAM,UACNmL,WAAY,gBAEdN,WAAY,CACV7K,KAAM,aACNmL,WAAY,mBAEdC,KAAQ,YACRN,QAAS,CACP9K,KAAM,UACNmL,WAAY,iBA0B1B9sB,qBAAsB,WACpB,IAAIH,EAAKC,KA0CT,QAxCsBC,IAAlBF,EAAGV,MAAM6tB,MAAwC,KAAlBntB,EAAGV,MAAM6tB,OAC1CntB,EAAG0mB,KAAO1mB,EAAGV,MAAM6tB,KAEH,UAAZntB,EAAG0mB,OACL1mB,EAAG4mB,YAAYpjB,WAAWb,YAAY,UACtC3C,EAAG8mB,WAAW1kB,KAAK,WAAWO,YAAY,UAC1C3C,EAAG4mB,YAAYhkB,SAAS,UACxB5C,EAAG6mB,kBAAkBjkB,SAAS,UAC9B5C,EAAG+mB,gBAAgB1jB,KAAKrD,EAAG6mB,kBAAkBxjB,SAG/B,WAAZrD,EAAG0mB,OACL1mB,EAAGotB,WAAW5pB,WAAWb,YAAY,UAAUA,YAAY,aAC3D3C,EAAG8mB,WAAW1kB,KAAK,WAAWO,YAAY,UAC1C3C,EAAGotB,WAAWxqB,SAAS,UACvB5C,EAAGqtB,iBAAiBzqB,SAAS,UAC7B5C,EAAG+mB,gBAAgB1jB,KAAKrD,EAAGqtB,iBAAiBhqB,eAIzBnD,IAAnBF,EAAGV,MAAMguB,OAA0C,KAAnBttB,EAAGV,MAAMguB,QAC3CttB,EAAG2mB,MAAQ3mB,EAAGV,MAAMguB,MAEH,QAAbttB,EAAG2mB,MACL3mB,EAAG4mB,YAAYrjB,KAAK,QAAS,QAAQX,SAAS,aAE9C5C,EAAG4mB,YAAYrjB,KAAK,QAAS,OAAOZ,YAAY,mBAIxBzC,IAAxBF,EAAGV,MAAMsqB,YAAoD,KAAxB5pB,EAAGV,MAAMsqB,aAChD5pB,EAAGZ,YAAYwqB,WAAa5pB,EAAGV,MAAMsqB,WACrC5pB,EAAGunB,WAAWzF,KAAO9hB,EAAGV,MAAMsqB,iBAGH1pB,IAAzBF,EAAGV,MAAMuqB,aAAsD,KAAzB7pB,EAAGV,MAAMuqB,cACjD7pB,EAAGZ,YAAYyqB,YAAc7pB,EAAGV,MAAMuqB,YACtC7pB,EAAGunB,WAAWjlB,MAAQtC,EAAGV,MAAMuqB,kBAGT3pB,IAApBF,EAAGV,MAAMiuB,QAA4C,KAApBvtB,EAAGV,MAAMiuB,SAC5CvtB,EAAGZ,YAAYmuB,OAASvtB,EAAGV,MAAMiuB,OACjCvtB,EAAGwnB,aAAexnB,EAAGV,MAAMiuB,OAAOjpB,MAAM,KAEpCtE,EAAGsnB,kBAAiD,EAA7BtnB,EAAGsnB,iBAAiB5mB,QAAY,CACzD,IAAI8sB,EAAextB,EAAGsnB,iBAAiBllB,KAAK,4BAA8BpC,EAAGZ,YAAYmuB,OAAS,MAElG,GAA6B,EAAzBrwB,EAAEswB,GAAc9sB,OAAY,CAClBxD,EAAEswB,GAAcrrB,KAAK,qBAAjC,IACIa,EAAQ9F,EAAEswB,GAAcrF,KAAK,SAAShqB,OACtCiqB,EAAc,SAAWlrB,EAAEswB,GAAcrrB,KAAK,MAClDjF,EAAEswB,GAAc5hB,QAAQ,kCAAkCyc,KAAK,+BAA+BhY,OAAO,8BAAgC+X,EAAc,KAAOplB,EAAQ,WAClK9F,EAAEswB,GAAc3rB,KAAK,WAAW,GAChC3E,EAAEswB,GAAc5qB,SAAS,UACzB1F,EAAEswB,GAAcrF,KAAK,SAAS/X,IAAI,cAAe,SAKvD,QAAyBlQ,IAArBF,EAAGV,MAAMmuB,SAA8C,KAArBztB,EAAGV,MAAMmuB,UAC7CztB,EAAGZ,YAAYquB,QAAUztB,EAAGV,MAAMmuB,QAClCztB,EAAGynB,cAAgBznB,EAAGV,MAAMmuB,QAAQnpB,MAAM,KAEtCtE,EAAGonB,kBAAiD,EAA7BpnB,EAAGonB,iBAAiB1mB,QAAY,CAMzD,IALA,IAAI6nB,EAAevoB,EAAGonB,iBAAiBhlB,KAAK,qBAExComB,GADStqB,SAAS8B,EAAGonB,iBAAiBjlB,KAAK,eAC/B,IACZsmB,EAAY,GAEPxjB,EAAI,EAAGA,EAAIjF,EAAGynB,cAAc/mB,OAAQuE,IAAK,CAChD,IAAIyoB,EAAgB1tB,EAAGonB,iBAAiBhlB,KAAK,aAAepC,EAAGynB,cAAcxiB,GAAK,MAC9E2jB,EAAa1rB,EAAEwwB,GAAe1rB,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GAC/D,OAAOtG,SAASsG,KAEdqkB,EAAa3rB,EAAEwwB,GAAevrB,KAAK,cACvCsmB,EAAUxa,KAAK4a,GAEf,IAAK,IAAIpkB,EAAI,EAAGA,EAAImkB,EAAWloB,OAAQ+D,IACrC+jB,EAAUva,KAAK2a,EAAWnkB,IAGlB,IAANQ,IACFujB,EAAYA,EAAUM,OAAO,SAAUC,EAAKhnB,EAAIkD,EAAG+jB,GAEjD,OADIA,EAAIvmB,QAAQV,KAAQkD,GAAK8jB,EAAItmB,QAAQV,GAAM,GAAGgnB,EAAI9a,KAAKlM,GACpDgnB,GACN,KAGL7rB,EAAEwwB,GAAe7rB,KAAK,WAAW,GACjC3E,EAAEwwB,GAAe9qB,SAAS,WAC1B1F,EAAEwwB,GAAehrB,SAAS2lB,KAAK,yBAAyBzlB,SAAS,UACjE1F,EAAEwwB,GAAehrB,SAAS2lB,KAAK,yBAAyBhY,OAAO,uBAAyBwY,EAAa,WAGvG7oB,EAAGwnB,aAAegB,EAElB,IAASvjB,EAAI,EAAGA,EAAIsjB,EAAa7nB,OAAQuE,IAAK,CAC5C,IAAIgkB,EAAa/rB,EAAEqrB,EAAatjB,IAAIjD,MAChCknB,EAAchsB,EAAEqrB,EAAatjB,IAAI9C,KAAK,QAItCgnB,GAHAP,EAAa1rB,EAAEqrB,EAAatjB,IAAIjD,MAAMsC,MAAM,KAAKC,IAAI,SAAUC,GACjE,OAAOtG,SAASsG,MAEH,GAMf,GAJ+B,IAA3BxE,EAAGwnB,aAAa9mB,QAAgByJ,OAAS+e,IAC3CC,GAAW,GAGTA,EAAU,CACO,MAAfF,GACF/rB,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,GAGtC,IAASsC,EAAI,EAAGA,EAAIzE,EAAGwnB,aAAa9mB,OAAQ+D,KACM,IAA5CmkB,EAAWnmB,QAAQzC,EAAGwnB,aAAa/iB,KACrCvH,EAAEqrB,EAAatjB,IAAI9C,KAAK,YAAY,IAMrB,EAAnBsmB,EAAU/nB,OACZV,EAAGqnB,kBAAkBlpB,KAAKsqB,EAAUpjB,KAAK,OAEzCrF,EAAGqnB,kBAAkBlpB,KAAK,wBAKlCiD,aAAc,WACZ,IAAIpB,EAAKC,KACTD,EAAG+lB,KAAKpkB,OACR3B,EAAG0lB,MAAMtjB,KAAKpC,EAAGknB,YAAYvlB,OAC7B3B,EAAG8lB,OAAOlkB,OACV5B,EAAGb,KAAO,IACVa,EAAGsmB,SAAW,KAEVtmB,EAAG3C,SACL2C,EAAGyD,sBAGLzD,EAAGsqB,YAEL7mB,oBAAqB,WACnB,IAAIzD,EAAKC,KA4CT,IA1CmB,IAAfD,EAAG3C,UACL2C,EAAGqQ,QAAS,UAGPrQ,EAAGZ,YAAY+tB,KAEN,KAAZntB,EAAG0mB,OACL1mB,EAAGZ,YAAY+tB,KAAOntB,EAAG0mB,aAGpB1mB,EAAGZ,YAAYkuB,MAEL,KAAbttB,EAAG2mB,QACL3mB,EAAGZ,YAAYkuB,MAAQttB,EAAG2mB,cAGrB3mB,EAAGZ,YAAYuI,KAElB3H,EAAG2H,MAAoB,KAAZ3H,EAAG2H,OAChB3H,EAAGZ,YAAYuI,KAAO3H,EAAG2H,aAGpB3H,EAAGZ,YAAYyqB,mBACf7pB,EAAGZ,YAAYwqB,WAEI,SAAtB5pB,EAAGunB,WAAWzF,OAChB9hB,EAAGZ,YAAYwqB,WAAa5pB,EAAGunB,WAAWzF,KAC1C9hB,EAAGZ,YAAYyqB,YAAc7pB,EAAGunB,WAAWjlB,cAGtCtC,EAAGZ,YAAYmuB,OAEO,EAAzBvtB,EAAGwnB,aAAa9mB,SAClBV,EAAGZ,YAAYmuB,OAASvtB,EAAGwnB,aAAaniB,KAAK,aAGxCrF,EAAGZ,YAAYquB,QAEQ,EAA1BztB,EAAGynB,cAAc/mB,SACnBV,EAAGZ,YAAYquB,QAAUztB,EAAGynB,cAAcpiB,KAAK,OAG/B,IAAdrF,EAAGqQ,OAAiB,CACtB,IAAInL,EAASF,OAAOD,KAAK/E,EAAGZ,aAAamF,IAAI,SAAUY,GACrD,OAAOC,mBAAmBD,GAAK,IAAMnF,EAAGZ,YAAY+F,KACnDE,KAAK,KACRC,QAAQC,UAAU,GAAI,GAAIlE,OAAOmE,SAASC,SAAW,IAAMP,KAG/D4iB,QAAS,WACP,IAEI3B,EA2BJ,OAzBAjpB,EAAEsF,KAJmB,CAAC,QAAS,QAAS,SAIjB,SAAUiL,EAAGnL,GAClC,IAAIqrB,EAAgBhqB,SAAS6B,SAASN,OAAO+F,MAAM,IAAI2iB,OAAOtrB,IAE9D,GAAIqrB,GAAwC,EAAvBA,EAAcjtB,OAAY,CAC7C,IAAImtB,EAASF,EAAc1kB,MAAM8X,OAAO4M,EAAczrB,OAClD4rB,EAAWD,EAAOntB,OAClBqtB,EAAaF,EAAO5iB,MAAM,IAAI2iB,OAAO,MAErCG,GAAkC,EAApBA,EAAWrtB,SAC3BotB,EAAWC,EAAW7rB,OAGxBikB,EAAO0H,EAAO/oB,UAAU,EAAGgpB,MAI1B3H,EAGH5d,GAAGC,OAAOsC,IAtBK,OAsBWqb,EAAM,CAC9Bpb,KAAM,IACNC,QAASgjB,QAJX7H,EAAO5d,GAAGC,OAAOlC,IApBF,QA4BV6f,GAEToE,YAAa,SAAqB0D,EAASC,GACzC,IAAIluB,EAAKC,KAIL9B,EAAO,GACX6B,EAAG3B,YAAYF,KAAK,OAAOyD,OAC3B5B,EAAG0pB,eAAe,WAClB1pB,EAAG8lB,OAAOnkB,OAEN3B,EAAGN,UAEHvB,EADE8vB,EATU,sEAYRC,EAVgB,0FADN,0DAkBhBluB,EAAGN,QAAQ2D,KAAKlF,GAAMyD,SAG1BsmB,oBAAqB,WACnB,OAAwE,EAAjEhrB,EAAE+C,KAAKknB,aAAa/kB,KAAK,+BAA+B1B;AC7jCnE,aAEAytB,OAAS,CACPC,oBAAqB,WACnBlxB,EAAE,0CAA0C0J,SAAS,kBAEvDynB,qBAAsB,WACpBnxB,EAAE,0BAA0BsT,UAE9B8d,UAAW,WACTpxB,EAAE,0CAA0C0J,SAAS,QACrD1J,EAAE,qKAAkN0J,SAAS,SAE/N2nB,WAAY,WACVrxB,EAAE,0BAA0BsT,SAC5BtT,EAAE,wBAAwBsT,UAE5Bge,UAAW,WACT,IAAIC,EAAcvxB,EAAE,4BAA8BA,EAAE,kBAAkBiF,KAAK,OAAS,MAAMA,KAAK,OACtE,EAArBssB,EAAY/tB,QAAYxD,EAAE,2BAA6BuxB,EAAc,UAAU7nB,SAAS,kBAE9F8nB,WAAY,WACVxxB,EAAE,eAAesT,UAEnBme,cAAe,SAAuBC,GACpC1xB,EAAE,gHAAgH0J,SAAS,iBAAiB1D,GAAG,iBAAkB,WAG/J,OAFAhG,EAAE+C,MAAMuQ,SACRoe,EAASC,qBACF,KAGXC,eAAgB,WACd5xB,EAAE,wBAAwBsT,UAE5Bue,aAAc,SAAsBH,EAAUxC,GAC5C,IAAI4C,EAAS9xB,EAAEkvB,GAEf,GAAI4C,EAAOtuB,OAAQ,CAGjB,IAFA,IAAI+jB,EAAMvnB,EAAE,sCAEH+H,EAAI,EAAGA,EAAI+pB,EAAOtuB,OAAQuE,IACjCwf,EAAIpU,OAAO,mCAGboU,EAAI7d,SAAS,iBACb6d,EAAIvhB,GAAG,iBAAkB,WACvB,OAAO,IAET,IAAI+rB,EAAWxK,EAAIriB,KAAK,UACxB6sB,EAAS/rB,GAAG,iBAAkB,WAC5B,IAAIoP,EAAQpV,EAAE+C,MAId,OAHI+uB,EAAOjW,GAAGzG,EAAMpQ,SAASC,KAAK,cAAgBjF,EAAE,kBAAkBiF,KAAK,QAAQysB,EAASM,oBAAoB5c,EAAMpQ,SACtH+sB,EAAStsB,YAAY,UACrBssB,EAASlW,GAAGzG,EAAMpQ,SAASU,SAAS,WAC7B,IACNM,GAAG,WAAY,WAChB,OAAO,MAIbisB,iBAAkB,WAChB,IAAIxuB,EAAQzD,EAAE,6BACdyD,EAAMgC,YAAY,UAClB,IAAIT,EAAQhE,SAAShB,EAAE,4BAA8BA,EAAE,kBAAkBiF,KAAK,OAAS,MAAMA,KAAK,eAClGxB,EAAMoY,GAAG7W,GAAOU,SAAS,WAE3BwsB,cAAe,WACblyB,EAAE,sBAAsBsT,UAE1B6e,SAAU,SAAkBT,EAAUxC,GACpC,IAAIkD,EAAUpyB,EAAE,qQAChBoyB,EAAQ1oB,SAAS,iBACjB0oB,EAAQpsB,GAAG,iBAAkB,SAAUC,GACrCA,EAAEC,iBACF,IAAIkP,EAAQpV,EAAE+C,MACViC,EAAQhE,SAAShB,EAAE,4BAA8BA,EAAE,kBAAkBiF,KAAK,OAAS,MAAMA,KAAK,eAWlG,OATImQ,EAAMzP,SAAS,6BACjBX,GAAgB,EACXhF,EAAEkvB,GAAUrT,GAAG7W,GAAOxB,SAAQwB,EAAQhF,EAAEkvB,GAAU1rB,UAEvDwB,GAAgB,IACHhF,EAAEkvB,GAAU1rB,SAAQwB,EAAQ,GAG3C0sB,EAASM,oBAAoBhtB,IACtB,KAGXqtB,UAAW,WACTryB,EAAE,wBAAwBsT,WAI9B,SAAWtT,EAAGmE,EAAQsC,GAGO,SAAvB6rB,IACF,IACIpkB,EACJ,MAA0B,KADtBA,GADAA,EAAIzH,EAAS2N,MAAQ3N,EAASoI,iBACxB4H,OACJ8b,iBAA+B,WACd,IAAnBrkB,EAAEskB,cAA4B,QACb,IAAjBtkB,EAAEukB,YAA0B,MACZ,IAAhBvkB,EAAEwkB,YAAyB,GAIH,SAA1BC,EAA2DlH,EAASmH,EAAWC,GACjF,IAAIC,EAAU,GACV5hB,EAASohB,IACbQ,EAAQ5hB,EAAS,aAAe,cAAgB0hB,EAAY,IAC5DE,EAAQ5hB,EAAS,cAAgBA,EAAS,aAAe2hB,EAAQ,WACjEpH,EAAQvY,IAAI4f,GAIG,SAAbC,EAAiCvkB,GACnC,GAAIwkB,EAAU,OAAO,EACrB,IAAKC,QAAgC,IAAVzkB,QAAsD,IAAtBA,EAAM0kB,YAA6B,OAAO,EAErG,QAA0C,IAA/B1kB,EAAM2kB,sBACf,GAAI3kB,EAAM2kB,sBAAwB3kB,EAAM0kB,YAAa,OAAO,OACvD,GAAyB,SAArB1kB,EAAM0kB,YAAwB,OAAO,EAEhD,OAAO,EA3BT,IASIE,GAAoD,IAA3Bd,IAQzBU,EAAW,iBAAkB7uB,EAC7B8uB,EAAc9uB,EAAO0O,UAAUwgB,gBAAkBlvB,EAAO0O,UAAUygB,iBAYtEtzB,EAAE0U,GAAG6e,cAAgB,SAAUT,GACzBA,EAAU9yB,EAAEuV,OAAO,CACrB2Z,SAAU,qBACVsE,eAAgB,IAChBC,aAAa,EACbC,gBAAgB,EAChBC,WAAW,EACXC,gBAAgB,EAChBC,gBAAgB,EAChBC,SAAS,EACTC,OAAO,EACPC,aAAa,EACbC,WAAW,GACVnB,GAQY,SAAXoB,IACF,IAAKC,EAAM3wB,OAAQ,OAAO,EAC1B,IAEI4wB,EAAW,IAAIC,MACnBD,EAASE,IAAMH,EAAMlvB,KAAK,OAE1BmvB,EAASG,OAAS,WAIhB,GAHAC,EAAaJ,EAAS/gB,MACtBohB,EAAcL,EAASxc,OAPP,IASZ4c,GARa,IAQeC,EAA4B,CAC1D,IAAIC,EAVU,IACC,IASHF,EAAaC,EAA2CD,EAVtD,IAUiFC,EAThF,IAUfD,GAAcE,EACdD,GAAeC,EAGjB,IAAIlvB,EAASxF,EAAE,eACfm0B,EAAMjhB,IAAI,CACR7D,KAAQ7J,EAAOoS,SAAW6c,GAAe,EAAI,KAC7CnY,MAAS9W,EAAO6N,QAAUmhB,GAAc,EAAI,QAIlC,SAAZG,EAA+BC,GACjC,GAAIC,EAAY,OAAO,EAGvB,GAFAD,OAAiC,IAAdA,IAAiD,QAAbA,EAAsB,GAAK,GAE9ET,EAAM3wB,OAAQ,CAChB,IAAkB,IAAdoxB,IAAwBE,EAAQtxB,OAAS,IAA2B,IAAtBsvB,EAAQa,aAAsC,IAAfiB,GAA6C,GAAzBE,EAAQ9vB,MAAMyJ,IAA8B,IAAdmmB,GAAmBE,EAAQ9vB,MAAMyJ,IAAWqmB,EAAQtxB,OAAS,IAE9L,OADAuxB,KACO,EAGT,IAAIC,EAAS,CACXC,QAAW,GAET7B,EAAwBT,EAAwBwB,EAAO,IAAMS,EAAYM,EAAY,KAAMpC,EAAQU,eAAiB,KAAWwB,EAAO1Y,KAAOtb,SAASmzB,EAAMjhB,IAAI,SAAW,IAAM0hB,EAAY,KACjMT,EAAMgB,QAAQH,EAAQlC,EAAQU,eAAgB,WAC5C4B,MAEFF,EAAY,IAGdL,GAAa,KACT/B,EAAQkB,aAAuBlB,EAAQkB,cAC3CliB,WAAW,WACTqiB,EAAQn0B,EAAE,QAAU8yB,EAAQ5D,SAAW,OAAOjqB,KAAK,MAAOwJ,EAAOxJ,KAAK,cAAce,GAAG,OAAQ,WAC7FmuB,EAAMzqB,SAAS,eACfwqB,IACA,IAAIc,EAAS,CACXC,QAAW,GAIb,GAFAd,EAAMjhB,IAAI,UAAW,GAEjBkgB,EACFT,EAAwBwB,GAAQ,IAAMS,EAAY,KAAM,GACxD9iB,WAAW,WACT6gB,EAAwBwB,EAAO,MAAUrB,EAAQU,eAAiB,MACjE,QACE,CACL,IAAI6B,EAAer0B,SAASmzB,EAAMjhB,IAAI,SACtC8hB,EAAO1Y,KAAO+Y,EAAe,KAC7BlB,EAAMjhB,IAAI,OAAQmiB,EAAe,IAAMT,EAAY,MAQrD,GALAT,EAAMgB,QAAQH,EAAQlC,EAAQU,eAAgB,YAC5CqB,GAAa,KACT/B,EAAQmB,WAAqBnB,EAAQmB,cAGvCnB,EAAQW,YAAa,CACvB,IAAI6B,EAAaR,EAAQjZ,GAAGiZ,EAAQ9vB,MAAMyJ,GAAU,GAC/C6mB,EAAW9xB,SAAQ8xB,EAAaR,EAAQjZ,GAAG,IAChD7b,EAAE,WAAWiF,KAAK,MAAOqwB,EAAWrwB,KAAK,iBAE1Ce,GAAG,QAAS,YACa,IAAtB8sB,EAAQmB,WAAqBnB,EAAQmB,cAE3C,IAAIsB,EAAa,EACbC,EAAW,EACXH,EAAe,EACnBlB,EAAMnuB,GAAGitB,EAAc,wBAA0B,QAAS,SAAUhtB,GAGlE,GAFAA,EAAEC,iBAEE4sB,EAAQc,eAEV,OADAmB,KACO,EAGT,GAAIhC,EAAW9sB,EAAEwvB,eAAgB,OAAO,EACxC,IAAIC,GAAQzvB,EAAE0vB,OAAS1vB,EAAEwvB,cAAcE,OAAS1vB,EAAEwI,OAAOmnB,YACzDnnB,EAASqmB,EAAQjZ,GAAGiZ,EAAQ9vB,MAAMyJ,IAA4BinB,EAAjBlB,EAAa,EAAW,GAAK,KAC9DhxB,SAAQiL,EAASqmB,EAAQjZ,GAAoB6Z,EAAjBlB,EAAa,EAAWM,EAAQtxB,OAAS,IACjFmxB,EAA2Be,EAAjBlB,EAAa,EAAW,OAAS,WAC1CxuB,GAAG,uCAAwC,SAAUC,GACtD,IAAK8sB,EAAW9sB,EAAEwvB,gBAAkB3C,EAAQc,eAAgB,OAAO,EAC/DR,IAAwBiC,EAAer0B,SAASmzB,EAAMjhB,IAAI,UAC9DqiB,EAAatvB,EAAEwvB,cAAcE,OAAS1vB,EAAEwvB,cAAcI,QAAQ,GAAGF,QAChE3vB,GAAG,YAAa,SAAUC,GAC3B,IAAK8sB,EAAW9sB,EAAEwvB,gBAAkB3C,EAAQc,eAAgB,OAAO,EACnE3tB,EAAEC,iBACFsvB,EAAWvvB,EAAEwvB,cAAcE,OAAS1vB,EAAEwvB,cAAcI,QAAQ,GAAGF,MAC/DT,EAAYK,EAAaC,EACrBpC,EAAwBT,EAAwBwB,GAAQe,EAAY,KAAM,GAAQf,EAAMjhB,IAAI,OAAQmiB,EAAeH,EAAY,QAClIlvB,GAAG,2EAA4E,SAAUC,GAC1F,IAAK8sB,EAAW9sB,EAAEwvB,gBAAkB3C,EAAQc,eAAgB,OAAO,EAEzC,GAAtBhrB,KAAKC,IAAIqsB,KACXzmB,EAASqmB,EAAQjZ,GAAGiZ,EAAQ9vB,MAAMyJ,IAAWymB,EAAY,EAAI,GAAK,KACtD1xB,SAAQiL,EAASqmB,EAAQjZ,GAAGqZ,EAAY,EAAIJ,EAAQtxB,OAAS,IACzEmxB,EAAsB,EAAZO,EAAgB,QAAU,SAEhC9B,EAAwBT,EAAwBwB,EAAO,MAAUrB,EAAQU,eAAiB,KAAWW,EAAMgB,QAAQ,CACrH7Y,KAAQ+Y,EAAe,MACtBvC,EAAQU,eAAiB,MAG/BV,EAAQU,eAAiB,KAiBb,SAAbsC,EAAiCC,GACnCA,EAAWzwB,KAAK,WACdwvB,EAAUA,EAAQ9S,IAAIhiB,EAAE+C,SAE1BgzB,EAAW/vB,GAAG,sBAAuB,SAAUC,GAE7C,GADAA,EAAEC,iBACE2uB,EAAY,OAAO,GACvBA,GAAa,KACT/B,EAAQgB,SAAmBhB,EAAQgB,UACvCrlB,EAASzO,EAAE+C,MACX4xB,MArKJ,IAaIG,EAAU90B,EAAE,IACZyO,EAASzO,IACTm0B,EAAQn0B,IACRw0B,EAAa,EACbC,EAAc,EACdS,EAAY,EACZL,GAAa,EAyHbO,EAAc,WAChB,IAAKjB,EAAM3wB,OAAQ,OAAO,EAC1B2wB,EAAM7gB,SACN6gB,EAAQn0B,KAEN+0B,EAAe,WACjB,IAAKZ,EAAM3wB,OAAQ,OAAO,EAC1B2wB,EAAMgB,QAAQ,CACZF,QAAW,GACVnC,EAAQU,eAAgB,WACzB4B,KACAP,GAAa,KACT/B,EAAQiB,OAAiBjB,EAAQiB,WAuEzC,OAjDA/zB,EAAEmE,GAAQ6B,GAAG,SAAUkuB,GAEnBpB,EAAQe,gBACV7zB,EAAEyG,GAAUT,GAAGgtB,EAAW,WAAa,QAAS,SAAU/sB,GACpDkuB,EAAM3wB,SAAWxD,EAAEiG,EAAEwI,QAAQnC,GAAG6nB,IAAqC,wBAA3Bn0B,EAAEiG,EAAEwI,QAAQ9J,KAAK,OAAiCowB,MAIhGjC,EAAQY,gBACV1zB,EAAEyG,GAAUT,GAAG,QAAS,SAAUC,GAChC,IAAKkuB,EAAM3wB,OAAQ,OAAO,EAC1ByC,EAAEC,iBACe,IAAbD,EAAE+vB,SAAejB,IAEJ,IAAb9uB,EAAE+vB,SAA8B,IAAb/vB,EAAE+vB,WACvBvnB,EAASqmB,EAAQjZ,GAAGiZ,EAAQ9vB,MAAMyJ,IAAwB,IAAbxI,EAAE+vB,QAAgB,GAAK,KACxDxyB,SAAQiL,EAASqmB,EAAQjZ,GAAgB,IAAb5V,EAAE+vB,QAAgBlB,EAAQtxB,OAAS,IAC3EmxB,EAAuB,IAAb1uB,EAAE+vB,QAAgB,OAAS,YAK3CF,EAAW91B,EAAE+C,OAEbA,KAAKivB,oBAAsB,SAAUhtB,GACnC,IAAIixB,EAAYnB,EAAQjZ,GAAG7W,GAE3B,GAAIixB,EAAUzyB,OAAQ,CACpB,IAAI0yB,EAAepB,EAAQ9vB,MAAMyJ,GACjCA,EAASwnB,EACTtB,EAAU3vB,EAAQkxB,EAAe,OAAS,SAG5C,OAAOnzB,MAGTA,KAAKozB,kBAAoB,YA1CP,WAChB,GAAItB,EAAY,QAChBA,GAAa,KACT/B,EAAQgB,SAAmBhB,EAAQgB,UAwCvCsC,IAGFrzB,KAAKszB,mBAAqB,SAAUN,GAClCD,EAAWC,IAGbhzB,KAAK4uB,kBAAoB,WAEvB,OADAoD,IACOhyB,MAGFA,MAjQX,CAmQGkf,OAAQ9d,OAAQsC;ACjWnB,aAEA,IAAI6vB,SAAW,CACb1zB,KAAM,WACJ5C,EAAE,cAAcgG,GAAG,QAAS,WAC1B,IAAIwiB,EAAQxoB,EAAE+C,MAAMsD,KAAK,MAGzB,OAFArG,EAAE,mBAAoBwoB,GAAOlV,SAC7BtT,EAAEwoB,GAAO+N,OAAO,SACT,MAIThS,gBAAkB,CACpB3hB,KAAM,WACJ5C,EAAE,uCAAuCqsB,OAAO,WAC9C,IAAIlqB,EAAQnC,EAAE+C,MAAMyzB,QAAQ,iBAAiBtxB,KAAK,iBAAiB1B,OAC/DvC,EAAO,WAEPkB,EAAQ,IAAM,EAChBlB,EAAO,SACgB,GAAdkB,EAAQ,IAAWA,EAAQ,IAAM,GAAc,IAATA,GAAwB,IAATA,GAAwB,IAATA,IAC7ElB,EAAO,WAGTjB,EAAE+C,MAAMyzB,QAAQ,sBAAsBtxB,KAAK,kBAAkBjE,KAAKkB,EAAQlB,GAC1E,IAAIqhB,EAAU,GACdtiB,EAAEsF,KAAKtF,EAAE,iBAAiBkF,KAAK,iBAAkB,WAC/Cod,EAAQvR,KAAK,WAAa/Q,EAAE+C,MAAM+B,SAEpC,IAAI2xB,EAAWz2B,EAAE,oBACbkH,EAAO,oBAAsBob,EAAQna,KAAK,KACxB,GAAlBma,EAAQ9e,OAAaizB,EAASxxB,KAAK,OAAQiC,GAAWuvB,EAASxxB,KAAK,OAAQ,KAChF,IAAIyxB,EAAe,WAEP,EAARv0B,EACFnC,EAAE+C,MAAMyzB,QAAQ,sBAAsBtxB,KAAK,oBAAoBQ,SAASgxB,GAExE12B,EAAE+C,MAAMyzB,QAAQ,sBAAsBtxB,KAAK,oBAAoBO,YAAYixB,OAMnF,SAASC,yBAEP7R,QAAQliB,OACRmiB,SAASniB,OAET2hB,gBAAgB3hB,OAGlB5C,EAAE,WACAs2B,SAAS1zB,OACT2hB,gBAAgB3hB,OAEhB5C,EAAE,iBAAiBsF,KAAK,WACtB,IAWI0f,EAXAxf,EAASxF,EAAE+C,MACX6zB,EAAQ52B,EAAE,yCACVmlB,EAAS3f,EAAON,KAAK,WAErB2hB,EAAO1B,EAAO9e,KAAK,QACnBwwB,EAAW1R,EAAO9e,KAAK,OACvBywB,EAAW3R,EAAO9e,KAAK,OACvB0wB,EAASvxB,EAAON,KAAK,kBACrBkgB,EAAW2R,EAAO7xB,KAAK,oCACvBmgB,EAAW0R,EAAO7xB,KAAK,mCA0B3B,SAASghB,EAAcD,EAAKD,EAAKgR,GAC/Bh3B,EAAE,oBAAoBqG,KAAK,YAAa4f,GACxCjmB,EAAE,kBAAkBqG,KAAK,YAAa2f,GAElCgR,GACFh3B,EAAE,+BAA+B8E,KAAI,GAMzC,SAASqhB,IACQ0Q,EAAXC,IACF3R,EAAOrgB,IAAI,CAAC+xB,EAAUC,IAGtB92B,EAAE,iCAAiC8J,QAAQhF,IAAI+xB,GAC/C72B,EAAE,iCAAiCgS,OAAOlN,IAAIgyB,GAC9C5Q,EAAc2Q,EAAUC,GAAU,IAxCvBD,EAAXC,IACF1R,EAAStgB,IAAI+xB,GACbxR,EAASvgB,IAAIgyB,GACb9R,EAAS,CACP0B,MAAO,CAACmQ,EAAUC,GAClBnQ,MAAO,CAACkQ,EAAUC,GAClBlQ,QAAS,EACTC,KAAMA,EACNE,MAAO,WACL,IAAIC,EAAShnB,EAAE+C,MAAM+B,MACrBsgB,EAAStgB,IAAIkiB,EAAO,IACpB3B,EAASvgB,IAAIkiB,EAAO,IACpBd,EAAcc,EAAO,GAAIA,EAAO,IAAI,KAGxClV,WAAW,WACT8kB,EAAMzjB,OAAO,qCAAuCiS,EAAStgB,MAAQ,aACrE8xB,EAAMzjB,OAAO,sCAAwCkS,EAASvgB,MAAQ,aACtEqgB,EAAO8R,MAAML,GAAO3P,WAAWjC,IArBvB,MAgDZK,EAASrf,GAAG,cAAe,WACzB8wB,EAAW9T,WAAWhjB,EAAE+C,MAAM+B,QAAU,EACxCqhB,MAEFf,EAASpf,GAAG,cAAe,WACzB6wB,EAAW7T,WAAWhjB,EAAE+C,MAAM+B,QAAU,EACxCqhB;ACxHN,aAEAnmB,EAAEyG,UAAU6H,MAAM,WAEhBtO,EAAEyG,UAAUT,GAAG,eAAgB,WAC7BqF,GAAG6rB,KAAKC,iBACR9rB,GAAGC,OAAOsC,IAAI,0BAA0B,GAEpCvC,GAAG+rB,QAAQC,0BACbhsB,GAAG+rB,QAAQE,WAAW,WACpBjsB,GAAG+rB,QAAQC,0BAA2B,MAK5ChsB,GAAG+rB,QAAQx0B,OACXyI,GAAGksB,UAAU30B,SAEfyI,GAAK,CACHmsB,YAAY,GAEdnsB,GAAGksB,UAAY,CACb90B,SAAU,GACVg1B,MAAO,KACPC,eAAgB,KAChBC,WAAY,WACK50B,KAAK00B,MAAMvyB,KAAK,UAAYnC,KAAKN,SAAS4C,cAAgB,MAChEV,KAAK,WAAW,IAE3B/B,KAAM,WACJ,IAAIE,EAAKC,KAEJsI,GAAGC,OAAOlC,IAAI,eACjBiC,GAAGC,OAAOsC,IAAI,aAAc,IAG9B9K,EAAGL,SAAWzC,EAAE,sBAAsB8E,MAEjChC,EAAGL,WAIRK,EAAG20B,MAAQz3B,EAAE,sBAER8C,EAAG20B,MAAMj0B,SAIdT,KAAK40B,aACL70B,EAAG40B,eAAiB13B,EAAE,mBAEtBA,EAAE,mBAAmBuO,MAAM,WACzB,IAAIqpB,EAAQ,IAAIhmB,KACZimB,EAAW,IAAIjmB,KAAKgmB,GACxB90B,EAAG20B,MAAMhzB,OACTozB,EAASC,QAAQF,EAAMG,UAAY,GAGnC1sB,GAAGC,OAAOsC,IAAI,0BAA0B,EAAM,CAC5CE,QAAS+pB,MAGb73B,EAAE,iBAAiBuO,MAAM,WACvB,IAGIypB,EAHAC,EAAQn1B,EAAG40B,eAAe5yB,MAC1BozB,EAAkBl4B,EAAE+C,MAAMyzB,QAAQ,uBAAuBtxB,KAAK,iCAC9DizB,EAAgBn4B,EAAE+C,MAAMyzB,QAAQ,gBAAgBtxB,KAAK,mBAErDkzB,EAAa,GACjBF,EAAgBjsB,QAEXgsB,GAKLD,EAAUl1B,EAAG20B,MAAMvyB,KAAK,kCAEW,IAAnB8yB,EAAQx0B,QAKxBw0B,EAAQ1yB,KAAK,SAAUN,EAAOijB,GAC5BmQ,GAAcnQ,EAAKhb,KAAO,MAE5BmrB,EAAaA,EAAWxwB,UAAU,EAAGwwB,EAAW50B,OAAS,GACzDxD,EAAEkM,KAAK,CACL7J,IAAK,iBACLoqB,OAAQ,OACRpmB,KAAM,CACJ4xB,MAAOA,EACPx1B,SAAU21B,GAEZjsB,SAAU,OACVC,QAAS,SAAiB/F,GACpBA,EAAK+F,SACPf,GAAGC,OAAOsC,IAAI,aAAc,OAAQ,CAClCC,KAAM,MAERsqB,EAAchyB,KAAKE,EAAK7D,SACxBM,EAAG20B,MAAMhzB,QAETyzB,EAAgB/xB,KAAK,OAASE,EAAK7D,QAAU,aAxBjD01B,EAAgB/kB,OAAO,sDAPvB+kB,EAAgB/kB,OAAO,uCAqCvBpQ,KAAKs1B,cACPt1B,KAAK2B,UAGT2zB,WAAY,WACV,IAAIC,EAAMhwB,SAASka,KAEf8V,EAAIC,YAAY,OAASD,EAAI90B,OAAS,EACxC80B,EAAMA,EAAIzU,OAAO,EAAGyU,EAAI90B,OAAS,IAE2C,IAA/D80B,EAAIzU,OAAOyU,EAAIC,YAAY,KAAMD,EAAI90B,QAAQ+B,QAAQ,OACtD+yB,EAAMA,EAAIzU,OAAO,EAAGyU,EAAIC,YAAY,OAGlD,IAAIC,EAAcF,EAAIzU,OAAOyU,EAAIC,YAAY,KAAO,GAEpD,MAAoB,YAAhBC,IAAkE,IAArCA,EAAYjzB,QAAQ,eAIjD8F,GAAGC,OAAOlC,IAAI,6BAIViC,GAAGmsB,YAA8C,SAAhCnsB,GAAGC,OAAOlC,IAAI,iBAEzC1E,KAAM,WACJ,IAAI5B,EAAKC,KACT+O,WAAW,WACThP,EAAG20B,MAAM/yB,QACR,OAGP2G,GAAGC,OAAS,CACVlC,IAAK,SAAa6D,GAChB,IAAI6S,EAAUrZ,SAAS6E,OAAOyC,MAAM,IAAI2iB,OAAO,WAAazjB,EAAK/L,QAAQ,+BAAgC,QAAU,aACnH,OAAO4e,EAAU3R,mBAAmB2R,EAAQ,SAAM9c,GAEpD4K,IAAK,SAAaX,EAAM7H,EAAO0tB,GAE7B,IAAIhlB,GADJglB,EAAUA,GAAW,IACChlB,QAEtB,GAAsB,iBAAXA,GAAuBA,EAAS,CACzC,IAAI2qB,EAAO,IAAI7mB,KACf6mB,EAAKC,QAAQD,EAAKE,UAAsB,IAAV7qB,GAC9BA,EAAUglB,EAAQhlB,QAAU2qB,EAG1B3qB,GAAWA,EAAQ8qB,cACrB9F,EAAQhlB,QAAUA,EAAQ8qB,eAI5B,IAAIC,EAAgB5rB,EAAO,KAD3B7H,EAAQ8C,mBAAmB9C,IAG3B,IAAK,IAAI0zB,KAAYhG,EACnB,GAAIA,EAAQtiB,eAAesoB,GAAW,CACpCD,GAAiB,KAAOC,EACxB,IAAIC,EAAYjG,EAAQgG,IAEN,IAAdC,IACFF,GAAiB,IAAME,GAK7BtyB,SAAS6E,OAASutB,GAEpBG,IAAK,SAAa/rB,GAChBW,IAAIX,EAAM,GAAI,CACZa,SAAU,MAIhBzC,GAAG4tB,UAAY,CACbC,UAAU,EACVzvB,OAAQ,WACNzJ,EAAEsF,KAAKtF,EAAE,gBAAiB,SAAUgF,EAAOijB,GACzC9jB,OAAOg1B,WAAW1vB,OAAOwe,EAAM,CAC7BmR,QAAW,gDAIjBC,OAAQ,WACNt2B,KAAKm2B,UAAW,IAGpB7tB,GAAG+rB,QAAU,CACXkC,SAAU,EACV1U,KAAM,EACN3iB,KAAM,EACNhB,KAAM,GACNuE,OAAQ,KACR0yB,gBAAiB,KACjBb,0BAA0B,EAC1Bz0B,KAAM,WACJ,IAAI22B,EAAoBv5B,EAAE,aAEK,EAA3Bu5B,EAAkB/1B,QAAwD,KAA1Cye,OAAOuX,KAAKD,EAAkBpzB,UAChEpD,KAAKu2B,SAAWC,EAAkBlzB,KAAK,YACvCtD,KAAK6hB,KAAO2U,EAAkBlzB,KAAK,eACnCtD,KAAK02B,mBAGTC,WAAY,WACVruB,GAAG6rB,KAAKC,iBACR9rB,GAAG4tB,UAAUxvB,SACb4B,GAAG+rB,QAAQuC,aAEbC,WAAY,SAAoB33B,GAC9Bc,KAAKd,KAAOA,EACZc,KAAK02B,kBAEPI,cAAe,WACb,IAAI/2B,EAAKC,KACT/C,EAAE,wBAAwBgG,GAAG,QAAS,WACpC,IAAI8zB,EAAM95B,EAAE+C,MACRg3B,EAAgBD,EAAItD,QAAQ,uBAAuBtxB,KAAK,aACxD80B,EAAyBF,EAAItD,QAAQ,uBAAuBtxB,KAAK,yBACjE+0B,GAAU,EACdn3B,EAAGo1B,gBAAkB4B,EAAItD,QAAQ,uBAAuBtxB,KAAK,iCAC7DpC,EAAGo1B,gBAAgBjsB,QAEd8tB,EAAcj1B,QACjBm1B,GAAU,EACVn3B,EAAGo1B,gBAAgB/kB,OAAO,8CAGvB6mB,EAAuBl1B,QAC1Bm1B,GAAU,EACVn3B,EAAGo1B,gBAAgB/kB,OAAO,oDAGvB8mB,GAILj6B,EAAEkM,KAAK,CACL7J,IAAK,4BACLoqB,OAAQ,OACRpmB,KAAM,CACJpF,KAAM6B,EAAG7B,KACTi5B,SAAUp3B,EAAG0C,OACb8zB,SAAUx2B,EAAGw2B,SACb1U,KAAM9hB,EAAG8hB,KACTuV,WAAYr3B,EAAGb,KACfm4B,SAAUL,EAAcj1B,MACxBm0B,UAAWe,EAAuBl1B,OAEpCqH,SAAU,OACVC,QAAS,SAAiB/F,GACpBA,EAAK+F,SACPtJ,EAAG22B,iBACH32B,EAAGgX,SAEHhX,EAAGo1B,gBAAgB/xB,KAAK,OAASE,EAAK7D,QAAU,cAKxDxC,EAAE,kBAAkBgG,GAAG,QAAS,WAC9B,IAAI8zB,EAAM95B,EAAE+C,MACRs3B,EAAWP,EAAItD,QAAQ,mBAAmBtxB,KAAK,YAC/CM,EAASs0B,EAAItD,QAAQ,mBAAmBtxB,KAAK,mBACjDpC,EAAGo1B,gBAAkB4B,EAAItD,QAAQ,mBAAmBtxB,KAAK,iCACzDpC,EAAGo1B,gBAAgBjsB,QAEdouB,EAASv1B,OAKdhC,EAAG7B,KAAOo5B,EAASv1B,MACnBhC,EAAG0C,OAASA,EAAOV,MACnBhC,EAAGw0B,cANDx0B,EAAGo1B,gBAAgB/kB,OAAO,0CAQ9BnT,EAAE,cAAcgG,GAAG,QAAS,WAC1B,IAAIwiB,EAAQxoB,EAAE+C,MAAMsD,KAAK,MAGzB,OAFArG,EAAE,mBAAoBwoB,GAAOlV,SAC7BtT,EAAEwoB,GAAO+N,OAAO,SACT,KAGXe,WAAY,SAAoBgD,GAC9B,IAAIx3B,EAAKC,KACT/C,EAAEkM,KAAK,CACL7J,IAAK,sBACLoqB,OAAQ,OACRpmB,KAAM,CACJpF,KAAM6B,EAAG7B,KACTi5B,SAAUp3B,EAAG0C,OACb8zB,SAAUx2B,EAAGw2B,SACb1U,KAAM9hB,EAAG8hB,KACTuV,WAAYr3B,EAAGb,MAEjBkK,SAAU,OACVC,QAAS,SAAiB/F,GACpBA,EAAK+F,SACPtJ,EAAG22B,iBACH32B,EAAGgX,QAECwgB,GACFA,KAEOj0B,EAAKk0B,eACdz3B,EAAGu0B,0BAA2B,EAC9Br3B,EAAE,iCAAiC0E,OACnC2G,GAAG4tB,UAAUxvB,UAEb3G,EAAGo1B,gBAAgB/xB,KAAK,OAASE,EAAK7D,QAAU,aAKxDsX,MAAO,WACL/W,KAAK9B,KAAO,GACZ8B,KAAKyC,OAAS,KACdzC,KAAKm1B,gBAAkB,MAEzBuB,eAAgB,WAGdz5B,EAAEkM,KAAK,CACL7J,IAAK,uBACLgE,KAAM,CACJizB,SALKv2B,KAKQu2B,SACb1U,KANK7hB,KAMI6hB,KACT3iB,KAPKc,KAOId,MAEXkK,SAAU,OACVC,QAAS,SAAiB/F,GACxBrG,EAAE,aAAamG,KAAKE,GACpBrG,EAAE,qBAAqBuO,MAAM,WAC3BlD,GAAG+rB,QAAQwC,WAAW55B,EAAE+C,MAAMsD,KAAK,WAErCgF,GAAGgG,KAAKmpB,cACRnvB,GAAG+rB,QAAQyC,qBAKnBxuB,GAAGgG,KAAO,CACRmpB,YAAa,WACXx6B,EAAE,UAAUuO,MAAM,WAEhB,OADAvO,EAAE+C,MAAM2L,QAAQ,eAAejK,KAAK,IAC7B,IAETzE,EAAE,oBAAoBuO,MAAM,WAG1B,OAFAvO,EAAE,eAAeyE,OACjBzE,EAAEA,EAAE+C,MAAMsD,KAAK,WAAW3B,QACnB,MAIb2G,GAAG6rB,KAAO,CACRC,eAAgB,WACdn3B,EAAEkM,KAAK,CACL7J,IAAK,0BACL8J,SAAU,OACVC,QAAS,SAAiB/F,GACxBrG,EAAE,qBAAqBmG,KAAKE,GAC5BgF,GAAGmsB,YAAa,EAChBnsB,GAAGgG,KAAKmpB;AClXhB,aAEAC,MAAQ,CACNC,UAAW,EACXC,gBAAiB,EACjBrS,YAAa,GACbsS,SAAU,EACVtR,SAAS,EACT3d,SAAS,EACTkvB,OAAQ76B,EAAE,iBACV86B,cAAe96B,EAAE,wBACjBgpB,UAAWhpB,EAAE,eACb4C,KAAM,SAAc83B,EAAWC,EAAiBrS,EAAa3c,EAAS2d,GACpE,IAAIxmB,EAAKC,KACTD,EAAG43B,UAAYA,EACf53B,EAAG63B,gBAAkBA,EACrB73B,EAAGwlB,YAAcA,EACjBxlB,EAAG6I,QAAUA,EACb7I,EAAGwmB,QAAUA,EACbxmB,EAAG+3B,OAAOxO,OAAO,WACf,IAAI0O,EAAWj4B,EAAG+3B,OAAO56B,OAAO,mBAAmB6J,QACnDhH,EAAGk4B,UAAUD,EAASj2B,SAExBhC,EAAGg4B,cAAczO,OAAO,WACtB/jB,SAASka,KAAOzf,KAAKqC,MAAQ,oBAE/BtC,EAAGm4B,UACHn4B,EAAGk4B,aAELA,UAAW,aAWXE,mBAAoB,SAA4B/6B,EAASg7B,GACvD,IAAIr4B,EAAKC,KAET,GAAqB,EAAjB5C,EAAQqD,OAMV,IALA,IAAI43B,EAAoBp7B,EAAEq7B,KAAKF,EAAe,SAAUG,EAAGvzB,GACzD,MAAkB,UAAXuzB,EAAEC,OAEPC,EAA6C,EAA3BJ,EAAkB53B,QAAmD,EAArC43B,EAAkB,GAAGK,OAAOj4B,OAAa43B,EAAkB,GAAGK,OAAO,GAAGC,GAAK,EAE1HC,EAAM,EAAGA,EAAMx7B,EAAQqD,OAAQm4B,IAAO,CAC7C,IAAIL,EAAIn7B,EAAQw7B,GAED,UAAXL,EAAEC,MACJD,EAAEG,OAAOG,QAAQ,SAAUC,GACzB/4B,EAAG+3B,OAAO1nB,OAAOnT,EAAE,WAAaw7B,IAAoBK,EAAGH,GAAK,qBAAuB,IAAM,cAAcz2B,KAAK,QAAS42B,EAAGH,IAAIv1B,KAAK,uDAAyD01B,EAAGC,MAAQ,WAAaD,EAAGvuB,WAM/N0f,cAAe,SAAuB3qB,EAAKkrB,EAAOE,GAChD,IAAI3qB,EAAKC,KACTD,EAAGkmB,UAAU/jB,KAAK,SAAU,UAC5BnC,EAAGkmB,UAAU/jB,KAAK,MAAO,YAErBsoB,GACFzqB,EAAGkmB,UAAU/jB,KAAK,OAAQ5C,GAC1BS,EAAGkmB,UAAU/jB,KAAK,gBAAiBwoB,GACnC3qB,EAAGkmB,UAAUtjB,SAAS,gBACtB5C,EAAGkmB,UAAUvjB,YAAY,kBACzB3C,EAAGkmB,UAAU7iB,KAAK,aAAeonB,EAAQ,kCAEzCzqB,EAAGkmB,UAAU/jB,KAAK,OAAQ,KAC1BnC,EAAGkmB,UAAU/jB,KAAK,gBAAiB,GACnCnC,EAAGkmB,UAAUtjB,SAAS,gBACtB5C,EAAGkmB,UAAUvjB,YAAY,kBACzB3C,EAAGkmB,UAAU7iB,KAAK;AC5ExB,aAKA,IAAImc,QAAU,CACZ1f,KAAM,SAAcm5B,GAClBzZ,QAAQ0C,OAAS,CACfwD,MAAOxoB,EAAE,iBACT6yB,MAAO,KAET7yB,EAAEuV,OAAO+M,QAAQ0C,OAAQ+W,GACzBzZ,QAAQ0Z,SAEVA,MAAO,WACL1Z,QAAQ2Z,SAAW3Z,QAAQ0C,OAAOwD,MAClClG,QAAQ4Z,MAAQl8B,EAAE,qBAAsBsiB,QAAQ2Z,UAChD3Z,QAAQ6Z,MAAQn8B,EAAE,qBAAsBsiB,QAAQ2Z,UAChD3Z,QAAQ8Z,OAAS9Z,QAAQ0C,OAAO6N,MAChCvQ,QAAQ+Z,YAAcr8B,EAAE,uBAAwBsiB,QAAQ4Z,OACxDpqB,WAAW,WAET,IAAIuqB,EAAc/Z,QAAQ+Z,YAAYr2B,GAAG,eAAgB,SAAUwI,EAAO8tB,GACxEt8B,EAAE,uBAAwBsiB,QAAQ6Z,OAAOpgB,WAAWugB,KACnDC,YAAY,CACbC,sBAAuB,GACvBC,sBAAuB,GACvBC,uBAAwB,GACxBC,uBAAwB,KAE1Bra,QAAQsa,eAAiBP,EAAYh2B,KAAK,OAC1Cic,QAAQua,eACRva,QAAQwa,cAAgBxa,QAAQ4Z,MAAMjf,SACtCqF,QAAQya,SAER/8B,EAAEmE,QAAQ6B,GAAG,iBAAkB,WAC7B,IAAIg3B,EAAah9B,EAAEmE,QAAQuC,YACT1G,EAAEmE,QAAQ4X,aAC5BuG,QAAQ2a,aAAaD,KACpB7U,QAAQ,mBACV7F,QAAQ8Z,SAEbW,OAAQ,WACN,IACIG,EAIAC,EACAC,EACAC,EACAC,EARAR,EAAgBxa,QAAQwa,cAExBS,EAAav9B,EAAE,8BAA+BsiB,QAAQ2Z,UACtDuB,EAAex9B,EAAE,gCAAiCsiB,QAAQ2Z,UAC1DwB,EAAWz9B,EAAE,4BAA6BsiB,QAAQ2Z,UAMtDj8B,EAAE,KAAMw9B,GAAcl4B,KAAK,SAAUyC,GACnCo1B,EAAen9B,EAAE+C,MACjBs6B,EAAgBF,EAAavlB,SAC7BwlB,EAAYp9B,EAAE,KAAMy9B,GAAU5hB,GAAG9T,IACjCu1B,EAAaF,EAAUxlB,UAEnBylB,EACFF,EAAanb,IAAIob,GAAWxlB,OAAOylB,GAEnCF,EAAanb,IAAIob,GAAWxlB,OAAO0lB,KAGvChb,QAAQsa,eAAec,eAEnBpb,QAAQ+Z,YAAY12B,SAAS,iBAC/B2c,QAAQ+Z,YAAYn3B,KAAK,iBAAiB0S,OAAO2lB,EAAW3lB,SAAW,IAEvE0K,QAAQ+Z,YAAYn3B,KAAK,iBAAiB0S,OAAO2lB,EAAW3lB,UAG9DslB,EAAS5a,QAAQ4Z,MAAMtkB,SAEvB0K,QAAQ2Z,SAAS/oB,IAAI,CACnByqB,WAAYT,IAEd5a,QAAQ4Z,MAAM71B,KAAK,CACjBu3B,QAAStb,QAAQ2Z,SAAS4B,cAC1BlX,MAAOmW,EAAcztB,IACrBuI,OAAQslB,KAGZL,aAAc,SAAsBiB,GAClC,IAAIC,EAAU,GAGZA,EADe,SAAbD,EACQ,CACR1uB,SAAU0uB,EACV3uB,OAAQ,GACRE,IAAK,EACLC,OAAQ,OACRgN,KAAM,QAEc,UAAbwhB,EACC,CACR1uB,SAAU,WACVD,OAAQ,GACRE,IAAK,OACLC,OAAQ,EACRgN,KAAM,QAGE,CACRlN,SAAU,WACVD,OAAQ,GACRE,IAAK,EACLC,OAAQ,OACRgN,KAAM,GAIVgG,QAAQ4Z,MAAMhpB,IAAI6qB,IAEpBd,aAAc,SAAsBD,GAClC,IAAIgB,EAAa1b,QAAQ4Z,MAAM71B,KAAK,SAChC62B,EAAS5a,QAAQ4Z,MAAM71B,KAAK,UAC5B43B,EAAY3b,QAAQ4Z,MAAM71B,KAAK,WAAa23B,EAAad,EAEzDc,GAAchB,EACEiB,GAAdjB,EACF1a,QAAQua,aAAa,UAErBva,QAAQua,aAAa,SAGvBva,QAAQua,iBAOV/X,QAAU,CACZliB,KAAM,SAAcm5B,GAClBjX,QAAQE,OAAS,CACfF,QAAS9kB,EAAE,4BAEbA,EAAEuV,OAAOuP,QAAQE,OAAQ+W,GACzBjX,QAAQkX,SAEVA,MAAO,WACLlX,QAAQoZ,SAAWpZ,QAAQE,OAAOF,QAClCA,QAAQoZ,SAASx0B,SAAS,QAC1B1J,EAAEyG,UAAUT,GAAG,CACbm4B,WAAYrZ,QAAQpgB,KACpB05B,WAAYtZ,QAAQrgB,MACnB,mBAELC,KAAM,WACJ,IAAI25B,EAAUr+B,EAAE+C,MACZu7B,EAAWD,EAAQR,cACnBU,EAAaF,EAAQphB,SACrBuhB,EAAWH,EAAQh4B,KAAK,WAEvBm4B,GAIL1Z,QAAQoZ,SAAS/3B,KAAKq4B,GAAUtrB,IAAI,CAClC7D,IAAKkvB,EAAWlvB,IAAMivB,EAAW,EACjChiB,KAAMiiB,EAAWjiB,KAAO,IACvB5X,QAELD,KAAM,WACJqgB,QAAQoZ,SAASz5B,SAGjBsgB,SAAW,CACbniB,KAAM,SAAcm5B,GAClBhX,SAASC,OAAS,CAChBD,SAAU/kB,EAAE,6BAEdA,EAAEuV,OAAOwP,SAASC,OAAQ+W,GAC1BhX,SAASiX,SAEXA,MAAO,WACLjX,SAAS0Z,UAAY1Z,SAASC,OAAOD,SACrCA,SAAS0Z,UAAU/0B,SAAS,QAC5B1J,EAAEyG,UAAUT,GAAG,CACbm4B,WAAYpZ,SAASrgB,KACrB05B,WAAYrZ,SAAStgB,MACpB,oBAELC,KAAM,WACJ,IAAI25B,EAAUr+B,EAAE+C,MACZu7B,EAAWD,EAAQR,cACnBU,EAAaF,EAAQphB,SACrBuhB,EAAWH,EAAQh4B,KAAK,YAEvBm4B,GAILzZ,SAAS0Z,UAAUt4B,KAAKq4B,GAAUtrB,IAAI,CACpC7D,IAAKkvB,EAAWlvB,IAAMivB,EAAW,EACjChiB,KAAMiiB,EAAWjiB,KAAO,IACvB5X,QAELD,KAAM,WACJsgB,SAAS0Z,UAAUh6B,SAMvB,SAASi6B,WACS1+B,EAAEmE,QAAQuC,YAM5B,SAASi4B,WAEP3+B,EAAE,6CAA6C4+B,cAIjD5+B,EAAE,WACA,IAAI6+B,EAAM7+B,EAAEmE,QAEZnE,EAAE,YAAYsF,KAAK,WACHtF,EAAE+C,MACRiD,GAAG,CACTm4B,WAAY,WACVn+B,EAAE+C,MAAMyzB,QAAQ,iBAAiB9wB,SAAS,UAE5C04B,WAAY,WACVp+B,EAAE+C,MAAMyzB,QAAQ,iBAAiB/wB,YAAY,WAE9C,wCAGLk5B,WAEI3+B,EAAE,iBAAiBwD,QACrB8e,QAAQ1f,OAIVkiB,QAAQliB,OAGRi8B,EAAI74B,GAAG,SAAUhG,EAAE8+B,SAAS,GAAIJ,WAE5BK,eACFA;ACxPJ,aAEAC,WAAa,CACXC,WAAYj/B,EAAE,mBACdk/B,SAAUl/B,EAAE,gBACZm/B,UAAWn/B,EAAE,gBAAgBkF,KAAK,eAClCk6B,QAASp/B,EAAE,eACX+K,cAAe/K,EAAE,cACjBq/B,UAAWr/B,EAAE,kBACbs/B,MAAOt/B,EAAE,UACTu/B,UAAWv/B,EAAE,gBACbw/B,WAAYx/B,EAAE,kBACdy/B,cAAez/B,EAAE,kBACjB0/B,kBAAmB1/B,EAAE,yBACrB4C,KAAM,WACJ,IAAIE,EAAKC,KACT/C,EAAEyG,UAAUT,GAAG,QAAS,YAAa,WAInC,OAHAlD,EAAGo8B,SAASz5B,YAAY,QACxB3C,EAAGs8B,QAAQ35B,YAAY,QAAQC,SAAS,QAAQuG,QAChDnJ,EAAGiI,cAActF,YAAY,SACtB,IAETzF,EAAEyG,UAAUT,GAAG,QAAS,WAAY,WAClC,IAAIR,EAASxF,EAAE+C,MAAMyC,SAASA,SAW9B,OATkC,EAA9BxF,EAAEwF,GAAQc,WAAW9C,QACvBxD,EAAEwF,GAAQC,YAAY,QAAQC,SAAS,QACvC1F,EAAEwF,GAAQ2lB,OAAOzlB,SAAS,QAC1B1F,EAAEwF,GAAQ8N,WAEVxQ,EAAGo8B,SAASx5B,SAAS,QACrB5C,EAAGs8B,QAAQ35B,YAAY,QAAQC,SAAS,QAAQuG,UAG3C,IAETnJ,EAAGm8B,WAAWl6B,KAAK,QAAS,WAC1B,OAAIjC,EAAGiI,cAAcpF,SAAS,SAAW7C,EAAGo8B,SAASv5B,SAAS,SAC5D7C,EAAGo8B,SAASz5B,YAAY,QACxB3C,EAAGs8B,QAAQ35B,YAAY,QAAQC,SAAS,QAAQuG,QAChDnJ,EAAGiI,cAActF,YAAY,UAI/B3C,EAAGiI,cAAcrF,SAAS,QAEtB1F,EAAE,aAAa2F,SAAS,SAC1B3F,EAAE,aAAayF,YAAY,QAGC,EAA1B3C,EAAG28B,cAAcj8B,QACnBV,EAAG28B,cAAch6B,YAAY,QAGT,EAAlB3C,EAAGw8B,MAAM97B,QACXV,EAAGw8B,MAAM75B,YAAY,QAGvB3C,EAAGo8B,SAASx5B,SAAS,UAjBZ,IAoBX5C,EAAGq8B,UAAUp6B,KAAK,QAAS,WACzB,IAAI1C,EAAMrC,EAAE+C,MAAMkC,KAAK,YAGvB,OAFAnC,EAAG68B,aAAat9B,GAChBS,EAAGs8B,QAAQnzB,SACJ,IAETnJ,EAAGu8B,UAAUt6B,KAAK,QAAS,WAEzB,OADA/E,EAAEmE,QAAQC,SAAS,EAAG,MACf,IAETpE,EAAEyG,UAAUT,GAAG,QAAS,WAAY,WAClC,IAAI3D,EAAMrC,EAAE+C,MAAMkC,KAAK,YAEvB,OADAnC,EAAG68B,aAAat9B,IACT,IAETS,EAAG08B,WAAWz6B,KAAK,QAAS,WAG1B,OAFAjC,EAAG08B,WAAWh6B,SAASA,SAASC,YAAY,QAC5C3C,EAAGiI,cAActF,YAAY,SACtB,IAET3C,EAAGy8B,UAAUx6B,KAAK,QAAS,WAGzB,OAFAjC,EAAGiI,cAAcrF,SAAS,QAC1B5C,EAAGw8B,MAAM55B,SAAS,SACX,IAET5C,EAAG48B,kBAAkB36B,KAAK,QAAS,WAGjC,OAFAjC,EAAGiI,cAAcrF,SAAS,QAC1B5C,EAAG28B,cAAc/5B,SAAS,SACnB,KAGXi6B,aAAc,SAAsBt9B,GAClC,IAAIS,EAAKC,KACT/C,EAAEkM,KAAK,CACL7J,IAAK,cACLgE,KAAM,CACJjE,MAAOC,GAET8J,SAAU,OACVC,QAAS,SAAiB/F,GACxBrG,EAAEA,EAAEuC,UAAU,YAAYkH,OAAOpD,IAAOqD,SAAS5G,EAAGs8B,SACpDp/B,EAAE,YAAcqG,EAAKu5B,KAAKl6B,SAAS,QACnC5C,EAAGo8B,SAASz5B,YAAY,QACxBzF,EAAE,YAAcqG,EAAKu5B,KAAKt5B,WAAWb,YAAY,QACjD3C,EAAGs8B,QAAQ35B,YAAY,QAAQC,SAAS,QACxC1F,EAAEyG,UAAUC,UAAU,QAK9B1G,EAAE,WACAqL,GAAGgG,KAAKmpB,cACRwE,WAAWp8B,OACX,IAAI7C,EAAUC,EAAE,iBACZ6/B,EAAS7/B,EAAE,WACXq/B,EAAYr/B,EAAE,oBACdgI,EAAShI,EAAE,yBACfgI,EAAOrB,MAAM,WACX,GAA0B,IAAtB3G,EAAEyG,UAAU4M,QACd,OAAO,EAGTwsB,EAAOn6B,SAAS,SAChB3F,EAAQ2E,SAEVsD,EAAOuE,KAAK,WACV,GAA0B,IAAtBvM,EAAEyG,UAAU4M,QACd,OAAO,EAGTwsB,EAAOp6B,YAAY,SACnB1F,EAAQ0E,SAEVzE,EAAEmE,QAAQ27B,OAAO,WACa,IAAxB9/B,EAAEmE,QAAQuC,aAAwC,EAAnB24B,EAAU77B,OAC3C67B,EAAUU,OAAO,QAEM,EAAnBV,EAAU77B,QACZ67B,EAAUW,QAAQ,UAIxBX,EAAUt6B,KAAK,QAAS,WAEtB,OADA/E,EAAEmE,QAAQC,SAAS,EAAG,MACf,MAIXpE,EAAE0U,GAAG9P,WAAa,SAAU01B,EAAU2F,GACpC,IAAIC,EAAQ,EACRr7B,EAAK7E,EAAE+C,MAOX,OANA/C,EAAE+C,MAAMo9B,MAAM,WACZC,aAAaF,GACbA,EAAQpuB,WAAW,WACjBwoB,EAASz1B,IACRo7B,KAEEjgC,EAAE+C;AC9JX,aAEAs9B,eAAiB,CACfC,YAAa,qDACbC,IAAKvgC,EAAE,2BACPwgC,IAAKxgC,EAAE,wBACPwpB,KAAMxpB,EAAE,uBACRygC,MAAOzgC,EAAE,yBACT0gC,YAAa1gC,EAAE,uBACf2gC,kBAAmB3gC,EAAE,iBACrB4gC,kBAAmB5gC,EAAE,iBACrB6gC,eAAgB7gC,EAAE,qBAClB8gC,eAAgB,aAChBC,wBAAwB,EACxBvvB,QAAS,IACT5O,KAAM,SAAck+B,EAAgBC,EAAwBvvB,GAC1DzO,KAAKyO,QAAqB,MAAXA,EAAkBzO,KAAKyO,QAAUA,EAChDzO,KAAK+9B,eAAmC,MAAlBA,EAAyB/9B,KAAK+9B,eAAiBA,EACrE/9B,KAAKg+B,uBAAyBA,EAC9B,IAAIj+B,EAAKC,KACT+O,WAAW,WACJhP,EAAGk+B,mBACNl+B,EAAGm+B,eACHn+B,EAAGo+B,eAEJp+B,EAAG0O,UAERwvB,eAAgB,WACd,IAAIG,GAAuB,EAO3B,OALIp+B,KAAK49B,mBAAqD,EAAhC59B,KAAK49B,kBAAkBn9B,SAEnD29B,EAA8E,EAAvDnhC,EAAE+C,KAAK49B,kBAAkB,IAAIz7B,KAAK,UAAU0S,WAG1B,EAAnC7U,KAAKw9B,IAAIr7B,KAAK,UAAU0S,UAAgBupB,IAAyBp+B,KAAKg+B,wBAEhFE,aAAc,WACZ,IAAIG,EAAS36B,SAAS6L,cAAc,UACpC8uB,EAAO9M,IAAMvxB,KAAKu9B,YAClB75B,SAASZ,KAAK8Q,YAAYyqB,GAC1Br+B,KAAK89B,eAAevtB,SAEhBvQ,KAAK49B,mBAAqD,EAAhC59B,KAAK49B,kBAAkBn9B,QACnDT,KAAK49B,kBAAkBr7B,KAAK,WAC1BtF,EAAE+C,MAAMmC,KAAK,UAAUoO,WAI3BvQ,KAAKw9B,IAAIr7B,KAAK,UAAUoO,UAE1B4tB,WAAY,WACV,IAAIp+B,EAAKC,KACT+O,WAAW,WACJhP,EAAGk+B,mBACNl+B,EAAGu+B,eACHv+B,EAAGw+B,eACHx+B,EAAGg+B,mBAEJh+B,EAAG0O,UAER8vB,aAAc,WACZ,IAAIx+B,EAAKC,KAELD,EAAG69B,mBAAmD,EAA9B79B,EAAG69B,kBAAkBn9B,QAC/CV,EAAG69B,kBAAkBr7B,KAAK,WACxBtF,EAAE+C,MAAM0B,SAIZ3B,EAAGy9B,IAAI97B,QAET48B,aAAc,WACZ,IAAIv+B,EAAKC,KACTD,EAAG09B,IAAI/6B,YAAY,UACJ,MAAX3C,EAAG0mB,MAAc1mB,EAAG0mB,KAAK/jB,YAAY,UACrC3C,EAAG89B,mBAAmD,EAA9B99B,EAAG89B,kBAAkBp9B,QAAYV,EAAG89B,kBAAkBt7B,KAAK,WACrFtF,EAAE+C,MAAM0C,YAAY,YAEP,MAAX3C,EAAG0mB,MAAc1mB,EAAG0mB,KAAK/jB,YAAY,UACnB,MAAlB3C,EAAG49B,aAAqB59B,EAAG49B,YAAYj7B,YAAY","file":"../../old/old.js","sourcesContent":["\"use strict\";\n\ncatManager = {\n overlay: $('.js-m-overlay'),\n select: $('.js-m-select'),\n wrapper: $('.js-m-wrapper'),\n filters: $('.js-m-filters'),\n filtersD: $('.filters'),\n filterInStock: $('.check__input__instock'),\n mFilterInStock: $('.m-check__input__instock'),\n showFilters: $('.js-m-show-filters'),\n hideFilters: $('.js-m-hide-filters'),\n showMoreFiltersBtn: $(\"#filters__more-link\"),\n showLessFiltersBtn: $(\"#filters__less-link\"),\n showMoreFiltersBtnMobile: $(\"#filters__more-link-mobile\"),\n showLessFiltersBtnMobile: $(\"#filters__less-link-mobile\"),\n productsHtml: $(\".prod_list\"),\n prodEl: $(\".l-content\"),\n totalCount: parseInt($(\".tabs .tabs__counter\").text().replace(\"(\", \"\").replace(\")\", \"\")),\n tabsCounter: $('.tabs__counter'),\n metaTitleCategory: '',\n categoryName: '',\n MaxBrandsNumber: 20,\n priceMin: $('input[name=filter-cost-from]'),\n priceMax: $('input[name=filter-cost-to]'),\n mpriceMin: $('input[name=mfilter-cost-from]'),\n mpriceMax: $('input[name=mfilter-cost-to]'),\n brandInput: $('input[name=filter-brand]'),\n mbrandInput: $('input[name=mfilter-brand]'),\n brandScroll: $('.filters__wrap_scroll'),\n mbrandScroll: $('.m-filters__wrap_scroll'),\n resultButton: $('#result_button'),\n loadButton: $('#more_button'),\n page: 1,\n filtersData: {},\n count: 30,\n query: url('?'),\n tmpl: $.templates(\"#productTmpl\"),\n message: $.templates(\"#messageTmpl\"),\n category: $(\".head__title\"),\n pagination: null,\n inStock: false,\n init: function init(metaTitleCategory, categoryName, page, region, inStock) {\n var me = this;\n this.region = region;\n this.metaTitleCategory = metaTitleCategory;\n this.categoryName = categoryName;\n this.page = page;\n this.inStock = inStock;\n\n if (this.query !== undefined) {\n me.initFiltersQueryData();\n }\n\n $.views.tags(\"ratingBlue\", me.renderBlueStars);\n me.buttonsInit();\n me.filtersInit();\n var paginationDiv = $('#pagination');\n\n if (paginationDiv.length) {\n me.pagination = paginationDiv.pagination({\n items: me.totalCount,\n itemsOnPage: me.count,\n currentPage: page,\n cssStyle: 'light-theme',\n hrefTextPrefix: '#',\n edges: 0,\n prevText: ' ',\n nextText: ' ',\n onPageClick: function onPageClick(page) {\n me.inputFilters(page);\n $(window).scrollTo(0, 500);\n }\n });\n }\n },\n updatePagination: function updatePagination(page, itemsCount) {\n var me = this;\n console.log(itemsCount);\n\n if (me.pagination) {\n if (itemsCount < 2) {\n $('#pagination').hide();\n } else {\n $('#pagination').show();\n }\n\n if (page) me.pagination.pagination('drawPage', page);\n if (itemsCount) me.pagination.pagination('updateItems', itemsCount);\n }\n },\n filtersInit: function filtersInit() {\n var me = this;\n if (me.filterInStock) me.filterInStock.prop('checked', me.inStock);\n me.mFilterInStock.prop('checked', me.inStock);\n me.priceMin.delayKeyup(function (el) {\n el.val(el.val().replace(/[^\\d]/, ''));\n me.mpriceMin.val(el.val());\n me.inputFilters();\n }, 1500);\n me.mpriceMin.delayKeyup(function (el) {\n el.val(el.val().replace(/[^\\d]/, ''));\n\n if (me.priceMin.length > 0) {\n me.priceMin.val(el.val());\n }\n\n me.inputFilters();\n }, 1500);\n me.priceMax.delayKeyup(function (el) {\n el.val(el.val().replace(/[^\\d]/, ''));\n me.mpriceMax.val(el.val());\n me.inputFilters();\n }, 1500);\n me.mpriceMax.delayKeyup(function (el) {\n el.val(el.val().replace(/[^\\d]/, ''));\n\n if (me.priceMax.length > 0) {\n me.priceMax.val(el.val());\n }\n\n me.inputFilters();\n }, 1500);\n $('.check__input').bind('change', function () {\n var index = $(this).attr('data-index');\n me.filters.find('.m-check__input[data-index=\"' + index + '\"]').prop('checked', $(this).prop('checked'));\n me.inputFilters();\n return false;\n });\n me.filterInStock.bind('change', function () {\n me.inStock = $(this).prop('checked').toString();\n me.inputFilters();\n return false;\n });\n me.mFilterInStock.bind('change', function () {\n me.inStock = $(this).prop('checked').toString();\n me.inputFilters();\n return false;\n });\n $('.m-check__input').bind('change', function () {\n var index = $(this).attr('data-index');\n\n if (me.filtersD.length > 0) {\n me.filtersD.find('.check__input[data-index=\"' + index + '\"]').prop('checked', $(this).prop('checked'));\n }\n\n me.inputFilters();\n return false;\n });\n me.brandInput.bind('keyup', function () {\n var value = $(this).val().toLowerCase(),\n count = 0;\n $(\".check__input\").each(function () {\n var checkValue = $(this).attr('data-title').toLowerCase();\n\n if (checkValue.indexOf(value) === 0) {\n count++;\n $(this).parent().removeClass(\"hidden\");\n } else {\n $(this).parent().addClass(\"hidden\");\n }\n });\n\n if (count <= 16) {\n me.brandInput.parent().parent().parent().removeClass('filters__item_brand');\n\n if (me.brandScroll.hasClass('filters__wrap_scroll-yes')) {\n me.showLessFiltersBtn.hide();\n me.showLessFiltersBtnMobile.hide();\n } else {\n me.showMoreFiltersBtn.hide();\n me.showMoreFiltersBtnMobile.hide();\n }\n } else {\n me.brandInput.parent().parent().parent().addClass('filters__item_brand');\n\n if (me.brandScroll.hasClass('filters__wrap_scroll-yes')) {\n me.showLessFiltersBtn.show();\n me.showLessFiltersBtnMobile.show();\n } else {\n me.showMoreFiltersBtn.show();\n me.showMoreFiltersBtnMobile.show();\n }\n }\n\n return false;\n });\n me.mbrandInput.bind('keyup', function () {\n var value = $(this).val().toLowerCase(),\n count = 0;\n\n if (me.brandInput.length > 0) {\n $(\".check__input\").each(function () {\n var checkValue = $(this).attr('data-title').toLowerCase();\n\n if (checkValue.indexOf(value) === 0) {\n $(this).parent().removeClass(\"hidden\");\n } else {\n $(this).parent().addClass(\"hidden\");\n }\n });\n }\n\n $(\".m-check__input\").each(function () {\n var checkValue = $(this).attr('data-title').toLowerCase();\n\n if (checkValue.indexOf(value) === 0) {\n count++;\n $(this).parent().removeClass(\"hidden\");\n } else {\n $(this).parent().addClass(\"hidden\");\n }\n });\n\n if (count <= 16) {\n me.mbrandInput.parent().parent().parent().removeClass('m-filters__item_brand');\n\n if (me.mbrandScroll.hasClass('m-filters__wrap_scroll-yes')) {\n if (me.brandInput.length > 0) {\n me.showLessFiltersBtn.hide();\n }\n\n me.showLessFiltersBtnMobile.hide();\n } else {\n if (me.brandInput.length > 0) {\n me.showMoreFiltersBtn.hide();\n }\n\n me.showMoreFiltersBtnMobile.hide();\n }\n\n if (me.brandInput.length > 0) {\n me.brandInput.parent().parent().parent().removeClass('filters__item_brand');\n }\n } else {\n me.mbrandInput.parent().parent().parent().addClass('m-filters__item_brand');\n\n if (me.mbrandScroll.hasClass('m-filters__wrap_scroll-yes')) {\n if (me.brandInput.length > 0) {\n me.showLessFiltersBtn.show();\n }\n\n me.showLessFiltersBtnMobile.show();\n } else {\n if (me.brandInput.length > 0) {\n me.showMoreFiltersBtn.show();\n }\n\n me.showMoreFiltersBtnMobile.show();\n }\n\n if (me.brandInput.length > 0) {\n me.brandInput.parent().parent().parent().addClass('filters__item_brand');\n }\n }\n\n return false;\n });\n },\n buttonsInit: function buttonsInit() {\n var me = this;\n me.select.each(function () {\n var that = $(this),\n head = that.find('.js-m-select-head'),\n title = that.find('.js-m-select-title'),\n option = that.find('.js-m-select-option');\n head.on('click', function (e) {\n e.preventDefault();\n that.addClass('open');\n me.overlay.show();\n });\n option.on('click', function () {\n var value = $(this).html(),\n button = $('.sort__list > a').find('button[data-filter=\"' + $(this).data('filter') + '\"]');\n that.removeClass('open');\n title.html(value);\n me.overlay.hide();\n\n if (button.length > 0) {\n if (button.hasClass('active')) {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n button.addClass('active-up');\n } else {\n button.removeClass('active-up');\n button.addClass('active-down');\n }\n } else if (button.data('filter') === \"price\") {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n } else {\n button.removeClass('active-up');\n }\n\n button.parent().siblings().find('button').removeClass('active');\n button.addClass('active');\n button.addClass('active-up');\n } else if (button.data('filter') === \"rating\") {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n } else {\n button.removeClass('active-up');\n }\n\n button.parent().siblings().find('button').removeClass('active');\n button.addClass('active');\n button.addClass('active-down');\n }\n }\n\n if ($(this).hasClass('active')) {\n if ($(this).hasClass('active-down')) {\n $(this).removeClass('active-down');\n $(this).addClass('active-up');\n } else {\n $(this).removeClass('active-up');\n $(this).addClass('active-down');\n }\n } else if ($(this).data('filter') === \"price\") {\n if ($(this).hasClass('active-down')) {\n $(this).removeClass('active-down');\n } else {\n $(this).removeClass('active-up');\n }\n\n option.removeClass('active');\n $(this).addClass('active');\n $(this).addClass('active-up');\n } else if ($(this).data('filter') === \"rating\") {\n if ($(this).hasClass('active-down')) {\n $(this).removeClass('active-down');\n } else {\n $(this).removeClass('active-up');\n }\n\n option.removeClass('active');\n $(this).addClass('active');\n $(this).addClass('active-down');\n }\n\n me.inputFilters();\n return false;\n });\n });\n me.overlay.on('click', function (e) {\n e.preventDefault();\n me.select.removeClass('open');\n me.overlay.hide();\n });\n me.resultButton.on('click', function (e) {\n e.preventDefault();\n me.wrapper.removeClass('hide');\n me.filters.removeClass('show');\n });\n me.loadButton.on('click', function (e) {\n e.preventDefault();\n me.page++;\n me.generateFiltersData();\n me.loadProducts();\n });\n me.showFilters.on('click', function (e) {\n e.preventDefault();\n me.wrapper.addClass('hide');\n me.filters.addClass('show');\n $(document).scrollTop(0);\n });\n me.hideFilters.on('click', function (e) {\n e.preventDefault();\n me.wrapper.removeClass('hide');\n me.filters.removeClass('show');\n });\n me.showMoreFiltersBtn.on('click', function () {\n me.brandScroll.addClass('filters__wrap_scroll-yes');\n $(this).hide();\n me.brandInput.focus();\n me.showLessFiltersBtn.show();\n me.showMoreFiltersBtnMobile.hide();\n me.showLessFiltersBtnMobile.show();\n return false;\n });\n me.showMoreFiltersBtnMobile.on('click', function () {\n me.mbrandScroll.addClass('m-filters__wrap_scroll-yes');\n $(this).hide();\n\n if (me.showLessFiltersBtn.length > 0) {\n me.brandScroll.addClass('filters__wrap_scroll-yes');\n me.showLessFiltersBtn.show();\n me.showMoreFiltersBtn.hide();\n }\n\n me.showLessFiltersBtnMobile.show();\n return false;\n });\n me.showLessFiltersBtn.on('click', function () {\n var count = 0,\n brandParent = me.brandInput.parent().parent().parent();\n me.brandScroll.removeClass('filters__wrap_scroll-yes');\n $(this).hide();\n me.brandInput.val('');\n $(\".check__input\").each(function () {\n count++;\n $(this).parent().removeClass(\"hidden\");\n });\n\n if (count > 16 && !brandParent.hasClass('filters__item_brand')) {\n brandParent.addClass('filters__item_brand');\n }\n\n me.showLessFiltersBtnMobile.hide();\n me.showMoreFiltersBtn.show();\n me.showMoreFiltersBtnMobile.show();\n return false;\n });\n me.showLessFiltersBtnMobile.on('click', function () {\n var count = 0,\n mbrandParent = me.mbrandInput.parent().parent().parent();\n me.mbrandScroll.removeClass('m-filters__wrap_scroll-yes');\n $(this).hide();\n\n if (me.showLessFiltersBtn.length > 0) {\n me.brandScroll.removeClass('filters__wrap_scroll-yes');\n me.showLessFiltersBtn.hide();\n me.brandInput.val('');\n $(\".check__input\").each(function () {\n $(this).parent().removeClass(\"hidden\");\n });\n me.showMoreFiltersBtn.show();\n }\n\n me.mbrandInput.val('');\n $(\".m-check__input\").each(function () {\n count++;\n $(this).parent().removeClass(\"hidden\");\n });\n\n if (count > 16 && !mbrandParent.hasClass('m-filters__item_brand')) {\n mbrandParent.addClass('m-filters__item_brand');\n }\n\n if (me.showLessFiltersBtn.length > 0) {\n var brandParent = me.brandInput.parent().parent().parent();\n\n if (count > 16 && !brandParent.hasClass('filters__item_brand')) {\n brandParent.addClass('filters__item_brand');\n }\n }\n\n me.showMoreFiltersBtnMobile.show();\n return false;\n });\n me.brandScroll.on('scroll', function (e) {\n var that = this,\n brandParent = me.brandInput.parent().parent().parent(),\n ref = 0;\n ref = that.scrollTopMax != null ? that.scrollTopMax : that.scrollHeight - that.clientHeight;\n\n if (that.scrollTop > ref - 20) {\n brandParent.removeClass('filters__item_brand');\n } else {\n brandParent.addClass('filters__item_brand');\n }\n\n if (that.scrollTop === 0) {\n brandParent.removeClass('filters__item_brand-top');\n } else {\n brandParent.addClass('filters__item_brand-top');\n }\n });\n me.mbrandScroll.on('scroll', function (e) {\n var that = this,\n brandParent = me.mbrandInput.parent().parent().parent(),\n ref = 0;\n ref = that.scrollTopMax != null ? that.scrollTopMax : that.scrollHeight - that.clientHeight;\n\n if (that.scrollTop > ref - 20) {\n brandParent.removeClass('m-filters__item_brand');\n } else {\n brandParent.addClass('m-filters__item_brand');\n }\n\n if (that.scrollTop === 0) {\n brandParent.removeClass('m-filters__item_brand-top');\n } else {\n brandParent.addClass('m-filters__item_brand-top');\n }\n });\n $('.sort__list > a').on('click', function (e) {\n e && e.preventDefault();\n var link = $(this),\n button = link.find('button'),\n option = me.select.find('.js-m-select-option[data-filter=\"' + button.data('filter') + '\"]'),\n title = me.select.find('.js-m-select-title');\n\n if (button.hasClass('active')) {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n button.addClass('active-up');\n option.removeClass('active-down');\n option.addClass('active-up');\n } else {\n button.removeClass('active-up');\n button.addClass('active-down');\n option.removeClass('active-up');\n option.addClass('active-down');\n }\n } else if (button.data('filter') === \"price\") {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n option.removeClass('active-down');\n } else {\n button.removeClass('active-up');\n option.removeClass('active-up');\n }\n\n link.siblings().find('button').removeClass('active');\n option.siblings().removeClass('active');\n button.addClass('active');\n button.addClass('active-up');\n option.addClass('active');\n option.addClass('active-up');\n } else if (button.data('filter') === \"rating\") {\n if (button.hasClass('active-down')) {\n button.removeClass('active-down');\n option.removeClass('active-down');\n } else {\n button.removeClass('active-up');\n option.removeClass('active-up');\n }\n\n link.siblings().find('button').removeClass('active');\n option.siblings().removeClass('active');\n button.addClass('active');\n button.addClass('active-down');\n option.addClass('active');\n option.addClass('active-down');\n }\n\n title.html(option.html());\n me.inputFilters();\n });\n },\n inputFilters: function inputFilters(page) {\n var me = this;\n me.page = page ? page : 1;\n me.totalCount = 0;\n me.generateFiltersData();\n me.loadProducts(me.page);\n },\n initFiltersQueryData: function initFiltersQueryData() {\n var me = this;\n\n if (me.query.priceMin !== '') {\n me.filtersData.priceMin = me.query.priceMin;\n\n if (me.priceMin.length > 0) {\n me.priceMin.val(me.filtersData.priceMin);\n }\n\n me.mpriceMin.val(me.filtersData.priceMin);\n }\n\n if (me.query.priceMax !== '') {\n me.filtersData.priceMax = me.query.priceMax;\n\n if (me.priceMax.length > 0) {\n me.priceMax.val(me.filtersData.priceMax);\n }\n\n me.mpriceMax.val(me.filtersData.priceMin);\n }\n\n if (me.query.companies) {\n var companies = me.query.companies.split(',').map(function (x) {\n return x.toLowerCase();\n });\n\n for (var j = 0; j < companies.length; j++) {\n if (me.filtersD.length > 0) {\n $('.check__input[data=\"' + companies[j] + '\"]').prop('checked', true);\n }\n\n $('.m-check__input[data=\"' + companies[j] + '\"]').prop('checked', true);\n }\n }\n\n if (me.query.inStock) {\n if (me.filterInStock) me.filterInStock.prop('checked', me.query.inStock == \"true\");\n me.mFilterInStock.prop('checked', me.query.inStock == \"true\");\n }\n },\n generateFiltersData: function generateFiltersData() {\n var me = this,\n brands = '';\n\n if (me.filtersD.length > 0) {\n me.filtersData.priceMin = me.priceMin.val();\n me.filtersData.priceMax = me.priceMax.val();\n $('.check__input:checked').each(function () {\n brands += $(this).attr('data-title') + ',';\n });\n var buttonD = $(\".sort__btn.active\");\n me.filtersData.sortBy = buttonD.data('filter');\n me.filtersData.sortDesc = buttonD.hasClass(\"active-down\") ? \"True\" : \"False\";\n } else {\n me.filtersData.priceMin = me.mpriceMin.val();\n me.filtersData.priceMax = me.mpriceMax.val();\n $('.m-check__input:checked').each(function () {\n brands += $(this).attr('data-title') + ',';\n });\n var button = $(\".m-select__option.active\");\n me.filtersData.sortBy = button.data('filter');\n me.filtersData.sortDesc = button.hasClass(\"active-down\") ? \"True\" : \"False\";\n }\n\n if (brands.length) {\n brands = brands.substring(0, brands.length - 1);\n }\n\n me.filtersData.inStock = me.inStock;\n me.filtersData.companies = brands;\n me.filtersData.count = me.count;\n me.filtersData.page = me.page;\n me.filtersData.region = me.region;\n var keys = Object.keys(me.filtersData);\n\n for (var i = 0; i < keys.length; i++) {\n if (!me.filtersData[keys[i]]) {\n delete me.filtersData[keys[i]];\n }\n }\n\n var search = Object.keys(me.filtersData).map(function (k) {\n return encodeURIComponent(k) + '=' + me.filtersData[k];\n }).join('&');\n history.pushState('', 'Каталог', window.location.pathname + '?' + search);\n },\n declOfNum: function () {\n var cases = [2, 0, 1, 1, 1, 2];\n\n var declOfNumSubFunction = function declOfNumSubFunction(titles, number) {\n number = Math.abs(number);\n return titles[number % 100 > 4 && number % 100 < 20 ? 2 : cases[number % 10 < 5 ? number % 10 : 5]];\n };\n\n return function (_titles) {\n if (arguments.length === 1) {\n return function (_number) {\n return declOfNumSubFunction(_titles, _number);\n };\n } else {\n return declOfNumSubFunction.apply(null, arguments);\n }\n };\n }(),\n loadProducts: function loadProducts(inputPage) {\n var me = this;\n me.prodEl.addClass('loading');\n me.loadButton.parent().hide();\n $.get('katalogpage', me.filtersData).done(function (result) {\n me.totalCount = parseInt(result.Count);\n me.tabsCounter.text('(' + result.Count + ')');\n\n if (result.Products.length > 0) {\n me.resultButton.text('Найдено ' + result.Count + ' ' + me.declOfNum(['товар', 'товара', 'товаров'], result.Count));\n\n if (me.page === 0 || inputPage) {\n me.productsHtml.html(me.tmpl.render(result));\n } else {\n $(me.tmpl.render(result)).appendTo(me.productsHtml);\n }\n\n if (result.Count > me.count && result.Count - me.page * me.count > 0) {\n me.loadButton.parent().show();\n }\n } else {\n me.resultButton.text('Найдено 0 товаров');\n me.productsHtml.html(me.message.render());\n } //rewrite title and header\n\n\n var checkedBrandsMobile = $('.m-filters__check > .m-check__input:checked');\n var checkedBrands = $('.filters__check > .check__input:checked');\n var brandName = null;\n\n if (checkedBrands.length === 1) {\n brandName = checkedBrands.first().attr('data-title');\n }\n\n if (checkedBrandsMobile.length === 1) {\n brandName = checkedBrandsMobile.first().attr('data-title');\n }\n\n var newHeader = brandName != null ? me.categoryName + \" \" + brandName + \" – Каталог\" : me.categoryName + ' – Каталог';\n var newTitle = brandName != null ? me.categoryName + \" \" + brandName + \": купить, цены на \" + me.categoryName.toLowerCase() + \" \" + brandName + \" | Product-test.ru\" : me.metaTitleCategory;\n document.title = newTitle;\n me.category.text(newHeader);\n me.updatePagination(me.page, result.Count);\n }).fail(function () {\n alert(\"Что-то сломалось, пожалуйста, сообщите нам об этом по адресу info@product-test.ru\");\n }).always(function () {\n me.prodEl.removeClass('loading');\n });\n },\n renderBlueStars: function renderBlueStars(value) {\n var rating = '';\n\n for (var star = 1; star <= 5; star++) {\n var x = star <= value ? 1 : star - value < 1 ? (star - 1 - value) * -1 : 0;\n var y = (Math.asin(2 * x - 1) / Math.PI + 0.5) * 100;\n rating += '
';\n }\n\n return rating;\n }\n};","\"use strict\";\n\nvar citySelect = {\n city: $('#city-link'),\n cityTitle: $('.head__title-city'),\n cityList: $('.buy__drop'),\n overlay: $('.js-m-overlay'),\n select: $('.js-m-select'),\n mselect: $('#m-city-select-wrap'),\n mcityTitle: $('.js-m-city-title'),\n mcity: $('.js-m-city'),\n wrapperMobile: $('#m-wrapper'),\n regionName: null,\n geoBaseId: 0,\n mobiGuruId: 0,\n textChangeFunc: null,\n queryChange: false,\n init: function init(regionName, textChangeFunc, queryChange) {\n this.regionName = regionName == null || regionName == \"\" ? pt.cookie.get('regionName') : regionName;\n this.geoBaseId = pt.cookie.get('geoBaseId') === null || pt.cookie.get('geoBaseId') === \"undefined\" ? null : pt.cookie.get('geoBaseId');\n this.mobiGuruId = pt.cookie.get('mobiGuruId') === null || pt.cookie.get('mobiGuruId') === \"undefined\" ? null : pt.cookie.get('mobiGuruId');\n this.textChangeFunc = textChangeFunc;\n this.queryChange = queryChange;\n this.hide();\n\n if (!this.checkRegion()) {\n this.hide();\n this.getLocation();\n } else {\n this.setText(this.regionName, this.geoBaseId, this.mobiGuruId);\n }\n\n this.buttonsInit();\n this.mButtonsInit();\n },\n checkRegion: function checkRegion() {\n var me = this;\n if (me.regionName == null || me.regionName == \"\") return false;\n if (me.geoBaseId === null || me.geoBaseId === 0) return false;\n if (pt.cookie.get('regionName') !== me.regionName) return false;\n return true;\n },\n mButtonsInit: function mButtonsInit() {\n var me = this;\n me.mselect.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n me.mcity.find('a.active').removeClass('active');\n var active = me.mcity.find(\"a[data-geobase-id='\" + me.geoBaseId + \"']\");\n $(document).scrollTop(0);\n active.addClass('active');\n me.wrapperMobile.addClass('hide');\n me.mcity.addClass('show');\n });\n\n var onOptionClick = function onOptionClick(e) {\n e.preventDefault();\n $(this).parent().find('a.active').removeClass('active');\n $(this).addClass('active');\n me.setText($(this).text(), $(this).attr('data-geobase-id'), $(this).attr('data-mobiguru-id'));\n me.mcity.removeClass('show');\n me.wrapperMobile.removeClass('hide');\n };\n\n var cityAjax = $('#city_list_ajax');\n var cityList = $('#city_list_template');\n var input = $('.m-choice__input');\n\n var mCityListClean = function mCityListClean() {\n if (cityList.hasClass('m-hide')) {\n input.val('');\n cityAjax.addClass('m-hide');\n cityList.removeClass('m-hide');\n cityAjax.empty();\n }\n };\n\n $('.js-m-city-option').on(me.isTouch ? 'tap' : 'click', onOptionClick);\n input.on('propertychange input', function (e) {\n var value = input.val();\n\n if (value == \"\") {\n mCityListClean();\n }\n\n if (value.length > 2) {\n cityAjax.empty();\n $.ajax({\n url: '/product/searchregion',\n dataType: 'json',\n data: {\n query: value\n },\n success: function success(data) {\n var cityTmpl = $.templates(\"#cityTmpl\");\n\n if (data.result && data.result.length) {\n $(cityTmpl.render(data.result)).appendTo(cityAjax);\n } else {\n $(cityTmpl.render(data)).appendTo(cityAjax);\n }\n\n cityList.addClass('m-hide');\n cityAjax.removeClass('m-hide');\n $('.js-m-city-ajax-option').on(me.isTouch ? 'tap' : 'click', onOptionClick);\n }\n });\n }\n });\n $('.m-block-back').on(me.isTouch ? 'tap' : 'click', mCityListClean);\n },\n buttonsInit: function buttonsInit() {\n var me = this;\n\n var onCityClick = function onCityClick(e) {\n e.preventDefault();\n var active = $(\"a.buy__cities-link[data-geobase-id='\" + me.geoBaseId + \"']\");\n\n if (!me.cityList.is(':visible')) {\n $(\".js-buy\").addClass('expanded');\n active.addClass('active');\n me.overlay.show();\n me.cityList.show();\n } else {\n me.cityList.hide();\n me.overlay.hide();\n active.removeClass('active');\n $(\".js-buy\").removeClass('expanded');\n }\n\n return false;\n };\n\n me.city.bind(me.isTouch ? 'tap' : 'click', onCityClick);\n me.overlay.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n\n if ($('.header').hasClass('upper')) {\n $('.header__search-input').blur();\n $('.header').removeClass('upper');\n }\n\n me.select.removeClass('open');\n\n if (me.cityList.length > 0 && me.cityList.is(':visible')) {\n me.cityList.find('a.active').removeClass('active');\n $('.buy__search-input').autocomplete('hide');\n me.cityList.hide();\n me.overlay.hide();\n $(\".js-buy\").removeClass('expanded');\n $(\".buy__search-input\").val(\"\");\n $('.buy__search-input').autocomplete('clear');\n }\n\n me.overlay.hide();\n });\n $('.buy__drop a').on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n me.cityList.find('a.active').removeClass('active');\n $(this).addClass('active');\n me.setText($(this).text(), $(this).attr('data-geobase-id'), $(this).attr('data-mobiguru-id'));\n me.cityList.hide();\n $(\".autocomplete-suggestions\").hide();\n me.overlay.hide();\n $(\".js-buy\").removeClass('expanded');\n me.isSort = true;\n });\n $('.buy__search-input').autocomplete({\n serviceUrl: '/product/searchregion',\n dataType: 'json',\n minChars: 2,\n transformResult: function transformResult(response, originalQuery) {\n if (response.result && response.result.length) {\n var json = response.result;\n return {\n suggestions: $.map(json, function (dataItem) {\n return {\n value: dataItem.name,\n geobaseid: dataItem.geobaseid,\n mobiguruid: dataItem.mobiguruid\n };\n })\n };\n }\n\n return null;\n },\n onSelect: function onSelect(suggestion) {\n me.setText(suggestion.value, suggestion.geobaseid, suggestion.mobiguruid);\n me.cityList.find('a.active').removeClass('active');\n me.cityList.hide();\n me.overlay.hide();\n $(\".js-buy\").removeClass('expanded');\n $(\".buy__search-input\").val(\"\");\n }\n });\n },\n getLocation: function getLocation() {\n var me = this,\n city;\n\n if (!me.checkRegion()) {\n city = me.regionName;\n }\n\n $.ajax({\n url: '/product/getlocation',\n data: {\n city: city\n },\n success: function success(data) {\n if (data && data.Name) {\n me.setText(data.Name, data.GeoBaseId, data.MobiGuruId);\n return data;\n } else {\n me.setText('Москва', 2097, 213);\n }\n }\n });\n return {\n 'Name': 'Москва',\n 'GeoBaseId': 2097,\n 'MobiGuruId': 213\n };\n },\n getCity: function getCity() {\n var regionName = this.regionName == null || this.regionName == \"\" ? pt.cookie.get('regionName') : this.regionName;\n var geoBaseId = this.geoBaseId == null || this.geoBaseId == \"\" ? pt.cookie.get('geoBaseId') : this.geoBaseId;\n var mobiGuruId = this.mobiGuruId == null || this.mobiGuruId == \"\" ? pt.cookie.get('mobiGuruId') : this.mobiGuruId;\n return {\n 'Name': regionName,\n 'GeoBaseId': geoBaseId,\n 'MobiGuruId': mobiGuruId\n };\n },\n setText: function setText(text, geoBaseId, mobiGuruId) {\n this.regionName = text;\n this.geoBaseId = geoBaseId;\n this.mobiGuruId = mobiGuruId;\n this.setCookie();\n if (text && text.length == 0) this.hide();else this.show();\n if (this.textChangeFunc != null) this.textChangeFunc(text);\n if (this.queryChange) this.setQuery();\n\n if (this.city) {\n this.city.text('г. ' + text);\n this.city.attr('data-geobase-id', geoBaseId);\n this.city.attr('data-mobiguru-id', mobiGuruId);\n }\n\n if (this.mcityTitle) {\n this.mcityTitle.text('г. ' + text);\n this.cityTitle.text('г. ' + text);\n this.mcityTitle.attr('data-geobase-id', geoBaseId);\n this.mcityTitle.attr('data-mobiguru-id', mobiGuruId);\n }\n },\n hide: function hide() {\n if (this.city) this.city.parent().hide();\n if (this.mselect) this.mselect.addClass(\"hidden\");\n },\n show: function show() {\n if (this.city) this.city.parent().show();\n if (this.mselect) this.mselect.removeClass(\"hidden\");\n },\n setCookie: function setCookie() {\n pt.cookie.set('geoBaseId', this.geoBaseId, {\n path: \"/\",\n expires: 100000000\n });\n pt.cookie.set('mobiGuruId', this.mobiGuruId, {\n path: \"/\",\n expires: 100000000\n });\n pt.cookie.set('regionName', this.regionName, {\n path: \"/\",\n expires: 100000000\n });\n },\n setQuery: function setQuery() {\n var match,\n pl = /\\+/g,\n // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function decode(s) {\n return decodeURIComponent(s.replace(pl, \" \"));\n },\n query = window.location.search.substring(1);\n\n var urlParams = {};\n\n while (match = search.exec(query)) {\n urlParams[decode(match[1])] = decode(match[2]);\n }\n\n urlParams['city'] = this.regionName;\n var search = Object.keys(urlParams).map(function (k) {\n return encodeURIComponent(k) + '=' + urlParams[k];\n }).join('&');\n history.pushState('', '', window.location.pathname + '?' + search);\n }\n};","\"use strict\";\n\n$(document).ready(function () {\n $('body').click(function (event) {\n if ($(event.target).closest('.detail-filter-dropdown2').length > 0) return true;\n $('.detail-filter, .detail-filter-label2').removeClass('expand');\n });\n $('.detail-filter, .detail-filter-label2, .detail-duplex-filter-item').click(function (event) {\n if ($(event.target).closest('.detail-filter-dropdown2, .detail-duplex-filter-dropdown').length > 0) return true;\n $(this).toggleClass('expand').siblings('.expand').removeClass('expand');\n return false;\n });\n});","\"use strict\";\n\nvar root = document.documentElement,\n root_class = root.className;\nroot_class = root_class.replace('no-js', 'js');","\"use strict\";\n\n/** @preserve jQuery.floatThead 2.0.3 - http://mkoryak.github.io/floatThead/ - Copyright (c) 2012 - 2017 Misha Koryak **/\n// @license MIT\n\n/* @author Misha Koryak\r\n * @projectDescription lock a table header in place while scrolling - without breaking styles or events bound to the header\r\n *\r\n * Dependencies:\r\n * jquery 1.9.0 + [required] OR jquery 1.7.0 + jquery UI core\r\n *\r\n * http://mkoryak.github.io/floatThead/\r\n *\r\n * Tested on FF13+, Chrome 21+, IE8, IE9, IE10, IE11\r\n *\r\n */\n(function ($) {\n /**\r\n * provides a default config object. You can modify this after including this script if you want to change the init defaults\r\n * @type {Object}\r\n */\n $.floatThead = $.floatThead || {};\n $.floatThead.defaults = {\n headerCellSelector: 'tr:visible:first>*:visible',\n //thead cells are this.\n zIndex: 1001,\n //zindex of the floating thead (actually a container div)\n position: 'auto',\n // 'fixed', 'absolute', 'auto'. auto picks the best for your table scrolling type.\n top: 0,\n //String or function($table) - offset from top of window where the header should not pass above\n bottom: 0,\n //String or function($table) - offset from the bottom of the table where the header should stop scrolling\n scrollContainer: function scrollContainer($table) {\n // or boolean 'true' (use offsetParent) | function -> if the table has horizontal scroll bars then this is the container that has overflow:auto and causes those scroll bars\n return $([]);\n },\n responsiveContainer: function responsiveContainer($table) {\n // only valid if scrollContainer is not used (ie window scrolling). this is the container which will control y scrolling at some mobile breakpoints\n return $([]);\n },\n getSizingRow: function getSizingRow($table, $cols, $fthCells) {\n // this is only called when using IE,\n // override it if the first row of the table is going to contain colgroups (any cell spans greater than one col)\n // it should return a jquery object containing a wrapped set of table cells comprising a row that contains no col spans and is visible\n return $table.find('tbody tr:visible:first>*:visible');\n },\n floatTableClass: 'floatThead-table',\n floatWrapperClass: 'floatThead-wrapper',\n floatContainerClass: 'floatThead-container',\n copyTableClass: true,\n //copy 'class' attribute from table into the floated table so that the styles match.\n autoReflow: false,\n //(undocumented) - use MutationObserver api to reflow automatically when internal table DOM changes\n debug: false,\n //print possible issues (that don't prevent script loading) to console, if console exists.\n support: {\n //should we bind events that expect these frameworks to be present and/or check for them?\n bootstrap: true,\n datatables: true,\n jqueryUI: true,\n perfectScrollbar: true\n }\n };\n\n var util = window._ || function underscoreShim() {\n var that = {};\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n isThings = ['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'];\n\n that.has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n that.keys = Object.keys || function (obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys = [];\n\n for (var key in obj) {\n if (that.has(obj, key)) keys.push(key);\n }\n\n return keys;\n };\n\n var idCounter = 0;\n\n that.uniqueId = function (prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n $.each(isThings, function () {\n var name = this;\n\n that['is' + name] = function (obj) {\n return Object.prototype.toString.call(obj) == '[object ' + name + ']';\n };\n });\n\n that.debounce = function (func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n return function () {\n context = this;\n args = arguments;\n timestamp = new Date();\n\n var later = function later() {\n var last = new Date() - timestamp;\n\n if (last < wait) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n }\n };\n\n var callNow = immediate && !timeout;\n\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n\n if (callNow) result = func.apply(context, args);\n return result;\n };\n };\n\n return that;\n }();\n\n var canObserveMutations = typeof MutationObserver !== 'undefined'; //browser stuff\n\n var ieVersion = function () {\n for (var a = 3, b = document.createElement(\"b\"), c = b.all || []; a = 1 + a, b.innerHTML = \"\", c[0];) {\n ;\n }\n\n return 4 < a ? a : document.documentMode;\n }();\n\n var isFF = /Gecko\\//.test(navigator.userAgent);\n var isWebkit = /WebKit\\//.test(navigator.userAgent);\n\n if (!(ieVersion || isFF || isWebkit)) {\n ieVersion = 11; //yey a hack!\n } //safari 7 (and perhaps others) reports table width to be parent container's width if max-width is set on table. see: https://github.com/mkoryak/floatThead/issues/108\n\n\n var isTableWidthBug = function isTableWidthBug() {\n if (isWebkit) {\n var $test = $('
').css('width', 0).append($('').css('max-width', '100%').append($('').append($('elements, but webkit cannot\n\n var $window = $(window);\n\n if (!window.matchMedia) {\n var _beforePrint = window.onbeforeprint;\n var _afterPrint = window.onafterprint;\n\n window.onbeforeprint = function () {\n _beforePrint && _beforePrint();\n $window.triggerHandler(\"beforeprint\");\n };\n\n window.onafterprint = function () {\n _afterPrint && _afterPrint();\n $window.triggerHandler(\"afterprint\");\n };\n }\n /**\r\n * @param debounceMs\r\n * @param cb\r\n */\n\n\n function windowResize(eventName, cb) {\n if (ieVersion == 8) {\n //ie8 is crap: https://github.com/mkoryak/floatThead/issues/65\n var winWidth = $window.width();\n var debouncedCb = util.debounce(function () {\n var winWidthNew = $window.width();\n\n if (winWidth != winWidthNew) {\n winWidth = winWidthNew;\n cb();\n }\n }, 1);\n $window.on(eventName, debouncedCb);\n } else {\n $window.on(eventName, util.debounce(cb, 1));\n }\n }\n\n function getClosestScrollContainer($elem) {\n var elem = $elem[0];\n var parent = elem.parentElement;\n\n do {\n var pos = window.getComputedStyle(parent).getPropertyValue('overflow');\n if (pos != 'visible') break;\n } while (parent = parent.parentElement);\n\n if (parent == document.body) {\n return $([]);\n }\n\n return $(parent);\n }\n\n function debug(str) {\n window && window.console && window.console.error && window.console.error(\"jQuery.floatThead: \" + str);\n } //returns fractional pixel widths\n\n\n function getOffsetWidth(el) {\n var rect = el.getBoundingClientRect();\n return rect.width || rect.right - rect.left;\n }\n /**\r\n * try to calculate the scrollbar width for your browser/os\r\n * @return {Number}\r\n */\n\n\n function scrollbarWidth() {\n var d = document.createElement(\"scrolltester\");\n d.style.cssText = 'width:100px;height:100px;overflow:scroll!important;position:absolute;top:-9999px;display:block';\n document.body.appendChild(d);\n var result = d.offsetWidth - d.clientWidth;\n document.body.removeChild(d);\n return result;\n }\n /**\r\n * Check if a given table has been datatableized (http://datatables.net)\r\n * @param $table\r\n * @return {Boolean}\r\n */\n\n\n function isDatatable($table) {\n if ($table.dataTableSettings) {\n for (var i = 0; i < $table.dataTableSettings.length; i++) {\n var table = $table.dataTableSettings[i].nTable;\n\n if ($table[0] == table) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function tableWidth($table, $fthCells, isOuter) {\n // see: https://github.com/mkoryak/floatThead/issues/108\n var fn = isOuter ? \"outerWidth\" : \"width\";\n\n if (isTableWidthBug && $table.css(\"max-width\")) {\n var w = 0;\n\n if (isOuter) {\n w += parseInt($table.css(\"borderLeft\"), 10);\n w += parseInt($table.css(\"borderRight\"), 10);\n }\n\n for (var i = 0; i < $fthCells.length; i++) {\n w += $fthCells.get(i).offsetWidth;\n }\n\n return w;\n } else {\n return $table[fn]();\n }\n }\n\n $.fn.floatThead = function (map) {\n map = map || {};\n\n if (ieVersion < 8) {\n return this; //no more crappy browser support.\n }\n\n var mObs = null; //mutation observer lives in here if we can use it / make it\n\n if (util.isFunction(isTableWidthBug)) {\n isTableWidthBug = isTableWidthBug();\n }\n\n if (util.isString(map)) {\n var command = map;\n var args = Array.prototype.slice.call(arguments, 1);\n var ret = this;\n this.filter('table').each(function () {\n var $this = $(this);\n var opts = $this.data('floatThead-lazy');\n\n if (opts) {\n $this.floatThead(opts);\n }\n\n var obj = $this.data('floatThead-attached');\n\n if (obj && util.isFunction(obj[command])) {\n var r = obj[command].apply(this, args);\n\n if (r !== undefined) {\n ret = r;\n }\n }\n });\n return ret;\n }\n\n var opts = $.extend({}, $.floatThead.defaults || {}, map);\n $.each(map, function (key, val) {\n if (!(key in $.floatThead.defaults) && opts.debug) {\n debug(\"Used [\" + key + \"] key to init plugin, but that param is not an option for the plugin. Valid options are: \" + util.keys($.floatThead.defaults).join(', '));\n }\n });\n\n if (opts.debug) {\n var v = $.fn.jquery.split(\".\");\n\n if (parseInt(v[0], 10) == 1 && parseInt(v[1], 10) <= 7) {\n debug(\"jQuery version \" + $.fn.jquery + \" detected! This plugin supports 1.8 or better, or 1.7.x with jQuery UI 1.8.24 -> http://jqueryui.com/resources/download/jquery-ui-1.8.24.zip\");\n }\n }\n\n this.filter(':not(.' + opts.floatTableClass + ')').each(function () {\n var floatTheadId = util.uniqueId();\n var $table = $(this);\n\n if ($table.data('floatThead-attached')) {\n return true; //continue the each loop\n }\n\n if (!$table.is('table')) {\n throw new Error('jQuery.floatThead must be run on a table element. ex: $(\"table\").floatThead();');\n }\n\n canObserveMutations = opts.autoReflow && canObserveMutations; //option defaults to false!\n\n var $header = $table.children('thead:first');\n var $tbody = $table.children('tbody:first');\n\n if ($header.length == 0 || $tbody.length == 0) {\n if (opts.debug) {\n if ($header.length == 0) {\n debug('The thead element is missing.');\n } else {\n debug('The tbody element is missing.');\n }\n }\n\n $table.data('floatThead-lazy', opts);\n $table.unbind(\"reflow\").one('reflow', function () {\n $table.floatThead(opts);\n });\n return;\n }\n\n if ($table.data('floatThead-lazy')) {\n $table.unbind(\"reflow\");\n }\n\n $table.data('floatThead-lazy', false);\n var headerFloated = true;\n var scrollingTop, scrollingBottom;\n var scrollbarOffset = {\n vertical: 0,\n horizontal: 0\n };\n var scWidth = scrollbarWidth();\n var lastColumnCount = 0; //used by columnNum()\n\n if (opts.scrollContainer === true) {\n opts.scrollContainer = getClosestScrollContainer;\n }\n\n var $scrollContainer = opts.scrollContainer($table) || $([]); //guard against returned nulls\n\n var locked = $scrollContainer.length > 0;\n var $responsiveContainer = locked ? $([]) : opts.responsiveContainer($table) || $([]);\n var responsive = isResponsiveContainerActive();\n var useAbsolutePositioning = null;\n\n if (opts.position == 'auto') {\n useAbsolutePositioning = null;\n } else if (opts.position == 'fixed') {\n useAbsolutePositioning = false;\n } else if (opts.position == 'absolute') {\n useAbsolutePositioning = true;\n } else if (opts.debug) {\n debug('Invalid value given to \"position\" option, valid is \"fixed\", \"absolute\" and \"auto\". You passed: ', opts.position);\n }\n\n if (useAbsolutePositioning == null) {\n //defaults: locked=true, !locked=false\n useAbsolutePositioning = locked;\n }\n\n var $caption = $table.find(\"caption\");\n var haveCaption = $caption.length == 1;\n\n if (haveCaption) {\n var captionAlignTop = ($caption.css(\"caption-side\") || $caption.attr(\"align\") || \"top\") === \"top\";\n }\n\n var $fthGrp = $('').css({\n 'display': 'table-footer-group',\n 'border-spacing': 0,\n 'height': 0,\n 'border-collapse': 'collapse',\n 'visibility': 'hidden'\n });\n var wrappedContainer = false; //used with absolute positioning enabled. did we need to wrap the scrollContainer/table with a relative div?\n\n var $wrapper = $([]); //used when absolute positioning enabled - wraps the table and the float container\n\n var absoluteToFixedOnScroll = ieVersion <= 9 && !locked && useAbsolutePositioning; //on IE using absolute positioning doesn't look good with window scrolling, so we change position to fixed on scroll, and then change it back to absolute when done.\n\n var $floatTable = $(\"
').append($('
').css('min-width', 100).text('X')))));\n $(\"body\").append($test);\n var ret = $test.find(\"table\").width() == 0;\n $test.remove();\n return ret;\n }\n\n return false;\n };\n\n var createElements = !isFF && !ieVersion; //FF can read width from
\");\n var $floatColGroup = $(\"\");\n var $tableColGroup = $table.children('colgroup:first');\n var existingColGroup = true;\n\n if ($tableColGroup.length == 0) {\n $tableColGroup = $(\"\");\n existingColGroup = false;\n }\n\n var $fthRow = $('').css({\n //created unstyled elements (used for sizing the table because chrome can't read width)\n 'display': 'table-row',\n 'border-spacing': 0,\n 'height': 0,\n 'border-collapse': 'collapse'\n });\n var $floatContainer = $('
').css('overflow', 'hidden').attr('aria-hidden', 'true');\n var floatTableHidden = false; //this happens when the table is hidden and we do magic when making it visible\n\n var $newHeader = $(\"
\");\n var $sizerRow = $('');\n var $sizerCells = $([]);\n var $tableCells = $([]); //used for sizing - either $sizerCells or $tableColGroup cols. $tableColGroup cols are only created in chrome for borderCollapse:collapse because of a chrome bug.\n\n var $headerCells = $([]);\n var $fthCells = $([]); //created elements\n\n $newHeader.append($sizerRow);\n $table.prepend($tableColGroup);\n\n if (createElements) {\n $fthGrp.append($fthRow);\n $table.append($fthGrp);\n }\n\n $floatTable.append($floatColGroup);\n $floatContainer.append($floatTable);\n\n if (opts.copyTableClass) {\n $floatTable.attr('class', $table.attr('class'));\n }\n\n $floatTable.attr({\n //copy over some deprecated table attributes that people still like to use. Good thing people don't use colgroups...\n 'cellpadding': $table.attr('cellpadding'),\n 'cellspacing': $table.attr('cellspacing'),\n 'border': $table.attr('border')\n });\n var tableDisplayCss = $table.css('display');\n $floatTable.css({\n 'borderCollapse': $table.css('borderCollapse'),\n 'border': $table.css('border'),\n 'display': tableDisplayCss\n });\n\n if (!locked) {\n $floatTable.css('width', 'auto');\n }\n\n if (tableDisplayCss == 'none') {\n floatTableHidden = true;\n }\n\n $floatTable.addClass(opts.floatTableClass).css({\n 'margin': 0,\n 'border-bottom-width': 0\n }); //must have no margins or you won't be able to click on things under floating table\n\n if (useAbsolutePositioning) {\n var makeRelative = function makeRelative($container, alwaysWrap) {\n var positionCss = $container.css('position');\n var relativeToScrollContainer = positionCss == \"relative\" || positionCss == \"absolute\";\n var $containerWrap = $container;\n\n if (!relativeToScrollContainer || alwaysWrap) {\n var css = {\n \"paddingLeft\": $container.css('paddingLeft'),\n \"paddingRight\": $container.css('paddingRight')\n };\n $floatContainer.css(css);\n $containerWrap = $container.data('floatThead-containerWrap') || $container.wrap($('
').addClass(opts.floatWrapperClass).css({\n 'position': 'relative',\n 'clear': 'both'\n })).parent();\n $container.data('floatThead-containerWrap', $containerWrap); //multiple tables inside one scrolling container - #242\n\n wrappedContainer = true;\n }\n\n return $containerWrap;\n };\n\n if (locked) {\n $wrapper = makeRelative($scrollContainer, true);\n $wrapper.prepend($floatContainer);\n } else {\n $wrapper = makeRelative($table);\n $table.before($floatContainer);\n }\n } else {\n $table.before($floatContainer);\n }\n\n $floatContainer.css({\n position: useAbsolutePositioning ? 'absolute' : 'fixed',\n marginTop: 0,\n top: useAbsolutePositioning ? 0 : 'auto',\n zIndex: opts.zIndex,\n willChange: 'transform'\n });\n $floatContainer.addClass(opts.floatContainerClass);\n updateScrollingOffsets();\n var layoutFixed = {\n 'table-layout': 'fixed'\n };\n var layoutAuto = {\n 'table-layout': $table.css('tableLayout') || 'auto'\n };\n var originalTableWidth = $table[0].style.width || \"\"; //setting this to auto is bad: #70\n\n var originalTableMinWidth = $table.css('minWidth') || \"\";\n\n function eventName(name) {\n return name + '.fth-' + floatTheadId + '.floatTHead';\n }\n\n function _setHeaderHeight() {\n var headerHeight = 0;\n $header.children(\"tr:visible\").each(function () {\n headerHeight += $(this).outerHeight(true);\n });\n\n if ($table.css('border-collapse') == 'collapse') {\n var tableBorderTopHeight = parseInt($table.css('border-top-width'), 10);\n var cellBorderTopHeight = parseInt($table.find(\"thead tr:first\").find(\">*:first\").css('border-top-width'), 10);\n\n if (tableBorderTopHeight > cellBorderTopHeight) {\n headerHeight -= tableBorderTopHeight / 2; //id love to see some docs where this magic recipe is found..\n }\n }\n\n $sizerRow.outerHeight(headerHeight);\n $sizerCells.outerHeight(headerHeight);\n }\n\n function setFloatWidth() {\n var tw = tableWidth($table, $fthCells, true);\n var $container = responsive ? $responsiveContainer : $scrollContainer;\n var width = $container.width() || tw;\n var floatContainerWidth = $container.css(\"overflow-y\") != 'hidden' ? width - scrollbarOffset.vertical : width;\n $floatContainer.width(floatContainerWidth);\n\n if (locked) {\n var percent = 100 * tw / floatContainerWidth;\n $floatTable.css('width', percent + '%');\n } else {\n $floatTable.outerWidth(tw);\n }\n }\n\n function updateScrollingOffsets() {\n scrollingTop = (util.isFunction(opts.top) ? opts.top($table) : opts.top) || 0;\n scrollingBottom = (util.isFunction(opts.bottom) ? opts.bottom($table) : opts.bottom) || 0;\n }\n /**\r\n * get the number of columns and also rebuild resizer rows if the count is different than the last count\r\n */\n\n\n function columnNum() {\n var count;\n var $headerColumns = $header.find(opts.headerCellSelector);\n\n if (existingColGroup) {\n count = $tableColGroup.find('col').length;\n } else {\n count = 0;\n $headerColumns.each(function () {\n count += parseInt($(this).attr('colspan') || 1, 10);\n });\n }\n\n if (count != lastColumnCount) {\n lastColumnCount = count;\n var cells = [],\n cols = [],\n psuedo = [],\n content;\n\n for (var x = 0; x < count; x++) {\n content = $headerColumns.eq(x).text();\n cells.push('
');\n psuedo.push($('').css({\n 'display': 'table-cell',\n 'height': 0,\n 'width': 'auto'\n }));\n }\n\n cols = cols.join('');\n cells = cells.join('');\n\n if (createElements) {\n $fthRow.empty();\n $fthRow.append(psuedo);\n $fthCells = $fthRow.find('fthtd');\n }\n\n $sizerRow.html(cells);\n $sizerCells = $sizerRow.find(\"th\");\n\n if (!existingColGroup) {\n $tableColGroup.html(cols);\n }\n\n $tableCells = $tableColGroup.find('col');\n $floatColGroup.html(cols);\n $headerCells = $floatColGroup.find(\"col\");\n }\n\n return count;\n }\n\n function refloat() {\n //make the thing float\n if (!headerFloated) {\n headerFloated = true;\n\n if (useAbsolutePositioning) {\n //#53, #56\n var tw = tableWidth($table, $fthCells, true);\n var wrapperWidth = $wrapper.width();\n\n if (tw > wrapperWidth) {\n $table.css('minWidth', tw);\n }\n }\n\n $table.css(layoutFixed);\n $floatTable.css(layoutFixed);\n $floatTable.append($header); //append because colgroup must go first in chrome\n\n $tbody.before($newHeader);\n\n _setHeaderHeight();\n }\n }\n\n function unfloat() {\n //put the header back into the table\n if (headerFloated) {\n headerFloated = false;\n\n if (useAbsolutePositioning) {\n //#53, #56\n $table.width(originalTableWidth);\n }\n\n $newHeader.detach();\n $table.prepend($header);\n $table.css(layoutAuto);\n $floatTable.css(layoutAuto);\n $table.css('minWidth', originalTableMinWidth); //this looks weird, but it's not a bug. Think about it!!\n\n $table.css('minWidth', tableWidth($table, $fthCells)); //#121\n }\n }\n\n var isHeaderFloatingLogical = false; //for the purpose of this event, the header is/isnt floating, even though the element\n //might be in some other state. this is what the header looks like to the user\n\n function triggerFloatEvent(isFloating) {\n if (isHeaderFloatingLogical != isFloating) {\n isHeaderFloatingLogical = isFloating;\n $table.triggerHandler(\"floatThead\", [isFloating, $floatContainer]);\n }\n }\n\n function changePositioning(isAbsolute) {\n if (useAbsolutePositioning != isAbsolute) {\n useAbsolutePositioning = isAbsolute;\n $floatContainer.css({\n position: useAbsolutePositioning ? 'absolute' : 'fixed'\n });\n }\n }\n\n function getSizingRow($table, $cols, $fthCells, ieVersion) {\n if (createElements) {\n return $fthCells;\n } else if (ieVersion) {\n return opts.getSizingRow($table, $cols, $fthCells);\n } else {\n return $cols;\n }\n }\n /**\r\n * returns a function that updates the floating header's cell widths.\r\n * @return {Function}\r\n */\n\n\n function reflow() {\n var i;\n var numCols = columnNum(); //if the tables columns changed dynamically since last time (datatables), rebuild the sizer rows and get a new count\n\n return function () {\n //Cache the current scrollLeft value so that it can be reset post reflow\n var scrollLeft = $floatContainer.scrollLeft();\n $tableCells = $tableColGroup.find('col');\n var $rowCells = getSizingRow($table, $tableCells, $fthCells, ieVersion);\n\n if ($rowCells.length == numCols && numCols > 0) {\n if (!existingColGroup) {\n for (i = 0; i < numCols; i++) {\n $tableCells.eq(i).css('width', '');\n }\n }\n\n unfloat();\n var widths = [];\n\n for (i = 0; i < numCols; i++) {\n widths[i] = getOffsetWidth($rowCells.get(i));\n }\n\n for (i = 0; i < numCols; i++) {\n $headerCells.eq(i).width(widths[i]);\n $tableCells.eq(i).width(widths[i]);\n }\n\n refloat();\n } else {\n $floatTable.append($header);\n $table.css(layoutAuto);\n $floatTable.css(layoutAuto);\n\n _setHeaderHeight();\n } //Set back the current scrollLeft value on floatContainer\n\n\n $floatContainer.scrollLeft(scrollLeft);\n $table.triggerHandler(\"reflowed\", [$floatContainer]);\n };\n }\n\n function floatContainerBorderWidth(side) {\n var border = $scrollContainer.css(\"border-\" + side + \"-width\");\n var w = 0;\n\n if (border && ~border.indexOf('px')) {\n w = parseInt(border, 10);\n }\n\n return w;\n }\n\n function isResponsiveContainerActive() {\n return $responsiveContainer.css(\"overflow-x\") == 'auto';\n }\n /**\r\n * first performs initial calculations that we expect to not change when the table, window, or scrolling container are scrolled.\r\n * returns a function that calculates the floating container's top and left coords. takes into account if we are using page scrolling or inner scrolling\r\n * @return {Function}\r\n */\n\n\n function calculateFloatContainerPosFn() {\n var scrollingContainerTop = $scrollContainer.scrollTop(); //this floatEnd calc was moved out of the returned function because we assume the table height doesn't change (otherwise we must reinit by calling calculateFloatContainerPosFn)\n\n var floatEnd;\n var tableContainerGap = 0;\n var captionHeight = haveCaption ? $caption.outerHeight(true) : 0;\n var captionScrollOffset = captionAlignTop ? captionHeight : -captionHeight;\n var floatContainerHeight = $floatContainer.height();\n var tableOffset = $table.offset();\n var tableLeftGap = 0; //can be caused by border on container (only in locked mode)\n\n var tableTopGap = 0;\n\n if (locked) {\n var containerOffset = $scrollContainer.offset();\n tableContainerGap = tableOffset.top - containerOffset.top + scrollingContainerTop;\n\n if (haveCaption && captionAlignTop) {\n tableContainerGap += captionHeight;\n }\n\n tableLeftGap = floatContainerBorderWidth('left');\n tableTopGap = floatContainerBorderWidth('top');\n tableContainerGap -= tableTopGap;\n } else {\n floatEnd = tableOffset.top - scrollingTop - floatContainerHeight + scrollingBottom + scrollbarOffset.horizontal;\n }\n\n var windowTop = $window.scrollTop();\n var windowLeft = $window.scrollLeft();\n\n var getScrollContainerLeft = function getScrollContainerLeft() {\n return (isResponsiveContainerActive() ? $responsiveContainer : $scrollContainer).scrollLeft() || 0;\n };\n\n var scrollContainerLeft = getScrollContainerLeft();\n return function (eventType) {\n responsive = isResponsiveContainerActive();\n var isTableHidden = $table[0].offsetWidth <= 0 && $table[0].offsetHeight <= 0;\n\n if (!isTableHidden && floatTableHidden) {\n floatTableHidden = false;\n setTimeout(function () {\n $table.triggerHandler(\"reflow\");\n }, 1);\n return null;\n }\n\n if (isTableHidden) {\n //it's hidden\n floatTableHidden = true;\n\n if (!useAbsolutePositioning) {\n return null;\n }\n }\n\n if (eventType == 'windowScroll') {\n windowTop = $window.scrollTop();\n windowLeft = $window.scrollLeft();\n } else if (eventType == 'containerScroll') {\n if ($responsiveContainer.length) {\n if (!responsive) {\n return; //we dont care about the event if we arent responsive right now\n }\n\n scrollContainerLeft = $responsiveContainer.scrollLeft();\n } else {\n scrollingContainerTop = $scrollContainer.scrollTop();\n scrollContainerLeft = $scrollContainer.scrollLeft();\n }\n } else if (eventType != 'init') {\n windowTop = $window.scrollTop();\n windowLeft = $window.scrollLeft();\n scrollingContainerTop = $scrollContainer.scrollTop();\n scrollContainerLeft = getScrollContainerLeft();\n }\n\n if (isWebkit && (windowTop < 0 || windowLeft < 0)) {\n //chrome overscroll effect at the top of the page - breaks fixed positioned floated headers\n return;\n }\n\n if (absoluteToFixedOnScroll) {\n if (eventType == 'windowScrollDone') {\n changePositioning(true); //change to absolute\n } else {\n changePositioning(false); //change to fixed\n }\n } else if (eventType == 'windowScrollDone') {\n return null; //event is fired when they stop scrolling. ignore it if not 'absoluteToFixedOnScroll'\n }\n\n tableOffset = $table.offset();\n\n if (haveCaption && captionAlignTop) {\n tableOffset.top += captionHeight;\n }\n\n var top, left;\n var tableHeight = $table.outerHeight();\n\n if (locked && useAbsolutePositioning) {\n //inner scrolling, absolute positioning\n if (tableContainerGap >= scrollingContainerTop) {\n var gap = tableContainerGap - scrollingContainerTop + tableTopGap;\n top = gap > 0 ? gap : 0;\n triggerFloatEvent(false);\n } else {\n top = wrappedContainer ? tableTopGap : scrollingContainerTop; //headers stop at the top of the viewport\n\n triggerFloatEvent(true);\n }\n\n left = tableLeftGap;\n } else if (!locked && useAbsolutePositioning) {\n //window scrolling, absolute positioning\n if (windowTop > floatEnd + tableHeight + captionScrollOffset) {\n top = tableHeight - floatContainerHeight + captionScrollOffset; //scrolled past table\n } else if (tableOffset.top >= windowTop + scrollingTop) {\n top = 0; //scrolling to table\n\n unfloat();\n triggerFloatEvent(false);\n } else {\n top = scrollingTop + windowTop - tableOffset.top + tableContainerGap + (captionAlignTop ? captionHeight : 0);\n refloat(); //scrolling within table. header floated\n\n triggerFloatEvent(true);\n }\n\n left = scrollContainerLeft;\n } else if (locked && !useAbsolutePositioning) {\n //inner scrolling, fixed positioning\n if (tableContainerGap > scrollingContainerTop || scrollingContainerTop - tableContainerGap > tableHeight) {\n top = tableOffset.top - windowTop;\n unfloat();\n triggerFloatEvent(false);\n } else {\n top = tableOffset.top + scrollingContainerTop - windowTop - tableContainerGap;\n refloat();\n triggerFloatEvent(true); //headers stop at the top of the viewport\n }\n\n left = tableOffset.left + scrollContainerLeft - windowLeft;\n } else if (!locked && !useAbsolutePositioning) {\n //window scrolling, fixed positioning\n if (windowTop > floatEnd + tableHeight + captionScrollOffset) {\n top = tableHeight + scrollingTop - windowTop + floatEnd + captionScrollOffset; //scrolled past the bottom of the table\n } else if (tableOffset.top > windowTop + scrollingTop) {\n top = tableOffset.top - windowTop;\n refloat();\n triggerFloatEvent(false); //this is a weird case, the header never gets unfloated and i have no no way to know\n //scrolled past the top of the table\n } else {\n //scrolling within the table\n top = scrollingTop;\n triggerFloatEvent(true);\n }\n\n left = tableOffset.left + scrollContainerLeft - windowLeft;\n }\n\n return {\n top: Math.round(top),\n left: Math.round(left)\n };\n };\n }\n /**\r\n * returns a function that caches old floating container position and only updates css when the position changes\r\n * @return {Function}\r\n */\n\n\n function repositionFloatContainerFn() {\n var oldTop = null;\n var oldLeft = null;\n var oldScrollLeft = null;\n return function (pos, setWidth, setHeight) {\n if (pos != null && (oldTop != pos.top || oldLeft != pos.left)) {\n if (ieVersion === 8) {\n $floatContainer.css({\n top: pos.top,\n left: pos.left\n });\n } else {\n var transform = 'translateX(' + pos.left + 'px) translateY(' + pos.top + 'px)';\n $floatContainer.css({\n '-webkit-transform': transform,\n '-moz-transform': transform,\n '-ms-transform': transform,\n '-o-transform': transform,\n 'transform': transform,\n 'top': 0,\n 'left': 0\n });\n }\n\n oldTop = pos.top;\n oldLeft = pos.left;\n }\n\n if (setWidth) {\n setFloatWidth();\n }\n\n if (setHeight) {\n _setHeaderHeight();\n }\n\n var scrollLeft = (responsive ? $responsiveContainer : $scrollContainer).scrollLeft();\n\n if (!useAbsolutePositioning || oldScrollLeft != scrollLeft) {\n $floatContainer.scrollLeft(scrollLeft);\n oldScrollLeft = scrollLeft;\n }\n };\n }\n /**\r\n * checks if THIS table has scrollbars, and finds their widths\r\n */\n\n\n function calculateScrollBarSize() {\n //this should happen after the floating table has been positioned\n if ($scrollContainer.length) {\n if (opts.support && opts.support.perfectScrollbar && $scrollContainer.data().perfectScrollbar) {\n scrollbarOffset = {\n horizontal: 0,\n vertical: 0\n };\n } else {\n if ($scrollContainer.css('overflow-x') == 'scroll') {\n scrollbarOffset.horizontal = scWidth;\n } else {\n var sw = $scrollContainer.width(),\n tw = tableWidth($table, $fthCells);\n var offsetv = sh < th ? scWidth : 0;\n scrollbarOffset.horizontal = sw - offsetv < tw ? scWidth : 0;\n }\n\n if ($scrollContainer.css('overflow-y') == 'scroll') {\n scrollbarOffset.vertical = scWidth;\n } else {\n var sh = $scrollContainer.height(),\n th = $table.height();\n var offseth = sw < tw ? scWidth : 0;\n scrollbarOffset.vertical = sh - offseth < th ? scWidth : 0;\n }\n }\n }\n } //finish up. create all calculation functions and bind them to events\n\n\n calculateScrollBarSize();\n var flow;\n\n var ensureReflow = function ensureReflow() {\n flow = reflow();\n flow();\n };\n\n ensureReflow();\n var calculateFloatContainerPos = calculateFloatContainerPosFn();\n var repositionFloatContainer = repositionFloatContainerFn();\n repositionFloatContainer(calculateFloatContainerPos('init'), true); //this must come after reflow because reflow changes scrollLeft back to 0 when it rips out the thead\n\n var windowScrollDoneEvent = util.debounce(function () {\n repositionFloatContainer(calculateFloatContainerPos('windowScrollDone'), false);\n }, 1);\n\n var windowScrollEvent = function windowScrollEvent() {\n repositionFloatContainer(calculateFloatContainerPos('windowScroll'), false);\n\n if (absoluteToFixedOnScroll) {\n windowScrollDoneEvent();\n }\n };\n\n var containerScrollEvent = function containerScrollEvent() {\n repositionFloatContainer(calculateFloatContainerPos('containerScroll'), false);\n };\n\n var windowResizeEvent = function windowResizeEvent() {\n if ($table.is(\":hidden\")) {\n return;\n }\n\n updateScrollingOffsets();\n calculateScrollBarSize();\n ensureReflow();\n calculateFloatContainerPos = calculateFloatContainerPosFn();\n repositionFloatContainer = repositionFloatContainerFn();\n repositionFloatContainer(calculateFloatContainerPos('resize'), true, true);\n };\n\n var reflowEvent = util.debounce(function () {\n if ($table.is(\":hidden\")) {\n return;\n }\n\n calculateScrollBarSize();\n updateScrollingOffsets();\n ensureReflow();\n calculateFloatContainerPos = calculateFloatContainerPosFn();\n repositionFloatContainer(calculateFloatContainerPos('reflow'), true);\n }, 1); /////// printing stuff\n\n var beforePrint = function beforePrint() {\n unfloat();\n };\n\n var afterPrint = function afterPrint() {\n refloat();\n };\n\n var printEvent = function printEvent(mql) {\n //make printing the table work properly on IE10+\n if (mql.matches) {\n beforePrint();\n } else {\n afterPrint();\n }\n };\n\n var matchMediaPrint;\n\n if (window.matchMedia && window.matchMedia('print').addListener) {\n matchMediaPrint = window.matchMedia(\"print\");\n matchMediaPrint.addListener(printEvent);\n } else {\n $window.on('beforeprint', beforePrint);\n $window.on('afterprint', afterPrint);\n } ////// end printing stuff\n\n\n if (locked) {\n //internal scrolling\n if (useAbsolutePositioning) {\n $scrollContainer.on(eventName('scroll'), containerScrollEvent);\n } else {\n $scrollContainer.on(eventName('scroll'), containerScrollEvent);\n $window.on(eventName('scroll'), windowScrollEvent);\n }\n } else {\n //window scrolling\n $responsiveContainer.on(eventName('scroll'), containerScrollEvent);\n $window.on(eventName('scroll'), windowScrollEvent);\n }\n\n $window.on(eventName('load'), reflowEvent); //for tables with images\n\n windowResize(eventName('resize'), windowResizeEvent);\n $table.on('reflow', reflowEvent);\n\n if (opts.support && opts.support.datatables && isDatatable($table)) {\n $table.on('filter', reflowEvent).on('sort', reflowEvent).on('page', reflowEvent);\n }\n\n if (opts.support && opts.support.bootstrap) {\n $window.on(eventName('shown.bs.tab'), reflowEvent); // people cant seem to figure out how to use this plugin with bs3 tabs... so this :P\n }\n\n if (opts.support && opts.support.jqueryUI) {\n $window.on(eventName('tabsactivate'), reflowEvent); // same thing for jqueryui\n }\n\n if (canObserveMutations) {\n var mutationElement = null;\n\n if (util.isFunction(opts.autoReflow)) {\n mutationElement = opts.autoReflow($table, $scrollContainer);\n }\n\n if (!mutationElement) {\n mutationElement = $scrollContainer.length ? $scrollContainer[0] : $table[0];\n }\n\n mObs = new MutationObserver(function (e) {\n var wasTableRelated = function wasTableRelated(nodes) {\n return nodes && nodes[0] && (nodes[0].nodeName == \"THEAD\" || nodes[0].nodeName == \"TD\" || nodes[0].nodeName == \"TH\");\n };\n\n for (var i = 0; i < e.length; i++) {\n if (!(wasTableRelated(e[i].addedNodes) || wasTableRelated(e[i].removedNodes))) {\n reflowEvent();\n break;\n }\n }\n });\n mObs.observe(mutationElement, {\n childList: true,\n subtree: true\n });\n } //attach some useful functions to the table.\n\n\n $table.data('floatThead-attached', {\n destroy: function destroy() {\n var ns = '.fth-' + floatTheadId;\n unfloat();\n $table.css(layoutAuto);\n $tableColGroup.remove();\n createElements && $fthGrp.remove();\n\n if ($newHeader.parent().length) {\n //only if it's in the DOM\n $newHeader.replaceWith($header);\n }\n\n triggerFloatEvent(false);\n\n if (canObserveMutations) {\n mObs.disconnect();\n mObs = null;\n }\n\n $table.off('reflow reflowed');\n $scrollContainer.off(ns);\n $responsiveContainer.off(ns);\n\n if (wrappedContainer) {\n if ($scrollContainer.length) {\n $scrollContainer.unwrap();\n } else {\n $table.unwrap();\n }\n }\n\n if (locked) {\n $scrollContainer.data('floatThead-containerWrap', false);\n } else {\n $table.data('floatThead-containerWrap', false);\n }\n\n $table.css('minWidth', originalTableMinWidth);\n $floatContainer.remove();\n $table.data('floatThead-attached', false);\n $window.off(ns);\n\n if (matchMediaPrint) {\n matchMediaPrint.removeListener(printEvent);\n }\n\n beforePrint = afterPrint = function afterPrint() {};\n\n return function reinit() {\n return $table.floatThead(opts);\n };\n },\n reflow: function reflow() {\n reflowEvent();\n },\n setHeaderHeight: function setHeaderHeight() {\n _setHeaderHeight();\n },\n getFloatContainer: function getFloatContainer() {\n return $floatContainer;\n },\n getRowGroups: function getRowGroups() {\n if (headerFloated) {\n return $floatContainer.find('>table>thead').add($table.children(\"tbody,tfoot\"));\n } else {\n return $table.children(\"thead,tbody,tfoot\");\n }\n }\n });\n });\n return this;\n };\n})(function () {\n var $ = window.jQuery;\n\n if (typeof module !== 'undefined' && module.exports && !$) {\n // only use cjs if they dont have a jquery for me to use, and we have commonjs\n $ = require('jquery');\n }\n\n return $;\n}());\n\n(function () {\n var ratingTable = $('.rating__table');\n $('.rating__compare').click(function () {\n var compare = [],\n count = $(\"#raiting-body\").find('input:checked').length;\n $.each($(\"#raiting-body\").find('input:checked'), function () {\n compare.push('product=' + $(this).val());\n });\n if (count === 1) alert('Нельзя сравнить один товар.');else if (count > 10) alert('Нельзя сравнить более десяти товаров.');else if (count > 0) {\n var p = compare.join('&');\n console.log(p);\n location.href = '/catalog/compare?' + p;\n }\n return false;\n });\n var formatHelper = {\n format: formatFunction\n },\n urlHelper = {\n urlformat: formatUrlFunction\n };\n $.views.helpers(formatHelper);\n $.views.helpers(urlHelper);\n $.views.tags(\"rating\", renderRatingScale);\n $.views.tags(\"star\", renderRatingStar);\n ratingTable.find('.js-rating-set').click({\n sortBy: 4\n /*SortType.Estimate*/\n\n }, sortRating);\n var ratingColumn = ratingTable.find('th.rating__center');\n ratingColumn.click({\n sortBy: 0\n /*SortType.Rating*/\n\n }, sortRating);\n ratingColumn.data('sortDesc', true);\n ratingTable.find('th.rating__right').click({\n sortBy: 1\n /*SortType.Price*/\n\n }, sortRating);\n ratingTable.find('.check__input__instock').on('change', filterRating);\n $(\"#filters-form\").submit(function (e) {\n var url = \"/category/ratingpage\";\n var userValKey = 'userValue';\n\n function validatePrice(value) {\n return !(value === NaN || value == undefined || value < 0 || value == Infinity || value == -Infinity);\n }\n\n ;\n $('#raiting-body').fadeTo(\"fast\", 0.5);\n $('.tooltip').remove();\n $('.tooltip2').remove();\n characteristics.init(); // Диапазон указанный пользователем\n\n var userMinPrice = parseInt($('#noUiSlide-start').val()),\n userMaxPrice = parseInt($('#noUiSlide-end').val()); // Старые значения\n\n var oldMinPrice = $('#noUiSlide-start').data(userValKey),\n oldMaxPrice = $('#noUiSlide-end').data(userValKey);\n if (!validatePrice(userMinPrice)) $('#noUiSlide-start').val(oldMinPrice);\n if (!validatePrice(userMaxPrice)) $('#noUiSlide-end').val(oldMaxPrice);\n $.ajax({\n type: \"POST\",\n url: url,\n data: $(\"#filters-form\").serialize(),\n success: function success(data) {\n $(\"#raiting-body\").html($.templates(\"#raitingTmpl\").render(data));\n $('#raiting-body').fadeTo(\"fast\", 1);\n tooltip.init();\n tooltip2.init(); // Compare\n\n characteristics.init();\n var slider = $('.rating__slider .slider'),\n fieldMin = $('.rating__range-field input:first'),\n fieldMax = $('.rating__range-field input:last'),\n delay = 300,\n config,\n previewMinValue,\n previewMaxValue; // Актуальный макс. дипазон цен\n\n var priceMax = data.PriceMax,\n priceMin = data.PriceMin;\n\n if (validatePrice(oldMinPrice)) {\n needfilterByPrice(true);\n } else {\n oldMinPrice = priceMin;\n }\n\n if (validatePrice(oldMaxPrice)) {\n needfilterByPrice(true);\n } else {\n oldMaxPrice = priceMax;\n }\n\n var startMin = oldMinPrice;\n var startMax = oldMaxPrice; // Если выбранный диапазон не пересекается с актуальным диапазоном, то сдвинем актуальные границы, чтобы пользователь\n // видел, параметры пустого списка\n\n if (priceMax < oldMaxPrice) {\n priceMax = oldMaxPrice;\n }\n\n if (priceMin > oldMinPrice) {\n priceMin = oldMinPrice;\n } // Пересоздаем слайдер, т.к. не возможно переопределить макс. диапазон цен(метод destroid не работет корректно)\n\n\n config = {\n range: [priceMin, priceMax],\n start: [startMin, startMax],\n handles: 2,\n step: data.PriceStep,\n slide: function slide() {\n var values = $(this).val();\n setInputValues(values[0], values[1], true);\n }\n }; // Обновление инпутов\n\n function setInputValues(minVal, maxVal, needSetUserVal) {\n var clearInputRegEx = /\\.00$/;\n var max = maxVal.toString().replace(clearInputRegEx, '');\n var min = minVal.toString().replace(clearInputRegEx, '');\n $('#noUiSlide-start').val(min);\n $('#noUiSlide-end').val(max);\n\n if (needSetUserVal) {\n setUserValues(min, max);\n }\n }\n\n ; // Сохранение диапазона указанного пользователем\n\n function setUserValues(min, max) {\n $('#noUiSlide-start').data(userValKey, min);\n $('#noUiSlide-end').data(userValKey, max);\n needfilterByPrice(min != null && max != null);\n }\n\n ; // 1. Очищаем слайдер\n\n slider.empty();\n fieldMin.off();\n fieldMax.off();\n setTimeout(function () {\n // 2. Пересоздаем слайдер\n slider.noUiSlider(config);\n $('.rating__slider-start').text(priceMin + ' р.');\n $('.rating__slider-finish').text(priceMax + ' р.'); // Обновляем инпуты\n\n setInputValues(startMin, startMax, false);\n previewMinValue = fieldMin.val();\n previewMaxValue = fieldMax.val(); // Обновляем hidden input-ы слайдера из-за бага, например,\n // при установки значения(slider.val(...)) = 1000 устанавливается 9900.\n\n var sliderFields = $('.rating__slider .slider input');\n sliderFields.first().val(startMin);\n sliderFields.last().val(startMax);\n }, delay); // Обновление ползунков слайдера\n\n function updateSlider(chagedMax) {\n var fieldMin = $('#noUiSlide-start'),\n fieldMax = $('#noUiSlide-end'),\n existUserValue;\n var min = fieldMin.val(),\n max = fieldMax.val();\n var prMin = min || data.PriceMin;\n var prMax = max || data.PriceMax;\n\n if (parseFloat(prMax) > parseFloat(prMin)) {\n slider.val([prMin, prMax]);\n\n if (chagedMax) {\n if (max != '') {\n // Сохраним значения для пользователя\n fieldMax.data(userValKey, prMax);\n } else {\n // Если data.PriceMax == 10 - означает, что у товара нет цен.\n var hisMaxPrice = data.PriceMax != 10; // Если пользователь ранне не вводил макс. цену, то при удалении инпута не запоминаем значеие инпута\n\n existUserValue = fieldMax.data(userValKey);\n\n if (hisMaxPrice && (existUserValue || existUserValue == 0)) {\n // Сохраним значения для пользователя\n fieldMax.data(userValKey, prMax);\n }\n }\n } else {\n if (min != '') {\n // Сохраним значения для пользователя\n fieldMin.data(userValKey, prMin);\n } else {\n // Если пользователь ранне не вводил мин. цену, то при удалении инпута не запоминаем значеие инпута\n existUserValue = fieldMin.data(userValKey);\n\n if (existUserValue || existUserValue == 0) {\n // Сохраним значения для пользователя\n fieldMin.data(userValKey, prMin);\n }\n }\n }\n }\n }\n\n ; // Сохраняем признак, необходимости фильтровать по диапазону цен\n\n function needfilterByPrice(chg) {\n $('input[name=isFilterByPrice]').val(chg);\n }\n\n ;\n $('.rating__range-field input:first').on('keyup paste', function () {\n var newValue = $(this).val();\n\n if (previewMinValue != newValue) {\n updateSlider(false);\n previewMinValue = newValue;\n }\n });\n $('.rating__range-field input:last').on('keyup paste', function () {\n var newValue = $(this).val();\n\n if (previewMaxValue != newValue) {\n updateSlider(true);\n previewMaxValue = newValue;\n }\n });\n }\n });\n e.preventDefault();\n });\n $('table.rating__table').floatThead({\n position: 'fixed',\n autoReflow: true,\n zIndex: 10\n });\n\n function formatFunction(value, dec, separator) {\n var n = value,\n decPlaces = dec,\n decSeparator = separator,\n thouSeparator = \" \",\n sign = n < 0 ? \"-\" : \"\",\n i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + \"\",\n j = (j = i.length) > 3 ? j % 3 : 0;\n g = Math.abs(n - i).toFixed(decPlaces).slice(2);\n return sign + (j ? i.substr(0, j) + thouSeparator : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + thouSeparator) + (g !== \"00\" ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : \"\");\n }\n\n function formatUrlFunction(value) {\n if (value.indexOf(\"/kupit\") >= 0) {\n return value;\n }\n\n value = value.replace('/obzor', '/kupit');\n return value;\n }\n\n function renderRatingScale(value) {\n var rating = '',\n style = '',\n y = formatFunction(value * 100, 0, \"\");\n\n if (y < 60) {\n style = 'rating__percent_black';\n }\n\n rating += '
';\n rating += '
' + y + '
';\n rating += '
';\n return rating;\n }\n\n function renderRatingStar(value, name) {\n var r = Math.round(parseFloat(value.replace(\",\", \".\"))),\n starColorClass = r <= 3 ? \"black\" : \"red\",\n shapeClass = '';\n\n if (r === 1 || r === 5) {\n shapeClass = \"full\";\n } else if (r === 2 || r === 4) {\n shapeClass = \"half\";\n } else {\n shapeClass = \"empty\";\n }\n\n var rating = '
';\n return rating;\n }\n\n function filterRating(e) {\n var parentForm = $('#filters-form');\n var instock = $('.check__input__instock').prop('checked');\n parentForm.find('.check__input__instock').val(instock);\n $('#filters-form').submit();\n }\n\n function sortRating(e) {\n var sortDesc = $(this).data('sortDesc');\n\n if (sortDesc == undefined) {\n sortDesc = true;\n } else {\n sortDesc = sortDesc != true;\n }\n\n $(this).data('sortDesc', sortDesc);\n var parentForm = $('#filters-form');\n parentForm.find('input[name=SortDesc]').val(sortDesc);\n parentForm.find('input[name=SortBy]').val(e.data.sortBy);\n var sortVal = $(e.target).find('.rating__option').text() || $(e.target).text();\n if (sortVal === '?') sortVal = $(e.target.parentElement).find('.rating__option').text();\n parentForm.find('input[name=SortCharacteristic]').val(sortVal);\n $('#filters-form').submit();\n return false;\n }\n})();","\"use strict\";\n\nvar menuArrows = ['', ''];\n\nfunction createCarousel(wrap) {\n wrap.owlCarousel({\n items: 1,\n nav: true,\n navText: menuArrows,\n navElement: 'button',\n dots: false\n });\n}\n\nfunction render(items, wrap, drop, dropGroup) {\n var wrapWidth = wrap.width();\n var sum = 0,\n i = 0;\n wrap.find('.owl-nav').remove();\n\n for (var index = 0; index < items.length; index++) {\n var _this = $(items[index]);\n\n _this.attr('data-count', index);\n\n _this.attr('data-group', i);\n\n sum += _this.width();\n\n if (sum >= wrapWidth) {\n _this.attr('data-group', i + 1);\n\n sum = 0;\n sum += _this.width();\n $('[data-group=\"' + i + '\"]').wrapAll('
');\n i++;\n }\n }\n\n $('[data-group=\"' + i + '\"]').wrapAll('
');\n createCarousel(wrap);\n $.each(items, function (i, el) {\n var item = $(el);\n item.on('mouseenter', function () {\n var index = item.data('count');\n items.removeClass('active');\n item.addClass('active');\n drop.show();\n dropGroup.hide();\n dropGroup.eq(index).show();\n });\n item.on('touchstart', function () {\n var index = item.data('count');\n\n if (item.hasClass('active')) {\n items.removeClass('active');\n drop.hide();\n } else {\n items.removeClass('active');\n item.addClass('active');\n drop.show();\n dropGroup.hide();\n dropGroup.eq(index).show();\n }\n });\n });\n $('.owl-nav button').click(function () {\n items.removeClass('active');\n drop.hide();\n });\n}\n\n$(function () {\n var menu = $('.js-menu');\n var wrap = menu.find('.js-menu-wrap');\n var drop = menu.find('.js-menu-drop'),\n dropGroup = menu.find('.js-menu-drop-group');\n var items = $('.js-menu-item');\n $(window).on('resize', function () {\n wrap.trigger('destroy.owl.carousel');\n wrap.removeClass('owl-loaded');\n wrap.empty();\n\n for (var i = 0; i < items.length; i++) {\n var item = $(items[i]);\n item.removeAttr('data-group');\n wrap.append(item);\n }\n\n render(items, wrap, drop, dropGroup);\n });\n render(items, wrap, drop, dropGroup);\n menu.on('mouseleave', function () {\n items.removeClass('active');\n drop.hide();\n });\n});","\"use strict\";\n\nnadaviOffers = {\n id: 0,\n productName: '',\n cachedRoot: {},\n block: $('#shops-block'),\n block2: $('#shops-block2'),\n message: $(\".offers-message\"),\n minimalBuyLink: $('#load-more-buy-link'),\n minimalBuyLink2: $('#load-more-buy-link2'),\n loader: $('#shop-loader'),\n more: $('#more-shops'),\n moreButton: $('#more-shops').find(\"a\"),\n bunnerBuyBottom: $('#bannerBuyBottom'),\n buyButton: $('#buy_button'),\n clid: '',\n tabsCounter: $('.buy_tabs__counter'),\n overlay: $('.js-m-overlay'),\n select: $('.js-m-select'),\n count: 0,\n countCache: 0,\n totalCache: 0,\n page: 1,\n showNext: 0,\n isAdSown: false,\n isRobot: false,\n isTouch: false,\n isFirstLoad: true,\n filters: false,\n append: false,\n query: url('?'),\n sort: \"\",\n order: \"\",\n priceSorter: $('#priceSorter'),\n priceMobileSorter: $('#priceMobileSorter'),\n sortMobile: $('.m-sort__select'),\n sortMobileTitle: $('.m-sort__select').find('.js-m-select-title'),\n filtersData: {},\n city: '',\n provider: '',\n tab: 0,\n styleClass: '',\n filterBlock: $('.detail-duplex-filter'),\n filterMultiBlock: $('#multiTechDataFilter'),\n filterMultiButton: $('#filterSelectButton'),\n filterPlainBlock: $('#plainTechDataFilter'),\n filterData: {},\n filterChilds: [],\n filterChecked: [],\n filtersObj: [],\n needFilter: false,\n needFilterOnLoad: false,\n init: function init(id, productName, count, filters, needFilter, minimalLink, isTouch, isRobot, city, tab, styleClass) {\n var me = this;\n me.id = id;\n me.productName = productName;\n me.count = count;\n me.countCache = count;\n me.isRobot = isRobot;\n me.isTouch = isTouch;\n me.filters = filters;\n me.needFilter = needFilter;\n me.needFilterOnLoad = needFilter;\n me.clid = me.getClid();\n me.city = city;\n me.tab = tab;\n me.styleClass = styleClass;\n\n if (minimalLink !== '') {\n var cenyLink = minimalLink + '/kupit' + (city ? '?city=' + city : '');\n this.minimalBuyLink.attr(\"href\", cenyLink);\n\n if (this.minimalBuyLink2.length > 0) {\n this.minimalBuyLink2.attr(\"href\", cenyLink);\n }\n }\n\n if (!pt.cookie.get('regionName') || pt.cookie.get('regionName') == null || pt.cookie.get('regionName') == '') {\n citySelect.setText(city);\n }\n\n if (this.query !== undefined && filters === true) {\n me.initFiltersQueryData();\n }\n\n me.buttonsInit();\n me.initContextMenu();\n var activeConfig = me.filterPlainBlock.find('input[data-filter-value=\"' + me.id + '\"]');\n\n if (activeConfig != null && activeConfig.length > 0) {\n me.needFilter = !me.isFilterBlockFilled();\n var value = $(activeConfig).attr('data-filter-value'),\n title = $(activeConfig).next('label').text(),\n value_label = 'value-' + $(activeConfig).attr('id');\n $('.detail-duplex-filter-label .valuegb').remove();\n $(activeConfig).closest('.detail-duplex-filter-dropdown').prev('.detail-duplex-filter-label').append('' + title + '');\n $(activeConfig).prop('checked', true);\n $(activeConfig).addClass('active');\n me.filterChilds = [value] || [];\n $(activeConfig).next('label').css('font-weight', 'bold');\n }\n\n me.filterPlainBlock.find('input[type=radio]').each(function (index) {\n me.needFilter = !me.isFilterBlockFilled();\n var id = parseInt($(this).attr('data-filter-value')),\n value = $(this).val(),\n name = $(this).attr('data-filter-name');\n var item = {\n id: id,\n value: value,\n name: name\n };\n me.filtersObj.push(item);\n });\n var activeMultiConfig = me.filterMultiBlock.find('input[value*=\"' + me.id + '\"]');\n\n if (activeMultiConfig != null && activeMultiConfig.length > 0) {\n var filtersRadio = me.filterMultiBlock.find('input[type=radio]'),\n fcount = parseInt(me.filterMultiBlock.attr('data-count')),\n tempArray = [],\n nameArray = [];\n $(filtersRadio).each(function (indx, element) {\n $(element).parent().prev('.detail-filter-label2').removeClass('active');\n $(element).parent().prev('.detail-filter-label2').find('span').remove();\n });\n\n for (var i = 0; i < activeMultiConfig.length; i++) {\n var arrayRadio = $(activeMultiConfig[i]).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n filterText = $(activeMultiConfig[i]).attr(\"data-value\");\n nameArray.push(filterText);\n\n for (var j = 0; j < arrayRadio.length; j++) {\n tempArray.push(arrayRadio[j]);\n }\n\n if (i !== 0) {\n tempArray = tempArray.reduce(function (acc, el, i, arr) {\n if (arr.indexOf(el) !== i && acc.indexOf(el) < 0) acc.push(el);\n return acc;\n }, []);\n }\n\n $(activeMultiConfig[i]).prop('checked', true);\n $(activeMultiConfig[i]).addClass('checked');\n $(activeMultiConfig[i]).parent().prev('.detail-filter-label2').addClass('active');\n $(activeMultiConfig[i]).parent().prev('.detail-filter-label2').append('' + filterText + '');\n }\n\n me.filterChilds = tempArray;\n\n for (var i = 0; i < filtersRadio.length; i++) {\n var valueRadio = $(filtersRadio[i]).val(),\n filtersName = $(filtersRadio[i]).attr(\"name\"),\n arrayRadio = $(filtersRadio[i]).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n isChange = true;\n\n if (me.filterChilds.length === 0 && name === filtersName) {\n isChange = false;\n }\n\n if (isChange) {\n if (valueRadio !== \"0\") {\n $(filtersRadio[i]).attr('disabled', true);\n }\n\n for (var j = 0; j < me.filterChilds.length; j++) {\n if (arrayRadio.indexOf(me.filterChilds[j]) !== -1) {\n $(filtersRadio[i]).attr('disabled', false);\n }\n }\n }\n }\n\n if (nameArray.length > 0) {\n me.filterMultiButton.text(nameArray.join(', '));\n } else {\n me.filterMultiButton.text('Выберите параметры');\n }\n }\n\n me.filterMultiBlock.find('input[type=radio]').each(function (index) {\n var values = $(this).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n value = $(this).attr('data-value'),\n name = $(this).parent().prev('.detail-filter-label2').attr('data-name');\n\n for (var i = 0; i < values.length; i++) {\n var id = values[i];\n var item = {\n id: id,\n value: value,\n name: name\n };\n me.filtersObj.push(item);\n }\n });\n me.filterPlainBlock.find('input[type=radio]').on(me.isTouch ? 'change' : 'click', function () {\n me.needFilter = !me.isFilterBlockFilled();\n var value = $(this).attr('data-filter-value'),\n title = $(this).next('label').text(),\n value_label = 'value-' + $(this).attr('id'),\n link = $(this).attr('data-filter-link'),\n parentlink = $(this).attr('data-filter-parentlink'),\n redirect = '';\n $('.detail-duplex-filter-label .valuegb').remove();\n\n if ($(this).hasClass(\"active\")) {\n $(this).prop('checked', null);\n $(this).removeClass('active');\n me.filterChilds = [];\n $(this).next('label').css('font-weight', 'normal');\n redirect = parentlink;\n } else {\n $(this).closest('.detail-duplex-filter-dropdown').prev('.detail-duplex-filter-label').append('' + title + '');\n me.filterPlainBlock.find('input[type=radio].active').removeClass('active').next('label').css('font-weight', 'normal');\n $(this).prop('checked', true);\n $(this).addClass('active');\n me.filterChilds = [value] || [];\n $(this).next('label').css('font-weight', 'bold');\n redirect = link;\n } // Багфикс пагинации. Todo: me.reset();\n\n\n me.showNext = 0;\n me.page = 1;\n me.block.empty();\n\n if (me.filters) {\n me.generateFiltersData();\n }\n\n var query = url('query');\n var path = url('path');\n\n if (path !== parentlink) {\n me.message.html('').hide();\n me.more.hide();\n me.loader.show();\n window.location.href = redirect + '?' + query;\n } else {\n me.loadShops();\n }\n\n $(this).parent().parent().removeClass('expand');\n });\n me.filterMultiBlock.find('input[type=radio]').change(function () {\n var value = $(this).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n name = $(this).attr(\"name\"),\n filtersRadio = me.filterMultiBlock.find('input[type=radio]'),\n checkedRadio = me.filterMultiBlock.find('input.filters-data[type=radio]:checked'),\n fcount = parseInt(me.filterMultiBlock.attr('data-count')),\n parentlink = $(this).attr('data-parentlink'),\n tempArray = [],\n nameArray = [];\n $(filtersRadio).each(function (indx, element) {\n $(element).parent().prev('.detail-filter-label2').removeClass('active');\n $(element).parent().prev('.detail-filter-label2').find('span').remove();\n });\n me.filterChecked = [];\n\n for (var i = 0; i < checkedRadio.length; i++) {\n var arrayRadio = $(checkedRadio[i]).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n filterText = $(checkedRadio[i]).attr(\"data-value\");\n nameArray.push(filterText);\n\n for (var j = 0; j < arrayRadio.length; j++) {\n tempArray.push(arrayRadio[j]);\n }\n\n if (i !== 0) {\n tempArray = tempArray.reduce(function (acc, el, i, arr) {\n if (arr.indexOf(el) !== i && acc.indexOf(el) < 0) acc.push(el);\n return acc;\n }, []);\n }\n\n $(checkedRadio[i]).addClass('checked');\n $(checkedRadio[i]).parent().prev('.detail-filter-label2').addClass('active');\n $(checkedRadio[i]).parent().prev('.detail-filter-label2').append('' + filterText + '');\n me.filterChecked.push($(checkedRadio[i]).attr(\"id\"));\n }\n\n me.filterChilds = tempArray;\n\n for (var i = 0; i < filtersRadio.length; i++) {\n var valueRadio = $(filtersRadio[i]).val(),\n filtersName = $(filtersRadio[i]).attr(\"name\"),\n arrayRadio = $(filtersRadio[i]).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n isChange = true;\n\n if (me.filterChilds.length === 0 && name === filtersName) {\n isChange = false;\n }\n\n if (isChange) {\n if (valueRadio !== \"0\") {\n $(filtersRadio[i]).attr('disabled', true);\n }\n\n if (checkedRadio.length === 1 && checkedRadio.attr('name') === filtersName || checkedRadio.length === 0) {\n $(filtersRadio[i]).attr('disabled', false);\n }\n\n for (var j = 0; j < me.filterChilds.length; j++) {\n if (arrayRadio.indexOf(me.filterChilds[j]) !== -1) {\n $(filtersRadio[i]).attr('disabled', false);\n }\n }\n }\n }\n\n if (nameArray.length > 0) {\n me.filterMultiButton.text(nameArray.join(', '));\n } else {\n me.filterMultiButton.text('Выберите параметры');\n }\n\n if (me.filters) {\n me.generateFiltersData();\n }\n\n me.showNext = 0;\n me.page = 1;\n me.block.empty();\n var query = url('query');\n var path = url('path');\n\n if ((me.filterChilds.length > 1 || me.filterChilds.length === 0) && path !== parentlink) {\n me.message.html('').hide();\n me.more.hide();\n me.loader.show();\n window.location.href = parentlink + '?' + query;\n } else {\n me.loadShops();\n }\n });\n },\n reset: function reset() {\n var me = this;\n me.city = null;\n me.showNext = 0;\n me.page = 1;\n\n if (me.city != null && me.city != '') {\n me.block.empty();\n\n if (me.filterBlock) {\n me.filterBlock.empty();\n }\n }\n },\n loadShops: function loadShops() {\n var me = this;\n me.message.html('').hide();\n me.more.hide();\n me.loader.show();\n me.buyButtonClear('');\n var region = citySelect.getCity();\n me.city = region.Name;\n me.showNext = 0;\n me.page = 1;\n me.block.empty();\n\n if (!me.needFilterOnLoad) {\n me.needFilter = me.needFilterOnLoad;\n }\n\n $.ajax({\n method: \"POST\",\n url: '/product/getnadavioffers',\n data: {\n id: me.id,\n city: me.city,\n geoBaseId: region.GeoBaseId,\n mobiGuruId: region.MobiGuruId,\n tab: me.tab,\n filterType: me.filterData.type,\n filterValue: me.filterData.value,\n needFilter: me.needFilter,\n childs: me.filterChilds.join(','),\n filters: JSON.stringify(me.filtersObj)\n },\n dataType: 'html',\n success: function success(data) {\n var result = $(data).filter('#offers-response-data'),\n items = $(data).filter(me.styleClass),\n filter = $(data).filter('#offersMetaData'),\n filterLoaded = me.filterBlock && !me.isFilterBlockFilled();\n me.provider = $(result).attr('data-provider');\n me.cachedRoot[\"offersCount\"] = parseInt($(result).attr(\"data-offers-count\"));\n me.cachedRoot[\"modelId\"] = $(result).attr(\"data-model-id\");\n me.cachedRoot[\"firstUrl\"] = $(result).attr(\"data-first-url\");\n me.cachedRoot[\"firstPrice\"] = $(result).attr(\"data-first-price\");\n me.cachedRoot[\"firstShop\"] = $(result).attr(\"data-first-shop\");\n me.totalCache = me.cachedRoot[\"offersCount\"];\n\n if (me.cachedRoot[\"offersCount\"] > 0) {\n if (me.isRobot && me.isFirstLoad) {\n me.buyButtonFill(me.cachedRoot[\"firstUrl\"], me.cachedRoot[\"firstPrice\"], 0, me.cachedRoot[\"modelId\"], me.cachedRoot[\"firstShop\"], me.cachedRoot[\"firstShop\"]);\n me.isFirstLoad = false;\n } else {\n me.block.html(items);\n\n if (me.block2.length > 0) {\n me.block2.html($(items).clone());\n }\n\n if (me.filterBlock && me.isFilterBlockFilled()) {\n if (me.filterBlock.find('.detail-duplex-filter-color input[type=radio].active').length > 0) {\n me.count = me.block.find(me.styleClass).filter(function (idx, el) {\n if (me.provider != 'Nadavi' || !me.filterData.type) return true;\n\n if (me.filterData.type == 'Color') {\n return $(el).attr('data-color') == me.filterData.value;\n }\n }).length;\n me.cachedRoot[\"offersCount\"] = me.count;\n if (me.count > me.countCache) me.count = me.countCache;\n }\n }\n\n if (filterLoaded) {\n me.filterBlock.append(filter);\n\n if (me.filterData.type && me.filterData.value) {\n var activeFilter = me.filterBlock.find('.detail-duplex-filter-color input[value=\"' + me.filterData.value + '\"]');\n\n if ($(activeFilter).length > 0) {\n var title = $(activeFilter).next('label').text(),\n value_label = 'value-' + $(activeFilter).attr('id');\n $(activeFilter).closest('.detail-duplex-filter-dropdown').prev('.detail-duplex-filter-label').append('' + title + '');\n $(activeFilter).prop('checked', true);\n $(activeFilter).addClass('active');\n me.count = me.block.find(me.styleClass).filter(function (idx, el) {\n if (me.provider != 'Nadavi' || !me.filterData.type) return true;\n\n if (me.filterData.type == 'Color') {\n return $(el).attr('data-color') == me.filterData.value;\n }\n }).length;\n me.cachedRoot[\"offersCount\"] = me.count;\n if (me.count > me.countCache) me.count = me.countCache;\n }\n }\n\n me.filterBlock.find('.detail-duplex-filter-color').click(function (event) {\n if ($(event.target).closest('.detail-duplex-filter-dropdown').length > 0) return true;\n $(this).toggleClass('expand').parent().siblings('.expand').removeClass('expand');\n return false;\n });\n me.filterBlock.find('.detail-duplex-filter-color input[type=radio]').on(me.isTouch ? 'change' : 'click', function (e) {\n var title = $(this).next('label').text(),\n value_label = 'value-' + $(this).attr('id');\n $('.detail-duplex-filter-label .valuecolor').remove();\n\n if ($(this).hasClass(\"active\")) {\n me.filterData.type = null;\n me.filterData.value = null;\n $(this).prop('checked', null);\n $(this).removeClass('active');\n me.count = me.countCache;\n me.cachedRoot[\"offersCount\"] = me.totalCache;\n } else {\n me.filterBlock.find('.detail-duplex-filter-color input[type=radio].active').removeClass('active');\n $(this).closest('.detail-duplex-filter-dropdown').prev('.detail-duplex-filter-label').append('' + title + '');\n me.filterData.type = $(this).attr('data-filter-type');\n me.filterData.value = $(this).val();\n $(this).prop('checked', true);\n $(this).addClass('active');\n me.count = me.block.find(me.styleClass).filter(function (idx, el) {\n if (me.provider != 'Nadavi' || !me.filterData.type) return true;\n\n if (me.filterData.type == 'Color') {\n return $(el).attr('data-color') == me.filterData.value;\n }\n }).length;\n me.cachedRoot[\"offersCount\"] = me.count;\n if (me.count > me.countCache) me.count = me.countCache;\n }\n\n if (me.provider == 'Nadavi') {\n me.inputFilters();\n } else {\n me.loadShops();\n }\n\n $(this).parent().parent().removeClass('expand');\n });\n }\n\n me.loadPage();\n }\n\n if (me.cachedRoot[\"offersCount\"] > 4) {\n me.bunnerBuyBottom.show();\n }\n\n if (me.cachedRoot[\"offersCount\"] < 5) {\n me.bunnerBuyBottom.hide();\n }\n } else if (data.Error) {\n me.showMessage(true, false);\n } else {\n me.showMessage(false, false);\n }\n },\n error: function error() {\n me.showMessage(true, false);\n }\n });\n },\n loadPage: function loadPage() {\n var me = this;\n me.message.html('').hide();\n\n if (me.sort === 'PRICE') {\n me.block.find(me.styleClass).tinysort({\n attr: 'data-price',\n order: me.order === 'ASC' ? 'asc' : 'desc'\n });\n\n if (me.block2.length > 0) {\n me.block2.find(me.styleClass).tinysort({\n attr: 'data-price',\n order: me.order === 'ASC' ? 'asc' : 'desc'\n });\n }\n }\n\n me.tabsCounter.text('(' + me.cachedRoot[\"offersCount\"] + ')').filter().show();\n me.showNext = me.showNext + me.count <= me.cachedRoot[\"offersCount\"] ? me.showNext + me.count : me.cachedRoot[\"offersCount\"];\n me.loader.hide();\n me.block.find(me.styleClass).filter(function (idx, el) {\n if (me.provider != 'Nadavi' || !me.filterData.type) return true;\n\n if (me.filterData.type == 'Color') {\n return $(el).attr('data-color') == me.filterData.value;\n }\n }).filter(':lt(' + me.showNext + ')').show();\n\n if (me.block2.length > 0) {\n me.block2.find(me.styleClass + ':lt(' + me.showNext + ')').show();\n }\n\n if (me.page === 1) {\n me.loader.hide();\n me.buyButtonFill(me.cachedRoot[\"firstUrl\"], me.cachedRoot[\"firstPrice\"], 0, me.cachedRoot[\"modelId\"], '', me.cachedRoot[\"firstShop\"]);\n } else {\n me.loader.hide();\n }\n\n if (me.count === 10 && me.cachedRoot[\"offersCount\"] > 10 && me.cachedRoot[\"offersCount\"] !== me.showNext) {\n me.more.show();\n }\n\n if (me.count === 0) {\n me.showMessage(false, true);\n }\n },\n buyButtonFill: function buyButtonFill(url, price, shopId, modelId, shopUrl, shopName, currency, currencyCode) {\n var me = this,\n cur = '';\n\n if (currencyCode === 'UAH') {\n cur = currency;\n }\n\n me.buyButton.attr('data-buy-url', url);\n me.buyButton.attr('rel', 'nofollow');\n me.buyButton.attr('data-shop-id', shopId);\n me.buyButton.attr('data-model-id', modelId);\n me.buyButton.attr('data-shop-url', shopUrl);\n me.buyButton.attr('data-shop-name', shopName);\n me.buyButton.addClass('target-blank');\n me.buyButton.removeClass('cursor-default');\n me.buyButton.html('Купить за ' + me.formatFunction(price) + ' ' + cur);\n },\n buyButtonClear: function buyButtonClear(txt) {\n var me = this;\n me.buyButton.removeClass('target-blank');\n me.buyButton.addClass('cursor-default');\n me.buyButton.removeAttr(\"target\");\n me.buyButton.removeAttr(\"rel\");\n me.buyButton.removeAttr('data-shop-id');\n me.buyButton.removeAttr('data-model-id');\n me.buyButton.removeAttr('data-shop-url');\n me.buyButton.removeAttr('data-shop-name');\n me.buyButton.attr('href', '#');\n me.buyButton.html(txt);\n },\n formatFunction: function formatFunction(value) {\n var n = value,\n decPlaces = 0,\n decSeparator = \"\",\n thouSeparator = \" \",\n sign = n < 0 ? \"-\" : \"\",\n i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + \"\",\n j = (j = i.length) > 3 ? j % 3 : 0;\n g = Math.abs(n - i).toFixed(decPlaces).slice(2);\n return sign + (j ? i.substr(0, j) + thouSeparator : \"\") + i.substr(j).replace(/(\\d{3})(?=\\d)/g, \"$1\" + thouSeparator) + (g !== \"00\" ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : \"\");\n },\n buttonsInit: function buttonsInit() {\n var me = this;\n me.moreButton.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n\n if (me.isRobot && me.isFirstLoad) {\n me.page += 3;\n } else {\n me.page += 1;\n }\n\n me.more.hide();\n me.loader.show();\n me.loadPage();\n return false;\n });\n me.select.each(function () {\n var that = $(this),\n head = that.find('.js-m-select-head'),\n title = that.find('.js-m-select-title'),\n option = that.find('.js-m-select-option');\n head.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n that.addClass('open');\n me.overlay.show();\n });\n option.on(me.isTouch ? 'tap' : 'click', function () {\n var value = $(this).html();\n that.removeClass('open');\n option.removeClass('active');\n $(this).addClass('active');\n title.html(value);\n me.overlay.hide();\n });\n });\n $(document).on('tap middleclick', '.metrik-target', function () {\n if ($(this).hasClass('cursor-default')) {\n return false;\n }\n\n var goalUrl = location.href,\n now = +new Date(),\n shopId = $(this).attr('data-shop-id'),\n modelId = $(this).attr('data-model-id'),\n shopUrl = $(this).attr('data-shop-url'),\n shopName = $(this).attr('data-shop-name'),\n shopBuyUrl = $(this).attr('data-buy-url');\n if ($(this).data('lastClick') && now - $(this).data('lastClick') < 500) return false; // Дубликат клика, например IE\n\n $(this).data('lastClick', now);\n me.loggingClick(goalUrl, modelId, shopId, shopUrl, shopName, shopBuyUrl);\n return true;\n });\n me.priceSorter.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n me.priceSorter.siblings().removeClass(\"active\");\n me.sortMobile.find('.active').removeClass(\"active\");\n me.priceSorter.addClass(\"active\");\n me.priceMobileSorter.addClass(\"active\");\n me.sortMobileTitle.html(me.priceMobileSorter.html());\n me.sort = \"PRICE\";\n\n if (me.priceSorter.data(\"order\") === \"asc\") {\n me.order = \"ASC\";\n me.priceSorter.data(\"order\", \"desc\").addClass(\"active-up\");\n } else {\n me.order = \"DESC\";\n me.priceSorter.data(\"order\", \"asc\").removeClass(\"active-up\");\n }\n\n me.inputFilters();\n });\n me.priceMobileSorter.on(me.isTouch ? 'tap' : 'click', function (e) {\n e.preventDefault();\n\n if (me.priceMobileSorter.data(\"order\") === \"asc\") {\n me.order = \"ASC\";\n me.priceMobileSorter.data(\"order\", \"desc\").addClass(\"active-up\");\n } else {\n me.order = \"DESC\";\n me.priceMobileSorter.data(\"order\", \"asc\").removeClass(\"active-up\");\n }\n\n me.sortMobile.find('.active').removeClass(\"active\");\n me.priceMobileSorter.addClass(\"active\");\n me.sortMobileTitle.html(me.priceMobileSorter.html());\n me.sort = \"PRICE\";\n me.inputFilters();\n });\n },\n generateQuickGuid: function generateQuickGuid() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n },\n loggingClick: function loggingClick(goalUrl, modelId, shopId, shopUrl, shopName, buyUrl) {\n var me = this,\n guid = me.generateQuickGuid();\n var yaMetric = window.yaCounter23506804\n /*Product-test*/\n || window.yaCounter46271199\n /*Rsm*/\n || window.yaCounter47153493\n /*Vse-magazini.ru*/\n || window.yaCounter47165784\n /*pochom.ru*/\n ;\n\n if (typeof yaMetric !== 'undefined') {\n yaMetric.reachGoal('Offers');\n }\n\n if (typeof window.ga !== 'undefined') {\n window.ga('send', 'event', 'outbound', 'Offers', goalUrl, {\n 'hitCallback': function hitCallback() {\n console.log('Offers');\n }\n });\n window.ga('ecommerce:addTransaction', {\n 'id': guid\n });\n window.ga('ecommerce:addItem', {\n 'id': guid,\n 'name': me.productName\n });\n window.ga('ecommerce:send');\n console.log(guid);\n }\n\n var url = '/product/offerclick?' + 'modelId=' + (modelId || '') + '&shopId=' + (shopId || '') + '&productId=' + (me.id || '') + '&shopUrl=' + (shopUrl || '') + '&shopName=' + (shopName || '') + '®ion=' + (me.city || '') + '&clid=' + (me.clid || '') + '&provider=' + (me.provider || '') + '&buyurl=' + encodeURIComponent(buyUrl);\n window.open(url);\n },\n initContextMenu: function initContextMenu() {\n var me = this;\n $.contextMenu({\n selector: '.metrik-target',\n build: function build($trigger, e) {\n var target = $($trigger[0]),\n url = target.attr(\"href\"),\n goalUrl = location.href,\n shopId = target.attr('data-shop-id'),\n modelId = target.attr('data-model-id'),\n shopUrl = target.attr('data-shop-url'),\n shopName = $(this).attr('data-shop-name'),\n shopBuyUrl = $(this).attr('data-buy-url');\n\n $.contextMenu.types.opentab = function (item, opt, root) {\n $('Открыть ссылку в новой вкладке').appendTo(this).on('click', function () {\n me.loggingClick(goalUrl, modelId, shopId, shopUrl, shopName, shopBuyUrl);\n $trigger[0].click();\n root.$menu.trigger('contextmenu:hide');\n });\n };\n\n if (!me.isTouch) {\n $.contextMenu.types.openwindow = function (item, opt, root) {\n $('Открыть ссылку в новом окне').appendTo(this).on('click', function () {\n me.loggingClick(goalUrl, modelId, shopId, shopUrl, shopName, shopBuyUrl);\n window.open(url, '_blank', 'toolbar=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes,status=yes');\n root.$menu.trigger('contextmenu:hide');\n });\n };\n }\n\n $.contextMenu.types.copyurl = function (item, opt, root) {\n $('Копировать ссылку').appendTo(this).addClass('copyurl').attr('data-clipboard-text', url);\n var clipboard = new Clipboard('.copyurl');\n clipboard.on('success', function (e) {\n me.loggingClick(goalUrl, modelId, shopId, shopUrl, shopName, shopBuyUrl);\n e.clearSelection();\n clipboard.destroy();\n root.$menu.trigger('contextmenu:hide');\n });\n };\n\n $.contextMenu.types.areaurl = function (item, opt, root) {\n $('' + url + '').appendTo(this).addClass('context-menu-link');\n };\n\n if (!me.isTouch) {\n return {\n items: {\n opentab: {\n type: \"opentab\",\n customName: \"OpenInNewTab\"\n },\n openwindow: {\n type: \"openwindow\",\n customName: \"OpenInNewWindow\"\n },\n \"sep1\": \"---------\",\n copyurl: {\n type: \"copyurl\",\n customName: \"CopyUrl\"\n }\n }\n };\n } else {\n return {\n items: {\n areaurl: {\n type: \"areaurl\",\n customName: \"AreaUrl\"\n },\n opentab: {\n type: \"opentab\",\n customName: \"OpenInNewTab\"\n },\n \"sep1\": \"---------\",\n copyurl: {\n type: \"copyurl\",\n customName: \"CopyUrl\"\n }\n }\n };\n }\n }\n });\n },\n initFiltersQueryData: function initFiltersQueryData() {\n var me = this;\n\n if (me.query.Sort !== undefined && me.query.Sort !== '') {\n me.sort = me.query.Sort;\n\n if (me.sort === 'PRICE') {\n me.priceSorter.siblings().removeClass(\"active\");\n me.sortMobile.find('.active').removeClass(\"active\");\n me.priceSorter.addClass(\"active\");\n me.priceMobileSorter.addClass(\"active\");\n me.sortMobileTitle.html(me.priceMobileSorter.html());\n }\n\n if (me.sort === 'RATING') {\n me.shopSorter.siblings().removeClass(\"active\").removeClass(\"active-up\");\n me.sortMobile.find('.active').removeClass(\"active\");\n me.shopSorter.addClass(\"active\");\n me.shopMobileSorter.addClass(\"active\");\n me.sortMobileTitle.html(me.shopMobileSorter.html());\n }\n }\n\n if (me.query.Order !== undefined && me.query.Order !== '') {\n me.order = me.query.Order;\n\n if (me.order === \"ASC\") {\n me.priceSorter.data(\"order\", \"desc\").addClass(\"active-up\");\n } else {\n me.priceSorter.data(\"order\", \"asc\").removeClass(\"active-up\");\n }\n }\n\n if (me.query.filterType !== undefined && me.query.filterType !== '') {\n me.filtersData.filterType = me.query.filterType;\n me.filterData.type = me.query.filterType;\n }\n\n if (me.query.filterValue !== undefined && me.query.filterValue !== '') {\n me.filtersData.filterValue = me.query.filterValue;\n me.filterData.value = me.query.filterValue;\n }\n\n if (me.query.Childs !== undefined && me.query.Childs !== '') {\n me.filtersData.Childs = me.query.Childs;\n me.filterChilds = me.query.Childs.split(',');\n\n if (me.filterPlainBlock && me.filterPlainBlock.length > 0) {\n var childsFilter = me.filterPlainBlock.find('input[data-filter-value=\"' + me.filtersData.Childs + '\"]');\n\n if ($(childsFilter).length > 0) {\n var value = $(childsFilter).attr('data-filter-value'),\n title = $(childsFilter).next('label').text(),\n value_label = 'value-' + $(childsFilter).attr('id');\n $(childsFilter).closest('.detail-duplex-filter-dropdown').prev('.detail-duplex-filter-label').append('' + title + '');\n $(childsFilter).prop('checked', true);\n $(childsFilter).addClass('active');\n $(childsFilter).next('label').css('font-weight', 'bold');\n }\n }\n }\n\n if (me.query.Checked !== undefined && me.query.Checked !== '') {\n me.filtersData.Checked = me.query.Checked;\n me.filterChecked = me.query.Checked.split(',');\n\n if (me.filterMultiBlock && me.filterMultiBlock.length > 0) {\n var filtersRadio = me.filterMultiBlock.find('input[type=radio]'),\n fcount = parseInt(me.filterMultiBlock.attr('data-count')),\n tempArray = [],\n nameArray = [];\n\n for (var i = 0; i < me.filterChecked.length; i++) {\n var checkedFilter = me.filterMultiBlock.find('input[id=\"' + me.filterChecked[i] + '\"]');\n var arrayRadio = $(checkedFilter).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n filterText = $(checkedFilter).attr(\"data-value\");\n nameArray.push(filterText);\n\n for (var j = 0; j < arrayRadio.length; j++) {\n tempArray.push(arrayRadio[j]);\n }\n\n if (i !== 0) {\n tempArray = tempArray.reduce(function (acc, el, i, arr) {\n if (arr.indexOf(el) !== i && acc.indexOf(el) < 0) acc.push(el);\n return acc;\n }, []);\n }\n\n $(checkedFilter).prop('checked', true);\n $(checkedFilter).addClass('checked');\n $(checkedFilter).parent().prev('.detail-filter-label2').addClass('active');\n $(checkedFilter).parent().prev('.detail-filter-label2').append('' + filterText + '');\n }\n\n me.filterChilds = tempArray;\n\n for (var i = 0; i < filtersRadio.length; i++) {\n var valueRadio = $(filtersRadio[i]).val(),\n filtersName = $(filtersRadio[i]).attr(\"name\"),\n arrayRadio = $(filtersRadio[i]).val().split(',').map(function (x) {\n return parseInt(x);\n }),\n isChange = true;\n\n if (me.filterChilds.length === 0 && name === filtersName) {\n isChange = false;\n }\n\n if (isChange) {\n if (valueRadio !== \"0\") {\n $(filtersRadio[i]).attr('disabled', true);\n }\n\n for (var j = 0; j < me.filterChilds.length; j++) {\n if (arrayRadio.indexOf(me.filterChilds[j]) !== -1) {\n $(filtersRadio[i]).attr('disabled', false);\n }\n }\n }\n }\n\n if (nameArray.length > 0) {\n me.filterMultiButton.text(nameArray.join(', '));\n } else {\n me.filterMultiButton.text('Выберите параметры');\n }\n }\n }\n },\n inputFilters: function inputFilters() {\n var me = this;\n me.more.hide();\n me.block.find(me.styleClass).hide();\n me.loader.show();\n me.page = 1;\n me.showNext = 0;\n\n if (me.filters === true) {\n me.generateFiltersData();\n }\n\n me.loadPage();\n },\n generateFiltersData: function generateFiltersData() {\n var me = this;\n\n if (me.filters === true) {\n me.append = true;\n }\n\n delete me.filtersData.Sort;\n\n if (me.sort !== '') {\n me.filtersData.Sort = me.sort;\n }\n\n delete me.filtersData.Order;\n\n if (me.order !== '') {\n me.filtersData.Order = me.order;\n }\n\n delete me.filtersData.city;\n\n if (me.city && me.city !== '') {\n me.filtersData.city = me.city;\n }\n\n delete me.filtersData.filterValue;\n delete me.filtersData.filterType;\n\n if (me.filterData.type == 'Color') {\n me.filtersData.filterType = me.filterData.type;\n me.filtersData.filterValue = me.filterData.value;\n }\n\n delete me.filtersData.Childs;\n\n if (me.filterChilds.length > 0) {\n me.filtersData.Childs = me.filterChilds.join(',');\n }\n\n delete me.filtersData.Checked;\n\n if (me.filterChecked.length > 0) {\n me.filtersData.Checked = me.filterChecked.join(',');\n }\n\n if (me.append === true) {\n var search = Object.keys(me.filtersData).map(function (k) {\n return encodeURIComponent(k) + '=' + me.filtersData[k];\n }).join('&');\n history.pushState('', '', window.location.pathname + '?' + search);\n }\n },\n getClid: function getClid() {\n var metricsMarkers = ['gclid', 'yclid', 'k50id'],\n cookieName = 'clid',\n clid,\n cookieDurationMinutes = 60 * 24;\n $.each(metricsMarkers, function (_, value) {\n var metricMatches = document.location.search.match(new RegExp(value));\n\n if (metricMatches && metricMatches.length > 0) {\n var endStr = metricMatches.input.substr(metricMatches.index);\n var endIndex = endStr.length;\n var endMatches = endStr.match(new RegExp('&'));\n\n if (endMatches && endMatches.length > 0) {\n endIndex = endMatches.index;\n }\n\n clid = endStr.substring(0, endIndex);\n }\n });\n\n if (!clid) {\n clid = pt.cookie.get(cookieName);\n } else {\n pt.cookie.set(cookieName, clid, {\n path: \"/\",\n expires: cookieDurationMinutes * 60\n });\n }\n\n return clid;\n },\n showMessage: function showMessage(isError, isFilter) {\n var me = this,\n errorText = 'Предложения в данный момент недоступны, попробуйте повторить позже.',\n messageText = 'К сожалению, для Вашего региона предложения не найдены.',\n messageFilterText = 'К сожалению, для Вашего региона предложения не найдены.
Попробуйте изменить фильтр.',\n text = '';\n me.tabsCounter.text('(0)').show();\n me.buyButtonClear('нет цен');\n me.loader.hide();\n\n if (me.message) {\n if (isError) {\n text = errorText;\n } else {\n if (isFilter) {\n text = messageFilterText;\n } else {\n text = messageText;\n }\n }\n\n me.message.html(text).show();\n }\n },\n isFilterBlockFilled: function isFilterBlockFilled() {\n return $(this.filterBlock).find('.detail-duplex-filter-color').length > 0;\n }\n};","\"use strict\";\n\npopups = {\n activityIndicatorOn: function activityIndicatorOn() {\n $('
').appendTo('.zoom-content');\n },\n activityIndicatorOff: function activityIndicatorOff() {\n $('#imagelightbox-loading').remove();\n },\n overlayOn: function overlayOn() {\n $('
').appendTo('body');\n $('
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
').appendTo('body');\n },\n overlayOff: function overlayOff() {\n $('#imagelightbox-overlay').remove();\n $('#imagelightbox-popup').remove();\n },\n captionOn: function captionOn() {\n var description = $('img#imagezoom[data-blob=\"' + $('#imagelightbox').attr('src') + '\"]').attr('alt');\n if (description.length > 0) $('
' + description + '
').appendTo('.zoom-caption');\n },\n captionOff: function captionOff() {\n $('.zoom-label').remove();\n },\n closeButtonOn: function closeButtonOn(instance) {\n $('').appendTo('.zoom-content').on('click touchend', function () {\n $(this).remove();\n instance.quitImageLightbox();\n return false;\n });\n },\n closeButtonOff: function closeButtonOff() {\n $('#imagelightbox-close').remove();\n },\n navigationOn: function navigationOn(instance, selector) {\n var images = $(selector);\n\n if (images.length) {\n var nav = $('
');\n\n for (var i = 0; i < images.length; i++) {\n nav.append('');\n }\n\n nav.appendTo('.zoom-content');\n nav.on('click touchend', function () {\n return false;\n });\n var navItems = nav.find('button');\n navItems.on('click touchend', function () {\n var $this = $(this);\n if (images.eq($this.index()).attr('data-blob') != $('#imagelightbox').attr('src')) instance.switchImageLightbox($this.index());\n navItems.removeClass('active');\n navItems.eq($this.index()).addClass('active');\n return false;\n }).on('touchend', function () {\n return false;\n });\n }\n },\n navigationUpdate: function navigationUpdate() {\n var items = $('#imagelightbox-nav button');\n items.removeClass('active');\n var index = parseInt($('img#imagezoom[data-blob=\"' + $('#imagelightbox').attr('src') + '\"]').attr('data-index'));\n items.eq(index).addClass('active');\n },\n navigationOff: function navigationOff() {\n $('#imagelightbox-nav').remove();\n },\n arrowsOn: function arrowsOn(instance, selector) {\n var $arrows = $('');\n $arrows.appendTo('.zoom-content');\n $arrows.on('click touchend', function (e) {\n e.preventDefault();\n var $this = $(this),\n index = parseInt($('img#imagezoom[data-blob=\"' + $('#imagelightbox').attr('src') + '\"]').attr('data-index'));\n\n if ($this.hasClass('imagelightbox-arrow-left')) {\n index = index - 1;\n if (!$(selector).eq(index).length) index = $(selector).length;\n } else {\n index = index + 1;\n if (index >= $(selector).length) index = 0;\n }\n\n instance.switchImageLightbox(index);\n return false;\n });\n },\n arrowsOff: function arrowsOff() {\n $('.imagelightbox-arrow').remove();\n }\n};\n\n(function ($, window, document, undefined) {\n 'use strict';\n\n var cssTransitionSupport = function cssTransitionSupport() {\n var s = document.body || document.documentElement,\n s = s.style;\n if (s.WebkitTransition == '') return '-webkit-';\n if (s.MozTransition == '') return '-moz-';\n if (s.OTransition == '') return '-o-';\n if (s.transition == '') return '';\n return false;\n },\n isCssTransitionSupport = cssTransitionSupport() === false ? false : true,\n cssTransitionTranslateX = function cssTransitionTranslateX(element, positionX, speed) {\n var options = {},\n prefix = cssTransitionSupport();\n options[prefix + 'transform'] = 'translateX(' + positionX + ')';\n options[prefix + 'transition'] = prefix + 'transform ' + speed + 's linear';\n element.css(options);\n },\n hasTouch = 'ontouchstart' in window,\n hasPointers = window.navigator.pointerEnabled || window.navigator.msPointerEnabled,\n wasTouched = function wasTouched(event) {\n if (hasTouch) return true;\n if (!hasPointers || typeof event === 'undefined' || typeof event.pointerType === 'undefined') return false;\n\n if (typeof event.MSPOINTER_TYPE_MOUSE !== 'undefined') {\n if (event.MSPOINTER_TYPE_MOUSE != event.pointerType) return true;\n } else if (event.pointerType != 'mouse') return true;\n\n return false;\n };\n\n $.fn.imageLightbox = function (options) {\n var options = $.extend({\n selector: 'id=\"imagelightbox\"',\n animationSpeed: 250,\n preloadNext: false,\n enableKeyboard: true,\n quitOnEnd: false,\n quitOnImgClick: false,\n quitOnDocClick: true,\n onStart: false,\n onEnd: false,\n onLoadStart: false,\n onLoadEnd: false\n }, options),\n targets = $([]),\n target = $(),\n image = $(),\n imageWidth = 0,\n imageHeight = 0,\n swipeDiff = 0,\n inProgress = false,\n setImage = function setImage() {\n if (!image.length) return true;\n var screenWidth = 980,\n screenHeight = 615,\n tmpImage = new Image();\n tmpImage.src = image.attr('src');\n\n tmpImage.onload = function () {\n imageWidth = tmpImage.width;\n imageHeight = tmpImage.height;\n\n if (imageWidth > screenWidth || imageHeight > screenHeight) {\n var ratio = imageWidth / imageHeight > screenWidth / screenHeight ? imageWidth / screenWidth : imageHeight / screenHeight;\n imageWidth /= ratio;\n imageHeight /= ratio;\n }\n\n var parent = $('.zoom-image');\n image.css({\n 'top': (parent.height() - imageHeight) / 2 + 'px',\n 'left': (parent.width() - imageWidth) / 2 + 'px'\n });\n };\n },\n loadImage = function loadImage(direction) {\n if (inProgress) return false;\n direction = typeof direction === 'undefined' ? false : direction == 'left' ? 1 : -1;\n\n if (image.length) {\n if (direction !== false && (targets.length < 2 || options.quitOnEnd === true && (direction === -1 && targets.index(target) == 0 || direction === 1 && targets.index(target) == targets.length - 1))) {\n quitLightbox();\n return false;\n }\n\n var params = {\n 'opacity': 0\n };\n if (isCssTransitionSupport) cssTransitionTranslateX(image, 100 * direction - swipeDiff + 'px', options.animationSpeed / 1000);else params.left = parseInt(image.css('left')) + 100 * direction + 'px';\n image.animate(params, options.animationSpeed, function () {\n removeImage();\n });\n swipeDiff = 0;\n }\n\n inProgress = true;\n if (options.onLoadStart !== false) options.onLoadStart();\n setTimeout(function () {\n image = $('').attr('src', target.attr('data-blob')).on('load', function () {\n image.appendTo('.zoom-image');\n setImage();\n var params = {\n 'opacity': 1\n };\n image.css('opacity', 0);\n\n if (isCssTransitionSupport) {\n cssTransitionTranslateX(image, -100 * direction + 'px', 0);\n setTimeout(function () {\n cssTransitionTranslateX(image, 0 + 'px', options.animationSpeed / 1000);\n }, 50);\n } else {\n var imagePosLeft = parseInt(image.css('left'));\n params.left = imagePosLeft + 'px';\n image.css('left', imagePosLeft - 100 * direction + 'px');\n }\n\n image.animate(params, options.animationSpeed, function () {\n inProgress = false;\n if (options.onLoadEnd !== false) options.onLoadEnd();\n });\n\n if (options.preloadNext) {\n var nextTarget = targets.eq(targets.index(target) + 1);\n if (!nextTarget.length) nextTarget = targets.eq(0);\n $('').attr('src', nextTarget.attr('data-blob'));\n }\n }).on('error', function () {\n if (options.onLoadEnd !== false) options.onLoadEnd();\n });\n var swipeStart = 0,\n swipeEnd = 0,\n imagePosLeft = 0;\n image.on(hasPointers ? 'pointerup MSPointerUp' : 'click', function (e) {\n e.preventDefault();\n\n if (options.quitOnImgClick) {\n quitLightbox();\n return false;\n }\n\n if (wasTouched(e.originalEvent)) return true;\n var posX = (e.pageX || e.originalEvent.pageX) - e.target.offsetLeft;\n target = targets.eq(targets.index(target) - (imageWidth / 2 > posX ? 1 : -1));\n if (!target.length) target = targets.eq(imageWidth / 2 > posX ? targets.length : 0);\n loadImage(imageWidth / 2 > posX ? 'left' : 'right');\n }).on('touchstart pointerdown MSPointerDown', function (e) {\n if (!wasTouched(e.originalEvent) || options.quitOnImgClick) return true;\n if (isCssTransitionSupport) imagePosLeft = parseInt(image.css('left'));\n swipeStart = e.originalEvent.pageX || e.originalEvent.touches[0].pageX;\n }).on('touchmove', function (e) {\n if (!wasTouched(e.originalEvent) || options.quitOnImgClick) return true;\n e.preventDefault();\n swipeEnd = e.originalEvent.pageX || e.originalEvent.touches[0].pageX;\n swipeDiff = swipeStart - swipeEnd;\n if (isCssTransitionSupport) cssTransitionTranslateX(image, -swipeDiff + 'px', 0);else image.css('left', imagePosLeft - swipeDiff + 'px');\n }).on('touchend touchcancel pointerup pointercancel MSPointerUp MSPointerCancel', function (e) {\n if (!wasTouched(e.originalEvent) || options.quitOnImgClick) return true;\n\n if (Math.abs(swipeDiff) > 50) {\n target = targets.eq(targets.index(target) - (swipeDiff < 0 ? 1 : -1));\n if (!target.length) target = targets.eq(swipeDiff < 0 ? targets.length : 0);\n loadImage(swipeDiff > 0 ? 'right' : 'left');\n } else {\n if (isCssTransitionSupport) cssTransitionTranslateX(image, 0 + 'px', options.animationSpeed / 1000);else image.animate({\n 'left': imagePosLeft + 'px'\n }, options.animationSpeed / 2);\n }\n });\n }, options.animationSpeed + 100);\n },\n removeImage = function removeImage() {\n if (!image.length) return false;\n image.remove();\n image = $();\n },\n quitLightbox = function quitLightbox() {\n if (!image.length) return false;\n image.animate({\n 'opacity': 0\n }, options.animationSpeed, function () {\n removeImage();\n inProgress = false;\n if (options.onEnd !== false) options.onEnd();\n });\n },\n addTargets = function addTargets(newTargets) {\n newTargets.each(function () {\n targets = targets.add($(this));\n });\n newTargets.on('click.imageLightbox', function (e) {\n e.preventDefault();\n if (inProgress) return false;\n inProgress = false;\n if (options.onStart !== false) options.onStart();\n target = $(this);\n loadImage();\n });\n },\n zoomTargets = function zoomTargets() {\n if (inProgress) return false;\n inProgress = false;\n if (options.onStart !== false) options.onStart();\n };\n\n $(window).on('resize', setImage);\n\n if (options.quitOnDocClick) {\n $(document).on(hasTouch ? 'touchend' : 'click', function (e) {\n if (image.length && !$(e.target).is(image) && $(e.target).prop('id') === 'imagelightbox-popup') quitLightbox();\n });\n }\n\n if (options.enableKeyboard) {\n $(document).on('keyup', function (e) {\n if (!image.length) return true;\n e.preventDefault();\n if (e.keyCode == 27) quitLightbox();\n\n if (e.keyCode == 37 || e.keyCode == 39) {\n target = targets.eq(targets.index(target) - (e.keyCode == 37 ? 1 : -1));\n if (!target.length) target = targets.eq(e.keyCode == 37 ? targets.length : 0);\n loadImage(e.keyCode == 37 ? 'left' : 'right');\n }\n });\n }\n\n addTargets($(this));\n\n this.switchImageLightbox = function (index) {\n var tmpTarget = targets.eq(index);\n\n if (tmpTarget.length) {\n var currentIndex = targets.index(target);\n target = tmpTarget;\n loadImage(index < currentIndex ? 'left' : 'right');\n }\n\n return this;\n };\n\n this.zoomImageLightbox = function () {\n zoomTargets();\n };\n\n this.addToImageLightbox = function (newTargets) {\n addTargets(newTargets);\n };\n\n this.quitImageLightbox = function () {\n quitLightbox();\n return this;\n };\n\n return this;\n };\n})(jQuery, window, document);","\"use strict\";\n\nvar comments = {\n init: function init() {\n $('.reply-btn').on('click', function () {\n var block = $(this).data('id');\n $('span#commentInfo', block).remove();\n $(block).toggle('slow');\n return false;\n });\n }\n};\nvar characteristics = {\n init: function init() {\n $('.rating__check input[type=checkbox]').change(function () {\n var count = $(this).parents('#raiting-body').find('input:checked').length;\n var text = ' товаров';\n\n if (count % 10 == 1) {\n text = ' товар';\n } else if (count % 10 >= 2 && count % 10 <= 4 && count != 12 && count != 13 && count != 14) {\n text = ' товара';\n }\n\n $(this).parents('.rating__container').find('.compare-count').text(count + text);\n var compare = [];\n $.each($(\"#raiting-body\").find('input:checked'), function () {\n compare.push('product=' + $(this).val());\n });\n var comparer = $('.rating__compare');\n var link = '/catalog/compare?' + compare.join('&');\n if (compare.length >= 2) comparer.attr('href', link);else comparer.attr('href', '#');\n var redTextClass = 'red-text';\n\n if (count > 1) {\n $(this).parents('.rating__container').find('.rating__compare').addClass(redTextClass);\n } else {\n $(this).parents('.rating__container').find('.rating__compare').removeClass(redTextClass);\n }\n });\n }\n};\n\nfunction loadScriptsDynamically() {\n // Tooltip\n tooltip.init();\n tooltip2.init(); // Compare\n\n characteristics.init();\n}\n\n$(function () {\n comments.init();\n characteristics.init(); // Slider ( Rating block )\n\n $('.rating__gray').each(function () {\n var parent = $(this),\n scale = $('
'),\n slider = parent.find('.slider'),\n sliderW,\n step = slider.data('step'),\n rangeMin = slider.data('min'),\n rangeMax = slider.data('max'),\n fields = parent.find('.rating__range'),\n fieldMin = fields.find('.rating__range-field:first input'),\n fieldMax = fields.find('.rating__range-field:last input'),\n delay = 300,\n config;\n\n if (rangeMax > rangeMin) {\n fieldMin.val(rangeMin);\n fieldMax.val(rangeMax);\n config = {\n range: [rangeMin, rangeMax],\n start: [rangeMin, rangeMax],\n handles: 2,\n step: step,\n slide: function slide() {\n var values = $(this).val();\n fieldMin.val(values[0]);\n fieldMax.val(values[1]);\n setUserValues(values[0], values[1], true);\n }\n };\n setTimeout(function () {\n scale.append('
' + fieldMin.val() + ' р.
');\n scale.append('
' + fieldMax.val() + ' р.
');\n slider.after(scale).noUiSlider(config);\n }, delay);\n }\n\n function setUserValues(min, max, setFilterByPrice) {\n $('#noUiSlide-start').data(\"userValue\", min);\n $('#noUiSlide-end').data(\"userValue\", max);\n\n if (setFilterByPrice) {\n $('input[name=isFilterByPrice]').val(true);\n }\n }\n\n ; // Обновление ползунков слайдера\n\n function updateSlider() {\n if (rangeMax > rangeMin) {\n slider.val([rangeMin, rangeMax]); // Обновляем hidden input-ы слайдера из-за бага, например,\n // при установки значения(slider.val(...)) = 1000 устанавливается 9900.\n\n $('.rating__slider .slider input').first().val(rangeMin);\n $('.rating__slider .slider input').last().val(rangeMax);\n setUserValues(rangeMin, rangeMax, true);\n }\n }\n\n ;\n fieldMax.on('keyup paste', function () {\n rangeMax = parseFloat($(this).val()) || 0;\n updateSlider();\n });\n fieldMin.on('keyup paste', function () {\n rangeMin = parseFloat($(this).val()) || 0;\n updateSlider();\n });\n });\n});","\"use strict\";\n\n$(document).ready(function () {\n // \"User Logged In\" subscription\n $(document).on('userLoggedIn', function () {\n pt.user.reloadUserInfo();\n pt.cookie.set('dontshowsubscribepopup', true);\n\n if (pt.comment.needAddCommentAfterLogin) {\n pt.comment.addComment(function () {\n pt.comment.needAddCommentAfterLogin = false;\n });\n }\n }); // Comments Block initialization\n\n pt.comment.init();\n pt.subscribe.init();\n});\npt = {\n userLogged: false\n};\npt.subscribe = {\n category: '',\n popup: null,\n emailContainer: null,\n setChecked: function setChecked() {\n var checkbox = this.popup.find('[name=\"' + this.category.toLowerCase() + '\"]');\n checkbox.prop('checked', true);\n },\n init: function init() {\n var me = this;\n\n if (!pt.cookie.get('subscribed')) {\n pt.cookie.set('subscribed', '');\n }\n\n me.category = $('#subscribeCategory').val();\n\n if (!me.category) {\n return;\n }\n\n me.popup = $('#overlay-subscribe');\n\n if (!me.popup.length) {\n return;\n }\n\n this.setChecked();\n me.emailContainer = $('#subscribeEmail'); //$('#subscribeCategoryContainer').html(me.category);\n\n $('#subscribeClose').click(function () {\n var today = new Date(),\n showDate = new Date(today);\n me.popup.hide();\n showDate.setDate(today.getDate() + 3); // Ставим куку на минуту (для тестирования)\n // showDate.setTime(showDate.getTime() + 1000 * 60);\n\n pt.cookie.set('dontshowsubscribepopup', true, {\n expires: showDate\n });\n });\n $('#btnSubscribe').click(function () {\n var email = me.emailContainer.val(),\n errorsContainer = $(this).parents('.newOverlay-content').find('.validation-summary-errors ul'),\n infoContainer = $(this).parents('.form-footer').find('p.subscribeInfo'),\n checked,\n categories = '';\n errorsContainer.empty();\n\n if (!email) {\n errorsContainer.append('
  • Необходимо указать Email
  • ');\n return;\n }\n\n checked = me.popup.find('input[type=checkbox]:checked');\n\n if (!checked || checked.length === 0) {\n errorsContainer.append('
  • Необходимо выбрать хотя бы одну категорию
  • ');\n return;\n }\n\n checked.each(function (index, item) {\n categories += item.name + ',';\n });\n categories = categories.substring(0, categories.length - 1);\n $.ajax({\n url: '/subscribe/add',\n method: 'POST',\n data: {\n email: email,\n category: categories\n },\n dataType: 'json',\n success: function success(data) {\n if (data.success) {\n pt.cookie.set('subscribed', 'true', {\n path: '/'\n });\n infoContainer.html(data.message);\n me.popup.hide(); //me.emailContainer.val('');\n } else {\n errorsContainer.html('
  • ' + data.message + '
  • ');\n }\n }\n });\n });\n\n if (this.needToShow()) {\n this.show();\n }\n },\n needToShow: function needToShow() {\n var loc = location.href;\n\n if (loc.lastIndexOf('/') === loc.length - 1) {\n loc = loc.substr(0, loc.length - 1);\n } else {\n var isFile = loc.substr(loc.lastIndexOf('/'), loc.length).indexOf('.') !== -1;\n if (isFile) loc = loc.substr(0, loc.lastIndexOf('/'));\n }\n\n var targetValue = loc.substr(loc.lastIndexOf('/') + 1);\n\n if (targetValue === \"katalog\" || targetValue.indexOf(\"katalog?\") !== -1) {\n return false;\n }\n\n if (pt.cookie.get('dontshowsubscribepopup')) {\n return false;\n }\n\n return !pt.userLogged && pt.cookie.get('subscribed') !== 'true';\n },\n show: function show() {\n var me = this;\n setTimeout(function () {\n me.popup.show();\n }, 60000);\n }\n};\npt.cookie = {\n get: function get(name) {\n var matches = document.cookie.match(new RegExp(\"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"));\n return matches ? decodeURIComponent(matches[1]) : undefined;\n },\n set: function set(name, value, options) {\n options = options || {};\n var expires = options.expires;\n\n if (typeof expires == \"number\" && expires) {\n var date = new Date();\n date.setTime(date.getTime() + expires * 1000);\n expires = options.expires = date;\n }\n\n if (expires && expires.toUTCString) {\n options.expires = expires.toUTCString();\n }\n\n value = encodeURIComponent(value);\n var updatedCookie = name + \"=\" + value;\n\n for (var propName in options) {\n if (options.hasOwnProperty(propName)) {\n updatedCookie += \"; \" + propName;\n var propValue = options[propName];\n\n if (propValue !== true) {\n updatedCookie += \"=\" + propValue;\n }\n }\n }\n\n document.cookie = updatedCookie;\n },\n del: function del(name) {\n set(name, \"\", {\n expires: -1\n });\n }\n};\npt.recaptcha = {\n isLoaded: false,\n render: function render() {\n $.each($('.g-recaptcha'), function (index, item) {\n window.grecaptcha.render(item, {\n 'sitekey': '6LdYZAoTAAAAACEBPs5XjvbmfdtpI4hwdZaD6m1B'\n });\n });\n },\n loaded: function loaded() {\n this.isLoaded = true;\n }\n};\npt.comment = {\n relateId: 0,\n type: 0,\n page: 1,\n text: '',\n parent: null,\n errorsContainer: null,\n needAddCommentAfterLogin: false,\n init: function init() {\n var commentsContainer = $('#comments');\n\n if (commentsContainer.length > 0 && jQuery.trim(commentsContainer.html()) === \"\") {\n this.relateId = commentsContainer.data(\"relateid\");\n this.type = commentsContainer.data(\"commenttype\");\n this.reloadComments();\n }\n },\n addSuccess: function addSuccess() {\n pt.user.reloadUserInfo();\n pt.recaptcha.render();\n pt.comment.initReply();\n },\n changePage: function changePage(page) {\n this.page = page;\n this.reloadComments();\n },\n subscriptions: function subscriptions() {\n var me = this;\n $('#btnAddCommentUnAuth').on('click', function () {\n var btn = $(this),\n userNameField = btn.parents('.newOverlay-content').find('#UserName'),\n recapthcaResponseField = btn.parents('.newOverlay-content').find('.g-recaptcha-response'),\n isValid = true;\n me.errorsContainer = btn.parents('.newOverlay-content').find('.validation-summary-errors ul');\n me.errorsContainer.empty();\n\n if (!userNameField.val()) {\n isValid = false;\n me.errorsContainer.append('
  • Необходимо заполнить поле \"Имя\"!
  • ');\n }\n\n if (!recapthcaResponseField.val()) {\n isValid = false;\n me.errorsContainer.append('
  • Необходимо отметить поле \"Я не робот\"!
  • ');\n }\n\n if (!isValid) {\n return;\n }\n\n $.ajax({\n url: '/comment/addcommentunauth',\n method: 'POST',\n data: {\n text: me.text,\n parentId: me.parent,\n relateId: me.relateId,\n type: me.type,\n pagenumber: me.page,\n userName: userNameField.val(),\n recaptcha: recapthcaResponseField.val()\n },\n dataType: 'json',\n success: function success(data) {\n if (data.success) {\n me.reloadComments();\n me.clear();\n } else {\n me.errorsContainer.html('
  • ' + data.message + '
  • ');\n }\n }\n });\n });\n $('.btnAddComment').on('click', function () {\n var btn = $(this),\n textarea = btn.parents('.form.formBlock').find('textarea'),\n parent = btn.parents('.form.formBlock').find('[name=ParentId]');\n me.errorsContainer = btn.parents('.form.formBlock').find('.validation-summary-errors ul');\n me.errorsContainer.empty();\n\n if (!textarea.val()) {\n me.errorsContainer.append('
  • Отзыв не может быть пустым!
  • ');\n return;\n }\n\n me.text = textarea.val();\n me.parent = parent.val();\n me.addComment();\n });\n $('.reply-btn').on('click', function () {\n var block = $(this).data('id');\n $('span#commentInfo', block).remove();\n $(block).toggle('slow');\n return false;\n });\n },\n addComment: function addComment(callback) {\n var me = this;\n $.ajax({\n url: '/comment/addcomment',\n method: 'POST',\n data: {\n text: me.text,\n parentId: me.parent,\n relateId: me.relateId,\n type: me.type,\n pagenumber: me.page\n },\n dataType: 'json',\n success: function success(data) {\n if (data.success) {\n me.reloadComments();\n me.clear();\n\n if (callback) {\n callback();\n }\n } else if (data.needAuthorize) {\n me.needAddCommentAfterLogin = true;\n $('#overlay-commentauthorization').show();\n pt.recaptcha.render();\n } else {\n me.errorsContainer.html('
  • ' + data.message + '
  • ');\n }\n }\n });\n },\n clear: function clear() {\n this.text = '';\n this.parent = null;\n this.errorsContainer = null;\n },\n reloadComments: function reloadComments() {\n var me = this; //#warning Временно выключено\n\n $.ajax({\n url: '/comment/getcomments',\n data: {\n relateId: me.relateId,\n type: me.type,\n page: me.page\n },\n dataType: 'html',\n success: function success(data) {\n $('#comments').html(data);\n $('.commentPaginator').click(function () {\n pt.comment.changePage($(this).data('page'));\n });\n pt.func.initOverlay();\n pt.comment.subscriptions();\n }\n });\n }\n};\npt.func = {\n initOverlay: function initOverlay() {\n $('.close').click(function () {\n $(this).closest('.newOverlay').hide(0);\n return false;\n });\n $('.newoverlay-show').click(function () {\n $('.newOverlay').hide();\n $($(this).data('target')).show();\n return false;\n });\n }\n};\npt.user = {\n reloadUserInfo: function reloadUserInfo() {\n $.ajax({\n url: '/Account/RenderUserInfo',\n dataType: 'html',\n success: function success(data) {\n $('#userinfo.account').html(data);\n pt.userLogged = true;\n pt.func.initOverlay();\n }\n });\n }\n};","\"use strict\";\n\nsales = {\n productId: 0,\n yandexProductId: 0,\n productName: '',\n regionId: 0,\n isRobot: false,\n isTouch: false,\n colors: $('.select_color'),\n modifications: $('.select_modification'),\n buyButton: $('#buy_button'),\n init: function init(productId, yandexProductId, productName, isTouch, isRobot) {\n var me = this;\n me.productId = productId;\n me.yandexProductId = yandexProductId;\n me.productName = productName;\n me.isTouch = isTouch;\n me.isRobot = isRobot;\n me.colors.change(function () {\n var selected = me.colors.select(\"option:selected\").first();\n me.loadOffer(selected.val());\n });\n me.modifications.change(function () {\n location.href = this.value + \"/kupit-v-moskve\";\n });\n me.hubInit();\n me.loadOffer();\n },\n loadOffer: function loadOffer(color) {\n var me = this,\n regionId = 213,\n sort = 'PRICE',\n order = 'ASC',\n filters = {\n InSale: true,\n Delivery: 'all',\n Color: color\n };\n },\n colorsDropDownFill: function colorsDropDownFill(filters, activeFilters) {\n var me = this;\n\n if (filters.length > 0) {\n var activeColorFilter = $.grep(activeFilters, function (f, i) {\n return f.Type === 'COLOR';\n });\n var selectedColorId = activeColorFilter.length > 0 && activeColorFilter[0].Values.length > 0 ? activeColorFilter[0].Values[0].Id : 0;\n\n for (var cnt = 0; cnt < filters.length; cnt++) {\n var f = filters[cnt];\n\n if (f.Type === 'COLOR') {\n f.Values.forEach(function (fv) {\n me.colors.append($(\"\").attr(\"value\", fv.Id).html(\"
    \" + fv.Name));\n });\n }\n }\n }\n },\n buyButtonFill: function buyButtonFill(url, price, modelId) {\n var me = this;\n me.buyButton.attr('target', '_blank');\n me.buyButton.attr('rel', 'nofollow');\n\n if (price) {\n me.buyButton.attr('href', url);\n me.buyButton.attr('data-model-id', modelId);\n me.buyButton.addClass('target-blank');\n me.buyButton.removeClass('cursor-default');\n me.buyButton.html('Купить за ' + price + ' ');\n } else {\n me.buyButton.attr('href', '#');\n me.buyButton.attr('data-model-id', 0);\n me.buyButton.addClass('target-blank');\n me.buyButton.removeClass('cursor-default');\n me.buyButton.html('нет цен');\n }\n }\n};","\"use strict\";\n\n// -------------------------------------\n// Compare\n// -------------------------------------\nvar compare = {\n init: function init(settings) {\n compare.config = {\n block: $('.blockCompare'),\n speed: 200\n };\n $.extend(compare.config, settings);\n compare.setup();\n },\n setup: function setup() {\n compare.$compare = compare.config.block;\n compare.$head = $('.blockCompare-head', compare.$compare);\n compare.$body = $('.blockCompare-body', compare.$compare);\n compare.$speed = compare.config.speed;\n compare.$scrollPane = $('.blockCompare-scroll', compare.$head);\n setTimeout(function () {\n // Scroll pane\n var $scrollPane = compare.$scrollPane.on('jsp-scroll-x', function (event, scrollPositionX) {\n $('.blockCompare-scroll', compare.$body).scrollLeft(scrollPositionX);\n }).jScrollPane({\n verticalDragMinHeight: 80,\n verticalDragMaxHeight: 80,\n horizontalDragMinWidth: 80,\n horizontalDragMaxWidth: 80\n });\n compare.$scrollPaneAPI = $scrollPane.data('jsp');\n compare.headPosition();\n compare.$headPosition = compare.$head.offset();\n compare.resize(); // On windows scroll\n\n $(window).on('scroll.compare', function () {\n var $scrollTop = $(window).scrollTop(),\n $scrollLeft = $(window).scrollLeft();\n compare.onPageScroll($scrollTop);\n }).trigger('scroll.compare');\n }, compare.$speed);\n },\n resize: function resize() {\n var $headPosition = compare.$headPosition,\n $headH,\n $tProducts = $('.blockCompare-tableProducts', compare.$compare),\n $tProperties = $('.blockCompare-tableProperties', compare.$compare),\n $tValues = $('.blockCompare-tableValues', compare.$compare),\n $rowProperty,\n $rowValue,\n $rowPropertyH,\n $rowValueH; // Tables properties and values resize\n\n $('tr', $tProperties).each(function (i) {\n $rowProperty = $(this);\n $rowPropertyH = $rowProperty.height();\n $rowValue = $('tr', $tValues).eq(i);\n $rowValueH = $rowValue.height();\n\n if ($rowPropertyH > $rowValueH) {\n $rowProperty.add($rowValue).height($rowPropertyH);\n } else {\n $rowProperty.add($rowValue).height($rowValueH);\n }\n });\n compare.$scrollPaneAPI.reinitialise();\n\n if (compare.$scrollPane.hasClass('jspScrollable')) {\n compare.$scrollPane.find('.jspContainer').height($tProducts.height() + 60);\n } else {\n compare.$scrollPane.find('.jspContainer').height($tProducts.height());\n }\n\n $headH = compare.$head.height(); // Table products resize\n\n compare.$compare.css({\n paddingTop: $headH\n });\n compare.$head.data({\n parentH: compare.$compare.innerHeight(),\n start: $headPosition.top,\n height: $headH\n });\n },\n headPosition: function headPosition($position) {\n var $params = {};\n\n if ($position == 'fixed') {\n $params = {\n position: $position,\n zIndex: 10,\n top: 0,\n bottom: 'auto',\n left: 'auto'\n };\n } else if ($position == 'bottom') {\n $params = {\n position: 'absolute',\n zIndex: 10,\n top: 'auto',\n bottom: 0,\n left: 'auto'\n };\n } else {\n $params = {\n position: 'absolute',\n zIndex: 10,\n top: 0,\n bottom: 'auto',\n left: 0\n };\n }\n\n compare.$head.css($params);\n },\n onPageScroll: function onPageScroll($scrollTop) {\n var $startLine = compare.$head.data('start'),\n $headH = compare.$head.data('height'),\n $stopLine = compare.$head.data('parentH') + $startLine - $headH;\n\n if ($startLine <= $scrollTop) {\n if ($scrollTop >= $stopLine) {\n compare.headPosition('bottom');\n } else {\n compare.headPosition('fixed');\n }\n } else {\n compare.headPosition();\n }\n }\n}; // -------------------------------------\n// Tooltip\n// -------------------------------------\n\nvar tooltip = {\n init: function init(settings) {\n tooltip.config = {\n tooltip: $('
    ')\n };\n $.extend(tooltip.config, settings);\n tooltip.setup();\n },\n setup: function setup() {\n tooltip.$tooltip = tooltip.config.tooltip;\n tooltip.$tooltip.appendTo('body');\n $(document).on({\n mouseenter: tooltip.show,\n mouseleave: tooltip.hide\n }, '[data-tooltip]');\n },\n show: function show() {\n var $toggle = $(this),\n $toggleH = $toggle.innerHeight(),\n $togglePos = $toggle.offset(),\n $content = $toggle.data('tooltip');\n\n if (!$content) {\n return;\n }\n\n tooltip.$tooltip.html($content).css({\n top: $togglePos.top + $toggleH + 9,\n left: $togglePos.left - 7\n }).show();\n },\n hide: function hide() {\n tooltip.$tooltip.hide();\n }\n};\nvar tooltip2 = {\n init: function init(settings) {\n tooltip2.config = {\n tooltip2: $('
    ')\n };\n $.extend(tooltip2.config, settings);\n tooltip2.setup();\n },\n setup: function setup() {\n tooltip2.$tooltip2 = tooltip2.config.tooltip2;\n tooltip2.$tooltip2.appendTo('body');\n $(document).on({\n mouseenter: tooltip2.show,\n mouseleave: tooltip2.hide\n }, '[data-tooltip2]');\n },\n show: function show() {\n var $toggle = $(this),\n $toggleH = $toggle.innerHeight(),\n $togglePos = $toggle.offset(),\n $content = $toggle.data('tooltip2');\n\n if (!$content) {\n return;\n }\n\n tooltip2.$tooltip2.html($content).css({\n top: $togglePos.top + $toggleH + 9,\n left: $togglePos.left - 1\n }).show();\n },\n hide: function hide() {\n tooltip2.$tooltip2.hide();\n }\n}; // -------------------------------------\n// On scroll\n// -------------------------------------\n\nfunction ifScroll() {\n var scrollTop = $(window).scrollTop();\n} // -------------------------------------\n// Form\n// -------------------------------------\n\n\nfunction formFunc() {\n //$('select').selectbox();\n $('input[placeholder], textarea[placeholder]').placeholder();\n} // -------------------------------------\n\n\n$(function () {\n var win = $(window); // Teasers\n\n $('.teasers').each(function () {\n var teasers = $(this);\n teasers.on({\n mouseenter: function mouseenter() {\n $(this).parents('.teasers-item').addClass('hover');\n },\n mouseleave: function mouseleave() {\n $(this).parents('.teasers-item').removeClass('hover');\n }\n }, '.teasers-image a, .teasers-title a');\n }); // Form\n\n formFunc(); // Compare\n\n if ($('.blockCompare').length) {\n compare.init();\n } // Tooltip\n\n\n tooltip.init(); //On window resize\n //$(window).on( 'resize', $.throttle( 150, ifResize ) ).trigger( 'resize' );\n\n win.on('scroll', $.throttle(50, ifScroll));\n\n if (svg4everybody) {\n svg4everybody();\n }\n});","\"use strict\";\n\nmobileMenu = {\n mainButton: $('#js-m-show-menu'),\n mainMenu: $('#m-main-menu'),\n mainLinks: $('#m-main-menu').find('a.main-link'),\n subMenu: $('#m-sub-menu'),\n wrapperMobile: $('#m-wrapper'),\n topButton: $('.m-footer__top'),\n mtabs: $('#mtabs'),\n mtabsShow: $('.m-show-tabs'),\n mtabsClose: $('.m-block-close'),\n mMenuCategory: $('#mMenuCategory'),\n mMenuCategoryShow: $('.m-menu-category-show'),\n init: function init() {\n var me = this;\n $(document).on('click', '.subclose', function () {\n me.mainMenu.removeClass('show');\n me.subMenu.removeClass('show').addClass('hide').empty();\n me.wrapperMobile.removeClass('hide');\n return false;\n });\n $(document).on('click', '.subback', function () {\n var parent = $(this).parent().parent();\n\n if ($(parent).siblings().length > 0) {\n $(parent).removeClass('show').addClass('hide');\n $(parent).prev().addClass('show');\n $(parent).remove();\n } else {\n me.mainMenu.addClass('show');\n me.subMenu.removeClass('show').addClass('hide').empty();\n }\n\n return false;\n });\n me.mainButton.bind('click', function () {\n if (me.wrapperMobile.hasClass('hide') && me.mainMenu.hasClass('show')) {\n me.mainMenu.removeClass('show');\n me.subMenu.removeClass('show').addClass('hide').empty();\n me.wrapperMobile.removeClass('hide');\n return false;\n }\n\n me.wrapperMobile.addClass('hide');\n\n if ($('.m-choice').hasClass('show')) {\n $('.m-choice').removeClass('show');\n }\n\n if (me.mMenuCategory.length > 0) {\n me.mMenuCategory.removeClass('show');\n }\n\n if (me.mtabs.length > 0) {\n me.mtabs.removeClass('show');\n }\n\n me.mainMenu.addClass('show');\n return false;\n });\n me.mainLinks.bind('click', function () {\n var url = $(this).attr('data-url');\n me.getMenuItems(url);\n me.subMenu.empty();\n return false;\n });\n me.topButton.bind('click', function () {\n $(window).scrollTo(0, 500);\n return false;\n });\n $(document).on('click', '.sublink', function () {\n var url = $(this).attr('data-url');\n me.getMenuItems(url);\n return false;\n });\n me.mtabsClose.bind('click', function () {\n me.mtabsClose.parent().parent().removeClass('show');\n me.wrapperMobile.removeClass('hide');\n return false;\n });\n me.mtabsShow.bind('click', function () {\n me.wrapperMobile.addClass('hide');\n me.mtabs.addClass('show');\n return false;\n });\n me.mMenuCategoryShow.bind('click', function () {\n me.wrapperMobile.addClass('hide');\n me.mMenuCategory.addClass('show');\n return false;\n });\n },\n getMenuItems: function getMenuItems(url) {\n var me = this;\n $.ajax({\n url: '/getsubmenu',\n data: {\n query: url\n },\n dataType: 'json',\n success: function success(data) {\n $($.templates(\"#subTmpl\").render(data)).appendTo(me.subMenu);\n $('#submenu_' + data.Url).addClass('show');\n me.mainMenu.removeClass('show');\n $('#submenu_' + data.Url).siblings().removeClass('show');\n me.subMenu.removeClass('hide').addClass('show');\n $(document).scrollTop(0);\n }\n });\n }\n};\n$(function () {\n pt.func.initOverlay();\n mobileMenu.init();\n var overlay = $('.js-m-overlay'),\n header = $('.header'),\n topButton = $('.top-page-button'),\n search = $('.header__search-input');\n search.focus(function () {\n if ($(document).width() > 740) {\n return false;\n }\n\n header.addClass('upper');\n overlay.show();\n });\n search.blur(function () {\n if ($(document).width() > 740) {\n return false;\n }\n\n header.removeClass('upper');\n overlay.hide();\n });\n $(window).scroll(function () {\n if ($(window).scrollTop() > 300 && topButton.length > 0) {\n topButton.fadeIn('slow');\n } else {\n if (topButton.length > 0) {\n topButton.fadeOut('slow');\n }\n }\n });\n topButton.bind('click', function () {\n $(window).scrollTo(0, 500);\n return false;\n });\n});\n\n$.fn.delayKeyup = function (callback, ms) {\n var timer = 0;\n var el = $(this);\n $(this).keyup(function () {\n clearTimeout(timer);\n timer = setTimeout(function () {\n callback(el);\n }, ms);\n });\n return $(this);\n};","\"use strict\";\n\nymWidgetLoader = {\n ymWidgetSrc: 'https://aflt.market.yandex.ru/widget/script/loader',\n ymw: $('#ymarket-widget-wrapper'),\n ptw: $('#shops-block-wrapper'),\n sort: $('#sort-block-wrapper'),\n msort: $('#m-sort-block-wrapper'),\n mcitySelect: $('#m-city-select-wrap'),\n overviewYmWidgets: $('.overview-ymw'),\n overviewPtWidgets: $('.overview-ptw'),\n ymWidgetScript: $('#ym-widget-script'),\n offersInitFunc: function offersInitFunc() {},\n experimentLoadPtWidget: false,\n timeout: 4000,\n init: function init(offersInitFunc, experimentLoadPtWidget, timeout) {\n this.timeout = timeout == null ? this.timeout : timeout;\n this.offersInitFunc = offersInitFunc == null ? this.offersInitFunc : offersInitFunc;\n this.experimentLoadPtWidget = experimentLoadPtWidget;\n var me = this;\n setTimeout(function () {\n if (!me.ymWidgetIsload()) {\n me.loadYmWidget();\n me.loadOffers();\n }\n }, me.timeout);\n },\n ymWidgetIsload: function ymWidgetIsload() {\n var overviewWidgetIsLoad = false;\n\n if (this.overviewYmWidgets && this.overviewYmWidgets.length > 0) {\n //проверяем загрузку только 1 виджета, так как в хроме 2 еще не отрисован и неимеет высоты\n overviewWidgetIsLoad = $(this.overviewYmWidgets[0]).find(\"iframe\").height() > 1;\n }\n\n return (this.ymw.find('iframe').height() > 1 || overviewWidgetIsLoad) && this.experimentLoadPtWidget;\n },\n loadYmWidget: function loadYmWidget() {\n var script = document.createElement('script');\n script.src = this.ymWidgetSrc;\n document.head.appendChild(script);\n this.ymWidgetScript.remove();\n\n if (this.overviewYmWidgets && this.overviewYmWidgets.length > 0) {\n this.overviewYmWidgets.each(function () {\n $(this).find(\"iframe\").remove();\n });\n }\n\n this.ymw.find('iframe').remove();\n },\n loadOffers: function loadOffers() {\n var me = this;\n setTimeout(function () {\n if (!me.ymWidgetIsload()) {\n me.showPtWidget();\n me.hideYmWidget();\n me.offersInitFunc();\n }\n }, me.timeout);\n },\n hideYmWidget: function hideYmWidget() {\n var me = this;\n\n if (me.overviewYmWidgets && me.overviewYmWidgets.length > 0) {\n me.overviewYmWidgets.each(function () {\n $(this).hide();\n });\n }\n\n me.ymw.hide();\n },\n showPtWidget: function showPtWidget() {\n var me = this;\n me.ptw.removeClass('hidden');\n if (me.sort != null) me.sort.removeClass('hidden');\n if (me.overviewPtWidgets && me.overviewPtWidgets.length > 0) me.overviewPtWidgets.each(function () {\n $(this).removeClass(\"hidden\");\n });\n if (me.sort != null) me.sort.removeClass('hidden');\n if (me.mcitySelect != null) me.mcitySelect.removeClass('hidden');\n }\n};"]}
    ');\n cols.push('