{"version":3,"sources":["webpack:///users.min.js","webpack:///./modules/reviews/common/components.js","webpack:///./modules/reviews/common/templates/review-item-mobile.html","webpack:///./modules/reviews/common/model/reviewitem.js","webpack:///external \"jQuery\"","webpack:///./core/widgets/notifier.js","webpack:///./core/utils/event.js","webpack:///./core/utils/logger.js","webpack:///external \"ko\"","webpack:///./modules/users/view/index.js","webpack:///./lib/autosize/index.js","webpack:///./modules/reviews/common/templates/review-comment.html","webpack:///./core/utils/url.js","webpack:///./modules/reviews/common/model/reviewitemmobile.js","webpack:///(webpack)/buildin/global.js","webpack:///../../node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./modules/reviews/common/model/likers.js","webpack:///../../node_modules/framebus/dist/framebus.js","webpack:///./modules/reviews/common/templates/review-item.html","webpack:///./modules/reviews/common/model/reviewcomment.js","webpack:///./core/utils/lang.js","webpack:///./core/utils/globals.js","webpack:///./core/auth.js","webpack:///./modules/reviews/common/templates/review-list.html","webpack:///external \"_\"","webpack:///./core/utils/location.js","webpack:///./core/modals.js","webpack:///./core/utils/utils.js","webpack:///./modules/reviews/common/model/reviewlistmobile.js","webpack:///./core/utils/var.js","webpack:///./core/widgets/dialog.js","webpack:///./core/events.js","webpack:///external \"toastr\"","webpack:///./modules/reviews/common/model/reviewlist.js","webpack:///./modules/reviews/common/templates/review-list-mobile.html","webpack:///./core/utils/modal.js","webpack:///../../node_modules/smart-plurals/dist/Smart.Plurals.node/Smart.Plurals.node-all.js","webpack:///./lib/fancybox/index.js","webpack:///./lib/zinfinitescroll/index.js","webpack:///../../node_modules/autosize/dist/autosize.js"],"names":["zde","webpackJsonpzde_modules__name_","+KrN","module","__webpack_exports__","__webpack_require__","__WEBPACK_IMPORTED_MODULE_0_lib_knockout__","__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default","n","__WEBPACK_IMPORTED_MODULE_1__model_reviewitem__","__WEBPACK_IMPORTED_MODULE_2__model_reviewcomment__","__WEBPACK_IMPORTED_MODULE_3__model_reviewlist__","__WEBPACK_IMPORTED_MODULE_4__model_reviewitemmobile__","__WEBPACK_IMPORTED_MODULE_5__model_reviewlistmobile__","a","components","register","viewModel","createViewModel","params","template","/+4D","exports","/ryK","_classCallCheck","instance","Constructor","TypeError","d","ReviewItem","__WEBPACK_IMPORTED_MODULE_0_lib_underscore__","__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default","__WEBPACK_IMPORTED_MODULE_1_jquery__","__WEBPACK_IMPORTED_MODULE_1_jquery___default","__WEBPACK_IMPORTED_MODULE_4__likers__","__WEBPACK_IMPORTED_MODULE_5__reviewcomment__","__WEBPACK_IMPORTED_MODULE_6_core_auth__","__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__","__WEBPACK_IMPORTED_MODULE_8_core_utils_url__","__WEBPACK_IMPORTED_MODULE_10__core_modals__","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","data","_this","this","_parent","ko","observable","parent","_showImage","showImages","_showVideo","showVideos","_author","author","_comments","observableArray","comments","map","_newComment","NewComment","comment","push","_likers","id","likes","my_like","is_sale","_onClick","Callbacks","collapsed","titleUrl","pureComputed","isDetails","is_question","url","package_info","order_id","displayHtml","text","isBodyLess","isClosed","closed","isAuthorHidden","handleClick","bind","afterRender","currentUser","roleId","_forWhom","for_whom","forWhomTitle","result","parseInt","subscribe","changeClosed","value","autoplay","arguments","undefined","video_url","e","$target","$currentTarget","currentTarget","is","hasClass","fireWith","anchor","showImage","$element","parents","$userInfo","find","$likeButton","$inlineContainer","addClass","append","handler","add","remove","confirm","deleteItem","_this2","show","response","updatedValues","title","product_name","category_id","date","date_human","_forceRedraw","forsale","rating","image_preview","preview","_this3","post","state","success","_this4","error","reviews","replace","get","review","callback","_this5","inputHasFocus","isSaveButtonVisible","_review","_textTrimmed","trimmed","_onSave","computed","_this6","user","parentId","postData","comments_page_id","comments_content","fail","errorXHR","done","comments_id","comments_date","comments_date_human","is_editable","fire","parent_id","comment_type","0iPh","jQuery","22","2uje","Notifier","__WEBPACK_IMPORTED_MODULE_0_lib_toastr__","__WEBPACK_IMPORTED_MODULE_0_lib_toastr___default","__WEBPACK_IMPORTED_MODULE_1__utils_utils__","__WEBPACK_IMPORTED_MODULE_2__utils_var__","_extends","assign","source","hasOwnProperty","call","t","window","top","toastr","message","options","timeOut","jqXHR","textStatus","errorThrown","info","warning","49+S","GlobalEvent","__WEBPACK_IMPORTED_MODULE_0_framebus__","__WEBPACK_IMPORTED_MODULE_1__logger__","name","_name","toString","log","_getSubscription","on","off","Subscription","_handler","5wqq","newLogger","MyLogger","defaultLevel","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","err","Array","isArray","LEVELS","IS_PRODUCTION","level","_level","_dummy","setLevel","Number","isInteger","indexOf","condition","methodName","console","bindSimple","forEach","method","lvl","args","label","callable","time","timeEnd","profile","profileEnd","7fPx","BP4H","init","o","userId","principalsCount","followersCount","isFollower","history","scrollRestoration","logger","$userWrapper","__WEBPACK_IMPORTED_MODULE_0_jquery___default","ViewModel","__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default","applyBindings","__WEBPACK_IMPORTED_MODULE_0_jquery__","__WEBPACK_IMPORTED_MODULE_1_lib_knockout__","__WEBPACK_IMPORTED_MODULE_2_core_utils_logger__","__WEBPACK_IMPORTED_MODULE_3_core_utils_url__","__WEBPACK_IMPORTED_MODULE_5_modules_reviews_common_model_reviewlist__","__WEBPACK_IMPORTED_MODULE_7__core_widgets_notifier__","$wrapper","tabMyReviews","Tab","tabCommentsGiven","tabLikesGiven","tabLikesReceived","tabCommentsReceived","tabAllReviews","tabFollowers","tabFollowing","activeTab","users","isLoading","_infScroll","_page","_loading","showMyReviewsTab","_showTab","showCommentsGivenTab","showLikesGivenTab","showLikesReceivedTab","showCommentsReceivedTab","showAllReviewsTab","showFollowers","showFollowing","reviewList","infScrollWrapper","columns","model","event","targetId","USER_ID","sourceId","location","reload","followers","showLogin","toggleFollowers","tab","clear","colIndex","type","filters","mode","with_image","load","_loadUsers","_setUsers","u","UserItem","_data","following","fing_cnt","fers_cnt","E27B","__WEBPACK_IMPORTED_MODULE_0_autosize__","__WEBPACK_IMPORTED_MODULE_0_autosize___default","__WEBPACK_IMPORTED_MODULE_2_jquery__","__WEBPACK_IMPORTED_MODULE_2_jquery___default","autosize","fn","each","el","$el","deferInit","one","bindingHandlers","element","valueAccessor","allBindings","bindingContext","unwrap","update","clearTimeout","setTimeout","utils","domNodeDisposal","addDisposeCallback","FA3v","FYi7","siteUrl","_len","more","_key","isAbsoluteUrlRegex","test","joinPath","apply","concat","BASE_URL","_len2","values","_key2","query","queryString","fragment","processValue","v","isObject","__WEBPACK_IMPORTED_MODULE_2__var__","trim","substr","join","isEmpty","q","buildQuery","isAbsolute","queryData","__WEBPACK_IMPORTED_MODULE_1__location__","highlightUrls","maxlength","s","st","slice","prefix","val","startsWith","postfix","endsWith","UrlParser","UrlBuilder","_typeof","obj","constructor","base_url","_a","document","createElement","href","origin","protocol","host","hostname","port","pathname","search","hash","path","_protocol","_host","_port","_path","_query","_hash","set","FZjg","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","ReviewItemMobile","__WEBPACK_IMPORTED_MODULE_0__reviewitem__","_ReviewItem","infScrollDistance","getPrototypeOf","opened","afterCommentRender","_afterCommentRender","newComment","_onCommentAddButtonToggle","$panel","$","_setCommentsPanelSize","height","innerHeight","buttonHeight","outerHeight","css","$content","item","$toggler","siblings","GTd5","g","Function","eval","GfF8","_run","opts","attr","index","items","isDefaultPrevented","preventDefault","selector","filter","fancybox","open","defaults","loop","margin","gutter","keyboard","arrows","infobar","toolbar","buttons","idleTime","smallBtn","protect","modal","image","preload","ajax","settings","iframe","tpl","scrolling","defaultType","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","download","zoom","close","arrowLeft","arrowRight","parentEl","autoFocus","backFocus","trapFocus","fullScreen","autoStart","touch","vertical","momentum","media","slideShow","speed","thumbs","hideOnClose","axis","wheel","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","current","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","DOWNLOAD","SHARE","ZOOM","de","$W","$D","called","isQuery","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","transitionEnd","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","offsetHeight","FancyBox","content","extend","isMobile","group","currIndex","prevIndex","prevPos","currPos","firstRun","createGroup","$lastFocus","activeElement","blur","slides","$scrollDiv","$container","buttonStr","firstItem","firstItemOpts","scrollbarWidth","scrollTop","scrollLeft","getInstance","navigator","userAgent","MSStream","body","scrollHeight","appendTo","offsetWidth","clientWidth","translate","$refs","container","trigger","activate","jumpTo","str","match","makeArray","$item","found","src","srcParts","isPlainObject","$orig","videoFormat","charAt","$thumb","caption","split","shift","inArray","addEvents","removeEvents","stopPropagation","previous","isScaledDown","originalEvent","stage","hide","isClosing","has","focus","keycode","keyCode","which","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","isDragging","hideControls","clearInterval","duration","pos","slide","canvasWidth","currentPos","transitionProps","groupLen","isAnimating","createSlide","updateControls","getTranslate","$slide","isMoved","left","forcedDuration","isNumeric","removeClass","loadSlide","stop","Math","round","width","animate","removeAttr","complete","children","isLoaded","revealContent","isComplete","updateSlide","scaleToActual","x","y","imgPos","posX","posY","scaleX","scaleY","$what","canvasHeight","newImgWidth","newImgHeight","hasError","updateCursor","SlideShow","isActive","scaleToFit","end","getFitPos","minRatio","imgWidth","imgHeight","min","floor","setTranslate","centerSlide","opacity","nextWidth","nextHeight","isZoomable","fitPos","isFunction","rez","canPan","abs","ajaxLoad","setImage","setIframe","setContent","setError","showLoading","abort","temp","pxRatio","windowWidth","srcset","devicePixelRatio","innerWidth","ret","substring","sort","b","j","thumb","$ghost","setBigImage","$img","$image","timouts","naturalWidth","naturalHeight","hideLoading","max","readyState","$iframe","Date","getTime","isReady","scrollWidth","$contents","$body","$wrap","frameWidth","frameHeight","contents","ignore","contentWindow","documentElement","ceil","outerWidth","prepend","empty","$placeholder","insertAfter","nodeType","html","after","$smallBtn","$spinner","first","button","effect","effectClassName","start","getThumbPos","slidePos","thumbPos","offset","ownerDocument","elementRect","getBoundingClientRect","parentRects","parentElement","every","parentRect","visiblePixelX","right","visiblePixelY","bottom","parseFloat","prev","isVisible","cleanUp","unshift","force","$caption","isHiddenControls","prop","toggleClass","toggleControls","version","command","all","destroy","createTouch","use3d","div","getComputedStyle","getPropertyValue","documentMode","matrix","eq","transRegex","transRez","exec","position","transform","to","leaveAnimationName","propertyName","format","param","youtube","matcher","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","api","metacafe","dailymotion","additionalInfos","vine","instagram","gmap_place","gmap_search","urlParams","paramObj","providerName","providerOpts","m","p","decodeURIComponent","contentProvider","provider","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","pointers","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","hasScrollbars","overflowY","overflowX","clientHeight","horizontal","isScrollable","Guestures","$bg","bg","$stage","proxy","ontouchstart","isTouchDevice","realPoints","startPoints","startEvent","canTap","isPanning","isSwiping","isZooming","isScrolling","sliderStartPos","sliderLastPos","contentStartPos","contentLastPos","startTime","distanceX","distanceY","addEventListener","onscroll","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","ontouchmove","newPoints","onSwipe","onPan","onZoom","angle","swiping","requestId","atan2","PI","inTransition","limitMovement","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","newOffsetX","newOffsetY","currentOffsetX","currentOffsetY","currentWidth","currentHeight","limitPosition","newWidth","newHeight","endDistanceBetweenFingers","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","translateFromTranslatingY","newPos","ontouchend","dMs","panning","zooming","endPoints","removeEventListener","onTap","velocityX","velocityY","speedX","endPanning","endZooming","endSwiping","len","reset","where","tapX","tapY","process","action","addBack","tapped","timer","$button","toggle","onInit.fb","beforeShow.fb","afterShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","fnMap","FullScreen","request","elem","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","exitFullscreen","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","beforeClose.fb","fullscreenchange","FancyThumbs","$grid","$list","Thumbs","second","list","widthRatio","heightRatio","$parent","thumbWidth","thumbHeight","margin-top","margin-left","escapeHtml","string","entityMap","&","<",">","\"","'","/","`","=","String","share","f","encodeURIComponent","click","parseUrl","pop","gallery","triggerFromUrl","escapeSelector","shouldCreateHistory","getGalleryID","sel","ch","asCodePoint","charCodeAt","currentHash","timerID","origHash","replaceState","prevTime","currTime","deltaY","deltaX","wheelDelta","detail","HNTF","TYPE_REVIEW_LIKE","TYPE_COMMENT_LIKE","TYPE_SALE_LIKE","Likers","__WEBPACK_IMPORTED_MODULE_1_core_auth__","__WEBPACK_IMPORTED_MODULE_2_core_widgets_notifier__","__WEBPACK_IMPORTED_MODULE_4__core_utils_lang__","reviewId","likesCount","myLike","visible","loading","likers","likesCountUsersText","_saveUrl","_getLikersUrl","_load","myAction","total","Oe2b","global","root","factory","include","popup","Window","popups","targetedFramebus","framebus","_origin","publish","payload","_getOrigin","_isntString","_packagePayload","_broadcast","win","_subscriptionArgsInvalid","subscribers","unsubscribe","subscriberList","splice","scope","packaged","reply","_subscribeReplier","JSON","stringify","Error","_unpackPayload","replyOrigin","replySource","replyEvent","parse","replyPayload","postMessage","_uuid","c","r","random","_onmessage","_dispatch","_broadcastPopups","_hasOpener","frame","opener","frames","_","replier","uuid","w","attachEvent","onmessage","pub","emit","sub","unsub","QQLA","R7O4","ReviewComment","__WEBPACK_IMPORTED_MODULE_0__likers__","__WEBPACK_IMPORTED_MODULE_1__core_auth__","__WEBPACK_IMPORTED_MODULE_2__core_modals__","__WEBPACK_IMPORTED_MODULE_4_core_widgets_notifier__","best","deleteComment","RaK1","asHtml","phrase","__WEBPACK_IMPORTED_MODULE_2__globals__","tmpl","keyParam","escapeRegExp","pluralRegex","RegExp","pluralize","replacement","count","varName","varValue","parts","pluralRule","__WEBPACK_IMPORTED_MODULE_1_smart_plurals___default","Plurals","getRule","LANG","part","__WEBPACK_IMPORTED_MODULE_1_smart_plurals__","controlsDescendantBindings","setHtml","TxBK","globals","defaultValue","_globals","__WEBPACK_IMPORTED_MODULE_0__var__","phrases","_phrases","UpRQ","ensureLoggedIn","IS_LOGGED_IN","__WEBPACK_IMPORTED_MODULE_0__modals__","UserInfo","__WEBPACK_IMPORTED_MODULE_1__utils_globals__","__WEBPACK_IMPORTED_MODULE_2__events__","USER_LOGGED_IN","USER_NAME","fullName","USER_BLOG_NAME","blogName","IS_CUSTOMER","isCustomer","Vmcm","X0GP","XRua","buildUrl","numeric_prefix","tmp","isNaN","http_build_query_helper","urlencode","addQuery","appendQuery","processQuery","hashQuery","decodeQueryString","isObj","k","newData","glue1","glue2","array","array2","chr","bracket","keys","evalStr","fixStr","arg_separator","sk","num","XXni","YdFU","MODAL_LOGIN","MODAL_ASK_REDIRECT","MODAL_CRITICAL_NEWS","MODAL_REVIEW","MODAL_REVIEW_EDIT","MODAL_QUESTION_EDIT","MODAL_REVIEW_COMMENT_EDIT","MODAL_CREATE_COMPUTER_ORDER","MODAL_FILIALIST_ORDER_PAGE","MODAL_FILIALIST_EXCLUDE_FROM_PARCEL","MODAL_FILIALIST_FREE_ORDERS_EDIT","MODAL_FILIALIST_CREATE_TODO","MODAL_FILIALIIST_REASSIGN_PACKAGES_TO_CUSTOMERS","MODAL_FILIALIST_CHANGE_ASSIGNMENT_CUSTOMER","MODAL_FILIALIST_EDIT_ASSIGNMENT","MODAL_FILIALIST_GET_ASSIGNMENT_MEEST_DATA","MODAL_FILIALIST_BATCH_PAYMENT","MODAL_FILIALIST_SET_PACKAGE_KINDS","MODAL_FILIALIST_SET_MEEST_ADDRESS_ALIASES","MODAL_ADMIN_REPLENISH_BALANCE","MODAL_ADMIN_BATCH_PAYMENT","MODAL_ADMIN_IMPORT_BANK_STATEMENT","MODAL_ADMIN_VALIDATE_INVOICE_CSV","MODAL_ADMIN_SHOP_BANK_STATEMENT_KEYWORDS","MODAL_PACKAGE_INFO","MODAL_SELECT_SHOP_CATEGORY","__WEBPACK_IMPORTED_MODULE_0__utils_modal__","onClose","packageId","initialValues","package_id","customerId","customer_id","ids","account","rate","cities","streets","pendingReplenihmentId","boundBankTransactionId","suggestionBondId","pending_replenihment_id","bound_bank_transaction_id","suggestion_bond_id","accountSource","accountTarget","amount","groupIds","boundBankTransactionIds","account_source","account_target","group_ids","bound_bank_transaction_ids","YnTO","checkIsIframe","_isMobile","isTouchScreen","_isTouchScreen","isWebpFeatureSupported","feature","Promise","resolve","reject","WEBP_FEATURES","includes","kTestImages","lossy","lossless","alpha","animation","img","Image","onload","onerror","msMaxTouchPoints","LOSSY","LOSSLESS","ALPHA","ANIMATION","cK6l","ReviewListMobile","__WEBPACK_IMPORTED_MODULE_0__reviewlist__","__WEBPACK_IMPORTED_MODULE_1__reviewitemmobile__","_ReviewList","cbSx","dTkA","isset","isUndefined","isNull","object","elementOrDefault","elementOrDash","orDefault","asNumber","asBoolean","isBoolean","asString","asArray","delimiter","fokk","createIframeDialog","newDialog","__width","createHtmlDialog","showCloseButton","openHtmlDialog","autoOpen","createWindowDialog","getScrollBarWidth","$outer","visibility","overflow","widthWithScroll","hasScrollBar","dialogManager","__WEBPACK_IMPORTED_MODULE_0__dialog_less__","__WEBPACK_IMPORTED_MODULE_1_lib_underscore__","__WEBPACK_IMPORTED_MODULE_1_lib_underscore___default","__WEBPACK_IMPORTED_MODULE_2_lib_knockout__","__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default","__WEBPACK_IMPORTED_MODULE_3__utils_logger__","__WEBPACK_IMPORTED_MODULE_4__utils_utils__","__WEBPACK_IMPORTED_MODULE_5__utils_var__","zdialog","isInDom","closest","detach","dialog","onBeforeClose","zdialogInstance","ZDialog","_width","_height","_isModal","_isCloseBtnVisible","_isLoading","_isOpened","_isClosed","_isHidden","_contentHeight","_iframeHeight","_opened","_onOpen","_onClose","_onBeforeClose","_result","_o","onOpen","isOpened","_wnd","_handleWindowReady","onbeforeunload","isRegistered","isFullScreen","isAutoHeight","_heightWatcher","unregister","iframeHeight","HeightWatcher","contentHeight","dialogInstance","isModal","isTopmost","minWidth","maxWidth","custom","cssClass","DialogManager","_counter","_dialogs","_isClosing","_initialized","_wrapper","WindowWrapper","_$html","_$body","any","dialogs","_visibleDialogs","isHidden","_checkMarkupAfterOpen","_checkMarkupAfterClose","_timeout","visibleDialogs","_$el","cleanNode","contains","node","last","getTopmostDialog","_this7","_currHeight","_event","_ibody","updateHeight","_interval","getHeight","iHeight","_$wnd","_$head","_scrollTop","_scrollLeft","_$scrollBarStyle","_$positionStyle","_useFixedLayout","_applyPositionStyle","_applyScrollbarStyle","_hasScrollBar","scrollBarWidth","oFSp","__WEBPACK_IMPORTED_MODULE_0__view__","oHD7","GlobalEvents","__WEBPACK_IMPORTED_MODULE_0__utils_event__","og09","otQ7","ReviewList","__WEBPACK_IMPORTED_MODULE_2__reviewitem__","__WEBPACK_IMPORTED_MODULE_3_core_modals__","__WEBPACK_IMPORTED_MODULE_4_core_utils_url__","__WEBPACK_IMPORTED_MODULE_5__core_widgets_notifier__","__WEBPACK_IMPORTED_MODULE_6_lib_zinfinitescroll__","reviewCols","_filters","_xhr","_onLoad","_totalCount","_averageRating","columnsCount","calculateAverageRating","includeSales","_initInfScroll","_handleItemClick","_loadReviews","totalCount","averageRating","reviewsCopy","reviewItems","_addItems","hasMore","offClick","col","_reviewSizeSpot","onLoad","_prepareItems","onNeedMore","page","calculate_average_rating","include_sales","always","_this8","reviewItem","onClick","pushAll","reinit","$items","not","qQ5b","rItL","showModalIframe","dialogOptions","__WEBPACK_IMPORTED_MODULE_1__url__","__WEBPACK_IMPORTED_MODULE_2__widgets_dialog__","tXil","Smart","rules","defaultCode","defaultRule","languageCode","toLowerCase","languageCodes","isExactMatch","dash","twoLetterCode","setDefaultRule","defineRule","normalizedRule","choices","singular","zero","few","two","vBks","w2CW","__WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__","__WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__","ru","wC9f","InfiniteScroll","_clNeedMore","_$window","_eventHandler","blockEnd","windowHeight","windowScrollTop","isNearBottom","_needMore","_loadedMoreCallback","zInfiniteScroll","finished","$window","onScroll","inProgress","ready","isInViewport","checkViewport","loadRoutine","loadMore","getCurrentCount","maxAutoloadPages","currentPage","$btnShowMore","$loading","fetch","$blocks","isReloading","countPerPage","MAX_VALUE","btnShowMore","Throttler","period","xOlZ","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","ta","changeOverflow","getParentOverflows","parentNode","Element","resize","overflows","docTop","heightOffset","styleHeight","actualHeight","boxSizing","cachedHeight","evt","createEvent","dispatchEvent","pageResize","delete","wordWrap","paddingTop","paddingBottom","borderTopWidth","borderBottomWidth","methods","Map","Event","bubbles","initEvent","default"],"mappings":"AAAA,GAAIA,KAAMA,OAAWA,KAAa,QAAIA,IAAa,YAASA,IAAa,QAAS,MAClFC,gCAAgC,KAE1BC,OACA,SAAUC,EAAQC,EAAqBC,GAE7C,YACqB,IAAIC,GAA6CD,EAAoB,QACjEE,EAAqDF,EAAoBG,EAAEF,GAC3EG,EAAkDJ,EAAoB,QACtEK,EAAqDL,EAAoB,QACzEM,EAAkDN,EAAoB,QACtEO,EAAwDP,EAAoB,QAC5EQ,EAAwDR,EAAoB,OCNrGE,GAAAO,EAAGC,WAAWC,SAAS,eACtBC,WACCC,gBAAiB,SAAUC,GAC1B,MAAOA,aAAkBR,GAAA,EAAaQ,EAAS,GAAIR,GAAA,EAAWQ,KAGhEC,SAAUf,EAAQ,UAGnBE,EAAAO,EAAGC,WAAWC,SAAS,eACtBC,WACCC,gBAAiB,SAAUC,GAC1B,MAAOA,aAAkBV,GAAA,EAAaU,EAAS,GAAIV,GAAA,EAAWU,KAGhEC,SAAUf,EAAQ,UAGnBE,EAAAO,EAAGC,WAAWC,SAAS,kBACtBC,WACCC,gBAAiB,SAAUC,GAC1B,MAAOA,aAAkBT,GAAA,EAAgBS,EAAS,GAAIT,GAAA,EAAcS,KAGtEC,SAAUf,EAAQ,UAGnBE,EAAAO,EAAGC,WAAWC,SAAS,sBACnBC,WACIC,gBAAiB,SAAUC,GACvB,MAAOA,aAAkBN,GAAA,EAAmBM,EAAS,GAAIN,GAAA,EAAiBM,KAGlFC,SAAUf,EAAQ,UAGtBE,EAAAO,EAAGC,WAAWC,SAAS,sBACnBC,WACIC,gBAAiB,SAAUC,GACvB,MAAOA,aAAkBP,GAAA,EAAmBO,EAAS,GAAIP,GAAA,EAAiBO,KAGlFC,SAAUf,EAAQ,WDmBhBgB,OACA,SAAUlB,EAAQmB,GErExBnB,EAAAmB,QAAA,k8KF2EMC,OACA,SAAUpB,EAAQC,EAAqBC,GAE7C,YAiBA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAhBjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOyB,IAC9E,IAAIC,GAA+CzB,EAAoB,QACnE0B,EAAuD1B,EAAoBG,EAAEsB,GAC7EE,EAAuC3B,EAAoB,QAC3D4B,EAA+C5B,EAAoBG,EAAEwB,GAGrEE,GAF6C7B,EAAoB,QACrBA,EAAoB,QACxBA,EAAoB,SAC5D8B,EAA+C9B,EAAoB,QACnE+B,EAA0C/B,EAAoB,QAC9DgC,EAAsDhC,EAAoB,QAC1EiC,EAA+CjC,EAAoB,QAEnEkC,GADiDlC,EAAoB,QACvBA,EAAoB,SACvFmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MGhFnhBG,EAAb,WAIC,QAAAA,GAAY2B,GAAM,GAAAC,GAAAC,IAAAlC,GAAAkC,KAAA7B,GAAA6B,KAFlBC,QAAU,KAGTD,KAAKF,KAAOI,GAAGC,WAAWL,GAC1BE,KAAKC,QAAUH,EAAKM,OACpBJ,KAAKK,WAAaL,KAAKC,QAAQK,WAC/BN,KAAKO,WAAaP,KAAKC,QAAQO,WAC/BR,KAAKS,QAAU,GAAI/B,GAAA,SAASoB,EAAKY,QACjCV,KAAKW,UAAYT,GAAGU,gBAAgBd,EAAKe,SACtCxC,EAAAjB,EAAE0D,IAAIhB,EAAKe,SAAU,SAAA3C,GAAuB,MAAjBA,GAAEkC,OAAFL,EAAwB,GAAItB,GAAA,EAAcP,SAExE8B,KAAKe,YAAc,GAAIC,GAAWhB,KAAM,SAAAiB,GACvClB,EAAKY,UAAUO,KAAKD,KAErBjB,KAAKmB,QAAU,GAAI3C,GAAA,EAClBwB,KAAKoB,GACLtB,EAAKuB,MACLvB,EAAKwB,QACLxB,EAAKyB,QAAU/C,EAAA,EAAiBA,EAAA,GAEjCwB,KAAKwB,SAAWjD,EAAAnB,EAAEqE,YAEZzB,KAAK0B,UAAYxB,GAAGC,WAAWH,KAAKK,YACpCL,KAAK2B,SAAWzB,GAAG0B,aAClB,iBAAM7B,GAAKE,QAAQ4B,UACtB,KACC9B,EAAKD,OAAOgC,YAAc/B,EAAKD,OAAOiC,IAAMhC,EAAKD,OAAOkC,aAAaC,WAE1EjC,KAAKkC,YAAchC,GAAG0B,aAAa,iBAAMpC,QAAAZ,EAAA,GAAcmB,EAAKD,OAAOqC,QACnEnC,KAAKoC,WAAalC,GAAG0B,aAAa,kBAAO7B,EAAKD,OAAOqC,OAC/CnC,KAAKqC,SAAWnC,GAAGC,WAAWL,EAAKwC,QACnCtC,KAAKuC,gBAAkBvC,KAAKK,YAAiC,OAAnBP,EAAKY,OAAOU,GAE5DpB,KAAKwC,YAAcxC,KAAKwC,YAAYC,KAAKzC,MACzCA,KAAK0C,YAAc1C,KAAK0C,YAAYD,KAAKzC,MAElB,OAApB1D,IAAIqG,aAAkD,GAA1BrG,IAAIqG,YAAYC,SACrC5C,KAAK6C,SAAW3C,GAAGC,WAAWL,EAAKgD,UACnC9C,KAAK+C,aAAe7C,GAAG0B,aAAa,WAChC,GAAIoB,SACJ,QAAQC,SAASlD,EAAK8C,aAClB,IAAK,GACDG,EAAS,YACT,MACJ,KAAK,GACDA,EAAS,SACT,MACJ,KAAK,GACDA,EAAS,QACT,MACJ,KAAK,GACDA,EAAS,kBACT,MACJ,SACIA,EAAS,aAGjB,MAAOA,KAGXhD,KAAKqC,SAASa,UAAU,iBAAMnD,GAAKoD,kBA9D/C,MAAArE,GAAAX,IAAAuB,IAAA,cAAA0D,MAAA,WA0G6B,GAAhBC,GAAgBC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,IAAAA,UAAA,GACvBvB,EAAM/B,KAAKF,OAAO0D,SAItB,OAHIzB,IAAOsB,IACVtB,GAAO,eAEDA,KA/GTrC,IAAA,cAAA0D,MAAA,SAkHatD,EAAM2D,GACjB,GAAMC,GAAUnF,IAAEkF,EAAEzE,QACd2E,EAAiBpF,IAAEkF,EAAEG,cAE3B,SAAI5D,KAAKF,OAAOyB,aAKXmC,EAAQG,GAAG,OAAQF,EAAeG,SAAS,gBAAoBJ,EAAQI,SAAS,0BAKrF9D,KAAKwB,SAASuC,SAAS/D,MAAOA,QACjB,OAjIfN,IAAA,cAAA0D,MAAA,SAoIaY,GACX,IAAIhE,KAAKiE,UAAW,CACV,GAAMC,GAAW3F,IAAEyF,GAAQG,QAAQ,gBAC7BC,EAAYF,EAASG,KAAK,6BAC1BC,EAAcJ,EAASG,KAAK,6BAE5BE,EAAmBhG,IAAE,uCAE3B6F,GAAUI,SAAS,oBACnBF,EAAYE,SAAS,sBACrBD,EAAiBE,OAAOL,GAAWK,OAAOH,GACvCtE,KAAKoC,aACJ8B,EAASG,KAAK,wCAAwCI,OAAOF,GAEhEL,EAASG,KAAK,gBAAgBI,OAAOF,OAlJlD7E,IAAA,UAAA0D,MAAA,SAuJSsB,GACP1E,KAAKwB,SAASmD,IAAID,MAxJpBhF,IAAA,WAAA0D,MAAA,SA2JUsB,GACR1E,KAAKwB,SAASoD,OAAOF,MA5JvBhF,IAAA,SAAA0D,MAAA,WAgKEpD,KAAK0B,WAAU,MAhKjBhC,IAAA,SAAA0D,MAAA,WAoKWyB,QAAQ,2CACP7E,KAAKC,QAAQ6E,WAAW9E,SArKpCN,IAAA,OAAA0D,MAAA,WAyKQ,GAAA2B,GAAA/E,IACHA,MAAKF,OAAOgC,YACLjD,EAAA,oBAAoBmG,KAAKhF,KAAKoB,GAAI,SAAA6D,GAC9B,GAAGA,GAAYA,EAASC,cAAe,CACnC,GAAMpF,GAAOiF,EAAKjF,MAElBA,GAAKqF,MAAQF,EAASC,cAAcE,aACpCtF,EAAKqC,KAAO8C,EAASC,cAAc/C,KACnCrC,EAAKuF,YAAcpC,SAASgC,EAASC,cAAcG,aAChDJ,EAASC,cAAcI,OACtBxF,EAAKwF,KAAOL,EAASC,cAAcI,KACnCxF,EAAKyF,WAAaN,EAASC,cAAcK,YAG7CR,EAAKjF,KAAKA,GAENiF,EAAKd,WACRc,EAAKS,kBAKd3G,EAAA,kBAAkBmG,KAAKhF,KAAKoB,GAAI,QAAU,SAAA6D,GACtC,GAAGA,GAAYA,EAASC,cAAe,CACnC,GAAMpF,GAAOiF,EAAKjF,MAEfmF,GAASC,cAAcE,eACtBtF,EAAKqF,MAAQF,EAASC,cAAcE,cAExCtF,EAAKqC,KAAO8C,EAASC,cAAc/C,KACnCrC,EAAKuF,YAAcpC,SAASgC,EAASC,cAAcG,aACnDvF,EAAK2F,QAAUxC,SAASgC,EAASC,cAAcO,SAC/C3F,EAAK4F,OAASzC,SAASgC,EAASC,cAAcQ,QAC3CT,EAASC,cAAcS,gBACtB7F,EAAK8F,QAAUX,EAASC,cAAcS,eAG1CZ,EAAKjF,KAAKA,GAENiF,EAAKd,WACLc,EAAKS,qBAjN7B9F,IAAA,gBAAA0D,MAAA,WAwNiB,GAAAyC,GAAA7F,IACTzB,GAAAnB,EAAE0I,KAAKtG,OAAAZ,EAAA,GAAQ,0BAEnBwC,GAAIpB,KAAKoB,GACT2E,MAAO/F,KAAK6C,YAEb,SAAAoC,GACaA,EAASe,SACRH,EAAKhD,SAASoC,EAASc,QAGrC,WAnOHrG,IAAA,eAAA0D,MAAA,WAwOE7E,EAAAnB,EAAE0I,KACDtG,OAAAZ,EAAA,GAAQ,yBAEPwC,GAAIpB,KAAKoB,GACT2E,MAAO/F,KAAKqC,WAAa,EAAI,GAErB,SAAA4C,KACT,WA/OHvF,IAAA,gBAAA0D,MAAA,SAoPenC,GAAS,GAAAgF,GAAAjG,IAChBzB,GAAAnB,EAAE0I,KAAKtG,OAAAZ,EAAA,GAAQ,2BACVwC,GAAIH,EAAQG,IACb,SAAA6D,GACOA,EAASe,QACRC,EAAKtF,UAAUiE,OAAO3D,GAEzBtC,EAAA,EAASuH,SAGd,WA9PZxG,IAAA,eAAA0D,MAAA,WAmQEpD,KAAKC,QAAQkG,QAAQC,QAAQpG,KAAM,GAAI7B,GAAW6B,KAAKF,YAnQzDJ,IAAA,KAAA2G,IAAA,WAmEE,MAAOrG,MAAKF,OAAOsB,MAnErB1B,IAAA,SAAA2G,IAAA,WAwEE,MAAOrG,MAAKS,WAxEdf,IAAA,WAAA2G,IAAA,WA6EE,MAAOrG,MAAKW,eA7EdjB,IAAA,aAAA2G,IAAA,WAkFE,MAAOrG,MAAKe,eAlFdrB,IAAA,SAAA2G,IAAA,WAuFE,MAAOrG,MAAKmB,WAvFdzB,IAAA,YAAA2G,IAAA,WA4FE,MAAOrG,MAAKK,cA5FdX,IAAA,YAAA2G,IAAA,WAiGE,MAAOrG,MAAKO,cAjGdb,IAAA,gBAAA2G,IAAA,WAsGE,MAAOrG,MAAKC,QAAQ4B,cAtGtB1D,KAuQM6C,EH0IW,WGpIhB,QAAAA,GAAYsF,EAAQC,GAAU,GAAAC,GAAAxG,IAAAlC,GAAAkC,KAAAgB,GAAAhB,KAL9BmC,KAAOjC,GAAGC,WAAW,IAKSH,KAH9ByG,cAAgBvG,GAAGC,YAAW,GAGAH,KAF9B0G,oBAAsB,KAGrB1G,KAAK2G,QAAUL,EACftG,KAAK4G,aAAe5G,KAAKmC,KAAK0E,UAC9B7G,KAAK8G,QAAUvI,EAAAnB,EAAEqE,YACb8E,GACHvG,KAAK8G,QAAQnC,IAAI4B,GAEZvG,KAAK0G,oBAAsBxG,GAAG6G,SAAS,WAEnC,MAAOP,GAAKI,eAAezH,OAAS,IH0N/C,MAzEAL,GAAakC,IACZtB,IAAK,OACL0D,MAAO,WG/ID,GAAA4D,GAAAhH,IACDA,MAAK4G,eAAezH,QAGzBK,OAAAd,EAAA,gBAAe,SAAAuI,GACd,GAAMC,GAAWF,EAAKL,QAAQvF,GACxBe,EAAO6E,EAAKJ,eACdO,QAEJH,GAAK7E,KAAK,IACL6E,EAAKL,QAAQ7G,OAAOyB,SA4BxB4F,GACCC,iBAAkBF,EAClBG,iBAAkBlF,GAEnB5D,EAAAnB,EAAE0I,KAAKtG,OAAAZ,EAAA,GAAQ,sBAAuBuI,EAAU,KAAM,QACpDG,KAAK3I,EAAA,EAAS4I,UACdC,KAAK,SAAAvC,GACL,GAAKA,GAAaA,EAASe,QAEpB,CACN,GAAM/E,GAAU,GAAIxC,GAAA,GACnB2C,GAAI6D,EAAShE,QAAQwG,YACrBtF,KAAMA,EACNzB,OAAQuG,EACR3B,KAAML,EAAShE,QAAQyG,cACvBnC,WAAYN,EAAShE,QAAQ0G,oBAC7BtG,MAAO,KACPC,SAAS,EACTsG,aAAa,EACbxH,OAAQ4G,EAAKL,SAEdK,GAAKF,QAAQe,KAAK5G,GAClBtC,EAAA,EAASqH,QAAQ,6BAdjBrH,GAAA,EAASuH,MAAMjB,EAAWA,EAASiB,MAAQ,UAnC9CiB,GACChF,OACA2F,UAAWZ,EACXa,aAAc,UAEfxJ,EAAAnB,EAAE0I,KAAKtG,OAAAZ,EAAA,GAAQ,wBAAyBuI,EAAU,KAAM,QACtDG,KAAK3I,EAAA,EAAS4I,UACdC,KAAK,SAAAvC,GACL,GAAKA,GAAaA,EAASe,QAEpB,CACN,GAAM/E,GAAU,GAAIxC,GAAA,GACnB2C,GAAI6D,EAAS7D,GACbe,KAAMA,EACNzB,OAAQuG,EACR3B,KAAML,EAASK,KACfC,WAAYN,EAASM,WACrBlE,MAAO,EACPC,SAAS,EACTsG,aAAa,EACbxH,OAAQ4G,EAAKL,SAEdK,GAAKF,QAAQe,KAAK5G,GAClBtC,EAAA,EAASqH,QAAQ,6BAdjBrH,GAAA,EAASuH,MAAMjB,EAAWA,EAASiB,MAAQ,cH4LhDxG,IAAK,SACL0D,MAAO,SG9IDmD,GACNvG,KAAK8G,QAAQnC,IAAI4B,OHkJXvF,MAKFgH,OACA,SAAUvL,EAAQmB,GIngBxBnB,EAAAmB,QAAAqK,QJygBMC,GACA,SAAUzL,EAAQmB,EAASjB,GAEjCA,EAAoB,QACpBF,EAAOmB,QAAUjB,EAAoB,SAK/BwL,OACA,SAAU1L,EAAQC,EAAqBC,GAE7C,YAUA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCATjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO0L,IAC9E,IAAIC,GAA2C1L,EAAoB,QAC/D2L,EAAmD3L,EAAoBG,EAAEuL,GACzEE,EAA6C5L,EAAoB,QACjE6L,EAA2C7L,EAAoB,QACpF8L,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IAEnPF,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MKzhB1hB8K,EAAItJ,OAAA+I,EAAA,KAAkBQ,OAAOC,IAAIC,OAASX,EAAAlL,EAKnCgL,EAAb,mBAAAA,KAAAtK,EAAAkC,KAAAoI,GAAA,MAAAtJ,GAAAsJ,EAAA,OAAA1I,IAAA,QAAA0D,MAAA,WAC4D,GAA9C8F,GAA8C5F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAApC,KAAM6B,EAA8B7B,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6F,EAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAE9C8F,EAAUD,EAAU3J,OAAAgJ,EAAA,GAAUW,EAAQC,QAAS,KAAS,GAC9DN,GAAE5C,MAAM1G,OAAAgJ,EAAA,GAAUU,EAPF,UAOuB/D,EAAvCsD,GAAgDW,WAAYD,OAJ9DzJ,IAAA,WAAA0D,MAAA,SAOiBiG,EAAOC,EAAYC,GACjB,SAAdD,GACFlB,EAASlC,MAXU,kCAEtBxG,IAAA,OAAA0D,MAAA,SAaa8F,GAAuC,GAA9B/D,GAA8B7B,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6F,EAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5CwF,GAAEU,KAAKN,EAAS/D,EAAhBsD,KAA2BU,OAd7BzJ,IAAA,UAAA0D,MAAA,SAiBgB8F,GAAuC,GAA9B/D,GAA8B7B,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6F,EAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC/CwF,GAAE9C,QAAQkD,EAAS/D,EAAnBsD,KAA8BU,OAlBhCzJ,IAAA,UAAA0D,MAAA,SAqBgB8F,GAAuC,GAA9B/D,GAA8B7B,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6F,EAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC/CwF,GAAEW,QAAQP,EAAS/D,EAAnBsD,KAA8BU,QAtBhCf,MLulBMsB,OACA,SAAUjN,EAAQC,EAAqBC,GAE7C,YAOA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOiN,IAC9E,IAAIC,GAAyCjN,EAAoB,QAE7DkN,GADiDlN,EAAoBG,EAAE8M,GAC/BjN,EAAoB,SACjFmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MMlmBnhB2L,EAAb,WAKC,QAAAA,GAAYG,GAAMhM,EAAAkC,KAAA2J,GACjB3J,KAAK+J,MAAQD,EANf,MAAAhL,GAAA6K,IAAAjK,IAAA,UAAA0D,MAAA,WAasB,GAAbtD,GAAawD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACd9D,QAAAqK,EAAA,GAAU7J,KAAKgK,YAAYC,IAAI,UAAWnK,GAC1C8J,EAAA,QAAY5J,KAAK+J,MAAOjK,MAf1BJ,IAAA,KAAA0D,MAAA,SAuBIsB,GACF,MAAO1E,MAAKkK,iBAAiBxF,GAASyF,QAxBxCzK,IAAA,MAAA0D,MAAA,SA+BMsB,GACJ1E,KAAKkK,iBAAiBxF,GAAS0F,SAhCjC1K,IAAA,WAAA0D,MAAA,WAoCE,qBAAsBpD,KAAK+J,SApC7BrK,IAAA,mBAAA0D,MAAA,SA4CkBsB,GAChB,MAAO,IAAI2F,GAAarK,KAAK+J,MAAOrF,OA7CtCiF,KAiDMU,ENioBa,WM7nBlB,QAAAA,GAAYP,EAAMpF,GAAS5G,EAAAkC,KAAAqK,GAC1BrK,KAAK+J,MAAQD,EACb9J,KAAKsK,SAAW5F,EN6pBjB,MApBA5F,GAAauL,IACZ3K,IAAK,KACL0D,MAAO,WMloBP,MADAwG,GAAA,GAAO5J,KAAK+J,MAAO/J,KAAKsK,UACjBtK,QN6oBPN,IAAK,MACL0D,MAAO,WMroBP,MADAwG,GAAA,IAAQ5J,KAAK+J,MAAO/J,KAAKsK,UAClBtK,SN2oBDqK,MAKFE,OACA,SAAU9N,EAAQC,EAAqBC,GAE7C,YAOA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCO3tBzG,QAASuM,KAAuB,GAAbV,GAAaxG,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAChC,OAAO,IAAImH,GAASX,EAAMY,GPotBMhO,EAAuB,EAAI8N,CAE5D,IAAIG,GAAiB,WAAc,QAASC,GAAcC,EAAK3L,GAAK,GAAI4L,MAAeC,GAAK,EAAUC,GAAK,EAAWC,MAAK1H,EAAW,KAAM,IAAK,GAAiC2H,GAA7BC,EAAKN,EAAIO,OAAOC,cAAmBN,GAAMG,EAAKC,EAAGG,QAAQ9D,QAAoBsD,EAAK5J,KAAKgK,EAAG9H,QAAYlE,GAAK4L,EAAK3L,SAAWD,GAA3D6L,GAAK,IAAoE,MAAOQ,GAAOP,GAAK,EAAMC,EAAKM,EAAO,QAAU,KAAWR,GAAMI,EAAW,QAAGA,EAAW,SAAO,QAAU,GAAIH,EAAI,KAAMC,IAAQ,MAAOH,GAAQ,MAAO,UAAUD,EAAK3L,GAAK,GAAIsM,MAAMC,QAAQZ,GAAQ,MAAOA,EAAY,IAAIO,OAAOC,WAAY7L,QAAOqL,GAAQ,MAAOD,GAAcC,EAAK3L,EAAa,MAAM,IAAIjB,WAAU,4DAEllBa,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MOluB1hB0N,GAAU,QAAS,OAAQ,OAAQ,SAErChB,EAAe3B,OAAO4C,cALP,EAFC,EA0BdlB,EP6uBS,WOvuBd,QAAAA,GAAYX,EAAM8B,GAAO9N,EAAAkC,KAAAyK,GAAAzK,KALzB+J,MAAQ,GAKiB/J,KAJzB6L,QAAU,EAIe7L,KAHzB8L,OAAS,aAIR9L,KAAK+J,MAAQD,EACb9J,KAAK+L,SAASH,GPq2Bf,MAnHA9M,GAAa2L,IACZ/K,IAAK,WACL0D,MAAO,SOjvBCwI,GAAO,GAAA7L,GAAAC,IACf4L,GAAQI,OAAOC,UAAUL,GAASA,EAAQF,EAAOQ,QAAQN,GACzD5L,KAAK6L,OAASD,CAEd,IAAM9B,GAAO9J,KAAK+J,MAAQ,IAAM/J,KAAK+J,MAAQ,IAAM,KAC7CtH,EAAO,SAAC0J,EAAWC,GACxB,MAAKD,IAAcE,QAAQD,GACpBtC,EAAOuC,QAAQD,GAAY3J,KAAK4J,QAASvC,GAAQuC,QAAQD,GAAY3J,KAAK4J,SADlCtM,EAAK+L,QAG/CQ,EAAa,SAACH,EAAWC,GAC9B,MAAOD,IAAaE,QAAQD,GAAcC,QAAQD,GAAY3J,KAAK4J,SAAWtM,EAAK+L,UAIlF,MAnDgB,IAoDhB,OAnDe,IAoDf,OAnDe,IAoDf,QAnDgB,IAoDhBS,QAAQ,SAAArN,GAAK,GAAAiM,GAAAR,EACQzL,EADR,GACPsN,EADOrB,EAAA,GACCsB,EADDtB,EAAA,EAEdpL,GAAKyM,GAAU/J,EAAKmJ,GAASa,EAAKD,MAIlC,OACA,UACA,UACA,cACCD,QAAQ,SAAAC,GACTzM,EAAKyM,GAAUF,EAAWV,GAlET,EAkE+BY,QPmvBjD9M,IAAK,MACL0D,MAAO,SO/uBJsJ,OPovBHhN,IAAK,OACL0D,MAAO,SOjvBHsJ,OPsvBJhN,IAAK,OACL0D,MAAO,SOnvBHsJ,OPwvBJhN,IAAK,QACL0D,MAAO,SOrvBFsJ,OP0vBLhN,IAAK,OACL0D,MAAO,SOvvBHuJ,OP4vBJjN,IAAK,UACL0D,MAAO,SOzvBAuJ,OP8vBPjN,IAAK,UACL0D,MAAO,SO3vBAuJ,OPgwBPjN,IAAK,aACL0D,MAAO,SO7vBGuJ,OP+vBVjN,IAAK,cACL0D,MAAO,SO7vBIuJ,EAAOC,GAClB5M,KAAK6M,KAAKF,EACV,IAAM3J,GAAS4J,GAEf,OADA5M,MAAK8M,QAAQH,GACN3J,KPgwBPtD,IAAK,YACL0D,MAAO,SO9vBEuJ,EAAOC,GAChB5M,KAAK+M,QAAQJ,EACb,IAAM3J,GAAS4J,GAEf,OADA5M,MAAKgN,WAAWL,GACT3J,KPiwBPtD,IAAK,gBACL0D,MAAO,WO9vBPpD,KAAK+L,SArHa,MPu3BlBrM,IAAK,eACL0D,MAAO,WO/vBPpD,KAAK+L,SAxHY,MP23BjBrM,IAAK,eACL0D,MAAO,WOhwBPpD,KAAK+L,SA3HY,MP+3BjBrM,IAAK,gBACL0D,MAAO,WOjwBPpD,KAAK+L,SA9Ha,OPo4BZtB,IOlwBOD,MPywBTyC,OACA,SAAUxQ,EAAQmB,GQ/4BxBnB,EAAAmB,QAAAsC,IRq5BMgN,KACA,SAAUzQ,EAAQC,EAAqBC,GAE7C,YAkBA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCS95BzG,QAASkP,GAAKhE,GACpB,GAAMiE,MACLC,OAAQ,KACFC,gBAAiB,EACjBC,eAAgB,EACtBC,YAAY,GAETrE,EAKJsE,SAAQC,kBAAoB,SAE5BC,EAAO1D,IAAI,OAAQmD,EAEnB,IAAMQ,GAAeC,IAAE,gBACjBtQ,EAAY,GAAIuQ,GAAU3E,EAASyE,EACzCG,GAAA3Q,EAAG4Q,cAAczQ,EAAWqQ,EAAa,IT23B1CpO,OAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,IACjC1G,EAA0B,KAAIyQ,CAC1C,IAAIc,GAAuCtR,EAAoB,QAC3DkR,EAA+ClR,EAAoBG,EAAEmR,GACrEC,EAA6CvR,EAAoB,QACjEoR,EAAqDpR,EAAoBG,EAAEoR,GAC3EC,EAAkDxR,EAAoB,QACtEyR,EAA+CzR,EAAoB,QAEnE0R,GADoD1R,EAAoB,QACAA,EAAoB,SAE5F2R,GADkE3R,EAAoB,QAC/BA,EAAoB,SAEhGmC,GADkEnC,EAAoB,QACvE,WAAc,QAASoC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,OAE5hByK,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IS95BjP2O,EAASnO,OAAA2O,EAAA,GAAU,SAuBnBL,ET26BU,WSn5Bf,QAAAA,GAAY3E,EAASoF,GAAUzQ,EAAAkC,KAAA8N,GAAA9N,KAvB/BwO,aAAe,GAAIC,GAAI,UAAW,WAuBHzO,KAtB/B0O,iBAAmB,GAAID,GAAI,UAAW,kBAsBPzO,KArB/B2O,cAAgB,GAAIF,GAAI,UAAW,eAqBJzO,KApB/B4O,iBAAmB,GAAIH,GAAI,QAAS,kBAoBLzO,KAnB/B6O,oBAAsB,GAAIJ,GAAI,QAAS,qBAmBRzO,KAlB/B8O,cAAgB,GAAIL,GAAI,UAAW,IAkBJzO,KAjB/B+O,aAAe,GAAIN,GAAI,QAAS,aAiBDzO,KAhB/BgP,aAAe,GAAIP,GAAI,QAAS,aAgBDzO,KAd/BiP,UAAYlB,EAAA3Q,EAAG+C,aAcgBH,KAT/BkP,MAAQnB,EAAA3Q,EAAGwD,oBASoBZ,KAP/BmP,UAAYpB,EAAA3Q,EAAG+C,YAAW,GAOKH,KAJ/BoP,WAAa,KAIkBpP,KAH/BqP,MAAQ,EAGuBrP,KAF/BsP,UAAW,EAGVtP,KAAKoN,EAAL3E,GACC4E,OAAQ,MAELlE,GAGJnJ,KAAKuP,iBAAmBvP,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAKwO,cACtDxO,KAAKyP,qBAAuBzP,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK0O,kBAC1D1O,KAAK0P,kBAAoB1P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK2O,eACvD3O,KAAK2P,qBAAuB3P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK4O,kBAC1D5O,KAAK4P,wBAA0B5P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK6O,qBAC7D7O,KAAK6P,kBAAoB7P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK8O,eACvD9O,KAAK8P,cAAgB9P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAK+O,cACnD/O,KAAK+P,cAAgB/P,KAAKwP,SAAS/M,KAAKzC,KAAMA,KAAKgP,cAEnDhP,KAAKsN,gBAAkBS,EAAA3Q,EAAG+C,WAAWH,KAAKoN,EAAEE,iBAC5CtN,KAAKuN,eAAiBQ,EAAA3Q,EAAG+C,WAAWH,KAAKoN,EAAEG,gBAC3CvN,KAAKwN,WAAaO,EAAA3Q,EAAG+C,WAAWH,KAAKoN,EAAEI,YAEvCxN,KAAKgQ,WAAa,GAAI3B,GAAA,GACrB4B,iBAAkB1B,EAClB2B,SAAS,IAGVlQ,KAAK6P,oBT+/BN,MAnFA/Q,GAAagP,IACZpO,IAAK,kBACL0D,MAAO,SS36BQ+M,EAAOC,GAAsB,GAAArQ,GAAAC,KAAfqN,EAAe/J,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAClC+M,QACE,IAAGA,EAAWC,SAAWjD,EAAQ,CAChC,GAAMtL,GAAM/B,KAAKwN,aAAe,2BAA6B,qBAC1DK,GAAAzQ,EAAE0I,KACEtG,OAAA4O,EAAA,GAAQrM,IACPwO,SAAUvQ,KAAKoN,EAAEC,OAAQgD,SAAUA,GACpC,SAAApL,GACIA,EAASe,UACFqH,EACCmD,SAASC,UAET1Q,EAAKyN,YAAYzN,EAAKyN,cACtBzN,EAAKwN,eAAetI,EAASyL,UAAUnD,gBACvCxN,EAAKuN,gBAAgBrI,EAASyL,UAAUpD,oBAIpD,YAGJhR,KAAIqU,UAAU,SAAA7Q,GACPA,GACCC,EAAK6Q,gBAAgBT,EAAOC,EAAOtQ,EAAKsB,STs7B1D1B,IAAK,WACL0D,MAAO,SS76BCyN,GAAK,GAAA9L,GAAA/E,IAUb,IATAA,KAAKiP,UAAU4B,GAGf7Q,KAAKgQ,WAAWc,QAChB9Q,KAAKkP,UACLlP,KAAK+Q,SAAW,EAChB/Q,KAAKqP,MAAQ,EACbrP,KAAKmP,WAAU,GAEC,WAAZ0B,EAAIG,KAAmB,CAC1B,GAAMC,IAAWhK,KAAMjH,KAAKoN,EAAEC,OAAQ6D,KAAMlR,KAAKiP,YAAYiC,KAAMC,WAAY,EAC/EnR,MAAKgQ,WAAWoB,KAAKH,GAASzJ,KAAK,WAClCzC,EAAKoK,WAAU,SAGI,SAAZ0B,EAAIG,MACZhR,KAAKqR,aAAa7J,KAAK,WACtBzC,EAAKoK,WAAU,QTm7BjBzP,IAAK,aACL0D,MAAO,WS/6BK,GAAAyC,GAAA7F,IACZ,OAAO6N,GAAAzQ,EAAE0I,KAAKtG,OAAA4O,EAAA,GAAQ,yBAA0Bf,OAAQrN,KAAKoN,EAAEC,OAAQ6D,KAAMlR,KAAKiP,YAAYiC,MAAO,KAAM,QACzG5J,KAAKgH,EAAA,EAAS/G,UACdC,KAAK,SAAAvC,GACDA,GAAYA,EAASe,SACxBH,EAAKyL,UAAUrM,EAASiK,YTo7B3BxP,IAAK,YACL0D,MAAO,SSh7BE8L,GAAO,GAAAjJ,GAAAjG,IAChBkP,GAAM3C,QAAQ,SAAAgF,GACbtL,EAAKiJ,MAAMhO,KAAK,GAAIsQ,GAASD,IAC7BlF,QAAQpC,IAAI,GAAIuH,GAASD,UTu7BpBzD,KSl7BFW,EACL,QAAAA,GAAYuC,EAAME,GAAMpT,EAAAkC,KAAAyO,GACvBzO,KAAKgR,KAAOA,EACZhR,KAAKkR,KAAOA,GAIRM,ETq7BS,WSp7Bd,QAAAA,GAAY1R,GAAMhC,EAAAkC,KAAAwR,GACjBxR,KAAKyR,MAAQ3R,EACbE,KAAK0R,UAAY3D,EAAA3Q,EAAG+C,WAAWH,KAAKyR,MAAL,UAA0B,GACzDzR,KAAK2R,SAAW5D,EAAA3Q,EAAG+C,WAAWH,KAAKyR,MAAL,UAC9BzR,KAAK4R,SAAW7D,EAAA3Q,EAAG+C,WAAWH,KAAKyR,MAAL,UT+gC/B,MArFA3S,GAAa0S,IACZ9R,IAAK,kBA4BL0D,MAAO,SSj6BQ+M,EAAOC,GAAsB,GAAA5J,GAAAxG,KAAfqN,EAAe/J,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAE5B+M,QACJ,IAAGA,EAAWC,SAAWjD,EAAQ,CAC7B,GAAMtL,GAAM/B,KAAK0R,YAAc,2BAA6B,qBAC5D7D,GAAAzQ,EAAE0I,KACEtG,OAAA4O,EAAA,GAAQrM,IACPwO,SAAUvQ,KAAKoB,GAAIiP,SAAUA,GAC9B,SAAApL,GACOA,EAASe,UACLqH,EACCmD,SAASC,UAETjK,EAAKkL,WAAWlL,EAAKkL,aACrBrF,QAAQpC,IAARzD,GACAA,EAAKoL,SAAS3M,EAASyL,UAAUnD,gBACjC/G,EAAKmL,SAAS1M,EAASyL,UAAUpD,oBAI7C,YAGJhR,KAAIqU,UAAU,SAAA7Q,GACPA,GACC0G,EAAKoK,gBAAgBT,EAAOC,EAAOtQ,EAAKsB,STs6B1D1B,IAAK,KACL2G,IAAK,WSl/BL,MAAOrG,MAAKyR,MAAL,WTs/BP/R,IAAK,OACL2G,IAAK,WSn/BL,MAAOrG,MAAKyR,MAAL,iBTu/BP/R,IAAK,MACL2G,IAAK,WSp/BL,MAAO7G,QAAA4O,EAAA,GAAQ,SAAWpO,KAAKoB,OTw/B/B1B,IAAK,QACL2G,IAAK,WSr/BL,MAAOrG,MAAKyR,MAAL,cTy/BP/R,IAAK,MACL2G,IAAK,WSt/BL,MAAOrG,MAAKyR,MAAL,QT2/BDD,MAKFK,KACA,SAAUpV,EAAQC,EAAqBC,GAE7C,YACqB,IAAImV,GAAyCnV,EAAoB,QAC7DoV,EAAiDpV,EAAoBG,EAAEgV,GACvE5D,EAA6CvR,EAAoB,QACjEoR,EAAqDpR,EAAoBG,EAAEoR,GAC3E8D,EAAuCrV,EAAoB,QAC3DsV,EAA+CtV,EAAoBG,EAAEkV,GAC1FvJ,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,GUrsCxO+S,GAAf,CAEAhJ,QAAOmJ,SAAWH,EAAA3U,EAOlB6U,EAAA7U,EAAE+U,GAAGD,SAAW,SAAS1F,GACxB,MAAOxM,MAAKoS,KAAK,WAChB,GAAMC,GAAKrS,KACLsS,EAAML,IAAEjS,KACd,IAAsB,gBAAXwM,GACN8F,EAAIxS,KAAK,aAA2C,kBAArBiS,GAAA3U,EAASoP,KAC3CH,QAAQpC,IAAI,oBAAsBuC,EAAQ,KAAM6F,GAChDN,EAAA3U,EAASoP,GAAQ6F,GACjBC,EAAIxS,KAAK,WAAY,WAGlB,CACJ,GAAMsN,MAILmF,WAAW,GAER/F,GAGEW,EAAO,WACZ4E,IAASM,GACTC,EAAIxS,KAAK,YAAY,GAGlBsN,GAAEmF,UACLD,EAAIE,IAAI,QAASrF,GAGjBA,QASJY,EAAA3Q,EAAGqV,gBAAgBP,UAClB/E,KAAM,SAAUuF,EAASC,EAAeC,EAAarV,EAAWsV,GAC/D,GAAMP,GAAML,IAAES,GACRvJ,EAAU4E,EAAA3Q,EAAG0V,OAAOH,KACtB7J,SAGEiK,EAAS,WACVjK,GACHkK,aAAalK,GAEdA,EAAImK,WAAW,WACdX,EAAIJ,SAAS,WACX,KAEJI,GAAIJ,SAAS/I,GAASgB,GAAG,SAAU4I,GAEnChF,EAAA3Q,EAAG8V,MAAMC,gBAAgBC,mBAAmBV,EAAS,WACpDT,IAAES,GAASR,SAAS,WAAW9H,IAAI,SAAU2I,QV+sC1CM,KACA,SAAU5W,EAAQmB,GWtxCxBnB,EAAAmB,QAAA,4kFX4xCM0V,KACA,SAAU7W,EAAQC,EAAqBC,GAE7C,YAmBA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCYryCzG,QAASsV,GAAQxR,GAAc,OAAAyR,GAAAlQ,UAAAnE,OAANsU,EAAMjI,MAAAgI,EAAA,EAAAA,EAAA,KAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAND,EAAMC,EAAA,GAAApQ,UAAAoQ,EACrC,OAAIC,GAAmBC,KAAK7R,GACP,IAAhB0R,EAAKtU,OACD4C,EAEA8R,EAASC,MAAM,MAAO/R,GAAtBgS,OAA8BN,IAG/BI,EAASC,MAAM,MAAOE,EAAUjS,GAAhCgS,OAAwCN,IAU1C,QAASI,KAAoB,OAAAI,GAAA3Q,UAAAnE,OAAR+U,EAAQ1I,MAAAyI,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAARD,EAAQC,GAAA7Q,UAAA6Q,EACnC,IAAqB,GAAjBD,EAAO/U,OAAa,MAAO,EAC/B,IAAIiV,MACAC,EAAc,GACdC,EAAW,GACXjX,KACEkX,EAAe,SAACC,GACrB,GAAInW,EAAAjB,EAAEqX,SAASD,GACdJ,OAAYA,EAAUI,OAChB,CACNA,EAAIhV,OAAAkV,EAAA,GAASF,GAAGG,MAChB,IAAIzV,WACCA,EAAIsV,EAAEtI,QAAQ,OAAS,GAC3BoI,EAAWE,EAAEI,OAAO1V,EAAI,GACxBsV,EAAIA,EAAEI,OAAO,EAAG1V,KACLA,EAAIsV,EAAEtI,QAAQ,OAAS,IAClCmI,EAAcG,EAAEI,OAAO1V,EAAI,GAC3BsV,EAAIA,EAAEI,OAAO,EAAG1V,IAEbsV,IAEFA,EADwB,GAArBnX,EAAW8B,OACVqV,EAAEpO,QAAQ,OAAQ,IAElBoO,EAAEpO,QAAQ,WAAY,IAE3B/I,EAAW6D,KAAKsT,KAInBN,GAAO3H,QAAQ,SAAAiI,GACVnW,EAAAjB,EAAEqO,QAAQ+I,GACbA,EAAEjI,QAAQgI,GAEVA,EAAaC,IAGf,IAAIzS,GAAM1E,EAAWwX,KAAK,IAC1B,KAAKxW,EAAAjB,EAAE0X,QAAQV,GAAQ,CACtB,GAAMW,GAAIC,EAAWZ,EACjBC,KACHA,GAAe,KAEhBA,GAAeU,EAQhB,MANIV,KACHtS,GAAO,IAAMsS,GAEVC,IACHvS,GAAO,IAAMuS,GAEPvS,EAQD,QAASkT,GAAWlT,GAC1B,MAAO4R,GAAmBC,KAAK7R,GAQzB,QAASiT,GAAWE,GAC1B,MAAOC,GAAA,EAAoBD,GAGrB,QAASE,GAAcjT,GAAsB,GAAhBkT,GAAgB/R,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAJ,EAC/C,OAAOnB,GAAKiE,QAAQ,+EAAgF,SAAUkP,GACvG,GAAIC,GAAKD,CAUT,OARIA,GAAEnW,OAASkW,IACXE,EAAKD,EAAEE,MAAM,EAAGH,GAAa,OAG5B,iBAAiBzB,KAAK0B,KACvBA,EAAI,UAAYA,GAGb,YAAcA,EAAI,6CAA+CC,EAAK,SAmJrF,QAASE,GAAOC,EAAKD,GACpB,MAAIC,IAAuB,gBAATA,KAAsBA,EAAIC,WAAWF,GAC/CA,EAASC,EAEVA,EAGR,QAASE,GAAQF,EAAKE,GACrB,MAAIF,IAAuB,gBAATA,KAAsBA,EAAIG,SAASD,GAC7CF,EAAME,EAEPF,EZghCuB/Y,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOsX,KAClEtX,EAAuB,EAAI6W,EAC3B7W,EAAuB,EAAImX,EAC3BnX,EAAuB,EAAIuY,EAE3BvY,EAAuB,EAAI0Y,EAC7BzY,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOoZ,KACpEnZ,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOqZ,IAC9E,IAAI3X,GAA+CzB,EAAoB,QACnE0B,EAAuD1B,EAAoBG,EAAEsB,GAC7E+W,EAA0CxY,EAAoB,QAC9D+X,EAAqC/X,EAAoB,QAC9EqZ,EAA4B,kBAAX5K,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU4K,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX7K,SAAyB6K,EAAIC,cAAgB9K,QAAU6K,IAAQ7K,OAAOvL,UAAY,eAAkBoW,IAElQnX,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MAE5hByK,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IY5yC1OgV,GAAYjL,OAAOoN,UAAY,KAAK/P,QAAQ,oBAAqB,OAExEuN,EAAqB,gBAgHdmC,EAAb,WAIC,QAAAA,GAAY/T,GAAKjE,EAAAkC,KAAA8V,GAChB9V,KAAKoW,GAAKC,SAASC,cAAc,KACjCtW,KAAKoW,GAAGG,KAAOxU,EANjB,MAAAjD,GAAAgX,IAAApW,IAAA,SAAA2G,IAAA,WAWE,MAAOrG,MAAKoW,GAAGI,UAXjB9W,IAAA,WAAA2G,IAAA,WAgBE,MAAOrG,MAAKoW,GAAGK,YAhBjB/W,IAAA,OAAA2G,IAAA,WAqBE,MAAOrG,MAAKoW,GAAGM,QArBjBhX,IAAA,WAAA2G,IAAA,WA0BE,MAAOrG,MAAKoW,GAAGO,YA1BjBjX,IAAA,OAAA2G,IAAA,WA+BE,MAAOrG,MAAKoW,GAAGQ,QA/BjBlX,IAAA,WAAA2G,IAAA,WAoCE,MAAOrG,MAAKoW,GAAGS,YApCjBnX,IAAA,SAAA2G,IAAA,WAyCE,MAAOrG,MAAKoW,GAAGU,UAzCjBpX,IAAA,OAAA2G,IAAA,WA8CE,MAAOrG,MAAKoW,GAAGW,SA9CjBjB,KAkDaC,EAAb,WACC,QAAAA,KAA+F,GAAnFU,GAAmFnT,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAxE,KAAMoT,EAAkEpT,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA3D,KAAMsT,EAAqDtT,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA9C,KAAM0T,EAAwC1T,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAjC,KAAM8Q,EAA2B9Q,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAnB,KAAMyT,EAAazT,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAAMxF,GAAAkC,KAAA+V,GAC9F/V,KAAKiX,UAAYR,EACjBzW,KAAKkX,MAAQR,EACb1W,KAAKmX,MAAQP,EACb5W,KAAKoX,MAAQJ,EACbhX,KAAKqX,OAASjD,EACdpU,KAAKsX,MAAQP,EAPf,MAAAjY,GAAAiX,IAAArW,IAAA,QAAA0D,MAAA,WAsFE,GAAMoT,IAAUxW,KAAKiX,UAAYjX,KAAKiX,UAAY,KAAO,KACvDjX,KAAKkX,MAAQlX,KAAKkX,OAASlX,KAAKmX,MAAQ,IAAMnX,KAAKmX,MAAQ,IAAM,IAC7D/C,EAAgC,WAAxB4B,EAAOhW,KAAKqX,QAAuB5B,EAAOT,EAAWhV,KAAKqX,QAAS,KAAOrX,KAAKqX,MAC7F,OAAOxD,GAAS2C,EAAQxW,KAAKoX,MAAOhD,EAAOpU,KAAKsX,UAzFlD5X,IAAA,WAAA6X,IAAA,SAacnU,GACZpD,KAAKiX,UAAYrB,EAAQxS,EAAO,MAdlCiD,IAAA,WAmBE,MAAOrG,MAAKiX,aAnBdvX,IAAA,OAAA6X,IAAA,SAyBUnU,GACRpD,KAAKkX,MAAQ9T,GA1BfiD,IAAA,WA+BE,MAAOrG,MAAKkX,SA/BdxX,IAAA,OAAA6X,IAAA,SAqCUnU,GACRpD,KAAKmX,MAAQ/T,GAtCfiD,IAAA,WA2CE,MAAOrG,MAAKmX,SA3CdzX,IAAA,OAAA6X,IAAA,SAiDUnU,GACRpD,KAAKoX,MAAQhU,GAlDfiD,IAAA,WAuDE,MAAOrG,MAAKoX,SAvDd1X,IAAA,QAAA6X,IAAA,SA6DWnU,GACTpD,KAAKqX,OAAS5B,EAAOrS,EAAO,MA9D9BiD,IAAA,WAmEE,MAAOrG,MAAKqX,UAnEd3X,IAAA,OAAA6X,IAAA,SAyEUnU,GACRpD,KAAKsX,MAAQ7B,EAAOrS,EAAO,MA1E7BiD,IAAA,WA+EE,MAAOrG,MAAKsX,UA/EdvB,MZg/CMyB,KACA,SAAU/a,EAAQC,EAAqBC,GAE7C,YAKA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASwZ,GAA2BC,EAAM7O,GAAQ,IAAK6O,EAAQ,KAAM,IAAIC,gBAAe,4DAAgE,QAAO9O,GAAyB,gBAATA,IAAqC,kBAATA,GAA8B6O,EAAP7O,EAElO,QAAS+O,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAI7Z,WAAU,iEAAoE6Z,GAAeD,GAAShY,UAAYL,OAAOuY,OAAOD,GAAcA,EAAWjY,WAAaqW,aAAe9S,MAAOyU,EAAUxY,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAewY,IAAYtY,OAAOwY,eAAiBxY,OAAOwY,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GARlcnb,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOwb,IAC9E,IAAIC,GAA4Cxb,EAAoB,QACrFmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,Ma5pDnhBka,EAAb,SAAAE,GACI,QAAAF,GAAYpY,GAAMhC,EAAAkC,KAAAkY,GACjBpY,EAAKoQ,SAAU,EACfpQ,EAAKuY,kBAAoB,GAFR,IAAAtY,GAAA0X,EAAAzX,MAAAkY,EAAAD,WAAAzY,OAAA8Y,eAAAJ,IAAArP,KAAA7I,KAGXF,GAHW,OAAAC,GASrBwY,OAASrY,GAAGC,YAAW,GAJhBJ,EAAKyY,mBAAqBzY,EAAK0Y,oBAAoBhW,KAAzB1C,GAC1BA,EAAK2Y,WAAWhS,oBAAoBxD,UAAUnD,EAAK4Y,0BAA0BlW,KAA/B1C,IANhCA,EADtB,MAAA6X,GAAAM,EAAAE,GAAAtZ,EAAAoZ,IAAAxY,IAAA,sBAAA0D,MAAA,WAaQ,GAAGpD,KAAKuY,SAAU,CACd,GAAMK,GAASC,8BAA8B7Y,KAAKoB,IAAMiD,KAAK,oBAC7DrE,MAAK8Y,sBAAsBF,OAfvClZ,IAAA,4BAAA0D,MAAA,SAmB8BA,GACtB,GAAMwV,GAASC,8BAA8B7Y,KAAKoB,IAAMiD,KAAK,qBACvD0U,EAASH,EAAOvU,KAAK,kBAAkB2U,cACvCC,EAAeL,EAAOvU,KAAK,uBAAuB6U,aACxDN,GAAOO,IAAI,SAAU/V,EAAS2V,EAASE,EAAiBF,EAASE,MAvBzEvZ,IAAA,wBAAA0D,MAAA,SA0B0BgW,GAClB,GAAML,GAASK,EAAS/U,KAAK,kBAAkB2U,aAC/CI,GAASD,IAAI,SAAUJ,MA5B/BrZ,IAAA,gBAAA0D,MAAA,SA+BkBiW,EAAMjJ,GAChB,GAAMkJ,GAAWT,EAAEzI,EAAMxM,eACnBwV,EAAWE,EAASC,SAAS,oBAEtCvZ,MAAKuY,SACEa,EAASD,IAAI,SAAU,GAEvBnZ,KAAK8Y,sBAAsBM,GAG/BpZ,KAAKuY,QAAQvY,KAAKuY,cAzC1BL,GAAsCC,EAAA,IbouDhCqB,KACA,SAAU/c,EAAQmB,GcvuDxB,GAAA6b,EAGAA,GAAA,WACA,MAAAzZ,QAGA,KAEAyZ,KAAAC,SAAA,qBAAAC,MAAA,QACC,MAAAlW,GAED,gBAAAsF,UACA0Q,EAAA1Q,QAOAtM,EAAAmB,QAAA6b,Gd8uDMG,KACA,SAAUnd,EAAQmB,IezvDvB,SAAAmL,EAAAsN,EAAAwC,EAAAtV,GACD,YAm9FA,SAAAsW,GAAApW,GACA,GAAAC,GAAAmV,EAAApV,EAAAG,eACAkW,EAAArW,EAAA3D,KAAA2D,EAAA3D,KAAAqJ,WACA/F,EAAAM,EAAAqW,KAAA,qBACAC,EAAA,EACAC,IAGAxW,GAAAyW,uBAIAzW,EAAA0W,iBAGA/W,GACA6W,EAAAH,EAAAM,SAAAvB,EAAAiB,EAAAM,UAAA3W,EAAA3D,KAAA2D,EAAA3D,KAAAma,SACAA,IAAA9a,OAAA8a,EAAAI,OAAA,mBAAAjX,EAAA,MAAAyV,EAAA,mBAAAzV,EAAA,OAEA4W,EAAAC,EAAAD,MAAAtW,IAIA,IACAsW,EAAA,IAIAC,GAAAvW,GAGAmV,EAAAyB,SAAAC,KAAAN,EAAAH,EAAAE,IA7+FA,GAAAnB,EAAA,CAOA,GAAAA,EAAA1G,GAAAmI,SAMA,YAJA,WAAAvR,IACAsD,QAAApC,IAAA,gCASA,IAAAuQ,IAGAC,MAAA,EAGAC,QAAA,MAGAC,OAAA,GAGAC,UAAA,EAGAC,QAAA,EAGAC,SAAA,EAGAC,SAAA,EAKAC,SACA,YACA,aACA,SACA,QAGA,SAIAC,SAAA,EAKAC,SAAA,OAGAC,SAAA,EAGAC,OAAA,EAEAC,OAKAC,QAAA,QAIAC,MAGAC,UAIA1b,MACAwa,UAAA,KAMAmB,QAGAC,IAAA,+NAKAJ,SAAA,EAIAnC,OAGAY,MACA4B,UAAA,SAMAC,YAAA,QASAC,gBAAA,OAGAC,kBAAA,IAIAC,YAAA,OAaAC,iBAAA,OAGAC,mBAAA,IAGAC,WAAA,GAGAC,UAAA,GAGAC,QACA,wcAcAC,WAAA,uCAGAC,SAAA,oDAEAC,QAEAC,SAAA,wOAMAC,KAAA,uNAMAC,MAAA,gLAQAxB,SAAA,uFAGAyB,UAAA,6MAMAC,WAAA,+MAQAC,SAAA,OAOAC,WAAA,EAGAC,WAAA,EAGAC,WAAA,EAMAC,YACAC,WAAA,GAIAC,OACAC,UAAA,EACAC,UAAA,GAKAtG,KAAA,KAaAuG,SAEAC,WACAL,WAAA,EACAM,MAAA,KAGAC,QACAP,WAAA,EACAQ,aAAA,EACAb,SAAA,sBACAc,KAAA,KAKAC,MAAA,OAcAC,OAAAhF,EAAAiF,KAEAC,WAAAlF,EAAAiF,KACAE,UAAAnF,EAAAiF,KAEAG,WAAApF,EAAAiF,KACAI,UAAArF,EAAAiF,KAEAK,YAAAtF,EAAAiF,KACAM,WAAAvF,EAAAiF,KAEAO,WAAAxF,EAAAiF,KACAQ,aAAAzF,EAAAiF,KAkBAS,aAAA,SAAAC,EAAApO,GACA,gBAAAoO,EAAAxN,MAAA,QAIAyN,WAAA,QAGAC,aAAA,QAGAC,iBAAA,EACAC,eAAA,EACAC,iBAAA,EAMAC,QACA7D,UAAA,EACAP,OAAA,EAEA6D,aAAA,SAAAC,EAAApO,GACA,gBAAAoO,EAAAxN,MAAA,kBAEAyN,WAAA,SAAAD,EAAApO,GACA,gBAAAoO,EAAAxN,KAAA,0BAEA2N,gBAAA,SAAAH,EAAApO,GACA,gBAAAoO,EAAAxN,MAAA,QAEA4N,cAAA,SAAAJ,EAAApO,GACA,gBAAAoO,EAAAxN,MAAA,SAQA+N,KAAA,KACAC,MACAC,IACAC,MAAA,QACAC,KAAA,OACAC,KAAA,WACAC,MAAA,wEACAC,WAAA,kBACAC,UAAA,kBACAC,YAAA,cACAC,OAAA,aACAC,SAAA,WACAC,MAAA,QACAC,KAAA,QAEAC,IACAX,MAAA,aACAC,KAAA,SACAC,KAAA,SACAC,MAAA,qGACAC,WAAA,mBACAC,UAAA,mBACAC,YAAA,WACAC,OAAA,iBACAC,SAAA,gBACAC,MAAA,SACAC,KAAA,aASAE,EAAAjH,EAAA9P,GACAgX,EAAAlH,EAAAxC,GAEA2J,EAAA,EAMAC,EAAA,SAAAhK,GACA,MAAAA,MAAArN,gBAAAqN,YAAA4C,IAOAqH,EAAA,WACA,MAAAnX,GAAAoX,uBACApX,EAAAqX,6BACArX,EAAAsX,0BACAtX,EAAAuX,wBAEA,SAAA/Z,GACA,MAAAwC,GAAAkK,WAAA1M,EAAA,YAQAga,EAAA,WACA,GAAAzX,GAAAuJ,EAAAgE,EAAAC,cAAA,eAEAkK,GACAC,WAAA,gBACAC,YAAA,iBACAC,cAAA,gBACAC,iBAAA,sBAGA,KAAA9X,IAAA0X,GACA,OA3bC,KA2bDnO,EAAAwO,MAAA/X,GACA,MAAA0X,GAAA1X,EAIA,0BAQAgY,EAAA,SAAAxO,GACA,MAAAA,MAAAnT,QAAAmT,EAAA,GAAAyO,cAOAC,EAAA,SAAAC,EAAAnH,EAAAE,GACA,GAAAtC,GAAA1X,IAEA0X,GAAAoC,KAAAjB,EAAAqI,QAAA,GAAqClH,SAAgBnB,EAAAyB,SAAAE,SAAAV,OAErDjB,EAAAyB,SAAA6G,WACAzJ,EAAAoC,KAAAjB,EAAAqI,QAAA,KAA0CxJ,EAAAoC,KAAApC,EAAAoC,KAAAgF,SAI1ChF,GAAAjB,EAAApN,QAAAqO,EAAAkB,WACAtD,EAAAoC,KAAAkB,QAAAlB,EAAAkB,SAGAtD,EAAAtW,GAAAsW,EAAAoC,KAAA1Y,MAAA4e,EACAtI,EAAA0J,SAEA1J,EAAA2J,UAAApe,SAAAyU,EAAAoC,KAAAE,MAAA,OACAtC,EAAA4J,UAAA,KAEA5J,EAAA6J,QAAA,KACA7J,EAAA8J,QAAA,EAEA9J,EAAA+J,SAAA,KAGA/J,EAAAgK,YAAAT,GAEAvJ,EAAA0J,MAAAjiB,SAKAuY,EAAAiK,WAAA9I,EAAAxC,EAAAuL,eAAAC,OAGAnK,EAAAoK,UAEApK,EAAAvK,QAGA0L,GAAAqI,OAAAF,EAAAnhB,WAKAsN,KAAA,WACA,GAIA4U,GACAC,EACAC,EANAvK,EAAA1X,KACAkiB,EAAAxK,EAAA0J,MAAA1J,EAAA2J,WACAc,EAAAD,EAAApI,KACAsI,EAAAvJ,EAAAyB,SAAA8H,cAKA1K,GAAA2K,UAAAtC,EAAAsC,YACA3K,EAAA4K,WAAAvC,EAAAuC,aAMAzJ,EAAAyB,SAAAiI,gBAEA1J,EAAA,QAAArU,SAAA,mBAGA,mBAAAoP,KAAA4O,UAAAC,aAAA1Z,EAAA2Z,SAMA,UAAAR,EAAAlR,MACA6H,EAAA,QAAAM,IAAA,SAAAN,EAAA,QAAAwJ,aAAA7d,SAAA,oBAGiBqU,EAAAyB,SAAA6G,UAAA9K,EAAAsM,KAAAC,aAAA7Z,EAAAiQ,kBA7hBhB,KA+hBDoJ,IACAL,EAAAlJ,EAAA,2DAA2FgK,SAAA,QAE3FT,EAAAvJ,EAAAyB,SAAA8H,eAAAL,EAAA,GAAAe,YAAAf,EAAA,GAAAgB,YAEAhB,EAAAnd,UAGAiU,EAAA,QAAApU,OAAA,iGAAwH2d,EAAA,iBACxHvJ,EAAA,QAAArU,SAAA,8BASAyd,EAAA,GAEApJ,EAAAzG,KAAA+P,EAAAnH,QAAA,SAAAhB,EAAA5W,GACA6e,GAAAE,EAAA5F,OAAAnZ,IAAA,KAKA4e,EAAAnJ,EACAnB,EAAAsL,UAAAtL,EACAyK,EAAA/F,QACAhW,QAAA,cAAkD6b,GAClD7b,QAAA,aAAiD+b,EAAA5F,OAAAI,UAAAwF,EAAA5F,OAAAK,cAGjD7C,KAAA,2BAAArC,EAAAtW,IACAoD,SAAA,sBACAA,SAAA2d,EAAAhG,WACArc,KAAA,WAAA4X,GACAmL,SAAAV,EAAAtF,UAGAnF,EAAAuL,OACAC,UAAAlB,IAGA,iEAAAzV,QAAA,SAAA8M,GACA3B,EAAAuL,MAAA5J,GAAA2I,EAAA3d,KAAA,aAAAgV,KAGA3B,EAAAyL,QAAA,UAGAzL,EAAA0L,WAGA1L,EAAA2L,OAAA3L,EAAA2J,YAQA2B,UAAA,SAAA/M,EAAAqN,GACA,GAAAzY,GAAAoL,EAAA6D,KAAAkF,KAAA/I,EAAA6D,KAAAiF,KAEA,OAAAuE,GAAAld,QAAA,iBAA6C,SAAAmd,EAAAzmB,GAC7C,GAAAsG,GAAAyH,EAAA/N,EAEA,YAnmBC,KAmmBDsG,EACAmgB,EAGAngB,KAQAse,YAAA,SAAAT,GACA,GAAAvJ,GAAA1X,KACAia,EAAApB,EAAA2K,UAAAvC,EAEApI,GAAAzG,KAAA6H,EAAA,SAAA/a,EAAAma,GACA,GAEAoK,GACAzS,EACA0S,EACAC,EACAC,EANA3N,KACA6D,IAUAjB,GAAAgL,cAAAxK,IAKApD,EAAAoD,EACAS,EAAAT,EAAAS,MAAAT,GAEiB,WAAAR,EAAA7H,KAAAqI,IAAAR,EAAAQ,GAAAla,QAGjBskB,EAAA5K,EAAAQ,GAEAS,EAAA2J,EAAA3jB,OACAga,EAAAjB,EAAAqI,UAAuCpH,IAAA3Q,aAGvC2Q,EAAAgK,MAAAL,EAEAxN,EAAA0N,IAAA7J,EAAA6J,KAAAF,EAAA1J,KAAA,QAIA9D,EAAAjF,MAAAiF,EAAA0N,MACA1N,EAAAjF,KAAA,SACAiF,EAAA0N,IAAAtK,IAQApD,GACAjF,KAAA,OACA2S,IAAAtK,EAAA,IAMApD,EAAA6D,KAAAjB,EAAAqI,QAAA,KAA6CxJ,EAAAoC,QAG7CjB,EAAApN,QAAAqO,EAAAkB,WACA/E,EAAA6D,KAAAkB,QAAAlB,EAAAkB,SAOAhK,EAAAiF,EAAAjF,MAAAiF,EAAA6D,KAAA9I,KACA2S,EAAA1N,EAAA0N,KAAA,IAEA3S,GAAA2S,IACAA,EAAAJ,MAAA,wFACAvS,EAAA,QAEqB2S,EAAAJ,MAAA,wBACrBvS,EAAA,OAEqB0S,EAAAC,EAAAJ,MAAA,kCACrBvS,EAAA,QAEAiF,EAAA6D,KAAAiK,cACA9N,EAAA6D,KAAAiK,YAAA,kBAAAL,EAAA,SAAAA,EAAA,MAGqB,MAAAC,EAAAK,OAAA,KACrBhT,EAAA,WAIAA,EACAiF,EAAAjF,OAGA0G,EAAAyL,QAAA,kBAAAlN,GAOAA,EAAA+D,MAAAtC,EAAA0J,MAAAjiB,OAGA8W,EAAA6D,KAAAgK,QAAA7N,EAAA6D,KAAAgK,MAAA3kB,cACA8W,GAAA6D,KAAAgK,OAGA7N,EAAA6D,KAAAmK,QAAAhO,EAAA6D,KAAAgK,QACA7N,EAAA6D,KAAAmK,OAAAhO,EAAA6D,KAAAgK,MAAAzf,KAAA,cAGA4R,EAAA6D,KAAAmK,SAAAhO,EAAA6D,KAAAmK,OAAA9kB,cACA8W,GAAA6D,KAAAmK,OAIA,aAAApL,EAAA7H,KAAAiF,EAAA6D,KAAAoK,WACAjO,EAAA6D,KAAAoK,QAAAjO,EAAA6D,KAAAoK,QAAApQ,MAAAuF,GAAA3B,EAAAzB,KAGA,aAAA4C,EAAA7H,KAAA0G,EAAAoC,KAAAoK,WACAjO,EAAA6D,KAAAoK,QAAAxM,EAAAoC,KAAAoK,QAAApQ,MAAAuF,GAAA3B,EAAAzB,KAIAA,EAAA6D,KAAAoK,kBAAArL,KACA5C,EAAA6D,KAAAoK,YA9uBC,KA8uBDjO,EAAA6D,KAAAoK,QAAA,GAAAjO,EAAA6D,KAAAoK,QAAA,IAKA,SAAAlT,IACA4S,EAAAD,EAAAQ,MAAA,SAEAP,EAAAzkB,OAAA,IACA8W,EAAA0N,IAAAC,EAAAQ,QAEAnO,EAAA6D,KAAAO,OAAAuJ,EAAAQ,UAIA,QAAAnO,EAAA6D,KAAAoB,WAEArC,EAAAwL,QAAArT,GAAA,6BACAiF,EAAA6D,KAAAiB,SAAA,EACA9E,EAAA6D,KAAAoB,UAAA,GAGAjF,EAAA6D,KAAAoB,UAAA,GAMA,QAAAlK,IACAiF,EAAAjF,KAAA,SAEAiF,EAAA6D,KAAA2B,OAAAH,SAAA,GAIArF,EAAA6D,KAAAsB,QAEAnF,EAAA6D,KAAAjB,EAAAqI,QAAA,EAAAjL,EAAA6D,MAEAgB,QAAA,EACAC,QAAA,EAEAG,SAAA,EAGAN,SAAA,EAGA2C,UAAA,EACAN,WAAA,EACAQ,OAAA,EACAN,MAAA,EAGAoB,cAAA,EACAE,YAAA,EACAC,cAAA,EACAC,iBAAA,EACAC,eAAA,EACAC,iBAAA,KAQAnH,EAAA0J,MAAAlgB,KAAA+U,MAeAqO,UAAA,WACA,GAAA5M,GAAA1X,IAEA0X,GAAA6M,eAGA7M,EAAAuL,MAAAC,UAAA/Y,GAAA,kDAAA1G,GACAA,EAAA+gB,kBACA/gB,EAAA0W,iBAEAzC,EAAAgF,MAAAjZ,KAEa0G,GAAA,iEAAA1G,GACbA,EAAA+gB,kBACA/gB,EAAA0W,iBAEAzC,EAAA+M,aAEata,GAAA,iEAAA1G,GACbA,EAAA+gB,kBACA/gB,EAAA0W,iBAEAzC,EAAApM,SAEanB,GAAA,2CAAA1G,GAEbiU,IAAAgN,eAAA,kCAKA5E,EAAA3V,GAAA,0CAAA1G,GAEAA,KAAAkhB,eAAA,WAAAlhB,EAAAkhB,cAAA3T,KAEAkP,EAAA,WACAxI,EAAA3E,YAKA2E,EAAAuL,MAAA2B,MAAAC,OAEA5R,WAAA,WACAyE,EAAAuL,MAAA2B,MAAA5f,OAEA0S,EAAA3E,UACqB,QAQrBgN,EAAA5V,GAAA,sBAAA1G,GACA,GAAA1F,GAAA8a,EAAAyB,SAAAzB,EAAAyB,SAAAiI,cAAA,IAEAxkB,GAAA+mB,YAAA/mB,EAAAygB,UAAAzgB,EAAAygB,QAAA1E,KAAAkD,WAAAnE,EAAApV,EAAAzE,QAAA8E,SAAA,uBAAA+U,EAAApV,EAAAzE,QAAA6E,GAAAwS,IAIAtY,GAAA,UAAA8a,EAAApV,EAAAzE,QAAAma,IAAA,cAAApb,EAAAklB,MAAAC,UAAA6B,IAAAthB,EAAAzE,QAAAG,SACAsE,EAAA+gB,kBAEAzmB,EAAAinB,QAGAlF,EAAAuC,UAAA3K,EAAA2K,WAAAC,WAAA5K,EAAA4K,eAMAvC,EAAA5V,GAAA,sBAAA1G,GACA,GAAA+a,GAAA9G,EAAA8G,QACAyG,EAAAxhB,EAAAyhB,SAAAzhB,EAAA0hB,KAEA,IAAA3G,KAAA1E,KAAAc,WAIA/B,EAAApV,EAAAzE,QAAA6E,GAAA,WAAAgV,EAAApV,EAAAzE,QAAA6E,GAAA,YAKA,WAAAohB,GAAA,KAAAA,GACAxhB,EAAA0W,qBAEAzC,GAAAgF,MAAAjZ,IAMA,KAAAwhB,GAAA,KAAAA,GACAxhB,EAAA0W,qBAEAzC,GAAA+M,YAMA,KAAAQ,GAAA,KAAAA,GACAxhB,EAAA0W,qBAEAzC,GAAApM,YAKAoM,GAAAyL,QAAA,eAAA1f,EAAAwhB,KAKAvN,EAAA0J,MAAA1J,EAAA2J,WAAAvH,KAAAmB,WACAvD,EAAA0N,mBAAA,EAEArF,EAAA5V,GAAA,sIAAA1G,GACAiU,EAAA0N,mBAAA,EAEA1N,EAAA2N,QACA3N,EAAA4N,eAGA5N,EAAA2N,QAAA,IAGA3N,EAAA6N,aAAAxc,EAAAyc,YAAA,aACA9N,EAAA0N,oBAEA1N,EAAA0J,MAAA1J,EAAA2J,WAAAvH,KAAAmB,WAAAvD,EAAA+N,aACA/N,EAAA2N,QAAA,EACA3N,EAAA0N,mBAAA,EAEA1N,EAAAgO,iBAGiB,OASjBnB,aAAA,WACA,GAAA7M,GAAA1X,IAEA8f,GAAA1V,IAAA,kCACA2V,EAAA3V,IAAA,kCAEApK,KAAAijB,MAAAC,UAAA9Y,IAAA,+BAEAsN,EAAA6N,eACAxc,EAAA4c,cAAAjO,EAAA6N,cAEA7N,EAAA6N,aAAA,OAQAd,SAAA,SAAAmB,GACA,MAAA5lB,MAAAqjB,OAAArjB,KAAAwhB,QAAA,EAAAoE,IAOAta,KAAA,SAAAsa,GACA,MAAA5lB,MAAAqjB,OAAArjB,KAAAwhB,QAAA,EAAAoE,IAOAvC,OAAA,SAAAwC,EAAAD,EAAAE,GACA,GACArE,GACAhH,EACA+D,EACAiG,EACAsB,EACAC,EACAC,EAPAvO,EAAA1X,KASAkmB,EAAAxO,EAAA0J,MAAAjiB,MAEA,MAAAuY,EAAA+N,YAAA/N,EAAAoN,WAAApN,EAAAyO,aAAAzO,EAAA+J,UAAA,CAOA,GAHAoE,EAAA5iB,SAAA4iB,EAAA,MACApL,EAAA/C,EAAA8G,QAAA9G,EAAA8G,QAAA1E,KAAAW,KAAA/C,EAAAoC,KAAAW,QAEAoL,EAAA,GAAAA,GAAAK,GACA,QAKA,IAFAzE,EAAA/J,EAAA+J,SAAA,OAAA/J,EAAA+J,WAEAyE,EAAA,IAAAzE,GAAA/J,EAAA+N,YAAA,CA4CA,GAxCAhB,EAAA/M,EAAA8G,QAEA9G,EAAA4J,UAAA5J,EAAA2J,UACA3J,EAAA6J,QAAA7J,EAAA8J,QAGAhD,EAAA9G,EAAA0O,YAAAP,GAEAK,EAAA,KACAzL,GAAA+D,EAAAxE,MAAA,IACAtC,EAAA0O,YAAAP,EAAA,IAGApL,GAAA+D,EAAAxE,MAAAkM,EAAA,IACAxO,EAAA0O,YAAAP,EAAA,IAIAnO,EAAA8G,UACA9G,EAAA2J,UAAA7C,EAAAxE,MACAtC,EAAA8J,QAAAhD,EAAAqH,IAEAnO,EAAAyL,QAAA,aAAA1B,GAEA/J,EAAA2O,iBAEAL,EAAAnN,EAAAyB,SAAAgM,aAAA9H,EAAA+H,QAEA/H,EAAAgI,SAAA,IAAAR,EAAAS,MAAA,IAAAT,EAAAhd,OAAAwV,EAAA+H,OAAAziB,SAAA,qBACA0a,EAAAkI,mBAnjCC,GAqjCD7N,EAAA8N,UAAAf,GACApH,EAAAkI,eAAAd,EAEAA,EAAApH,EAAA1E,KAAA2H,EAAA,0CAGAmE,EAAA3iB,SAAA2iB,EAAA,IAGAnE,EAmBA,MAjBAjD,GAAA1E,KAAA+B,iBAAA+J,GACAlO,EAAAuL,MAAAC,UAAA/J,IAAA,sBAAAyM,EAAA,MAGAlO,EAAAuL,MAAAC,UAAA0D,YAAA,sBAEA9F,EAAApJ,EAAAuL,MAAAC,WAEAxL,EAAAuL,MAAAC,UAAA1e,SAAA,oBAGAga,EAAA+H,OAAA/hB,SAAA,2BAEAkT,EAAAmP,UAAArI,OAEA9G,GAAA4D,QAAA,QAMAzC,GAAAzG,KAAAsF,EAAAoK,OAAA,SAAA9H,EAAA8L,GACAjN,EAAAyB,SAAAwM,KAAAhB,EAAAS,UAIA/H,EAAA+H,OAAAK,YAAA,iDAAApiB,SAAA,2BAGAga,EAAAgI,SACAT,EAAAgB,KAAAC,MAAAxI,EAAA+H,OAAAU,SAEApO,EAAAzG,KAAAsF,EAAAoK,OAAA,SAAA9H,EAAA8L,GACA,GAAAD,GAAAC,EAAAD,IAAArH,EAAAqH,GAEAhN,GAAAyB,SAAA4M,QAAApB,EAAAS,QACAvd,IAAA,EACAyd,KAAAZ,EAAAE,EAAAF,EAAAC,EAAAhM,KAAAa,QACqBiL,EAAA,WAErBE,EAAAS,OAAAY,WAAA,SAAAP,YAAA,iDAEAd,EAAAD,MAAAnO,EAAA8J,UACAhD,EAAAgI,SAAA,EAEA9O,EAAA0P,iBAMA1P,EAAAuL,MAAA2B,MAAAyC,WAAAF,WAAA,SAMA3I,EAAA8I,SACA5P,EAAA6P,cAAA/I,GAGA9G,EAAAmP,UAAArI,GAGA9G,EAAA4D,QAAA,SAEAmJ,EAAAoB,MAAArH,EAAAqH,MAOAI,EAAA,oBAAAxB,EAAAoB,IAAArH,EAAAqH,IAAA,mBAEApB,EAAA8B,OAAAK,YAAA,kGAEAnC,EAAA+C,YAAA,EAEA5B,IAAApH,EAAAgI,SAAAhI,EAAA1E,KAAAkC,oBAIAwC,EAAAgI,QACA/B,EAAA8B,OAAA/hB,SAAAyhB,IAIAA,EAAA,qBAAAA,EAAA,gBAAAzH,EAAA1E,KAAAkC,iBAEAnD,EAAAyB,SAAA4M,QAAAzC,EAAA8B,OAAAN,EAAAL,EAAA,WACAnB,EAAA8B,OAAAK,YAAAX,GAAAkB,WAAA,iBAYAf,YAAA,SAAAP,GAEA,GACAU,GACAvM,EAFAtC,EAAA1X,IAmBA,OAfAga,GAAA6L,EAAAnO,EAAA0J,MAAAjiB,OACA6a,IAAA,EAAAtC,EAAA0J,MAAAjiB,OAAA6a,KAEAtC,EAAAoK,OAAA+D,IAAAnO,EAAA0J,MAAApH,KACAuM,EAAA1N,EAAA,sCAAAgK,SAAAnL,EAAAuL,MAAA2B,OAEAlN,EAAAoK,OAAA+D,GAAAhN,EAAAqI,QAAA,KAAuDxJ,EAAA0J,MAAApH,IACvD6L,MACAU,SACAe,UAAA,IAGA5P,EAAA+P,YAAA/P,EAAAoK,OAAA+D,KAGAnO,EAAAoK,OAAA+D,IAOA6B,cAAA,SAAAC,EAAAC,EAAAhC,GAEA,GAKAiC,GAAAC,EAAAC,EAAAC,EAAAC,EALAvQ,EAAA1X,KAEAwe,EAAA9G,EAAA8G,QACA0J,EAAA1J,EAAApF,SAIA2M,EAAA9iB,SAAAub,EAAA+H,OAAAU,QAAA,IACAkB,EAAAllB,SAAAub,EAAA+H,OAAAxN,SAAA,IAEAqP,EAAA5J,EAAAyI,MACAoB,EAAA7J,EAAAzF,MAEA,UAAAyF,EAAAxN,MAAAwN,EAAA8J,WAAAJ,GAAAxQ,EAAAyO,cAIAtN,EAAAyB,SAAAwM,KAAAoB,GAEAxQ,EAAAyO,aAAA,EAEAwB,MA1tCC,KA0tCDA,EAAA,GAAA5B,EAAA4B,EACAC,MA3tCC,KA2tCDA,EAAA,GAAAO,EAAAP,EAEAC,EAAAhP,EAAAyB,SAAAgM,aAAA4B,GAEAF,EAAAI,EAAAP,EAAAZ,MACAgB,EAAAI,EAAAR,EAAA9O,OAGA+O,EAAA,GAAA/B,EAAA,GAAAqC,EACAL,EAAA,GAAAI,EAAA,GAAAE,EAGAD,EAAArC,IACA+B,EAAAD,EAAApB,KAAAuB,GAAAL,EAAAK,EAAAL,GAEAG,EAAA,IACAA,EAAA,GAGAA,EAAA/B,EAAAqC,IACAN,EAAA/B,EAAAqC,IAIAC,EAAAF,IACAJ,EAAAF,EAAA7e,IAAAif,GAAAL,EAAAK,EAAAL,GAEAG,EAAA,IACAA,EAAA,GAGAA,EAAAI,EAAAE,IACAN,EAAAI,EAAAE,IAIA3Q,EAAA6Q,aAAAH,EAAAC,GAEAxP,EAAAyB,SAAA4M,QAAAgB,GACAlf,IAAA+e,EACAtB,KAAAqB,EACAE,SACAC,UACarC,GAAA,eACblO,EAAAyO,aAAA,IAIAzO,EAAA8Q,WAAA9Q,EAAA8Q,UAAAC,UACA/Q,EAAA8Q,UAAA1B,SAQA4B,WAAA,SAAA9C,GAEA,GAIA+C,GAJAjR,EAAA1X,KAEAwe,EAAA9G,EAAA8G,QACA0J,EAAA1J,EAAApF,QAGA,UAAAoF,EAAAxN,MAAAwN,EAAA8J,WAAAJ,GAAAxQ,EAAAyO,cAIAtN,EAAAyB,SAAAwM,KAAAoB,GAEAxQ,EAAAyO,aAAA,EAEAwC,EAAAjR,EAAAkR,UAAApK,GAEA9G,EAAA6Q,aAAAI,EAAA1B,MAAA0B,EAAA5P,QAEAF,EAAAyB,SAAA4M,QAAAgB,GACAlf,IAAA2f,EAAA3f,IACAyd,KAAAkC,EAAAlC,KACAuB,OAAAW,EAAA1B,MAAAiB,EAAAjB,QACAgB,OAAAU,EAAA5P,OAAAmP,EAAAnP,UACa6M,GAAA,eACblO,EAAAyO,aAAA,MAQAyC,UAAA,SAAA9C,GACA,GAQAC,GAAAoC,EAAAU,EAAA5B,EAAAlO,EARArB,EAAA1X,KACAkoB,EAAApC,EAAA1M,SAEA0P,EAAAhD,EAAAmB,MACA8B,EAAAjD,EAAA/M,OAEA2B,EAAAoL,EAAAhM,KAAAY,MAIA,UAAAwN,MAAA/oB,SAAA2pB,IAAAC,KAKA,WAAAlQ,EAAA7H,KAAA0J,KACAA,SAGA,GAAAA,EAAAvb,SACAub,KAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,KAIAqL,EAAA9iB,SAAAyU,EAAAuL,MAAA2B,MAAAqC,QAAA,KAAAvM,EAAA,GAAAA,EAAA,IACAyN,EAAAllB,SAAAyU,EAAAuL,MAAA2B,MAAA7L,SAAA,KAAA2B,EAAA,GAAAA,EAAA,IAEAmO,EAAA9B,KAAAiC,IAAA,EAAAjD,EAAA+C,EAAAX,EAAAY,GAEA9B,EAAAF,KAAAkC,MAAAJ,EAAAC,GACA/P,EAAAgO,KAAAkC,MAAAJ,EAAAE,IAIA/f,IAAA+d,KAAAkC,MAAA,IAAAd,EAAApP,IAAA2B,EAAA,GACA+L,KAAAM,KAAAkC,MAAA,IAAAlD,EAAAkB,IAAAvM,EAAA,GACAuM,QACAlO,YASAhG,OAAA,WACA,GAAA2E,GAAA1X,IAEA6Y,GAAAzG,KAAAsF,EAAAoK,OAAA,SAAApiB,EAAAomB,GACApO,EAAA+P,YAAA3B,MAQA2B,YAAA,SAAA3B,EAAAF,GACA,GAAAlO,GAAA1X,KACAkoB,EAAApC,KAAA1M,QAEA8O,KAAApC,EAAAmB,OAAAnB,EAAA/M,UACArB,EAAAyO,aAAA,EAEAtN,EAAAyB,SAAAwM,KAAAoB,GAEArP,EAAAyB,SAAA4O,aAAAhB,EAAAxQ,EAAAkR,UAAA9C,IAEAA,EAAAD,MAAAnO,EAAA8J,SACA9J,EAAA6Q,gBAIAzC,EAAAS,OAAApD,QAAA,WAEAzL,EAAAyL,QAAA,WAAA2C,IAQAqD,YAAA,SAAArD,EAAAF,GACA,GAAAG,GAAAF,EAAAnO,EAAA1X,IAEA0X,GAAA8G,UACAuH,EAAAgB,KAAAC,MAAAlB,EAAAS,OAAAU,SACApB,EAAAC,EAAAD,IAAAnO,EAAA8G,QAAAqH,IAEAhN,EAAAyB,SAAA4M,QAAApB,EAAAS,QACAvd,IAAA,EACAyd,KAAAZ,EAAAE,EAAAF,EAAAC,EAAAhM,KAAAa,OACAyO,QAAA,OAr5CC,KAs5CgBxD,EAAA,EAAAA,EAAA,WAQjB2C,aAAA,SAAAc,EAAAC,GAEA,GACA5E,GADAhN,EAAA1X,KAGAgiB,EAAAtK,EAAAuL,MAAAC,UAAA0D,YAAA,kFAEAlP,GAAA8G,UAAA9G,EAAAoN,YAIApN,EAAA6R,cAEAvH,EAAAxd,SAAA,wBAGAkgB,MA96CC,KA66CD2E,OA76CC,KA66CDC,EACAD,EAAA3R,EAAA8G,QAAAyI,OAAAqC,EAAA5R,EAAA8G,QAAAzF,OAGArB,EAAAgN,eAGAA,EAGA1C,EAAAxd,SAAA,uBAIAkT,EAAA8G,QAAA1E,KAAAqD,MAIA6E,EAAAxd,SAAA,qBAGAwd,EAAAxd,SAAA,yBAKakT,EAAA8G,QAAA1E,KAAAqD,OACb6E,EAAAxd,SAAA,uBASA+kB,WAAA,WAEA,GAGAC,GAHA9R,EAAA1X,KAEAwe,EAAA9G,EAAA8G,OAGA,IAAAA,IAAA9G,EAAAoN,UAQA,mBAAAtG,EAAAxN,MAAAwN,EAAA8I,WAAA9I,EAAA8J,WACA,SAAA9J,EAAA1E,KAAAyE,cAAA1F,EAAA4Q,WAAAjL,EAAA1E,KAAAyE,eAAA,SAAAC,EAAA1E,KAAAyE,aAAAC,MAGAgL,EAAA9R,EAAAkR,UAAApK,GAEAA,EAAAyI,MAAAuC,EAAAvC,OAAAzI,EAAAzF,OAAAyQ,EAAAzQ,UAcA2L,aAAA,WAEA,GAAAhN,GAAA1X,KAEAwe,EAAA9G,EAAA8G,QACA0J,EAAA1J,EAAApF,SAEAsQ,GAAA,CAOA,OALAxB,KACAwB,EAAA7Q,EAAAyB,SAAAgM,aAAA4B,GACAwB,IAAAzC,MAAAzI,EAAAyI,OAAAyC,EAAA3Q,OAAAyF,EAAAzF,QAGA2Q,GAQAC,OAAA,WAEA,GAAAjS,GAAA1X,KAEAwe,EAAA9G,EAAA8G,QACA0J,EAAA1J,EAAApF,SAEAsQ,GAAA,CAOA,OALAxB,KACAwB,EAAAhS,EAAAkR,UAAApK,GACAkL,EAAA3C,KAAA6C,IAAA1B,EAAAjB,QAAAyC,EAAAzC,OAAA,GAAAF,KAAA6C,IAAA1B,EAAAnP,SAAA2Q,EAAA3Q,QAAA,GAGA2Q,GAQA7C,UAAA,SAAAf,GAEA,GAAA9U,GAAAuV,EACAsD,EADAnS,EAAA1X,IAGA,KAAA8lB,EAAA3W,YAIA2W,EAAAwB,SAAA,CAmBA,OAfAxB,EAAA3W,WAAA,EAEAuI,EAAAyL,QAAA,aAAA2C,GAEA9U,EAAA8U,EAAA9U,KACAuV,EAAAT,EAAAS,OAEAA,EACAnc,IAAA,WACA+Y,QAAA,WACA3e,SAAA,oBAAAwM,GAAA,YACAxM,SAAAshB,EAAAhM,KAAAoC,YAIAlL,GAEA,YAEA0G,EAAAoS,SAAAhE,EAEA,MAEA,cAEApO,EAAAqS,UAAAjE,EAEA,MAEA,YAEApO,EAAAsS,WAAAlE,IAAAnC,KAAAmC,EAAA7E,QAEA,MAEA,cAEApI,EAAAiN,EAAAnC,KAAAxkB,OACAuY,EAAAsS,WAAAlE,EAAAjN,EAAAiN,EAAAnC,MAGAjM,EAAAuS,SAAAnE,EAGA,MAEA,YAEApO,EAAAwS,YAAApE,GAEA+D,EAAAhR,EAAA0C,KAAA1C,EAAAqI,UAAmD4E,EAAAhM,KAAAyB,KAAAC,UACnDzZ,IAAA+jB,EAAAnC,IACA3d,QAAA,SAAAlG,EAAAwJ,GAEA,YAAAA,GACAoO,EAAAsS,WAAAlE,EAAAhmB,IAIAoG,MAAA,SAAAmD,EAAAC,GAEAD,GAAA,UAAAC,GACAoO,EAAAuS,SAAAnE,OAMAS,EAAA/T,IAAA,qBACAqX,EAAAM,SAGA,MAEA,aAEAzS,EAAAsS,WAAAlE,EACA,gCACAA,EAAAnC,IAAA,WAAAmC,EAAAhM,KAAAiK,YAAA,sDAKA,MAEA,SAEArM,EAAAuS,SAAAnE,GAMA,WAQAgE,SAAA,SAAAhE,GAEA,GAGApC,GAAA0G,EAAAC,EAAAC,EAHA5S,EAAA1X,KACAuqB,EAAAzE,EAAAhM,KAAAyQ,QAAAzE,EAAAhM,KAAAuB,MAAAkP,MAOA,IAAAA,EAAA,CACAF,EAAAthB,EAAAyhB,kBAAA,EACAF,EAAAvhB,EAAA0hB,WAAAJ,EAEAD,EAAAG,EAAApG,MAAA,KAAArjB,IAAA,SAAAuR,GACA,GAAAqY,KAgBA,OAdArY,GAAAsC,OAAAwP,MAAA,OAAA5X,QAAA,SAAA8F,EAAAnT,GACA,GAAAkE,GAAAH,SAAAoP,EAAAsY,UAAA,EAAAtY,EAAAlT,OAAA,MAEA,QAAAD,EACA,MAAAwrB,GAAA3oB,IAAAsQ,CAGAjP,KACAsnB,EAAAtnB,QACAsnB,EAAA9U,QAAAvD,IAAAlT,OAAA,MAKAurB,IAIAN,EAAAQ,KAAA,SAAAxtB,EAAAytB,GACA,MAAAztB,GAAAgG,MAAAynB,EAAAznB,OAIA,QAAA0nB,GAAA,EAAgCA,EAAAV,EAAAjrB,OAAiB2rB,IAAA,CACjD,GAAAzY,GAAA+X,EAAAU,EAEA,UAAAzY,EAAAuD,SAAAvD,EAAAjP,OAAAknB,GAAA,MAAAjY,EAAAuD,SAAAvD,EAAAjP,OAAAinB,EAAA,CACA3G,EAAArR,CACA,SAKAqR,GAAA0G,EAAAjrB,SACAukB,EAAA0G,IAAAjrB,OAAA,IAGAukB,IACAoC,EAAAnC,IAAAD,EAAA3hB,IAGA+jB,EAAAmB,OAAAnB,EAAA/M,QAAA,KAAA2K,EAAA9N,UACAkQ,EAAA/M,OAAA+M,EAAAmB,MAAAnB,EAAA/M,OAAA2K,EAAAtgB,MACA0iB,EAAAmB,MAAAvD,EAAAtgB,QAMA0iB,EAAA1M,SAAAP,EAAA,2CACArU,SAAA,sBACAqe,SAAAiD,EAAAS,SAKA,IAAAT,EAAAhM,KAAAwB,SAAAwK,EAAAhM,KAAAmN,OAAAnB,EAAAhM,KAAAf,SAAA+M,EAAAhM,KAAAiR,OAAAjF,EAAAhM,KAAAmK,SAEA6B,EAAAmB,MAAAnB,EAAAhM,KAAAmN,MACAnB,EAAA/M,OAAA+M,EAAAhM,KAAAf,OAEA+M,EAAAkF,OAAAnS,EAAA,WACArG,IAAA,mBAEAqG,EAAA7Y,MAAA4E,SAEAkhB,EAAAkF,OAAA,KAEAtT,EAAAuT,YAAAnF,KAGAtT,IAAA,kBAEAkF,EAAAsG,UAAA8H,GAEApO,EAAAuT,YAAAnF,KAGAthB,SAAA,kBACAqe,SAAAiD,EAAA1M,UACAW,KAAA,MAAA+L,EAAAhM,KAAAiR,OAAAjF,EAAAhM,KAAAmK,OAAAlK,KAAA,SAIArC,EAAAuT,YAAAnF,IAUAmF,YAAA,SAAAnF,GACA,GAAApO,GAAA1X,KACAkrB,EAAArS,EAAA,UAEAiN,GAAAqF,OAAAD,EACA1Y,IAAA,mBAEAkF,EAAAuS,SAAAnE,KAGAtT,IAAA,kBAGAQ,aAAA8S,EAAAsF,SAEAtF,EAAAsF,QAAA,KAEA1T,EAAAoN,YAIAgB,EAAAmB,MAAAnB,EAAAhM,KAAAmN,OAAAjnB,KAAAqrB,aACAvF,EAAA/M,OAAA+M,EAAAhM,KAAAf,QAAA/Y,KAAAsrB,cAEAxF,EAAAhM,KAAAuB,MAAAkP,QACAW,EAAAnR,KAAA,iBAAAA,KAAA,SAAA+L,EAAAhM,KAAAuB,MAAAkP,QAGA7S,EAAA6T,YAAAzF,GAEAA,EAAAkF,OAEAlF,EAAAsF,QAAAnY,WAAA,WACA6S,EAAAsF,QAAA,KAEAtF,EAAAkF,OAAAnG,QAEyBkC,KAAAiC,IAAA,IAAAjC,KAAAyE,IAAA,IAAA1F,EAAA/M,OAAA,QAGzBrB,EAAAsG,UAAA8H,MAIAthB,SAAA,kBACAuV,KAAA,MAAA+L,EAAAnC,KACAd,SAAAiD,EAAA1M,WAEA8R,EAAA,GAAA9D,UAAA,YAAA8D,EAAA,GAAAO,aAAAP,EAAA,GAAAG,cAAAH,EAAA,GAAAI,cACAJ,EAAA/H,QAAA,QAEa+H,EAAA,GAAAhlB,MACbglB,EAAA/H,QAAA,SAIA2C,EAAAsF,QAAAnY,WAAA,WACAiY,EAAA,GAAA9D,UAAAtB,EAAAwC,UACA5Q,EAAAwS,YAAApE,IAGiB,MAUjBiE,UAAA,SAAAjE,GACA,GAGA4F,GAHAhU,EAAA1X,KACA8Z,EAAAgM,EAAAhM,KAAA2B,OACA8K,EAAAT,EAAAS,MAGAT,GAAA1M,SAAAP,EAAA,gCAAAiB,EAAAwB,QAAA,sCACAnC,IAAAW,EAAAX,KACA0J,SAAA0D,GAEAmF,EAAA7S,EAAAiB,EAAA4B,IAAAtV,QAAA,YAAkD,GAAAulB,OAAAC,YAClD7R,KAAAD,EAAAC,MACA8I,SAAAiD,EAAA1M,UAEAU,EAAAwB,SAEA5D,EAAAwS,YAAApE,GAKA4F,EAAAvhB,GAAA,4BAAA1G,GACAzD,KAAA6rB,QAAA,EAEA/F,EAAAS,OAAApD,QAAA,WAEAzL,EAAAsG,UAAA8H,KAMAS,EAAApc,GAAA,wBACA,GAGA2hB,GACAC,EACAC,EALAC,EAAAnG,EAAA1M,SACA8S,EAAApS,EAAAX,IAAA8N,MACAkF,EAAArS,EAAAX,IAAAJ,MAKA,QAAA2S,EAAA,GAAAG,QAAA,CAOA,IACAE,EAAAL,EAAAU,WACAJ,EAAAD,EAAA1nB,KAAA,QAEqB,MAAAgoB,IAGrBL,KAAA7sB,aA93DC,KAg4DD+sB,IACAJ,EAAAJ,EAAA,GAAAY,cAAAjW,SAAAkW,gBAAAT,YAEAI,EAAAnF,KAAAyF,KAAAR,EAAAS,YAAA,IAAAR,EAAAhF,QAAA6E,IACAI,GAAAD,EAAAQ,aAAAR,EAAAxB,kBAp4DC,KAu4DD0B,IACAA,EAAApF,KAAAyF,KAAAR,EAAA9S,aAAA,IACAiT,GAAAF,EAAA/S,cAAA+S,EAAAjT,eAIAkT,GACAD,EAAAhF,MAAAiF,GAGAC,GACAF,EAAAlT,OAAAoT,IAIAF,EAAArF,YAAA,0BAMA5mB,KAAAge,UAAA8H,GAIA4F,EAAA3R,KAAA,MAAA+L,EAAAnC,MAEA,IAAAmC,EAAAhM,KAAAoB,UACA4K,EAAA1M,SAAAsT,QAAAhV,EAAAsL,UAAA8C,IAAAhM,KAAAyC,OAAArB,WAIAqL,EAAA/T,IAAA,qBAGA,IAEAqG,EAAA7Y,MAAAqE,KAAA,UAAAwgB,OAAA9K,KAAA,uBAEiB,MAAAsS,IAEjBxT,EAAA7Y,MAAA2sB,QAEA7G,EAAAwB,UAAA,KAUA0C,WAAA,SAAAlE,EAAA7E,GAEA,GAAAvJ,GAAA1X,IAEA0X,GAAAoN,YAIApN,EAAA6T,YAAAzF,GAEAA,EAAAS,OAAAoG,QAEA1M,EAAAgB,MAAA7gB,SAAAjB,QAQA8hB,EAAA7gB,OAAA,2BAAA+iB,QAAA,WAGA2C,EAAA8G,aAAA/T,EAAA,eAAAgM,OAAAgI,YAAA5L,GAGAA,EAAA9H,IAAA,2BAEa2M,EAAAwC,WAGb,WAAAzP,EAAA7H,KAAAiQ,KACAA,EAAApI,EAAA,SAAApU,OAAAoU,EAAAlE,KAAAsM,IAAAmL,WAGA,IAAAnL,EAAA,GAAA6L,WACA7L,EAAApI,EAAA,SAAAkU,KAAA9L,KAKA6E,EAAAhM,KAAAO,SACA4G,EAAApI,EAAA,SAAAkU,KAAA9L,GAAA5c,KAAAyhB,EAAAhM,KAAAO,UAKAyL,EAAAS,OAAA/T,IAAA,qBAGAqG,EAAA7Y,MAAAqE,KAAA,eAAA8e,QAAA,SAGA2C,EAAA8G,eACA9G,EAAA8G,aAAAI,MAAA/L,EAAA4D,QAAAjgB,SAEAkhB,EAAA8G,aAAA,MAIA9G,EAAAmH,YACAnH,EAAAmH,UAAAroB,SAEAkhB,EAAAmH,UAAA,MAIAnH,EAAAwC,WACAzP,EAAA7Y,MAAA2sB,QAEA7G,EAAAwB,UAAA,KAKAxB,EAAA1M,SAAAP,EAAAoI,GAAA4B,SAAAiD,EAAAS,QAEAvmB,KAAAge,UAAA8H,KAMAmE,SAAA,SAAAnE,GAEAA,EAAAwC,UAAA,EAEAxC,EAAAS,OAAAK,YAAA,mBAAAd,EAAA9U,MAEAhR,KAAAgqB,WAAAlE,EAAA9lB,KAAAgjB,UAAA8C,IAAAhM,KAAAwC,YAQA4N,YAAA,SAAApE,GAEA,GAAApO,GAAA1X,MAEA8lB,KAAApO,EAAA8G,WAEAsH,EAAAoH,WACApH,EAAAoH,SAAArU,EAAAnB,EAAAoC,KAAAuC,YAAAwG,SAAAiD,EAAAS,UAQAgF,YAAA,SAAAzF,GAEA,GAAApO,GAAA1X,MAEA8lB,KAAApO,EAAA8G,UAEAsH,EAAAoH,WACApH,EAAAoH,SAAAtoB,eAEAkhB,GAAAoH,WASAlP,UAAA,SAAA8H,GAEA,GAAApO,GAAA1X,IAEA0X,GAAAoN,YAIAgB,EAAA3W,WAAA,EACA2W,EAAAwB,UAAA,EAEA5P,EAAAyL,QAAA,YAAA2C,GAEApO,EAAA6T,YAAAzF,GAEAA,EAAAhM,KAAAoB,WAAA4K,EAAAmH,YACAnH,EAAAmH,UAAApU,EAAAnB,EAAAsL,UAAA8C,IAAAhM,KAAAyC,OAAArB,WAAA2H,SAAAiD,EAAA1M,SAAAiB,OAAA,YAAA8S,UAGArH,EAAAhM,KAAAqB,SAAA2K,EAAA1M,WAAA0M,EAAAwC,WAGAxC,EAAA1M,SAAAjP,GAAA,0BAAA1G,GAKA,MAJA,IAAAA,EAAA2pB,QACA3pB,EAAA0W,kBAGA,IAKA,UAAA2L,EAAA9U,MACA6H,EAAA,0CAAAgK,SAAAiD,EAAA1M,WAKA1B,EAAA6P,cAAAzB,KAUAyB,cAAA,SAAAzB,GAEA,GAGAuH,GAAAC,EAAA1H,EAAAwD,EAAAT,EAHAjR,EAAA1X,KACAumB,EAAAT,EAAAS,OAEAgH,GAAA,CAmBA,OAjBAF,GAAAvH,EAAAhM,KAAApC,EAAA+J,SAAA,sCACAmE,EAAAE,EAAAhM,KAAApC,EAAA+J,SAAA,0CAEAmE,EAAA3iB,aAxnEC,KAwnED6iB,EAAAY,eAAAd,EAAAE,EAAAY,eAAA,KAEAZ,EAAAU,SAAAV,EAAAD,MAAAnO,EAAA8J,SAAAoE,IACAyH,GAAA,GAIA,SAAAA,GAAAvH,EAAAD,MAAAnO,EAAA8J,SAAAoE,GAAA,UAAAE,EAAA9U,OAAA8U,EAAAwC,WAAAiF,EAAA7V,EAAA8V,YAAA1H,MACAuH,EAAA,QAMA,SAAAA,GACA1E,EAAAjR,EAAAkR,UAAA9C,GAEA6C,EAAAX,OAAAW,EAAA1B,MAAAsG,EAAAtG,MACA0B,EAAAV,OAAAU,EAAA5P,OAAAwU,EAAAxU,aAEA4P,GAAA1B,YACA0B,GAAA5P,OAGAqQ,EAAAtD,EAAAhM,KAAAiC,YAEA,QAAAqN,IACAA,EAAArC,KAAA6C,IAAA9D,EAAAmB,MAAAnB,EAAA/M,OAAAwU,EAAAtG,MAAAsG,EAAAxU,QAAA,IAGAqQ,IACAmE,EAAAnE,QAAA,GACAT,EAAAS,QAAA,GAIAvQ,EAAAyB,SAAA4O,aAAApD,EAAA1M,SAAAwN,YAAA,sBAAA2G,GAEAzM,EAAAgF,EAAA1M,cAGAP,GAAAyB,SAAA4M,QAAApB,EAAA1M,SAAAuP,EAAA/C,EAAA,WACAlO,EAAA0P,eAMA1P,EAAA+P,YAAA3B,GAMAuH,GAYAxU,EAAAyB,SAAAwM,KAAAP,GAEA+G,EAAA,sCAAAxH,EAAAD,KAAAnO,EAAA6J,QAAA,mCAAA8L,EAEA9G,EAAAY,WAAA,SAAAP,YAAA,yEAAApiB,SAAA8oB,GAEAxH,EAAA1M,SAAAwN,YAAA,sBAGA9F,EAAAyF,OAEA1N,GAAAyB,SAAA4M,QAAAX,EAAA,0BAAAX,EAAA,SAAAniB,GACA8iB,EAAAK,YAAA0G,GAAAnG,WAAA,SAEArB,EAAAD,MAAAnO,EAAA8J,SACA9J,EAAA0P,aAGa,KA7BbtG,EAAAyF,GAEAT,EAAA1M,SAAAwN,YAAA,2BAEAd,EAAAD,MAAAnO,EAAA8J,SACA9J,EAAA0P,eAgCAoG,YAAA,SAAA1H,GAEA,GAkCA2H,GAlCA/V,EAAA1X,KACA0pB,GAAA,EA+BAzF,EAAA6B,EAAAhM,KAAAmK,OACAyJ,EAAAzJ,IAAA0J,SAAA,CAgBA,OAbAD,IAAAzJ,EAAA,GAAA2J,gBAAAvX,GAhCA,SAAA/D,GAQA,IAPA,GAAAI,GAAAJ,EAAA,GAEAub,EAAAnb,EAAAob,wBACAC,KAIA,OAAArb,EAAAsb,eACA,WAAAnV,EAAAnG,EAAAsb,eAAA7U,IAAA,sBAAAN,EAAAnG,EAAAsb,eAAA7U,IAAA,aACA4U,EAAA7sB,KAAAwR,EAAAsb,cAAAF,yBAGApb,IAAAsb,aAUA,OAPAD,GAAAE,MAAA,SAAAC,GACA,GAAAC,GAAApH,KAAAiC,IAAA6E,EAAAO,MAAAF,EAAAE,OAAArH,KAAAyE,IAAAqC,EAAApH,KAAAyH,EAAAzH,MACA4H,EAAAtH,KAAAiC,IAAA6E,EAAAS,OAAAJ,EAAAI,QAAAvH,KAAAyE,IAAAqC,EAAA7kB,IAAAklB,EAAAllB,IAEA,OAAAmlB,GAAA,GAAAE,EAAA,KAIAR,EAAAS,OAAA,GAAAT,EAAAO,MAAA,GACAP,EAAApH,KAAA5N,EAAA9P,GAAAke,SAAA4G,EAAA7kB,IAAA6P,EAAA9P,GAAAgQ,UAOAkL,KACAwJ,EAAA/V,EAAAuL,MAAA2B,MAAA+I,SAEAjE,GACA1gB,IAAA0kB,EAAA1kB,IAAAykB,EAAAzkB,IAAAulB,WAAAtK,EAAA9K,IAAA,wBACAsN,KAAAiH,EAAAjH,KAAAgH,EAAAhH,KAAA8H,WAAAtK,EAAA9K,IAAA,yBACA8N,MAAAhD,EAAAgD,QACAlO,OAAAkL,EAAAlL,SACAiP,OAAA,EACAC,OAAA,IAIAyB,GAQAtC,SAAA,WACA,GAAA1P,GAAA1X,KACAwe,EAAA9G,EAAA8G,QACAsD,IAGAtD,GAAAgI,UAAAhI,EAAA8I,UAAA9I,EAAAgJ,aAIAhJ,EAAAgJ,YAAA,EAEAhJ,EAAA+H,OAAAhN,WAAA4J,QAAA,WAEAzL,EAAA4D,QAAA,UAGAwF,EAAAtC,EAAA+H,QAEA/H,EAAA+H,OAAA/hB,SAAA,4BAGAqU,EAAAzG,KAAAsF,EAAAoK,OAAA,SAAApiB,EAAAomB,GACAA,EAAAD,KAAAnO,EAAA8J,QAAA,GAAAsE,EAAAD,KAAAnO,EAAA8J,QAAA,EACAM,EAAAgE,EAAAD,KAAAC,EAEiBA,IACjBjN,EAAAyB,SAAAwM,KAAAhB,EAAAS,QAEAT,EAAAS,OAAAnc,MAAAxF,YAIA8S,EAAAoK,SAEApK,EAAA6Q,eAEA7Q,EAAAyL,QAAA,aAGA3E,EAAA+H,OAAAliB,KAAA,eAAA8oB,QAAAhK,QAAA,SAGAtK,EAAAxC,EAAAuL,eAAA/d,GAAA,eAAA2a,EAAA1E,KAAAgD,WAAA,SAAA0B,EAAAxN,MAAA,WAAAwN,EAAAxN,OACA0G,EAAAsN,UASA1J,QAAA,SAAAtK,GACA,GAAA0G,GAAA1X,KACAsL,EAAAoM,EAAAoK,OAAApK,EAAA8J,QAAA,GACAgN,EAAA9W,EAAAoK,OAAApK,EAAA8J,QAAA,EAEAlW,MAAA0F,UACA0G,EAAAmP,UAAAvb,GAGAkjB,KAAAxd,UACA0G,EAAAmP,UAAA2H,IAQAxJ,MAAA,WACA,GACA1S,GADAkM,EAAAxe,KAAAwe,OAGAxe,MAAA8kB,YAIAtG,KAAAgJ,aAGAlV,EAAAkM,EAAA+H,OAAAliB,KAAA,0CAEAiO,EAAAnT,SACAmT,EAAAkM,EAAA+H,OAAAliB,KAAA,8BAAAgW,OAAA,4BAIA/H,OAAAnT,OAAAmT,EAAAtS,KAAAijB,MAAAC,UAEA5Q,EAAA0S,UAQA5B,SAAA,WACA,GAAA1L,GAAA1X,IAGA6Y,GAAA,uBAAAzG,KAAA,WACA,GAAArU,GAAA8a,EAAA7Y,MAAAF,KAAA,WAGA/B,MAAAqD,KAAAsW,EAAAtW,KAAArD,EAAA+mB,YACA/mB,EAAAolB,QAAA,gBAEAplB,EAAAwmB,eAEAxmB,EAAA0wB,WAAA,KAKA/W,EAAA+W,WAAA,GAEA/W,EAAA8G,SAAA9G,EAAA2N,UACA3N,EAAA3E,SAEA2E,EAAA2O,kBAGA3O,EAAAyL,QAAA,cAEAzL,EAAA4M,aAQA5H,MAAA,SAAAjZ,EAAAvF,GAEA,GAGAmvB,GAAAzH,EACAsC,EAAAkB,EAAAmE,EAAA5E,EAJAjR,EAAA1X,KACAwe,EAAA9G,EAAA8G,QAKAhX,EAAA,WACAkQ,EAAAgX,QAAAjrB,GAGA,QAAAiU,EAAAoN,YAIApN,EAAAoN,WAAA,GAGA,IAAApN,EAAAyL,QAAA,cAAA1f,IACAiU,EAAAoN,WAAA,EAEA5E,EAAA,WACAxI,EAAA3E,YAGA,IAKA2E,EAAA6M,eAEA/F,EAAA4M,SACApY,aAAAwL,EAAA4M,SAGAlD,EAAA1J,EAAApF,SACAiU,EAAA7O,EAAA1E,KAAA+B,gBACA+J,EAAA/M,EAAA8N,UAAAzoB,KAAAmvB,EAAA7O,EAAA1E,KAAAgC,kBAAA,EAGA0C,EAAA+H,OAAAnc,IAAAmW,GAAAqG,YAAA,4FAEApI,EAAA+H,OAAAhN,WAAA4J,QAAA,WAAAve,SAGAghB,GACAlO,EAAAuL,MAAAC,UAAA0D,YAAA,oBAAApiB,SAAA,uBAIAkT,EAAA6T,YAAA/M,GAEA9G,EAAAgO,eAEAhO,EAAA6Q,eAGA,SAAA8E,IAAA,IAAA5pB,GAAAykB,GAAAtC,GAAA,UAAApH,EAAAxN,OAAAwN,EAAA8J,WAAAK,EAAAjR,EAAA8V,YAAAhP,MACA6O,EAAA,QAGA,SAAAA,GACAxU,EAAAyB,SAAAwM,KAAAoB,GAEAqF,EAAA1U,EAAAyB,SAAAgM,aAAA4B,GAEAqF,EAAAtG,MAAAsG,EAAAtG,MAAAsG,EAAAvF,OACAuF,EAAAxU,OAAAwU,EAAAxU,OAAAwU,EAAAtF,OAGAmB,EAAA5K,EAAA1E,KAAAiC,YAEA,QAAAqN,IACAA,EAAArC,KAAA6C,IAAApL,EAAAyI,MAAAzI,EAAAzF,OAAA4P,EAAA1B,MAAA0B,EAAA5P,QAAA,IAGAqQ,IACAT,EAAAS,QAAA,GAGAmE,EAAAvF,OAAAuF,EAAAtG,MAAA0B,EAAA1B,MACAsG,EAAAtF,OAAAsF,EAAAxU,OAAA4P,EAAA5P,OAEAwU,EAAAtG,MAAA0B,EAAA1B,MACAsG,EAAAxU,OAAA4P,EAAA5P,OAEAF,EAAAyB,SAAA4O,aAAA1K,EAAApF,SAAAmU,GAEAzM,EAAAtC,EAAApF,UAEAP,EAAAyB,SAAA4M,QAAA1I,EAAApF,SAAAuP,EAAA/C,EAAApe,IAEA,IAGA6lB,GAAAzH,GAGA,IAAAniB,EACAwP,WAAAzL,EAAAoe,GAGA/M,EAAAyB,SAAA4M,QAAA1I,EAAA+H,OAAAK,YAAA,qFAAAyG,EAAAzH,EAAApe,GAIAA,KAGA,MAOAknB,QAAA,SAAAjrB,GACA,GAEA1F,GACA4vB,EAHAjW,EAAA1X,KACAgsB,EAAAnT,EAAA,OAIAnB,GAAA8G,QAAA+H,OAAApD,QAAA,WAEAzL,EAAAuL,MAAAC,UAAAyJ,QAAA/nB,SAEA8S,EAAAyL,QAAA,aAAA1f,GAGAiU,EAAAiK,YAAAjK,EAAA8G,QAAA1E,KAAAiD,WACArF,EAAAiK,WAAAqD,QAGAtN,EAAA8G,QAAA,KAGAzgB,EAAA8a,EAAAyB,SAAAiI,cAEAxkB,EACAA,EAAAqlB,YAIAtD,EAAAuC,UAAA3K,EAAA2K,WAAAC,WAAA5K,EAAA4K,YAEA0J,EAAApF,YAAA,4CAEAoF,EAAAloB,SAAA,qBACA6pB,EAAA1qB,SAAAoT,EAAAsM,KAAA9B,MAAA7X,IAAA,IAEAgjB,EAAApF,YAAA,mBAAAzN,IAAA,UAAAkJ,WAAA,EAAAsL,IAGA9U,EAAA,4BAAAjU,WAUAue,QAAA,SAAArZ,EAAAgc,GACA,GAGA4D,GAHAhd,EAAAlB,MAAA3L,UAAA2V,MAAA3M,KAAAvF,UAAA,GACAoU,EAAA1X,KACAiW,EAAA6P,KAAAhM,KAAAgM,EAAApO,EAAA8G,OAgBA,IAbAvI,EACAvJ,EAAAiiB,QAAA1Y,GAGAA,EAAAyB,EAGAhL,EAAAiiB,QAAAjX,GAEAmB,EAAA4Q,WAAAxT,EAAA6D,KAAAhQ,MACA4f,EAAAzT,EAAA6D,KAAAhQ,GAAAgK,MAAAmC,EAAAvJ,KAGA,IAAAgd,EACA,MAAAA,EAGA,gBAAA5f,GAAA4N,EAAAuL,MAIAvL,EAAAuL,MAAAC,UAAAC,QAAArZ,EAAA,MAAA4C,GAHAqT,EAAAoD,QAAArZ,EAAA,MAAA4C,IAYA2Z,eAAA,SAAAuI,GAEA,GAAAlX,GAAA1X,KAEAwe,EAAA9G,EAAA8G,QACAxE,EAAAwE,EAAAxE,MACAkK,EAAA1F,EAAA1E,KAAAoK,QACAlC,EAAAtK,EAAAuL,MAAAC,UACA2L,EAAAnX,EAAAuL,MAAAiB,OAGA1F,GAAA+H,OAAApD,QAAA,WAEAzL,EAAAmX,SAAA3K,KAAA/kB,OAAA0vB,EAAA9B,KAAA7I,GAAA,KAEAxM,EAAAoX,kBAAApX,EAAA2N,QACA3N,EAAA4N,eAIAtD,EAAA3d,KAAA,yBAAA0oB,KAAArV,EAAA0J,MAAAjiB,QACA6iB,EAAA3d,KAAA,yBAAA0oB,KAAA/S,EAAA,GAEAgI,EAAA3d,KAAA,wBAAA0qB,KAAA,YAAAvQ,EAAA1E,KAAAW,MAAAT,GAAA,GACAgI,EAAA3d,KAAA,wBAAA0qB,KAAA,YAAAvQ,EAAA1E,KAAAW,MAAAT,GAAAtC,EAAA0J,MAAAjiB,OAAA,GAEA,UAAAqf,EAAAxN,KAGAgR,EAAA3d,KAAA,4BAAA0V,KAAA,OAAAyE,EAAA1E,KAAAuB,MAAAsI,KAAAnF,EAAAmF,KAAA3e,OAGAgd,EAAA3d,KAAA,iDAAAwgB,QAOAa,aAAA,WAEA1lB,KAAA8uB,kBAAA,EAEA9uB,KAAAijB,MAAAC,UAAA0D,YAAA,wFAIAtB,aAAA,WACA,GAAA5N,GAAA1X,KACA8Z,EAAApC,EAAA8G,QAAA9G,EAAA8G,QAAA1E,KAAApC,EAAAoC,KACAkI,EAAAtK,EAAAuL,MAAAC,SAEAxL,GAAAoX,kBAAA,EACApX,EAAA0N,mBAAA,EAEApD,EACAgN,YAAA,2BAAAlV,EAAAiB,UAAAjB,EAAAkB,UACAgU,YAAA,2BAAAlV,EAAAgB,SAAApD,EAAA0J,MAAAjiB,OAAA,IACA6vB,YAAA,uBAAAlV,EAAAe,QAAAnD,EAAA0J,MAAAjiB,OAAA,IACA6vB,YAAA,sBAAAlV,EAAAsB,OAEA1D,EAAAmX,SACA7M,EAAAxd,SAAA,0BAGAwd,EAAA4E,YAAA,0BASAqI,eAAA,WACAjvB,KAAA8uB,iBACA9uB,KAAAslB,eAGAtlB,KAAA0lB,kBASA7M,EAAAyB,UAEA4U,QAAA,SACA1U,WAeA+H,YAAA,SAAA4M,GACA,GAAApxB,GAAA8a,EAAA,wDAAA/Y,KAAA,YACA4M,EAAAlB,MAAA3L,UAAA2V,MAAA3M,KAAAvF,UAAA,EAEA,OAAAvF,aAAAijB,KAEA,WAAAnI,EAAA7H,KAAAme,GACApxB,EAAAoxB,GAAArb,MAAA/V,EAAA2O,GAEiB,aAAAmM,EAAA7H,KAAAme,IACjBA,EAAArb,MAAA/V,EAAA2O,GAGA3O,IAWAwc,KAAA,SAAAN,EAAAH,EAAAE,GACA,UAAAgH,GAAA/G,EAAAH,EAAAE,IAOA0C,MAAA,SAAA0S,GACA,GAAArxB,GAAAiC,KAAAuiB,aAEAxkB,KACAA,EAAA2e,SAIA,IAAA0S,GACApvB,KAAA0c,UASA2S,QAAA,WAEArvB,KAAA0c,OAAA,GAEAqD,EAAA3V,IAAA,mBAQA+W,aAvwFC,KAuwFD9K,EAAAiZ,aAAA,iEAAA1b,KAAA4O,UAAAC,WAMA8M,MAAA,WACA,GAAAC,GAAAnZ,EAAAC,cAAA,MAEA,OAAAvN,GAAA0mB,kBAAA1mB,EAAA0mB,iBAAAD,GAAAE,iBAAA,gBAAArZ,EAAAsZ,cAAAtZ,EAAAsZ,aAAA,OAOArJ,aAAA,SAAAhU,GACA,GAAAsd,EAEA,KAAAtd,MAAAnT,OACA,QAaA,IAVAywB,EAAAtd,EAAAud,GAAA,GAAA1W,IAAA,aAEAyW,IAAA,IAAAA,EAAA1jB,QAAA,WACA0jB,IAAAzL,MAAA,QACAyL,IAAAzL,MAAA,QACAyL,IAAAzL,MAAA,MAEAyL,KAGAA,EAAAzwB,OAIAywB,EADAA,EAAAzwB,OAAA,IACAywB,EAAA,IAAAA,EAAA,IAAAA,EAAA,GAAAA,EAAA,KAGAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAGAA,IAAA9uB,IAAAytB,gBAEa,CACbqB,GAAA,QAEA,IAAAE,GAAA,iCACAC,EAAAD,EAAAE,KAAA1d,EAAAud,GAAA,GAAA9V,KAAA,SAEAgW,KACAH,EAAA,GAAArB,WAAAwB,EAAA,IACAH,EAAA,GAAArB,WAAAwB,EAAA,KAIA,OACA/mB,IAAA4mB,EAAA,GACAnJ,KAAAmJ,EAAA,GACA5H,OAAA4H,EAAA,GACA3H,OAAA2H,EAAA,GACAxG,QAAAmF,WAAAjc,EAAA6G,IAAA,YACA8N,MAAA3U,EAAA2U,QACAlO,OAAAzG,EAAAyG,WAUAmQ,aAAA,SAAA5W,EAAArT,GACA,GAAAqkB,GAAA,GACAnK,IAEA,IAAA7G,GAAArT,EAmCA,WAx3FC,KAy1FDA,EAAAwnB,UAz1FC,KAy1FDxnB,EAAA+J,MACAsa,OA11FC,KA01FDrkB,EAAAwnB,KAAAnU,EAAA2d,WAAAxJ,KAAAxnB,EAAAwnB,MAAA,YA11FC,KA01FDxnB,EAAA+J,IAAAsJ,EAAA2d,WAAAjnB,IAAA/J,EAAA+J,KAAA,KAGAsa,EADAtjB,KAAAuvB,MACA,eAAAjM,EAAA,SAGA,aAAAA,EAAA,SAh2FC,KAo2FDrkB,EAAA+oB,YAp2FC,KAo2FD/oB,EAAAgpB,SACA3E,KAAAnkB,OAAAmkB,EAAA,iBAAArkB,EAAA+oB,OAAA,KAAA/oB,EAAAgpB,OAAA,KAGA3E,EAAAnkB,SACAga,EAAA+W,UAAA5M,OAz2FC,KA42FDrkB,EAAAmqB,UACAjQ,EAAAiQ,QAAAnqB,EAAAmqB,aA72FC,KAg3FDnqB,EAAAgoB,QACA9N,EAAA8N,MAAAhoB,EAAAgoB,WAj3FC,KAo3FDhoB,EAAA8Z,SACAI,EAAAJ,OAAA9Z,EAAA8Z,QAGAzG,EAAA6G,QAOA+N,QAAA,SAAA5U,EAAA6d,EAAAvK,EAAArf,EAAA6pB,GACAvX,EAAA4Q,WAAA7D,KACArf,EAAAqf,EACAA,EAAA,MAGA/M,EAAAgL,cAAAsM,IACA7d,EAAA6U,WAAA,SAGA7U,EAAAnI,GAAAoW,EAAA,SAAA9c,KAGAA,MAAAkhB,eAAArS,EAAAzO,GAAAJ,EAAAkhB,cAAA3lB,SAAA,WAAAyE,EAAAkhB,cAAA0L,gBAIAxX,EAAAyB,SAAAwM,KAAAxU,GAEAuG,EAAAgL,cAAAsM,QAl5FC,KAo5FDA,EAAAnI,YAp5FC,KAo5FDmI,EAAAlI,SACA3V,EAAA6G,IAAA,0BAEAgX,EAAAlJ,MAAAF,KAAAC,MAAA1U,EAAA2U,QAAAkJ,EAAAnI,QACAmI,EAAApX,OAAAgO,KAAAC,MAAA1U,EAAAyG,SAAAoX,EAAAlI,QAEAkI,EAAAnI,OAAA,EACAmI,EAAAlI,OAAA,EAEApP,EAAAyB,SAAA4O,aAAA5W,EAAA6d,KAGA,IAAAC,GACA9d,EAAA6U,WAAA,WAGiB,IAAAiJ,GACjB9d,EAAAsU,YAAAuJ,GAGAtX,EAAA4Q,WAAAljB,IACAA,EAAA9C,MAKAoV,EAAA8N,UAAAf,IACAtT,EAAA6G,IAAA,sBAAAyM,EAAA,MAGA/M,EAAAgL,cAAAsM,GACAtX,EAAAyB,SAAA4O,aAAA5W,EAAA6d,GAGA7d,EAAA9N,SAAA2rB,GAGAA,EAAAnI,QAAA1V,EAAAxO,SAAA,wBACAwO,EAAAlS,SAAAoE,SAAA,uBAIA8N,EAAAxS,KAAA,QAAAmT,WAAA,WACAX,EAAA6Q,QAAA,kBACayC,EAAA,MAIbkB,KAAA,SAAAxU,GACAU,aAAAV,EAAAxS,KAAA,UAEAwS,EAAAlI,IAAA,iBAAA+O,IAAA,0BAEA7G,EAAAxO,SAAA,wBACAwO,EAAAlS,SAAAwmB,YAAA,yBAgDA/N,EAAA1G,GAAAmI,SAAA,SAAAnR,GACA,GAAAiR,EAoBA,OAlBAjR,SACAiR,EAAAjR,EAAAiR,WAAA,EAEAA,EAEAvB,EAAA,QAAAzO,IAAA,iBAAAgQ,GAAAjQ,GAAA,iBAAAiQ,GACAjR,WACa0Q,GAIb7Z,KAAAoK,IAAA,kBAAAD,GAAA,kBACA8P,MAAAja,KACAmJ,WACa0Q,GAIb7Z,MAOA+f,EAAA5V,GAAA,mCAAA0P,KAEC9Q,OAAAsN,SAAAtN,OAAAd,gBAQA,SAAA4Q,GAED,YAIA,IAAAyX,GAAA,SAAAvuB,EAAA2nB,EAAAjsB,GACA,GAAAsE,EAkBA,MAdAtE,MAAA,GAEA,WAAAob,EAAA7H,KAAAvT,KACAA,EAAAob,EAAA0X,MAAA9yB,GAAA,IAGAob,EAAAzG,KAAAsX,EAAA,SAAAhqB,EAAA0D,GACArB,IAAAqE,QAAA,IAAA1G,EAAA0D,GAAA,MAGA3F,EAAA0B,SACA4C,MAAAmK,QAAA,gBAAAzO,GAGAsE,GAKAyY,GACAgW,SACAC,QAAA,wJACAhzB,QACA4F,SAAA,EACAqtB,SAAA,EACAC,GAAA,EACAC,IAAA,EACAC,GAAA,EACAC,MAAA,cACAC,YAAA,EACAC,MAAA,GAEAC,WAAA,EACAjgB,KAAA,SACAjP,IAAA,6BACAgpB,MAAA,yCAGAmG,OACAT,QAAA,oCACAhzB,QACA4F,SAAA,EACAwtB,GAAA,EACAM,WAAA,EACAC,YAAA,EACAC,cAAA,EACAC,WAAA,EACAC,IAAA,GAEAN,WAAA,EACAjgB,KAAA,SACAjP,IAAA,+BAGAyvB,UACAf,QAAA,oCACAzf,KAAA,SACAjP,IAAA,qCAGA0vB,aACAhB,QAAA,sCACAhzB,QACAi0B,gBAAA,EACAxU,UAAA,GAEAlM,KAAA,SACAjP,IAAA,wCAGA4vB,MACAlB,QAAA,mCACAzf,KAAA,SACAjP,IAAA,+BAGA6vB,WACAnB,QAAA,yDACAzf,KAAA,QACAjP,IAAA,2BAOA8vB,YACApB,QAAA,4GACAzf,KAAA,SACAjP,IAAA,SAAA2nB,GACA,uBAAAA,EAAA,YAAAA,EAAA,GAAAA,EAAA,SAAA3C,KAAAkC,MAAAS,EAAA,MAAAA,EAAA,IAAAA,EAAA,IAAAtjB,QAAA,eAAAsjB,EAAA,iBAAAA,EAAA,KAAAA,EAAA,IAAAxd,QAAA,kCAQA4lB,aACArB,QAAA,oEACAzf,KAAA,SACAjP,IAAA,SAAA2nB,GACA,uBAAAA,EAAA,cAAAA,EAAA,GAAAtjB,QAAA,eAAAA,QAAA,8BAKAyS,GAAAxC,UAAAlM,GAAA,8BAAA1G,EAAA1F,EAAAsb,GAEA,GAEAiE,GACAyN,EACArB,EACAjsB,EACAs0B,EACAC,EAPAjwB,EAAAsX,EAAAsK,KAAA,GACA3S,GAAA,CASAsM,GAAAzE,EAAAqI,QAAA,KAA4B1G,EAAAnB,EAAAS,KAAAwD,OAG5BzE,EAAAzG,KAAAkL,EAAA,SAAA2U,EAAAC,GAGA,GAFAxI,EAAA3nB,EAAAwhB,MAAA2O,EAAAzB,SAEA,CAOA,GAHAzf,EAAAkhB,EAAAlhB,KACAghB,KAEAE,EAAAjB,YAAAvH,EAAAwI,EAAAjB,YAAA,CACAc,EAAArI,EAAAwI,EAAAjB,YAEA,KAAAc,EAAA,KACAA,IAAApH,UAAA,IAGAoH,IAAA5N,MAAA,IAEA,QAAAgO,GAAA,EAAoBA,EAAAJ,EAAA5yB,SAAsBgzB,EAAA,CAC1C,GAAAC,GAAAL,EAAAI,GAAAhO,MAAA,MAEA,IAAAiO,EAAAjzB,SACA6yB,EAAAI,EAAA,IAAAC,mBAAAD,EAAA,GAAAhsB,QAAA,cAcA,MATA3I,GAAAob,EAAAqI,QAAA,KAA8BgR,EAAAz0B,OAAA4b,EAAAS,KAAAmY,GAAAD,GAE9BjwB,EAAA,aAAA8W,EAAA7H,KAAAkhB,EAAAnwB,KAAAmwB,EAAAnwB,IAAA8G,KAAA7I,KAAA0pB,EAAAjsB,EAAA4b,GAAAiX,EAAA4B,EAAAnwB,IAAA2nB,EAAAjsB,GACAstB,EAAA,aAAAlS,EAAA7H,KAAAkhB,EAAAnH,OAAAmH,EAAAnH,MAAAliB,KAAA7I,KAAA0pB,EAAAjsB,EAAA4b,GAAAiX,EAAA4B,EAAAnH,MAAArB,GAEA,UAAAuI,IACAlwB,IAAAqE,QAAA,cAGA,KAKA4K,GACAqI,EAAAsK,IAAA5hB,EACAsX,EAAArI,OAEAqI,EAAAS,KAAAiR,OAAA1R,EAAAS,KAAAmK,QAAA5K,EAAAS,KAAAmK,OAAA9kB,SACAka,EAAAS,KAAAiR,SAGA,WAAA/Z,IACA6H,EAAAqI,QAAA,EAAA7H,EAAAS,MACA2B,QACAH,SAAA,EACAvB,MACA4B,UAAA,SAKAtC,EAAAiZ,oBAjEAC,GAmEAlZ,EAAAS,KAAAoC,YAAA,2BAGGna,IACHsX,EAAArI,KAAAqI,EAAAS,KAAA8B,gBAKC7S,OAAAd,gBAQA,SAAAc,EAAAsN,EAAAwC,GACD,YAEA,IAAAqH,GAAA,WACA,MAAAnX,GAAAoX,uBACApX,EAAAqX,6BACArX,EAAAsX,0BACAtX,EAAAuX,wBAEA,SAAA/Z,GACA,MAAAwC,GAAAkK,WAAA1M,EAAA,YAIAisB,EAAA,WACA,MAAAzpB,GAAA0pB,sBACA1pB,EAAA2pB,4BACA3pB,EAAA4pB,yBACA5pB,EAAA6pB,uBACA,SAAAxxB,GACA2H,EAAAiK,aAAA5R,OAIAyxB,EAAA,SAAApvB,GACA,GAAAT,KAEAS,KAAAkhB,eAAAlhB,GAAAsF,EAAAtF,EACAA,IAAAqvB,SAAArvB,EAAAqvB,QAAA3zB,OAAAsE,EAAAqvB,QAAArvB,EAAAsvB,gBAAAtvB,EAAAsvB,eAAA5zB,OAAAsE,EAAAsvB,gBAAAtvB,EAEA,QAAA/D,KAAA+D,GAEAA,EAAA/D,GAAAszB,MACAhwB,EAAA9B,MAAkBymB,EAAAlkB,EAAA/D,GAAAszB,MAAApL,EAAAnkB,EAAA/D,GAAAuzB,QAEdxvB,EAAA/D,GAAAwzB,SACJlwB,EAAA9B,MAAkBymB,EAAAlkB,EAAA/D,GAAAwzB,QAAAtL,EAAAnkB,EAAA/D,GAAAyzB,SAIlB,OAAAnwB,IAGAowB,EAAA,SAAAC,EAAAC,EAAAC,GACA,MAAAD,IAAAD,EAIA,MAAAE,EACAF,EAAA1L,EAAA2L,EAAA3L,EAEG,MAAA4L,EACHF,EAAAzL,EAAA0L,EAAA1L,EAGAb,KAAAyM,KAAAzM,KAAA0M,IAAAJ,EAAA1L,EAAA2L,EAAA3L,EAAA,GAAAZ,KAAA0M,IAAAJ,EAAAzL,EAAA0L,EAAA1L,EAAA,IAVA,GAaA8L,EAAA,SAAAphB,GACA,GAAAA,EAAAzO,GAAA,sEAAAgV,EAAA4Q,WAAAnX,EAAAjM,IAAA,GAAAstB,UAAArhB,EAAAxS,KAAA,cACA,QAIA,QAAAZ,GAAA,EAAA00B,EAAAthB,EAAA,GAAAuhB,WAAA/2B,EAAA82B,EAAAz0B,OAA6DD,EAAApC,EAAOoC,IACpE,sBAAA00B,EAAA10B,GAAA40B,SAAAlf,OAAA,MACA,QAIA,WAGAmf,EAAA,SAAA1hB,GACA,GAAA2hB,GAAAjrB,EAAA0mB,iBAAApd,GAAA,cACA4hB,EAAAlrB,EAAA0mB,iBAAApd,GAAA,cAEA+K,GAAA,WAAA4W,GAAA,SAAAA,IAAA3hB,EAAAuQ,aAAAvQ,EAAA6hB,aACAC,GAAA,WAAAF,GAAA,SAAAA,IAAA5hB,EAAAyZ,YAAAzZ,EAAA0Q,WAEA,OAAA3F,IAAA+W,GAGAC,EAAA,SAAA9hB,GAGA,IAFA,GAAAoX,IAAA,IAEA,CAGA,GAFAA,EAAAqK,EAAAzhB,EAAAjM,IAAA,IAGA,KAKA,IAFAiM,IAAAlS,UAEAkS,EAAAnT,QAAAmT,EAAAxO,SAAA,mBAAAwO,EAAAzO,GAAA,QACA,MAIA,MAAA6lB,IAIA2K,EAAA,SAAAt2B,GACA,GAAA2Z,GAAA1X,IAEA0X,GAAA3Z,WAEA2Z,EAAA4c,IAAAv2B,EAAAklB,MAAAsR,GACA7c,EAAA8c,OAAAz2B,EAAAklB,MAAA2B,MACAlN,EAAAsK,WAAAjkB,EAAAklB,MAAAC,UAEAxL,EAAA2X,UAEA3X,EAAAsK,WAAA7X,GAAA,yCAAA0O,EAAA4b,MAAA/c,EAAA,iBAGA2c,GAAAx0B,UAAAwvB,QAAA,WACArvB,KAAAgiB,WAAA5X,IAAA,cAGAiqB,EAAAx0B,UAAA60B,aAAA,SAAAjxB,GACA,GAAAiU,GAAA1X,KAEA0D,EAAAmV,EAAApV,EAAAzE,QACAjB,EAAA2Z,EAAA3Z,SACAygB,EAAAzgB,EAAAygB,QACApF,EAAAoF,EAAApF,SAEAub,EAAA,cAAAlxB,EAAAuN,IAQA,IALA2jB,GACAjd,EAAAsK,WAAA5X,IAAA,wBAIA3G,EAAAkhB,eAAA,GAAAlhB,EAAAkhB,cAAAyI,SAKA1pB,EAAAvE,SAAAu0B,EAAAhwB,KAAAgwB,EAAAhwB,EAAAtD,YAKAsD,EAAAG,GAAA,UAAAJ,EAAAkhB,cAAAuO,QAAAxvB,EAAA,GAAAqf,YAAArf,EAAAiqB,SAAAlH,OAAA,CAKA,IAAAjI,GAAA9G,EAAA3Z,SAAAooB,aAAAzO,EAAA3Z,SAAA+mB,UAIA,MAHArhB,GAAA+gB,sBACA/gB,GAAA0W,gBAOA,IAFAzC,EAAAkd,WAAAld,EAAAmd,YAAAhC,EAAApvB,GAEAiU,EAAAmd,YAAA,CAqCA,GAjCApxB,EAAA+gB,kBAEA9M,EAAAod,WAAArxB,EAEAiU,EAAAqd,QAAA,EACArd,EAAAhU,UACAgU,EAAA0B,WACA1B,EAAAoC,KAAA0E,EAAA1E,KAAAqD,MAEAzF,EAAAsd,WAAA,EACAtd,EAAAud,WAAA,EACAvd,EAAAwd,WAAA,EACAxd,EAAAyd,aAAA,EAEAzd,EAAA0d,eAAA1d,EAAA2d,gBAAgDrsB,IAAA,EAAAyd,KAAA,GAChD/O,EAAA4d,gBAAAzc,EAAAyB,SAAAgM,aAAA5O,EAAA0B,UACA1B,EAAA6d,eAAA,KAEA7d,EAAA8d,WAAA,GAAA7J,OAAAC,UACAlU,EAAA+d,UAAA/d,EAAAge,UAAAhe,EAAA0b,SAAA,EAEA1b,EAAAqO,YAAAgB,KAAAC,MAAAxI,EAAA+H,OAAA,GAAAxD,aACArL,EAAAyQ,aAAApB,KAAAC,MAAAxI,EAAA+H,OAAA,GAAA2N,cAEArb,EAAAxC,GACAjM,IAAA,aACAD,GAAAwqB,EAAA,gFAAA9b,EAAA4b,MAAA/c,EAAA,eACAvN,GAAAwqB,EAAA,0CAAA9b,EAAA4b,MAAA/c,EAAA,gBAEAmB,EAAAyB,SAAA6G,UACA9K,EAAAsf,iBAAA,SAAAje,EAAAke,UAAA,IAGAle,EAAAoC,OAAA/b,EAAA4rB,WAAAjmB,EAAAG,GAAA6T,EAAA8c,UAAA9c,EAAA8c,OAAAnwB,KAAAX,GAAAvE,OAOA,YAJAuE,EAAAG,GAAA,QACAJ,EAAA0W,iBAMAtB,GAAAyB,SAAA6G,WAAAiT,EAAA1wB,IAAA0wB,EAAA1wB,EAAAtD,YACAqD,EAAA0W,iBAGA,IAAAzC,EAAAmd,YAAA11B,SACA,UAAAqf,EAAAxN,OAAA0G,EAAA4d,gBAAArO,MAAAvP,EAAAqO,YAAA,GAAArO,EAAA4d,gBAAAvc,OAAArB,EAAAyQ,aAAA,IACAtP,EAAAyB,SAAAwM,KAAApP,EAAA0B,UAEA1B,EAAA0B,SAAAD,IAAA,0BAEAzB,EAAAsd,WAAA,GAGAtd,EAAAud,WAAA,EAGAvd,EAAAsK,WAAAxd,SAAA,kCAGA,IAAAkT,EAAAmd,YAAA11B,QAAApB,EAAAooB,aAAA3H,EAAA8J,UAAA,UAAA9J,EAAAxN,OAAAwN,EAAA8I,WAAA9I,EAAAwM,SACAtT,EAAAqd,QAAA,EACArd,EAAAud,WAAA,EACAvd,EAAAsd,WAAA,EAEAtd,EAAAwd,WAAA,EAEArc,EAAAyB,SAAAwM,KAAApP,EAAA0B,UAEA1B,EAAA0B,SAAAD,IAAA,0BAEAzB,EAAAme,kBAAA,IAAAne,EAAAmd,YAAA,GAAAlN,EAAAjQ,EAAAmd,YAAA,GAAAlN,GAAA9O,EAAA9P,GAAAuZ,aACA5K,EAAAoe,kBAAA,IAAApe,EAAAmd,YAAA,GAAAjN,EAAAlQ,EAAAmd,YAAA,GAAAjN,GAAA/O,EAAA9P,GAAAsZ,YAEA3K,EAAAqe,gCAAAre,EAAAme,kBAAAne,EAAA4d,gBAAA7O,MAAA/O,EAAA4d,gBAAArO,MACAvP,EAAAse,gCAAAte,EAAAoe,kBAAApe,EAAA4d,gBAAAtsB,KAAA0O,EAAA4d,gBAAAvc,OAEArB,EAAAue,4BAAA7C,EAAA1b,EAAAmd,YAAA,GAAAnd,EAAAmd,YAAA,QAKAR,EAAAx0B,UAAA+1B,SAAA,SAAAnyB,GACAiU,KAAAyd,aAAA,GAGAd,EAAAx0B,UAAAq2B,YAAA,SAAAzyB,GACA,GAAAiU,GAAA1X,KACA0D,EAAAmV,EAAApV,EAAAzE,OAEA,IAAA0Y,EAAAyd,cAAAzxB,EAAAG,GAAA6T,EAAA8c,UAAA9c,EAAA8c,OAAAnwB,KAAAX,GAAAvE,OAGA,YAFAuY,EAAAqd,QAAA,EAKArd,GAAAye,UAAAtD,EAAApvB,IAEAiU,EAAAoC,MAAApC,EAAA3Z,SAAA4rB,WAAAjS,EAAAye,WAAAze,EAAAye,UAAAh3B,SAIAuY,EAAAud,YAAA,IAAAvd,EAAAud,WACAxxB,EAAA0W,iBAGAzC,EAAA+d,UAAArC,EAAA1b,EAAAye,UAAA,GAAAze,EAAAmd,YAAA,QACAnd,EAAAge,UAAAtC,EAAA1b,EAAAye,UAAA,GAAAze,EAAAmd,YAAA,QAEAnd,EAAA0b,WAAA1b,EAAAye,UAAA,GAAAze,EAAAmd,YAAA,IAGAnd,EAAA0b,SAAA,IACA1b,EAAAud,UACAvd,EAAA0e,QAAA3yB,GAEIiU,EAAAsd,UACJtd,EAAA2e,QAEI3e,EAAAwd,WACJxd,EAAA4e,YAMAjC,EAAAx0B,UAAAu2B,QAAA,SAAA3yB,GACA,GAGA8yB,GAHA7e,EAAA1X,KACAw2B,EAAA9e,EAAAud,UACAxO,EAAA/O,EAAA0d,eAAA3O,MAAA,CAIA,SAAA+P,EAqDA,KAAAA,IACA9e,EAAA+d,UAAA,IAAA/d,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,OAAAuY,EAAA3Z,SAAAygB,QAAAxE,QAAAtC,EAAA3Z,SAAAygB,QAAA1E,KAAAW,MACAgM,GAAAM,KAAA0M,IAAA/b,EAAA+d,UAAA,IAEI/d,EAAA+d,UAAA,IAAA/d,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,GAAAuY,EAAA3Z,SAAAygB,QAAAxE,QAAAtC,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,IAAAuY,EAAA3Z,SAAAygB,QAAA1E,KAAAW,MACJgM,GAAAM,KAAA0M,KAAA/b,EAAA+d,UAAA,IAGAhP,GAAA/O,EAAA+d,WAIA/d,EAAA2d,eACArsB,IAAA,KAAAwtB,EAAA,EAAA9e,EAAA0d,eAAApsB,IAAA0O,EAAAge,UACAjP,QAGA/O,EAAA+e,YACAjE,EAAA9a,EAAA+e,WAEA/e,EAAA+e,UAAA,MAGA/e,EAAA+e,UAAAvW,EAAA,WAEAxI,EAAA2d,gBACAxc,EAAAzG,KAAAsF,EAAA3Z,SAAA+jB,OAAA,SAAA9H,EAAA8L,GACA,GAAAD,GAAAC,EAAAD,IAAAnO,EAAA3Z,SAAAyjB,OAEA3I,GAAAyB,SAAA4O,aAAApD,EAAAS,QACAvd,IAAA0O,EAAA2d,cAAArsB,IACAyd,KAAA/O,EAAA2d,cAAA5O,KAAAZ,EAAAnO,EAAAqO,YAAAF,EAAAC,EAAAhM,KAAAa,WAIAjD,EAAAsK,WAAAxd,SAAA,8BArFA,IAAAuiB,KAAA6C,IAAAlS,EAAA0b,UAAA,IAiBA,GAhBA1b,EAAAqd,QAAA,EAEArd,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,GAAAuY,EAAAoC,KAAAsD,SACA1F,EAAAud,UAAA,IAEKvd,EAAA3Z,SAAA0nB,aAAA,IAAA/N,EAAAoC,KAAAsD,UAAA,SAAA1F,EAAAoC,KAAAsD,UAAAvE,EAAA9P,GAAAke,QAAA,IACLvP,EAAAud,UAAA,KAGAsB,EAAAxP,KAAA6C,IAAA,IAAA7C,KAAA2P,MAAAhf,EAAAge,UAAAhe,EAAA+d,WAAA1O,KAAA4P,IAEAjf,EAAAud,UAAAsB,EAAA,IAAAA,EAAA,aAGA7e,EAAAqd,QAAA,EAEA,MAAArd,EAAAud,WAAApc,EAAAyB,SAAA6G,WAAAiT,EAAA1c,EAAAhU,UAAA0wB,EAAA1c,EAAAhU,QAAAtD,WAGA,YAFAsX,EAAAyd,aAAA,EAKAzd,GAAA3Z,SAAA0nB,WAAA/N,EAAAud,UAGAvd,EAAAmd,YAAAnd,EAAAye,UAEAtd,EAAAzG,KAAAsF,EAAA3Z,SAAA+jB,OAAA,SAAA9H,EAAA8L,GACAjN,EAAAyB,SAAAwM,KAAAhB,EAAAS,QAEAT,EAAAS,OAAApN,IAAA,0BAEA2M,EAAA8Q,cAAA,EAEA9Q,EAAAD,MAAAnO,EAAA3Z,SAAAygB,QAAAqH,MACAnO,EAAA0d,eAAA3O,KAAA5N,EAAAyB,SAAAgM,aAAAR,EAAAS,QAAAE,QAKA/O,EAAA3Z,SAAAyqB,WAAA9Q,EAAA3Z,SAAAyqB,UAAAC,UACA/Q,EAAA3Z,SAAAyqB,UAAA1B,SAkDAuN,EAAAx0B,UAAAw2B,MAAA,WACA,GAAA3e,GAAA1X,IAGA,IAAAozB,EAAA1b,EAAAye,UAAA,GAAAze,EAAAkd,WAAA,KAAA/b,EAAAyB,SAAA6G,SAAA,MAEA,YADAzJ,EAAAmd,YAAAnd,EAAAye,UAIAze,GAAAqd,QAAA,EAEArd,EAAA6d,eAAA7d,EAAAmf,gBAEAnf,EAAA+e,YACAjE,EAAA9a,EAAA+e,WAEA/e,EAAA+e,UAAA,MAGA/e,EAAA+e,UAAAvW,EAAA,WACArH,EAAAyB,SAAA4O,aAAAxR,EAAA0B,SAAA1B,EAAA6d,mBAKAlB,EAAAx0B,UAAAg3B,cAAA,WACA,GAgBAC,GAAAC,EACAC,EAAAC,EACAC,EAAAC,EAlBAzf,EAAA1X,KAEA+lB,EAAArO,EAAAqO,YACAoC,EAAAzQ,EAAAyQ,aAEAsN,EAAA/d,EAAA+d,UACAC,EAAAhe,EAAAge,UAEAJ,EAAA5d,EAAA4d,gBAEA8B,EAAA9B,EAAA7O,KACA4Q,EAAA/B,EAAAtsB,IAEAsuB,EAAAhC,EAAArO,MACAsQ,EAAAjC,EAAAvc,MAkDA,OA3CAme,GADAI,EAAAvR,EACAqR,EAAA3B,EAGA2B,EAGAD,EAAAE,EAAA3B,EAGAoB,EAAA/P,KAAAyE,IAAA,KAAAzF,EAAA,GAAAuR,GACAP,EAAAhQ,KAAAyE,IAAA,KAAArD,EAAA,GAAAoP,GAEAP,EAAAjQ,KAAAiC,IAAAjD,EAAAuR,EAAA,GAAAvR,EAAA,GAAAuR,GACAL,EAAAlQ,KAAAiC,IAAAb,EAAAoP,EAAA,GAAApP,EAAA,GAAAoP,GAEAD,EAAAvR,IAGA0P,EAAA,GAAAyB,EAAAJ,IACAI,EAAAJ,EAAA,EAAA/P,KAAA0M,KAAAqD,EAAAM,EAAA3B,EAAA,QAIAA,EAAA,GAAAyB,EAAAF,IACAE,EAAAF,EAAA,EAAAjQ,KAAA0M,IAAAuD,EAAAI,EAAA3B,EAAA,SAKA8B,EAAApP,IAGAuN,EAAA,GAAAyB,EAAAJ,IACAI,EAAAJ,EAAA,EAAAhQ,KAAA0M,KAAAsD,EAAAM,EAAA3B,EAAA,QAIAA,EAAA,GAAAyB,EAAAF,IACAE,EAAAF,EAAA,EAAAlQ,KAAA0M,IAAAwD,EAAAI,EAAA3B,EAAA,UAMA1sB,IAAAmuB,EACA1Q,KAAAyQ,EACAlP,OAAAsN,EAAAtN,OACAC,OAAAqN,EAAArN,SAKAoM,EAAAx0B,UAAA23B,cAAA,SAAAN,EAAAC,EAAAM,EAAAC,GACA,GAAAhgB,GAAA1X,KAEA+lB,EAAArO,EAAAqO,YACAoC,EAAAzQ,EAAAyQ,YAwBA,OAtBAsP,GAAA1R,GACAmR,IAAA,IAAAA,EACAA,IAAAnR,EAAA0R,EAAA1R,EAAA0R,EAAAP,GAKAA,EAAAnQ,KAAAyE,IAAA,EAAAzF,EAAA,EAAA0R,EAAA,GAIAC,EAAAvP,GACAgP,IAAA,IAAAA,EACAA,IAAAhP,EAAAuP,EAAAvP,EAAAuP,EAAAP,GAKAA,EAAApQ,KAAAyE,IAAA,EAAArD,EAAA,EAAAuP,EAAA,IAKA1uB,IAAAmuB,EACA1Q,KAAAyQ,IAKA7C,EAAAx0B,UAAAy2B,OAAA,WACA,GAAA5e,GAAA1X,KAIAs3B,EAAA5f,EAAA4d,gBAAArO,MACAsQ,EAAA7f,EAAA4d,gBAAAvc,OAEAqe,EAAA1f,EAAA4d,gBAAA7O,KACA4Q,EAAA3f,EAAA4d,gBAAAtsB,IAEA2uB,EAAAvE,EAAA1b,EAAAye,UAAA,GAAAze,EAAAye,UAAA,IAEAyB,EAAAD,EAAAjgB,EAAAue,4BAEAwB,EAAA1Q,KAAAkC,MAAAqO,EAAAM,GACAF,EAAA3Q,KAAAkC,MAAAsO,EAAAK,GAGAC,GAAAP,EAAAG,GAAA/f,EAAAqe,+BACA+B,GAAAP,EAAAG,GAAAhgB,EAAAse,+BAIA+B,GAAArgB,EAAAye,UAAA,GAAAxO,EAAAjQ,EAAAye,UAAA,GAAAxO,GAAA,EAAA9O,EAAA9P,GAAAuZ,aACA0V,GAAAtgB,EAAAye,UAAA,GAAAvO,EAAAlQ,EAAAye,UAAA,GAAAvO,GAAA,EAAA/O,EAAA9P,GAAAsZ,YAKA4V,EAAAF,EAAArgB,EAAAme,kBACAqC,EAAAF,EAAAtgB,EAAAoe,kBAIAoB,EAAAE,GAAAS,EAAAI,GACAd,EAAAE,GAAAS,EAAAI,GAEAC,GACAnvB,IAAAmuB,EACA1Q,KAAAyQ,EACAlP,OAAAtQ,EAAA4d,gBAAAtN,OAAA4P,EACA3P,OAAAvQ,EAAA4d,gBAAArN,OAAA2P,EAGAlgB,GAAAqd,QAAA,EAEArd,EAAA+f,WACA/f,EAAAggB,YAEAhgB,EAAA6d,eAAA4C,EAEAzgB,EAAA+e,YACAjE,EAAA9a,EAAA+e,WAEA/e,EAAA+e,UAAA,MAGA/e,EAAA+e,UAAAvW,EAAA,WACArH,EAAAyB,SAAA4O,aAAAxR,EAAA0B,SAAA1B,EAAA6d,mBAKAlB,EAAAx0B,UAAAu4B,WAAA,SAAA30B,GACA,GAAAiU,GAAA1X,KACAq4B,EAAAtR,KAAAyE,KAAA,GAAAG,OAAAC,UAAAlU,EAAA8d,UAAA,GAEAgB,EAAA9e,EAAAud,UACAqD,EAAA5gB,EAAAsd,UACAuD,EAAA7gB,EAAAwd,UACAvZ,EAAAjE,EAAAyd,WAuBA,IArBAzd,EAAA8gB,UAAA3F,EAAApvB,GAEAiU,EAAAsK,WAAA4E,YAAA,iCAEA/N,EAAAxC,GAAAjM,IAAA,aAEAiM,EAAAoiB,oBAAA,SAAA/gB,EAAAke,UAAA,GAEAle,EAAA+e,YACAjE,EAAA9a,EAAA+e,WAEA/e,EAAA+e,UAAA,MAGA/e,EAAAud,WAAA,EACAvd,EAAAsd,WAAA,EACAtd,EAAAwd,WAAA,EACAxd,EAAAyd,aAAA,EAEAzd,EAAA3Z,SAAA0nB,YAAA,EAEA/N,EAAAqd,OACA,MAAArd,GAAAghB,MAAAj1B,EAGAiU,GAAA8F,MAAA,IAGA9F,EAAAihB,UAAAjhB,EAAA+d,UAAA4C,EAAA,GACA3gB,EAAAkhB,UAAAlhB,EAAAge,UAAA2C,EAAA,GAEA3gB,EAAAmhB,OAAA9R,KAAAyE,IAAA,GAAA9T,EAAA8F,MAAAuJ,KAAAiC,IAAA,IAAAtR,EAAA8F,MAAA,EAAAuJ,KAAA6C,IAAAlS,EAAAihB,WAAAjhB,EAAA8F,QAEA8a,EACA5gB,EAAAohB,aAEGP,EACH7gB,EAAAqhB,aAGArhB,EAAAshB,WAAAxC,EAAA7a,IAMA0Y,EAAAx0B,UAAAm5B,WAAA,SAAAxC,EAAA7a,GACA,GAAAjE,GAAA1X,KACA0qB,GAAA,EACAuO,EAAAvhB,EAAA3Z,SAAAqjB,MAAAjiB,MAEAuY,GAAA2d,cAAA,KAGA,KAAAmB,IAAA7a,GAAAoL,KAAA6C,IAAAlS,EAAAge,WAAA,IAGA7c,EAAAyB,SAAA4M,QAAAxP,EAAA3Z,SAAAygB,QAAA+H,QACAvd,IAAA0O,EAAA0d,eAAApsB,IAAA0O,EAAAge,UAAA,IAAAhe,EAAAkhB,UACAxP,QAAA,GACI,KAEJsB,EAAAhT,EAAA3Z,SAAA2e,OAAA,QAEG,KAAA8Z,GAAA9e,EAAA+d,UAAA,IAAAwD,EAAA,EACHvO,EAAAhT,EAAA3Z,SAAA0mB,SAAA/M,EAAAmhB,QAEG,KAAArC,GAAA9e,EAAA+d,WAAA,IAAAwD,EAAA,IACHvO,EAAAhT,EAAA3Z,SAAAuN,KAAAoM,EAAAmhB,UAGA,IAAAnO,GAAA,KAAA8L,GAAA,KAAAA,IACA7a,GAAAsd,EAAA,EACAvhB,EAAA3Z,SAAAorB,YAAAzR,EAAA3Z,SAAAygB,QAAA,KAEA9G,EAAA3Z,SAAAslB,OAAA3L,EAAA3Z,SAAAygB,QAAAxE,QAIAtC,EAAAsK,WAAA4E,YAAA,wBAOAyN,EAAAx0B,UAAAi5B,WAAA,WAEA,GACA5B,GAAAC,EAAAgB,EADAzgB,EAAA1X,IAGA0X,GAAA6d,kBAIA,IAAA7d,EAAAoC,KAAAuD,UACA6Z,EAAAxf,EAAA6d,eAAA9O,KACA0Q,EAAAzf,EAAA6d,eAAAvsB,MAKAkuB,EAAAxf,EAAA6d,eAAA9O,KAAA/O,EAAAihB,UAAAjhB,EAAA8F,MACA2Z,EAAAzf,EAAA6d,eAAAvsB,IAAA0O,EAAAkhB,UAAAlhB,EAAA8F,OAGA2a,EAAAzgB,EAAA8f,cAAAN,EAAAC,EAAAzf,EAAA4d,gBAAArO,MAAAvP,EAAA4d,gBAAAvc,QAEAof,EAAAlR,MAAAvP,EAAA4d,gBAAArO,MACAkR,EAAApf,OAAArB,EAAA4d,gBAAAvc,OAEAF,EAAAyB,SAAA4M,QAAAxP,EAAA0B,SAAA+e,EAAA,OAIA9D,EAAAx0B,UAAAk5B,WAAA,WACA,GAIA7B,GAAAC,EAAAgB,EAAAe,EAJAxhB,EAAA1X,KAEAwe,EAAA9G,EAAA3Z,SAAAygB,QAIAiZ,EAAA/f,EAAA+f,SACAC,EAAAhgB,EAAAggB,SAEAhgB,GAAA6d,iBAIA2B,EAAAxf,EAAA6d,eAAA9O,KACA0Q,EAAAzf,EAAA6d,eAAAvsB,IAEAkwB,GACAlwB,IAAAmuB,EACA1Q,KAAAyQ,EACAjQ,MAAAwQ,EACA1e,OAAA2e,EACA1P,OAAA,EACAC,OAAA,GAIApP,EAAAyB,SAAA4O,aAAAxR,EAAA0B,SAAA8f,GAEAzB,EAAA/f,EAAAqO,aAAA2R,EAAAhgB,EAAAyQ,aACAzQ,EAAA3Z,SAAA2qB,WAAA,KAEG+O,EAAAjZ,EAAAyI,OAAAyQ,EAAAlZ,EAAAzF,OACHrB,EAAA3Z,SAAA2pB,cAAAhQ,EAAAme,kBAAAne,EAAAoe,kBAAA,MAIAqC,EAAAzgB,EAAA8f,cAAAN,EAAAC,EAAAM,EAAAC,GAGA7e,EAAAyB,SAAA4O,aAAAxR,EAAAuJ,QAAApI,EAAAyB,SAAAgM,aAAA5O,EAAA0B,WAEAP,EAAAyB,SAAA4M,QAAAxP,EAAA0B,SAAA+e,EAAA,QAKA9D,EAAAx0B,UAAA64B,MAAA,SAAAj1B,GACA,GAWA01B,GAXAzhB,EAAA1X,KACA0D,EAAAmV,EAAApV,EAAAzE,QAEAjB,EAAA2Z,EAAA3Z,SACAygB,EAAAzgB,EAAAygB,QAEAga,EAAA/0B,GAAAovB,EAAApvB,IAAAiU,EAAAmd,YAEAuE,EAAAZ,EAAA,GAAAA,EAAA,GAAA7Q,EAAAjQ,EAAA8c,OAAA7G,SAAAlH,KAAA,EACA4S,EAAAb,EAAA,GAAAA,EAAA,GAAA5Q,EAAAlQ,EAAA8c,OAAA7G,SAAA3kB,IAAA,EAIAswB,EAAA,SAAA7jB,GAEA,GAAA8jB,GAAA/a,EAAA1E,KAAArE,EAMA,IAJAoD,EAAA4Q,WAAA8P,KACAA,IAAAzlB,MAAA/V,GAAAygB,EAAA/a,KAGA81B,EAIA,OAAAA,GAEA,YAEAx7B,EAAA2e,MAAAhF,EAAAod,WAEA,MAEA,sBAEA/2B,EAAAkxB,gBAAA,EAEA,MAEA,YAEAlxB,EAAAuN,MAEA,MAEA,mBAEAvN,EAAAqjB,MAAAjiB,OAAA,EACApB,EAAAuN,OAGAvN,EAAA2e,MAAAhF,EAAAod,WAGA,MAEA,YAEA,SAAAtW,EAAAxN,OAAAwN,EAAA8I,UAAA9I,EAAAwM,UAEAjtB,EAAA4rB,SACA5rB,EAAA2qB,aAEO3qB,EAAA2mB,eACP3mB,EAAA2pB,cAAA0R,EAAAC,GAEOt7B,EAAAqjB,MAAAjiB,OAAA,GACPpB,EAAA2e,MAAAhF,EAAAod,cAUA,MAAArxB,EAAAkhB,eAAA,GAAAlhB,EAAAkhB,cAAAyI,UAKA1pB,EAAAG,GAAA,UAAAu1B,EAAA11B,EAAA,GAAAqf,YAAArf,EAAAiqB,SAAAlH,OAAA,CAKA,GAAA/iB,EAAAG,GAAA,oEACAs1B,EAAA,cAEG,IAAAz1B,EAAAG,GAAA,mBACHs1B,EAAA,YAEG,KAAAp7B,EAAAygB,QAAApF,WAAArb,EAAAygB,QAAApF,SAAA/U,KAAAX,GAAA81B,UAAAnf,OAAA3W,GAAAvE,OAIH,MAHAg6B,GAAA,UAOA,GAAAzhB,EAAA+hB,OAAA,CAOA,GAJAzmB,aAAA0E,EAAA+hB,QACA/hB,EAAA+hB,OAAA,KAGA1S,KAAA6C,IAAAwP,EAAA1hB,EAAA0hB,MAAA,IAAArS,KAAA6C,IAAAyP,EAAA3hB,EAAA2hB,MAAA,GACA,MAAAr5B,KAIAs5B,GAAA,WAAAH,OAMAzhB,GAAA0hB,OACA1hB,EAAA2hB,OAEA7a,EAAA1E,KAAA,WAAAqf,IAAA3a,EAAA1E,KAAA,WAAAqf,KAAA3a,EAAA1E,KAAA,QAAAqf,GAEAzhB,EAAA+hB,OAAAxmB,WAAA,WACAyE,EAAA+hB,OAAA,KAEAH,EAAA,QAAAH,IAEK,KAGLG,EAAA,QAAAH,EAKA,OAAAn5B,QAGA6Y,EAAAxC,GAAAlM,GAAA,yBAAA1G,EAAA1F,GACAA,MAAAs2B,YACAt2B,EAAAs2B,UAAA,GAAAA,GAAAt2B,OAICgL,OAAAsN,SAAAtN,OAAAd,gBAWA,SAAAoO,EAAAwC,GACD,YAEAA,GAAAqI,QAAA,EAAArI,EAAAyB,SAAAE,UACA+B,QACAgB,UACA,iNAOAA,WACAL,WAAA,EACAM,MAAA,MAIA,IAAAgL,GAAA,SAAAzqB,GACAiC,KAAAjC,WACAiC,KAAAmN,OAGA0L,GAAAqI,OAAAsH,EAAA3oB,WACA65B,MAAA,KACAjR,UAAA,EACAkR,QAAA,KAEAxsB,KAAA,WACA,GAAAuK,GAAA1X,IAEA0X,GAAAiiB,QAAAjiB,EAAA3Z,SAAAklB,MAAAlI,QAAA1W,KAAA,wBAAA8F,GAAA,mBACAuN,EAAAkiB,YAGAliB,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,IAAAuY,EAAA3Z,SAAAqjB,MAAA1J,EAAA3Z,SAAAsjB,WAAAvH,KAAAyD,YACA7F,EAAAiiB,QAAA9U,QAIAtN,IAAA,SAAAqX,GACA,GAAAlX,GAAA1X,IAGA0X,GAAA3Z,UAAA2Z,EAAA3Z,SAAAygB,WAAA,IAAAoQ,GAAAlX,EAAA3Z,SAAAygB,QAAA1E,KAAAW,MAAA/C,EAAA3Z,SAAAsjB,UAAA3J,EAAA3Z,SAAAqjB,MAAAjiB,OAAA,GACAuY,EAAAgiB,MAAAzmB,WAAA,WACAyE,EAAA+Q,UACA/Q,EAAA3Z,SAAAslB,QAAA3L,EAAA3Z,SAAAsjB,UAAA,GAAA3J,EAAA3Z,SAAAqjB,MAAAjiB,SAGKuY,EAAA3Z,SAAAygB,QAAA1E,KAAAyD,UAAAC,QAGL9F,EAAAoP,OACApP,EAAA3Z,SAAAqnB,mBAAA,EACA1N,EAAA3Z,SAAAunB,iBAIAxU,MAAA,WACA,GAAA4G,GAAA1X,IAEAgT,cAAA0E,EAAAgiB,OAEAhiB,EAAAgiB,MAAA,MAGAnM,MAAA,WACA,GAAA7V,GAAA1X,KACAwe,EAAA9G,EAAA3Z,SAAAygB,OAEAA,KACA9G,EAAA+Q,UAAA,EAEA/Q,EAAAiiB,QACA5f,KAAA,QAAAyE,EAAA1E,KAAAkF,KAAAR,EAAA1E,KAAAiF,MAAAQ,WACAqH,YAAA,yBACApiB,SAAA,0BAEAkT,EAAAH,KAAA,KAIAuP,KAAA,WACA,GAAApP,GAAA1X,KACAwe,EAAA9G,EAAA3Z,SAAAygB,OAEA9G,GAAA5G,QAEA4G,EAAAiiB,QACA5f,KAAA,QAAAyE,EAAA1E,KAAAkF,KAAAR,EAAA1E,KAAAiF,MAAAO,YACAsH,YAAA,0BACApiB,SAAA,yBAEAkT,EAAA+Q,UAAA,GAGAmR,OAAA,WACA,GAAAliB,GAAA1X,IAEA0X,GAAA+Q,SACA/Q,EAAAoP,OAGApP,EAAA6V,WAMA1U,EAAAxC,GAAAlM,IACA0vB,YAAA,SAAAp2B,EAAA1F,GACAA,MAAAyqB,YACAzqB,EAAAyqB,UAAA,GAAAA,GAAAzqB,KAIA+7B,gBAAA,SAAAr2B,EAAA1F,EAAAygB,EAAAiD,GACA,GAAA+G,GAAAzqB,KAAAyqB,SAEA/G,GAEA+G,GAAAhK,EAAA1E,KAAAyD,UAAAL,WACAsL,EAAA+E,QAGI/E,KAAAC,UACJD,EAAA1X,SAIAipB,eAAA,SAAAt2B,EAAA1F,EAAAygB,GACA,GAAAgK,GAAAzqB,KAAAyqB,SAEAA,MAAAC,UACAD,EAAAjR,OAIAyiB,kBAAA,SAAAv2B,EAAA1F,EAAAygB,EAAAyb,EAAAhV,GACA,GAAAuD,GAAAzqB,KAAAyqB,WAGAA,IAAAhK,EAAA1E,KAAAyD,WAAA,KAAA0H,GAAA,KAAAA,GAAApM,EAAAxC,EAAAuL,eAAA/d,GAAA,oBACAo2B,EAAA9f,iBAEAqO,EAAAoR,WAIAM,iCAAA,SAAAz2B,EAAA1F,GACA,GAAAyqB,GAAAzqB,KAAAyqB,SAEAA,IACAA,EAAA1B,UAMAjO,EAAAxC,GAAAlM,GAAA,8BACA,GAAApM,GAAA8a,EAAAyB,SAAAiI,cACAiG,EAAAzqB,KAAAyqB,SAEAA,MAAAC,WACApS,EAAA8jB,OACA3R,EAAA1X,QAGA0X,EAAAjR,UAKClB,SAAAtN,OAAAd,gBAQA,SAAAoO,EAAAwC,GACD,YAGA,IAAA1G,GAAA,WAEA,GA+CAuD,GAEAxW,EAAA4rB,EAjDAsP,IAEA,oBACA,iBACA,oBACA,oBACA,mBACA,oBAIA,0BACA,uBACA,0BACA,0BACA,yBACA,0BAKA,0BACA,yBACA,iCACA,yBACA,yBACA,0BAIA,uBACA,sBACA,uBACA,uBACA,sBACA,uBAGA,sBACA,mBACA,sBACA,sBACA,qBACA,sBAKA1P,IAGA,KAAAxrB,EAAA,EAAcA,EAAAk7B,EAAAj7B,OAAkBD,IAGhC,IAFAwW,EAAA0kB,EAAAl7B,KAEAwW,EAAA,IAAAW,GAAA,CACA,IAAAyU,EAAA,EAAgBA,EAAApV,EAAAvW,OAAgB2rB,IAChCJ,EAAA0P,EAAA,GAAAtP,IAAApV,EAAAoV,EAGA,OAAAJ,GAIA,WAIA,KAAAvY,EAMA,YAJA0G,KAAAyB,WACAzB,EAAAyB,SAAAE,SAAA+B,OAAAU,YAAA,GAMA,IAAAod,IAEAC,QAAA,SAAAC,GAEAA,KAAAlkB,EAAAkW,gBAEAgO,EAAApoB,EAAAqoB,mBAAAD,EAAAE,uBAGAC,KAAA,WAEArkB,EAAAlE,EAAAwoB,mBAGAf,OAAA,SAAAW,GAEAA,KAAAlkB,EAAAkW,gBAEAvsB,KAAA46B,eACA56B,KAAA06B,OAGA16B,KAAAs6B,QAAAC,IAIAK,aAAA,WAEA,MAAAC,SAAAxkB,EAAAlE,EAAA2oB,qBAGAC,QAAA,WAEA,MAAAF,SAAAxkB,EAAAlE,EAAA6oB,qBAKAniB,GAAAqI,QAAA,EAAArI,EAAAyB,SAAAE,UACA+B,QACAU,WACA,4MAMAA,YACAC,WAAA,KAIArE,EAAAxC,GAAAlM,IACA0vB,YAAA,SAAAp2B,EAAA1F,GACA,GAAAikB,EAEAjkB,MAAAqjB,MAAArjB,EAAAsjB,WAAAvH,KAAAmD,YACA+E,EAAAjkB,EAAAklB,MAAAC,UAEAlB,EAAA7X,GAAA,4DAAA1G,GAEAA,EAAA+gB,kBACA/gB,EAAA0W,iBAEAkgB,EAAAT,OAAA5X,EAAA,MAIAjkB,EAAA+b,KAAAmD,aAAA,IAAAlf,EAAA+b,KAAAmD,WAAAC,WACAmd,EAAAC,QAAAtY,EAAA,IAIAjkB,EAAAs8B,cAEIt8B,GACJA,EAAAklB,MAAAlI,QAAA1W,KAAA,8BAAAwgB,QAKAmV,kBAAA,SAAAv2B,EAAA1F,EAAAygB,EAAAyb,EAAAhV,GAGAlnB,KAAAs8B,YAAA,KAAApV,IACAgV,EAAA9f,iBAEApc,EAAAs8B,WAAAT,OAAA77B,EAAAklB,MAAAC,UAAA,MAKA+X,iBAAA,SAAAl9B,GACAA,KAAAs8B,YACAA,EAAAK,UAKA7hB,EAAAxC,GAAAlM,GAAAgI,EAAA+oB,iBAAA,WACA,GAAAN,GAAAP,EAAAO,eACA78B,EAAA8a,EAAAyB,SAAAiI,aAEAxkB,KAGAA,EAAAygB,SAAA,UAAAzgB,EAAAygB,QAAAxN,MAAAjT,EAAAooB,cACApoB,EAAAygB,QAAApF,SAAAD,IAAA,qBAEApb,EAAAooB,aAAA,EAEApoB,EAAAgV,QAAA,SAGAhV,EAAAolB,QAAA,qBAAAyX,GAEA78B,EAAAklB,MAAAC,UAAA8L,YAAA,yBAAA4L,OAKCvkB,SAAAtN,OAAAd,gBAQA,SAAAoO,EAAAwC,GACD,YAGAA,GAAAyB,SAAAE,SAAA3B,EAAAqI,QAAA,GACA3E,QACAkB,OACA,gWAMAA,QACAP,WAAA,EACAQ,aAAA,EACAb,SAAA,sBACAc,KAAA,MAEE9E,EAAAyB,SAAAE,SAEF,IAAA2gB,GAAA,SAAAp9B,GACAiC,KAAAmN,KAAApP,GAGA8a,GAAAqI,OAAAia,EAAAt7B,WAEA85B,QAAA,KACAyB,MAAA,KACAC,MAAA,KACA5M,WAAA,EACAhG,UAAA,EAEAtb,KAAA,SAAApP,GACA,GAAA2Z,GAAA1X,IAEA0X,GAAA3Z,WAEAA,EAAAu9B,OAAA5jB,CAGA,IAAAyV,GAAApvB,EAAAqjB,MAAA,GACAma,EAAAx9B,EAAAqjB,MAAA,EAEA1J,GAAAoC,KAAA/b,EAAAqjB,MAAArjB,EAAAsjB,WAAAvH,KAAA2D,OAEA/F,EAAAiiB,QAAA57B,EAAAklB,MAAAlI,QAAA1W,KAAA,0BAEAqT,EAAAoC,MAAAqT,GAAAoO,IACA,SAAApO,EAAAnc,MAAAmc,EAAArT,KAAAiR,OAAAoC,EAAArT,KAAAmK,UACA,SAAAsX,EAAAvqB,MAAAuqB,EAAAzhB,KAAAiR,OAAAwQ,EAAAzhB,KAAAmK,SAGAvM,EAAAiiB,QAAA30B,OAAAmF,GAAA,mBACAuN,EAAAkiB,WAGAliB,EAAA+Q,UAAA,GAGA/Q,EAAAiiB,QAAA9U,QAIA9M,OAAA,WACA,GAGAyjB,GACA7X,EAJAjM,EAAA1X,KACAjC,EAAA2Z,EAAA3Z,SACA8e,EAAAnF,EAAAoC,KAAA+C,QAIAnF,GAAA0jB,MAAAviB,EAAA,+CAAAnB,EAAAoC,KAAA6D,KAAA,YAAAkF,SAAA9kB,EAAAklB,MAAAC,UAAA7e,KAAAwY,GAAA2c,UAAAnf,OAAAwC,IAGA2e,EAAA,OAEA3iB,EAAAzG,KAAArU,EAAAqjB,MAAA,SAAAliB,EAAAma,GACAsK,EAAAtK,EAAAS,KAAAiR,QAAA1R,EAAAS,KAAAmK,OAAA5K,EAAAS,KAAAmK,OAAAlK,KAAA,aAEA4J,GAAA,UAAAtK,EAAArI,OACA2S,EAAAtK,EAAAsK,KAGAA,KAAAxkB,SACAq8B,GAAA,mBAAAt8B,EAAA,kEAAAykB,EAAA,eAIA6X,GAAA,QAEA9jB,EAAA2jB,MAAAxiB,EAAA2iB,GAAA3Y,SAAAnL,EAAA0jB,OAAAjxB,GAAA,wBACApM,EAAAslB,OAAAxK,EAAA7Y,MAAAF,KAAA,YAGA4X,EAAA2jB,MAAAh3B,KAAA,OAAAwgB,OAAArS,IAAA,kBACA,GAGAyU,GACAlO,EACA0iB,EACAC,EANAC,EAAA9iB,EAAA7Y,MAAAI,SAAAwmB,YAAA,2BACAgV,EAAAD,EAAAlP,aACAoP,EAAAF,EAAAziB,aAMA+N,GAAAjnB,KAAAqrB,cAAArrB,KAAAinB,MACAlO,EAAA/Y,KAAAsrB,eAAAtrB,KAAA+Y,OAGA0iB,EAAAxU,EAAA2U,EACAF,EAAA3iB,EAAA8iB,EAEAJ,GAAA,GAAAC,GAAA,IACAD,EAAAC,GACAzU,GAAAyU,EACA3iB,EAAA8iB,IAGA5U,EAAA2U,EACA7iB,GAAA0iB,IAIA5iB,EAAA7Y,MAAAmZ,KACA8N,MAAAF,KAAAkC,MAAAhC,GACAlO,OAAAgO,KAAAkC,MAAAlQ,GACA+iB,aAAA/iB,EAAA8iB,EAAA9U,KAAAkC,MAAA,GAAA4S,EAAA,GAAA9iB,GAAAgO,KAAAkC,MAAA,GAAA4S,EAAA,GAAA9iB,GACAgjB,cAAAhV,KAAAkC,MAAA,GAAA2S,EAAA,GAAA3U,KACKjiB,SAGLoN,KAAA,WACApS,KAAA2jB,IAAA9K,EAAA7Y,MAAAF,KAAA,SAGA,MAAA4X,EAAAoC,KAAA6D,MACAjG,EAAA2jB,MAAApU,MAAAhkB,SAAAyU,EAAA0jB,MAAAjiB,IAAA,kBAAApb,EAAAqjB,MAAAjiB,OAAAuY,EAAA2jB,MAAAhU,WAAAwI,GAAA,GAAApD,YAAA,UAIAzH,MAAA,SAAAY,GACA,GAEAmF,GACA2C,EAHAhW,EAAA1X,KACAq7B,EAAA3jB,EAAA2jB,KAIA3jB,GAAA3Z,SAAAygB,UACAuM,EAAAsQ,EAAAhU,WACAT,YAAA,0BACAvM,OAAA,gBAAA3C,EAAA3Z,SAAAygB,QAAAxE,MAAA,MACAxV,SAAA,0BAEAkpB,EAAA3C,EAAAkF,WAGA,MAAAvY,EAAAoC,KAAA6D,OAAA+P,EAAA1kB,IAAA,GAAA0kB,EAAA1kB,IAAAqyB,EAAAtiB,SAAAgS,EAAA7R,eACAmiB,EAAAvU,OAAAI,SAA2B7E,UAAAgZ,EAAAhZ,YAAAqL,EAAA1kB,KAAiD4c,GAEvE,MAAAlO,EAAAoC,KAAA6D,OACL+P,EAAAjH,KAAA4U,EAAAj7B,SAAAkiB,cACAoL,EAAAjH,KAAA4U,EAAAj7B,SAAAkiB,cAAA+Y,EAAAj7B,SAAA6mB,QAAA8D,EAAA0B,gBAGA4O,EAAAj7B,SAAA0mB,OAAAI,SAAoC5E,WAAAoL,EAAAjH,MAA+Bb,KAKnE7S,OAAA,WACA/S,KAAAjC,SAAAklB,MAAAC,UAAA8L,YAAA,uBAAAhvB,KAAAyuB,WAEAzuB,KAAAyuB,WACAzuB,KAAAo7B,OACAp7B,KAAA+X,SAGA/X,KAAAjC,SAAAolB,QAAA,gBAEAnjB,KAAAglB,MAAA,IAEIhlB,KAAAo7B,OACJp7B,KAAAjC,SAAAolB,QAAA,gBAIAnjB,KAAAjC,SAAAgV,UAGA8R,KAAA,WACA7kB,KAAAyuB,WAAA,EACAzuB,KAAA+S,UAGA/N,KAAA,WACAhF,KAAAyuB,WAAA,EACAzuB,KAAA+S,UAGA6mB,OAAA,WACA55B,KAAAyuB,WAAAzuB,KAAAyuB,UACAzuB,KAAA+S,YAIA8F,EAAAxC,GAAAlM,IAEA0vB,YAAA,SAAAp2B,EAAA1F,GACA,GAAAu9B,EAEAv9B,OAAAu9B,SACAA,EAAA,GAAAH,GAAAp9B,GAEAu9B,EAAA7S,WAAA,IAAA6S,EAAAxhB,KAAAoD,WACAoe,EAAAt2B,SAKA80B,gBAAA,SAAAr2B,EAAA1F,EAAAsb,EAAAoI,GACA,GAAA6Z,GAAAv9B,KAAAu9B,MAEAA,MAAA7M,WACA6M,EAAAtW,MAAAvD,EAAA,QAIAuY,kBAAA,SAAAv2B,EAAA1F,EAAAygB,EAAAyb,EAAAhV,GACA,GAAAqW,GAAAv9B,KAAAu9B,MAGAA,MAAA7S,UAAA,KAAAxD,IACAgV,EAAA9f,iBAEAmhB,EAAA1B,WAIAqB,iBAAA,SAAAx3B,EAAA1F,GACA,GAAAu9B,GAAAv9B,KAAAu9B,MAEAA,MAAA7M,YAAA,IAAA6M,EAAAxhB,KAAA4D,aACA4d,EAAAF,MAAAvW,WAMCxO,SAAAtN,OAAAd,QAQA,SAAAoO,EAAAwC,GACD,YAkCA,SAAAmjB,GAAAC,GACA,GAAAC,IACAC,IAAA,QACAC,IAAA,OACAC,IAAA,OACAC,IAAA,SACAC,IAAA,QACAC,IAAA,SACAC,IAAA,SACAC,IAAA,SAGA,OAAAC,QAAAV,GAAA71B,QAAA,wBAAAkP,GACA,MAAA4mB,GAAA5mB,KA7CAuD,EAAAqI,QAAA,EAAArI,EAAAyB,SAAAE,UACA+B,QACAqgB,MACA,iOAMAA,OACAlhB,IACA,ikDAsCA7C,EAAAxC,GAAAlM,GAAA,2CACA,GACApI,GACA2Z,EAFAmhB,EAAAhkB,EAAAyB,SAAAiI,aAIAsa,KACA96B,GAAA,IAAA86B,EAAAre,QAAA1E,KAAA/C,KAAA8lB,EAAAre,QAAAmF,IAAA5a,OAAAyH,SACAkL,EAAAmhB,EAAAre,QAAA1E,KAAA8iB,MAAAlhB,IACAtV,QAAA,iBAA6B,UAAAy2B,EAAAre,QAAAxN,KAAA8rB,mBAAAD,EAAAre,QAAAmF,KAAA,IAC7Bvd,QAAA,eAA2B02B,mBAAA/6B,IAC3BqE,QAAA,mBAA+B41B,EAAAj6B,IAC/BqE,QAAA,iBAA6By2B,EAAAhO,SAAAiO,mBAAAD,EAAAhO,SAAA1sB,QAAA,IAE7B0W,EAAAyB,SAAAC,MACAoJ,IAAAkZ,EAAA7Z,UAAA6Z,EAAAnhB,GACA1K,KAAA,OACA8I,MACA+B,gBAAA,OACAC,kBAAA,IACAkC,UAAA,SAAAjgB,EAAAygB,GAEAA,EAAApF,SAAA/U,KAAA,4BAAA04B,MAAA,WAEA,MADAh0B,QAAAwR,KAAAva,KAAAuW,KAAA,kCACA,YASCF,SAAAtN,OAAAd,gBAQA,SAAAoO,EAAAtN,EAAA8P,GACD,YAoCA,SAAAmkB,KACA,GAAAjmB,GAAAhO,EAAAyH,SAAAuG,KAAAnC,OAAA,GACA8U,EAAA3S,EAAAoN,MAAA,KACAnK,EAAA0P,EAAAvqB,OAAA,cAAAyU,KAAA8V,IAAAvqB,OAAA,IAAA8D,SAAAymB,EAAAuT,KAAA,YACAC,EAAAxT,EAAA7U,KAAA,IAOA,OAJAmF,GAAA,IACAA,EAAA,IAIAjD,OACAiD,QACAkjB,WAKA,QAAAC,GAAAp7B,GACA,GAAAuQ,EAEA,MAAAvQ,EAAAm7B,UAGA5qB,EAAAuG,EAAA,mBAAAA,EAAAukB,eAAAr7B,EAAAm7B,SAAA,MAAArN,GAAA9tB,EAAAiY,MAAA,GAEA1H,EAAAnT,SAEAmT,EAAAuG,EAAA,IAAAA,EAAAukB,eAAAr7B,EAAAm7B,WAGA5qB,EAAAnT,SACAk+B,GAAA,EAEA/qB,EAAA6Q,QAAA,WAOA,QAAAma,GAAAv/B,GACA,GAAA+b,EAEA,SAAA/b,IAIA+b,EAAA/b,EAAAygB,QAAAzgB,EAAAygB,QAAA1E,KAAA/b,EAAA+b,KAEAA,EAAA/C,OAAA+C,EAAAgK,MAAAhK,EAAAgK,MAAAhkB,KAAA,iBApFA+Y,EAAAukB,iBACAvkB,EAAAukB,eAAA,SAAAG,GAiBA,OAAAA,EAAA,IAAAn3B,QAhBA,+CACA,SAAAo3B,EAAAC,GACA,MAAAA,GAEA,OAAAD,EACA,IAIAA,EAAAhoB,MAAA,WAAAgoB,EAAAE,WAAAF,EAAAr+B,OAAA,GAAA6K,SAAA,QAIA,KAAAwzB,KAQA,IAAAH,IAAA,EAIAM,EAAA,KAGAC,EAAA,IA0DA/kB,GAAA,YAGA,IAAAA,EAAAyB,SAAAE,SAAAzD,OAKA8B,EAAAxC,GAAAlM,IACA0vB,YAAA,SAAAp2B,EAAA1F,GACA,GAAAgE,GAAAm7B,GAEA,IAAAn/B,EAAAqjB,MAAArjB,EAAAsjB,WAAAvH,KAAA/C,OAIAhV,EAAAi7B,KACAE,EAAAI,EAAAv/B,KAGAgE,EAAAm7B,YAAAn7B,EAAAm7B,UACAn/B,EAAAsjB,UAAAtf,EAAAiY,MAAA,KAIA8f,gBAAA,SAAAr2B,EAAA1F,EAAAygB,GACA,GAAA0e,EAEA1e,KAAA,IAAAA,EAAA1E,KAAA/C,OAIAmmB,EAAAI,EAAAv/B,KAGA,KAAAm/B,IAEAn0B,EAAAyH,SAAAuG,KAAA7K,QAAAgxB,GAAA,IACAn/B,EAAA+b,KAAA+jB,SAAA90B,EAAAyH,SAAAuG,MAGA4mB,EAAAT,GAAAn/B,EAAAqjB,MAAAjiB,OAAA,OAAAqf,EAAAxE,MAAA,OAEA,gBAAAjR,GAAA0E,SACAmwB,GACA5qB,aAAA4qB,GAGAA,EAAA3qB,WAAA,WACAlK,EAAA0E,QAAA4vB,EAAA,+BAA+EhnB,EAAAlR,MAAA4D,EAAAyH,SAAAqG,SAAA9N,EAAAyH,SAAAsG,OAAA,IAAA6mB,GAE/EC,EAAA,KAEAP,GAAA,GAEO,MAGPt0B,EAAAyH,SAAAuG,KAAA4mB,IAOA1C,iBAAA,SAAAx3B,EAAA1F,EAAAygB,GACA,GAAA0e,GAAAW,CAEAD,IACA5qB,aAAA4qB,IAGA,IAAApf,EAAA1E,KAAA/C,OAIAmmB,EAAAI,EAAAv/B,GACA8/B,EAAA9/B,KAAA+b,KAAA+jB,SAAA9/B,EAAA+b,KAAA+jB,SAAA,GAGAX,GAAA,KAAAA,IAEA,gBAAAzvB,SACA1E,EAAA0E,QAAAqwB,gBAAqCznB,EAAAlR,MAAA4D,EAAAyH,SAAAqG,SAAA9N,EAAAyH,SAAAsG,OAAA+mB,IAGrC90B,EAAAyH,SAAAuG,KAAA8mB,EAGAhlB,EAAA9P,GAAAsZ,UAAAtkB,EAAAskB,WAAAC,WAAAvkB,EAAAukB,cAIAqb,EAAA,SAKA9kB,EAAA9P,GAAAoB,GAAA,2BACA,GAAApI,GAAAi7B,GAEAnkB,GAAAyB,SAAAiI,eACAob,OAAA57B,EAAAm7B,QAAA,IAAAn7B,EAAAiY,OAAA,IAAAjY,EAAAiY,OAAA2jB,GAAA57B,EAAAm7B,UACAS,EAAA,KAEA9kB,EAAAyB,SAAAoC,SAGI,KAAA3a,EAAAm7B,SACJC,EAAAp7B,KAKAkR,WAAA,WACAkqB,EAAAH,MACG,QAGF3mB,SAAAtN,cAAAd,gBAEA,SAAAoO,EAAAwC,GACD,YAEA,IAAAklB,IAAA,GAAApS,OAAAC,SAEA/S,GAAAxC,GAAAlM,IACA0vB,YAAA,SAAAp2B,EAAA1F,EAAAygB,GACAzgB,EAAAklB,MAAA2B,MAAAza,GAAA,+DAAA1G,GACA,GAAA+a,GAAAzgB,EAAAygB,QACAwf,GAAA,GAAArS,OAAAC,SAEA7tB,GAAAqjB,MAAAjiB,OAAA,QAAAqf,EAAA1E,KAAA8D,OAAA,SAAAY,EAAA1E,KAAA8D,OAAA,UAAAY,EAAAxN,OAIAvN,EAAA0W,iBACA1W,EAAA+gB,kBAEAhG,EAAA+H,OAAAziB,SAAA,uBAIAL,IAAAkhB,eAAAlhB,EAEAu6B,EAAAD,EAAA,MAIAA,EAAAC,EAEAjgC,IAAA0F,EAAAw6B,SAAAx6B,EAAAy6B,QAAAz6B,EAAA06B,aAAA16B,EAAA26B,QAAA,gCAMC/nB,SAAAtN,OAAAd,iBf0wDKo2B,KACA,SAAU5hC,EAAQC,EAAqBC,GAE7C,YAaA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAZjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO4hC,KACpE3hC,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO6hC,KACpE5hC,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO8hC,KACpE7hC,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO+hC,IAC9E,IAAIxwB,GAAuCtR,EAAoB,QAC3DkR,EAA+ClR,EAAoBG,EAAEmR,GACrEywB,EAA0C/hC,EAAoB,QAC9DgiC,EAAsDhiC,EAAoB,QAC1EyR,EAA+CzR,EAAoB,QACnEiiC,EAAiDjiC,EAAoB,QAC1FmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MgBv4NnhBsgC,EAAmB,cACnBC,EAAoB,eACpBC,EAAiB,YAEjBC,EAAb,WASC,QAAAA,GAAYI,EAAUC,EAAYC,GAAiC,GAAAh/B,GAAAC,KAAzBgR,EAAyB1N,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAlBg7B,CAShD,QATkExgC,EAAAkC,KAAAy+B,GAAAz+B,KAPnEg/B,QAAU9+B,GAAGC,YAAW,GAO2CH,KANnEi/B,QAAU/+B,GAAGC,YAAW,GAM2CH,KALnEk/B,OAASh/B,GAAGU,oBAKuDZ,KAJnE8+B,WAAa5+B,GAAGC,WAAW,GAIwCH,KAHnE++B,OAAS7+B,GAAGC,YAAW,GAG4CH,KAFnEgR,KAAO,KAGNhR,KAAK6+B,SAAWA,EAChB7+B,KAAK8+B,YAAYA,GACjB9+B,KAAK++B,SAASA,GAEd/+B,KAAKm/B,oBAAsBj/B,GAAG0B,aAAa,WAC1C,MAAOg9B,GAAA,EAAoB7+B,EAAK++B,aAAc,uDAAwD,OAGhG9tB,GACN,IAAKstB,GACJt+B,KAAKo/B,SAAW,qBAChBp/B,KAAKq/B,cAAgB,0BACrB,MACD,KAAKd,GACQv+B,KAAKo/B,SAAW,6BAChBp/B,KAAKq/B,cAAgB,kCACjC,MACD,KAAKb,GACJx+B,KAAKo/B,SAAW,mBAChBp/B,KAAKq/B,cAAgB,oBA7BzB,MAAAvgC,GAAA2/B,IAAA/+B,IAAA,OAAA0D,MAAA,WAkCQ,GAAA2B,GAAA/E,IACNA,MAAKs/B,QAAQ93B,KAAK,WACjBzC,EAAKi6B,QAAQj6B,EAAK+5B,aAAe,QApCpCp/B,IAAA,OAAA0D,MAAA,WAyCEpD,KAAKg/B,SAAQ,MAzCft/B,IAAA,eAAA0D,MAAA,SA4CctD,EAAM2D,GAAG,GAAAoC,GAAA7F,IACrByD,GAAE+gB,kBACFhlB,OAAAk/B,EAAA,gBAAe,WACd7wB,EAAAzQ,EAAE0I,KAAKtG,OAAA4O,EAAA,GAAQvI,EAAKu5B,WAAYh+B,GAAIyE,EAAKg5B,UAAW,KAAM,QACxDv3B,KAAKq3B,EAAA,EAASp3B,UACdC,KAAK,SAAAvC,GACDA,GAAYA,EAASe,SACxBH,EAAKi5B,YAAY75B,EAAS5D,OAC1BwE,EAAKk5B,OAAQ95B,EAASs6B,UAAiC,MAArBt6B,EAASs6B,UACtCt6B,EAASs0B,QAA6B,MAAnBt0B,EAASs0B,SAGjCoF,EAAA,EAASz4B,eAxDfxG,IAAA,QAAA0D,MAAA,WA8DS,GAAA6C,GAAAjG,IAEP,OADAA,MAAKi/B,SAAQ,GACNpxB,EAAAzQ,EAAEiJ,IAAI7G,OAAA4O,EAAA,GAAQpO,KAAKq/B,gBAAiBj+B,GAAIpB,KAAK6+B,UAAW,KAAM,QACnEr3B,KAAK,SAAAvC,GACLgB,EAAK64B,YAAY75B,EAASu6B,OAC1Bv5B,EAAKi5B,OAAOj6B,EAASi6B,QACrBj5B,EAAKg5B,SAAQ,SApEjBR,MhB0+NMgB,KACA,SAAUhjC,EAAQmB,EAASjB,GAEjC,cAC4B,SAAS+iC,IiBv/NrC,SAAAC,EAAAC,GAEAnjC,EAAAmB,QAAAgiC,MAAA,KAAAF,EAAAC,EAAAD,IAMC1/B,KAAA,SAAA2/B,GAMD,QAAAE,GAAAC,GACA,aAAAA,IACA,MAAAA,EAAAC,SACAD,EAAA5pB,cAAA4pB,EAAAC,SAEAC,EAAA9+B,KAAA4+B,IACA,KAGA,QAAA9gC,GAAAwX,GACA,GAAA9W,GACAugC,IAEA,KAAAvgC,IAAAwgC,GACAA,EAAAt3B,eAAAlJ,KAEAugC,EAAAvgC,GAAAwgC,EAAAxgC,GAKA,OAFAugC,GAAAE,QAAA3pB,GAAA,IAEAypB,EAGA,QAAAG,GAAAhwB,GACA,GAAAiwB,GAAA3zB,EACA8J,EAAA8pB,EAAAtgC,KAEA,QAAAugC,EAAAnwB,MACAmwB,EAAA/pB,KAEA9J,EAAAlB,MAAA3L,UAAA2V,MAAA3M,KAAAvF,UAAA,IAGA,KADA+8B,EAAAG,EAAApwB,EAAA1D,EAAA8J,MAGAiqB,EAAAC,EAAA13B,KAAA03B,EAAAhpB,KAAA2oB,EAAA7pB,IAEA,KAGA,QAAAtT,GAAAkN,EAAA+B,GACA,GAAAqE,GAAA8pB,EAAAtgC,KAEA,QAAA2gC,EAAAvwB,EAAA+B,EAAAqE,KAEAoqB,EAAApqB,GAAAoqB,EAAApqB,OACAoqB,EAAApqB,GAAApG,GAAAwwB,EAAApqB,GAAApG,OACAwwB,EAAApqB,GAAApG,GAAAlP,KAAAiR,IAEA,GAGA,QAAA0uB,GAAAzwB,EAAA+B,GACA,GAAAjT,GAAA4hC,EACAtqB,EAAA8pB,EAAAtgC,KAEA,IAAA2gC,EAAAvwB,EAAA+B,EAAAqE,GAAsD,QAGtD,MADAsqB,EAAAF,EAAApqB,IAAAoqB,EAAApqB,GAAApG,IAC0B,QAE1B,KAAAlR,EAAA,EAAeA,EAAA4hC,EAAA3hC,OAA2BD,IAC1C,GAAA4hC,EAAA5hC,KAAAiT,EAEA,MADA2uB,GAAAC,OAAA7hC,EAAA,IACA,CAIA,UAGA,QAAAohC,GAAAU,GACA,MAAAA,MAAAb,SAAA,IAGA,QAAAI,GAAAtE,GACA,sBAAAA,GAGA,QAAAuE,GAAApwB,EAAA1D,EAAA8J,GACA,GAAAyqB,IAAA,EACAZ,GACAjwB,QACAoG,UAEA0qB,EAAAx0B,IAAAvN,OAAA,EAEA,mBAAA+hC,KACAb,EAAAa,MAAAC,EAAAD,EAAA1qB,GACA9J,IAAA8I,MAAA,OAGA6qB,EAAA3zB,MAEA,KACAu0B,EAAAxrB,EAAA2rB,KAAAC,UAAAhB,GACK,MAAA58B,GACL,SAAA69B,OAAA,8BAAA79B,EAAAyF,SAEA,MAAA+3B,GAGA,QAAAM,GAAA99B,GACA,GAAA48B,GAAAmB,EAAAC,EAAAC,CAEA,IAAAj+B,EAAA3D,KAAA0V,MAAA,EAAAC,EAAAtW,UAAAsW,EAAoD,QAEpD,KACA4qB,EAAAe,KAAAO,MAAAl+B,EAAA3D,KAAA0V,MAAAC,EAAAtW,SACK,MAAAoM,GACL,SAmBA,MAhBA,OAAA80B,EAAAa,QACAM,EAAA/9B,EAAA+S,OACAirB,EAAAh+B,EAAAkF,OACA+4B,EAAArB,EAAAa,MAEAb,EAAAa,MAAA,SAAAphC,GACA,GAAA8hC,GAAApB,EAAAkB,GAAA5hC,GAAA0hC,EAEA,SAAAI,EAAqC,QAErCH,GAAAI,YAAAD,EAAAJ,IAGAnB,EAAA3zB,KAAAxL,KAAAm/B,EAAAa,QAGAb,EAkBA,QAAAyB,KACA,6CAAA17B,QAAA,iBAAA27B,GACA,GAAAC,GAAA,GAAAjb,KAAAkb,SAAA,CAGA,QAFA,MAAAF,EAAAC,EAAA,EAAAA,EAAA,GAEAh4B,SAAA,MAIA,QAAAk4B,GAAAz+B,GACA,GAAA48B,EAEAE,GAAA98B,EAAA3D,QAEAugC,EAAAkB,EAAA99B,MAGA0+B,EAAA,IAAA9B,EAAAjwB,MAAAiwB,EAAA3zB,KAAAjJ,GACA0+B,EAAA1+B,EAAA+S,OAAA6pB,EAAAjwB,MAAAiwB,EAAA3zB,KAAAjJ,GACA2+B,EAAA3+B,EAAA3D,KAAAugC,EAAA7pB,OAAA/S,EAAAkF,SAGA,QAAAw5B,GAAA3rB,EAAApG,EAAA1D,EAAAjJ,GACA,GAAAvE,EAEA,IAAA0hC,EAAApqB,IACAoqB,EAAApqB,GAAApG,GAEA,IAAAlR,EAAA,EAAeA,EAAA0hC,EAAApqB,GAAApG,GAAAjR,OAAuCD,IACtD0hC,EAAApqB,GAAApG,GAAAlR,GAAA4U,MAAArQ,EAAAiJ,GAIA,QAAA21B,GAAAC,GACA,MAAAA,GAAAt5B,MAAAs5B,IACA,MAAAA,EAAAC,SACAD,EAAAC,SAAAD,IACA,IAAAA,EAAAC,OAAAjgC,SAKA,QAAAm+B,GAAA6B,EAAAjC,EAAA7pB,GACA,GAAAtX,EAEA,KAOA,IANAojC,EAAAT,YAAAxB,EAAA7pB,GAEA6rB,EAAAC,IACA7B,EAAA6B,EAAAC,OAAAv5B,IAAAq3B,EAAA7pB,GAGAtX,EAAA,EAAiBA,EAAAojC,EAAAE,OAAArjC,OAAyBD,IAC1CuhC,EAAA6B,EAAAE,OAAAtjC,GAAAmhC,EAAA7pB,GAEK,MAAAisB,KAGL,QAAAL,GAAA/B,EAAA7pB,EAAA7N,GACA,GAAAzJ,GAAA4gC,CAEA,KAAA5gC,EAAA8gC,EAAA7gC,OAAA,EAA+BD,GAAA,EAAQA,IACvC4gC,EAAAE,EAAA9gC,IAEA,IAAA4gC,EAAAx9B,OACA09B,IAAAxqB,MAAAtW,EAAA,GACOyJ,IAAAm3B,GACPW,EAAAX,EAAA92B,IAAAq3B,EAAA7pB,GAKA,QAAA2qB,GAAAhvB,EAAAqE,GAGA,QAAAksB,GAAAxkC,EAAAkP,GACA+E,EAAAjU,EAAAkP,GACA8yB,EAAAlhC,OAAAwX,GAAAqqB,YAAA8B,EAAAD,GAJA,GAAAC,GAAAb,GAQA,OADA5B,GAAAlhC,OAAAwX,GAAAtT,UAAAy/B,EAAAD,GACAC,EAGA,QAAAhC,GAAAvwB,EAAA+B,EAAAqE,GACA,QAAA+pB,EAAAnwB,KACA,kBAAA+B,MACAouB,EAAA/pB,IAhPA,GAAAkqB,GAAAR,EACAF,KACAY,KACAnrB,EAAA,cAmQA,OA5HA,UAAAmtB,GACAlC,IACAA,EAAAkC,GAAAjD,EAEAe,EAAA/K,iBACA+K,EAAA/K,iBAAA,UAAAuM,GAAA,GACKxB,EAAAmC,YACLnC,EAAAmC,YAAA,YAAAX,GACK,OAAAxB,EAAAoC,UACLpC,EAAAoC,UAAAZ,EAEAxB,EAAA,SAkGAR,GACAlhC,SACA6gC,UACAO,UACA2C,IAAA3C,EACAjd,QAAAid,EACA4C,KAAA5C,EACAl9B,YACA+/B,IAAA//B,EACAiH,GAAAjH,EACA29B,cACAqC,MAAArC,EACAz2B,IAAAy2B,OjB8/N6Bh4B,KAAKjL,EAASjB,EAAoB,UAIzDwmC,KACA,SAAU1mC,EAAQmB,GkBhxOxBnB,EAAAmB,QAAA,k+RlBsxOMwlC,KACA,SAAU3mC,EAAQC,EAAqBC,GAE7C,YASA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCARjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO2mC,IAC9E,IAAIC,GAAwC3mC,EAAoB,QAC5D4mC,EAA2C5mC,EAAoB,QAC/D6mC,EAA6C7mC,EAAoB,QACjEyR,EAA+CzR,EAAoB,QACnE8mC,EAAsD9mC,EAAoB,QAC/FmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MmBzxOnhBqlC,EAAb,WAIC,QAAAA,GAAYvjC,GAAM,GAAAC,GAAAC,IAAAlC,GAAAkC,KAAAqjC,GAAArjC,KAFfC,QAAU,KAGZD,KAAKyR,MAAQ3R,EACbE,KAAKC,QAAUH,EAAKM,OACpBJ,KAAKS,QAAWX,EAAKY,iBAAkB6iC,GAAA,SAAYzjC,EAAKY,OAAS,GAAI6iC,GAAA,SAASzjC,EAAKY,QAEnFV,KAAKyR,MAAMiyB,KAAOxjC,GAAGC,WAAWH,KAAKyR,MAAMiyB,MAC3C1jC,KAAKyR,MAAMtP,KAAOjC,GAAGC,WAAWH,KAAKyR,MAAMtP,MAC3CnC,KAAKyR,MAAMlM,WAAarF,GAAGC,WAAWH,KAAKyR,MAAMlM,YAC3CvF,KAAKmB,QAAU,GAAImiC,GAAA,EAAOtjC,KAAKoB,GAAItB,EAAKuB,MAAOvB,EAAKwB,QAASgiC,EAAA,GAE7DtjC,KAAK0B,UAAYxB,GAAGC,YAAW,GACrCH,KAAKkC,YAAchC,GAAG0B,aAAa,iBAAMpC,QAAA4O,EAAA,GAAcrO,EAAK0R,MAAMtP,UAfpE,MAAArD,GAAAukC,IAAA3jC,IAAA,SAAA0D,MAAA,WAsDQpD,KAAK0B,WAAU,MAtDvBhC,IAAA,SAAA0D,MAAA,WA0DKyB,QAAQ,iDACV7E,KAAKC,QAAQ0jC,cAAc3jC,SA3D9BN,IAAA,OAAA0D,MAAA,WA+DQ,GAAA2B,GAAA/E,IACAwjC,GAAA,0BAA0Bx+B,KAAKhF,KAAKoB,GAAI,SAAA6D,GACpCA,GAAYA,EAASe,UACjBjB,EAAK0M,MAAMtP,KAAK8C,EAAS9C,MACtB8C,EAASK,OACRP,EAAK0M,MAAMnM,KAAOL,EAASK,KAC3BP,EAAK0M,MAAMlM,WAAWN,EAASM,mBArEnD7F,IAAA,aAAA0D,MAAA,WA2Ec,GAAAyC,GAAA7F,IACT6Y,GAAE/S,KAAKtG,OAAA4O,EAAA,GAAQ,iCAAkChN,GAAIpB,KAAKoB,IAAK,KAAM,QACtEoG,KAAK,SAAAvC,GACFA,EAASe,SACXH,EAAK5F,QAAQY,SAAS0L,QAAQ,SAAAtL,GAAA,MAAWA,GAAQyiC,MAAK,KACtD79B,EAAK69B,MAAK,GACVD,EAAA,EAASz9B,QAAQ,6BAEjBy9B,EAAA,EAASv9B,UAGVoB,KAAKm8B,EAAA,EAASl8B,aAtFlB7H,IAAA,KAAA2G,IAAA,WAoBE,MAAOrG,MAAKyR,MAAMrQ,MApBpB1B,IAAA,SAAA2G,IAAA,WAyBE,MAAOrG,MAAKS,WAzBdf,IAAA,OAAA2G,IAAA,WA8BE,MAAOrG,MAAKyR,MAAMnM,QA9BpB5F,IAAA,OAAA2G,IAAA,WAmCQ,MAAOrG,MAAKyR,MAAMiyB,QAnC1BhkC,IAAA,aAAA2G,IAAA,WAwCE,MAAOrG,MAAKyR,MAAMlM,cAxCpB7F,IAAA,cAAA2G,IAAA,WA6CE,MAAOrG,MAAKyR,MAAM7J,eA7CpBlI,IAAA,SAAA2G,IAAA,WAkDQ,MAAOrG,MAAKmB,YAlDpBkiC,MnBw6OMO,KACA,SAAUnnC,EAAQC,EAAqBC,GAE7C,YoBv6OO,SAASoiB,GAAKA,GAAmC,GAA7Bjf,GAA6BwD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAMugC,EAAgBvgC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,IAAAA,UAAA,GACjDwgC,EAAStkC,OAAAukC,EAAA,KAAUhlB,EACzB,OAAK+kB,GACEE,EAAKF,EAAQhkC,EAAM+jC,GADN9kB,EAWd,QAASilB,GAAKtmC,GAAuC,GAA7BoC,GAA6BwD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAMugC,EAAgBvgC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,IAAAA,UAAA,EAC3D,KAAKxD,EAAM,MAAOpC,EAClBA,GAAW,GAAKA,CAEhB,IAAIsF,GAAStF,CACb,KAAK,GAAIgC,KAAOI,GACf,GAAKA,EAAK8I,eAAelJ,GAAzB,CACA,GAAIgW,GAAM5V,EAAKJ,EAGI,mBAARgW,KACVA,EAAMA,IAGP,IAAMuuB,GAAWC,EAAaxkC,GACxBykC,EAAc,GAAIC,QAAJ,eAA0BH,EAA1B,gBACd9R,EAAIgS,EAAYnU,KAAKtyB,EACvBy0B,KACHnvB,EAASA,EAAOoD,QAAQ+9B,EAAaE,EAAU3uB,EAAKyc,EAAE,GAAIzyB,IAG3D,IAAM4kC,GAAcT,EAAS,yBAA2BnkC,EAAM,KAAOgW,EAAM,UAAYA,CACvF1S,GAASA,EAAOmhB,MAAM,IAAMzkB,EAAM,KAAKmV,KAAKyvB,GAE7C,MAAOthC,GAUD,QAASqhC,GAAUE,EAAOpiC,GAAsC,GAAhCqiC,GAAgClhC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,IAAKmhC,EAAiBnhC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAC1DohC,EAAQviC,EAAKgiB,MAAM,KACnBwgB,EAAaC,EAAAxnC,EAAMynC,QAAQC,QAAQC,MACrCC,EAAOL,EAAWJ,EAAOG,OAChBnhC,KAATyhC,IACHA,EAAON,EAAM,GAEd,IAAMJ,OAA2B/gC,KAAbkhC,GAAuC,OAAbA,EAAoBA,EAAWF,CAC7E,OAAOS,GAAK7gB,MAAM,IAAMqgB,EAAU,KAAK3vB,KAAKyvB,GAG7C,QAASJ,GAAajI,GACrB,MAAOA,GAAO71B,QAAQ,2BAA4B,QpB62OlB1J,EAAuB,EAAIqiB,EAE3BriB,EAAuB,EAAI2nC,CACvC,IAAIznC,GAA6CD,EAAoB,QACjEE,EAAqDF,EAAoBG,EAAEF,GAC3EqoC,EAA8CtoC,EAAoB,QAClEioC,EAAsDjoC,EAAoBG,EAAEmoC,GAC5ElB,EAAyCpnC,EAAoB,OoBj3OtFE,GAAAO,EAAGqV,gBAAH,MACCtF,KAAM,WACL,OAAQ+3B,4BAA8B,IAEvCnyB,OAAQ,SAASL,EAASC,GACzB,GAAMlV,GAASZ,EAAAO,EAAG0V,OAAOH,KACnBvF,GACLtD,KAAM,GACNhK,SAAMyD,GACNwpB,SAAMxpB,GAEFsV,GAAEgL,cAAcpmB,GAGpBob,EAAEqI,OAAO9T,EAAG3P,GAFZ2P,EAAEtD,KAAOrM,CAIV,IAAMiP,IAAQU,EAAEtD,KAAMsD,EAAEtN,KAAMsN,EAAE2f,MAC1BrX,EAAMqJ,EAAKjL,MAAM9T,KAAM0M,EAC7B7P,GAAAO,EAAG8V,MAAMiyB,QAAQzyB,EAASgD,MpB08OtB0vB,KACA,SAAU3oC,EAAQC,EAAqBC,GAE7C,YqB7hPO,SAAS0oC,KAAyC,GAAjC3lC,GAAiC4D,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA3B,KAAMgiC,EAAqBhiC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAC5CmW,EAAI1Q,OAAOs8B,SAAWE,CAC5B,OAAe,QAAR7lC,EAAeF,OAAAgmC,EAAA,GAAQ/rB,EAAG/Z,EAAK4lC,GAAgB7rB,EAShD,QAASgsB,KAAyC,GAAjC/lC,GAAiC4D,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA3B,KAAMgiC,EAAqBhiC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAC5CmW,EAAI4rB,EAAQ,YAAcK,CAChC,OAAe,QAARhmC,EAAeF,OAAAgmC,EAAA,GAAQ/rB,EAAG/Z,EAAK4lC,GAAgB7rB,ErBihPtB/c,EAAuB,EAAI2oC,EAC3B3oC,EAAuB,EAAI+oC,CACvC,IAAID,GAAqC7oC,EAAoB,QqBziP5E4oC,KACAG,MrB4kPAC,KACA,SAAUlpC,EAAQC,EAAqBC,GAE7C,YAYA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCsBzhPzG,QAAS2nC,GAAer/B,GAC1BwC,OAAO88B,aACVt/B,EAAS5D,GAGTmjC,EAAA,YAAY9gC,KAAK,SAAAhC,GACZA,GAEHuD,EAAS5D,KtBsgPbnD,OAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,IACnCzG,EAAoBuB,EAAExB,EAAqB,WAAY,WAAa,MAAOqpC,KAC3EppC,EAAoBuB,EAAExB,EAAqB,cAAe,WAAa,MAAOiG,KAC5EjG,EAAoC,eAAIkpC,CACpD,IAAIE,GAAwCnpC,EAAoB,QAC5DqpC,EAA+CrpC,EAAoB,QACnEspC,EAAwCtpC,EAAoB,QACjF8L,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IAEnPF,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MsBxlPnhB+nC,EAAb,WACC,QAAAA,GAAYjmC,GAAMhC,EAAAkC,KAAA+lC,GACjB/lC,KAAKyR,MAALhJ,KAAiB3I,GAFnB,MAAAhB,GAAAinC,IAAArmC,IAAA,KAAA2G,IAAA,WAME,OAAQrG,KAAKyR,MAAL,MANV/R,IAAA,SAAA2G,IAAA,WAUE,OAAQrG,KAAKyR,MAAL,WAVV/R,IAAA,aAAA2G,IAAA,WAcE,QAASrG,KAAKyR,MAAL,eAdX/R,IAAA,MAAA2G,IAAA,WAkBE,MAAOrG,MAAKyR,MAAL,OAlBT/R,IAAA,YAAA2G,IAAA,WAsBE,MAAOrG,MAAKyR,MAAL,cAtBT/R,IAAA,WAAA2G,IAAA,WA0BE,MAAOrG,MAAKyR,MAAL,aA1BT/R,IAAA,WAAA2G,IAAA,WA8BE,MAAOrG,MAAKyR,MAAL,aA9BT/R,IAAA,SAAA2G,IAAA,WAkCE,MAAOrG,MAAKyR,MAAL,UAlCT/R,IAAA,aAAA2G,IAAA,WAsCE,MAAOrG,MAAKyR,MAAL,eAtCT/R,IAAA,eAAA2G,IAAA,WA0CE,QAASrG,KAAKyR,MAAL,iBA1CX/R,IAAA,QAAA2G,IAAA,WA8CE,OAAQrG,KAAKyR,MAAL,UA9CVs0B,KAkDMjmC,EAAON,OAAAwmC,EAAA,GAAQ,YAOVrjC,EAAc7C,EAAO,GAAIimC,GAASjmC,GAAQ,IAuBrDmmC,GAAA,EAAaC,eAAe/7B,GAAG,SAAClD,GAC/BtE,EAAc,GAAIojC,GAAS9+B,GAC3BoF,QAAQpC,IAAI,iBAAkBtH,GAI9BoG,OAAOzM,IAAIqG,YAAcA,EAGzBoG,OAAO88B,cAAe,EACtB98B,OAAOuH,QAAU3N,EAAYvB,GAC7B2H,OAAOo9B,UAAYxjC,EAAYyjC,SAC/Br9B,OAAOs9B,eAAiB1jC,EAAY2jC,SACpCv9B,OAAOw9B,YAAc5jC,EAAY6jC,ctBqnP5BC,KACA,SAAUhqC,EAAQmB,GuBvtPxBnB,EAAAmB,QAAA,mjHvB6tPM8oC,KACA,SAAUjqC,EAAQmB,GwB9tPxBnB,EAAAmB,QAAA6kC,GxBouPMkE,KACA,SAAUlqC,OAAQC,oBAAqBC,qBAE7C,YyB9tPO,SAASiqC,UAAS/vB,EAAUxC,GAClC,MAAKA,IAGLA,EAAc,GAAKA,EACdA,EAAYsB,WAAW,OAC3BtB,EAAc,IAAMA,GAEdwC,EAAWxC,GANVwC,EAeF,QAAS7B,YAAWE,EAAW2xB,GACrC,GAAIzjC,UAAO1D,SAAKonC,IAGhB,KAAKpnC,IAAOwV,GACX,GAAKA,EAAUtM,eAAelJ,GAA9B,CAGA0D,EAAQ8R,EAAUxV,GACdmnC,IAAmBE,MAAMrnC,KAC5BA,EAAMi9B,OAAOkK,GAAkBnnC,EAEhC,IAAM0U,GAAQ4yB,wBAAwBC,UAAUvnC,GAAM0D,EAVjC,IAWP,MAAVgR,GACH0yB,EAAI5lC,KAAKkT,GAIX,MAAO0yB,GAAIjyB,KAhBW,KAyBhB,QAASqyB,UAASnlC,EAAKmT,GAC7B,GAAMH,GAAIC,WAAWE,EACrBnT,GAAM,GAAKA,CACX,IAAMowB,GAAI,6BAA6BnC,KAAKjuB,EAC5C,OAAKowB,IAGGA,EAAE,IAAM,KAAOA,EAAE,GAAKA,EAAE,GAAK,IAAMpd,EAAI,IAAMA,IAAMod,EAAE,IAAM,IAF3DpwB,EAAM,IAAMgT,EAWd,QAASoyB,aAAY9yB,EAAaa,GACxC,GAAMH,GAAIC,WAAWE,EACrB,KAAKH,EACJ,MAAOV,EAER,IAAMiP,GAAM,GAAKjP,CACjB,OAAOiP,GAAInkB,OAAS,EAAImkB,EAAM,IAAMvO,EAAIA,EAalC,QAASX,OAAM1U,EAAK0D,EAAO8d,GACjC,MAAOkmB,cAAa,SAAU1nC,EAAK0D,EAAO8d,GAapC,QAASmmB,WAAU3nC,EAAK0D,EAAO8d,GACrC,MAAOkmB,cAAa,OAAQ1nC,EAAK0D,EAAO8d,GAGzC,QAASkmB,cAAap2B,EAAMtR,EAAK0D,EAAO8d,GACvC,GAAIhM,GAAYoyB,kBAAkB92B,SAASQ,GAAM2Z,UAAU,GAC3D,QAAYpnB,KAAR7D,EAAmB,CACtB,GAAM6nC,GAAuB,gBAAf,KAAO7nC,EAAP,YAAAsW,QAAOtW,GAErB,QAAc6D,KAAVH,IAAwBmkC,EAE3B,WAA0BhkC,KAAnB2R,EAAUxV,GAAqB,KAAOwV,EAAUxV,EACjD,KAAK6nC,EAAO,KACHhkC,KAAX2d,IAAsBA,GAAS,EAGnC,IAAMsmB,GAAI9nC,EAAIsK,UACdtK,MACAA,EAAI8nC,GAAKpkC,EAGN8d,EACHrI,EAAEqI,OAAOhM,EAAWxV,GAEpBwV,EAAYxV,CAIb,IAAM+nC,KACN5uB,GAAEzG,KAAK8C,EAAW,SAAUxV,EAAK0D,GAC5BA,IAAOqkC,EAAQ/nC,GAAO0D,KAE3B8R,EAAYuyB,EAEZj3B,SAASQ,GAAQgE,WAAWE,GAE7B,MAAOA,GAQD,QAASoyB,mBAAkBrL,QACjC,GAAIyL,OAAQ,IACXC,MAAQ,IACRC,SACAC,OAASlL,OAAOV,QAAQ71B,QAAQ,mBAAoB,MAAM+d,MAAMwjB,OAChEzoC,SAAG4rB,SAAGgd,WAAKhB,WAAKpnC,WAAK0D,aAAO2kC,eAASC,YAAMC,eAC3CC,OAAS,SAAU5kB,GAClB,MAAO+O,oBAAmB/O,GAAKld,QAAQ,YAAa,QAAQA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,KAGzH,KAAKlH,EAAI,EAAGA,EAAI2oC,OAAO1oC,OAAQD,IAAK,CAOnC,IANA4nC,IAAMe,OAAO3oC,GAAGilB,MAAMujB,OAClBZ,IAAI3nC,OAAS,IAChB2nC,KAAOA,IAAK,KAEbpnC,IAAMwoC,OAAOpB,IAAI,IACjB1jC,MAAQ8kC,OAAOpB,IAAI,IACM,MAAlBpnC,IAAIskB,OAAO,IACjBtkB,IAAMA,IAAIkV,OAAO,EAKlB,KAH2B,IAAvBlV,IAAIwM,QAAQ,QACfxM,IAAMA,IAAIkV,OAAO,EAAGlV,IAAIwM,QAAQ,QAE7BxM,KAAyB,MAAlBA,IAAIskB,OAAO,GAAY,CAGjC,IAFAgkB,QACAD,QAAU,EACLjd,EAAI,EAAGA,EAAIprB,IAAIP,OAAQ2rB,IAC3B,GAAsB,MAAlBprB,IAAIskB,OAAO8G,IAAeid,SAEvB,GAAsB,MAAlBroC,IAAIskB,OAAO8G,IACjBid,UACEC,KAAK7oC,QACT6oC,KAAK9mC,KAAKxB,IAAIkV,OAAO,EAAGmzB,QAAU,IAEnCC,KAAK9mC,KAAKxB,IAAIkV,OAAOmzB,QAASjd,EAAIid,UAClCA,QAAU,EACgB,MAAtBroC,IAAIskB,OAAO8G,EAAI,IAClB,UATFid,SAAUjd,EAAI,CAiBhB,KAHKkd,KAAK7oC,SACT6oC,MAAQtoC,MAEJorB,EAAI,EAAGA,EAAIkd,KAAK,GAAG7oC,SACvB2oC,IAAME,KAAK,GAAGhkB,OAAO8G,GACT,MAARgd,KAAuB,MAARA,KAAuB,MAARA,MACjCE,KAAK,GAAKA,KAAK,GAAGpzB,OAAO,EAAGkW,GAAK,IAAMkd,KAAK,GAAGpzB,OAAOkW,EAAI,IAE/C,MAARgd,KAL2Bhd,KAUhC,IADAmd,QAAU,QACLnd,EAAI,EAAGA,EAAIkd,KAAK7oC,OAAQ2rB,IAC5BprB,IAAMsoC,KAAKld,GAEVprB,IADY,KAARA,KAAsB,MAARA,KAAsB,IAANorB,EAC5B,IAAMprB,IAAM,IAEZia,KAAKsuB,QAAU,cAAgB,EAEtCA,SAAW,IAAMvoC,IAAM,IACnBorB,IAAMkd,KAAK7oC,OAAS,GAAmC,cAA9Bwa,KAAK,UAAYsuB,UAC7CtuB,KAAKsuB,QAAU,SAGjBA,UAAW,OAAS7kC,MAAQ,OAC5BuW,KAAKsuB,UAIP,MAAOL,OAGR,QAASX,WAAU3jB,GAElB,MADAA,IAAOA,EAAM,IAAItZ,WACV8yB,mBAAmBxZ,GAAKld,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,OAAQ,KAG5J,QAAS4gC,yBAAwBtnC,EAAKgW,EAAKyyB,GAC1C,GAAIX,UAAGV,IAMP,KALY,IAARpxB,EACHA,EAAM,KACY,IAARA,IACVA,EAAM,KAEK,OAARA,OAAwBnS,KAARmS,GAA6B,KAARA,EAAY,CACpD,GAAoB,gBAAhB,KAAOA,EAAP,YAAAM,QAAON,IAAmB,CAC7B,GAAI6X,GAAQ,CACZ,KAAKia,IAAK9xB,GACT,GAAKA,EAAI9M,eAAe4+B,IAGT,OAAX9xB,EAAI8xB,GAAa,CACpB,GAAIY,UAAIC,EAAMr8B,OAAOw7B,EAChBT,OAAMsB,IAAQA,EAAM9a,GAAU,EAQlC6a,EAAKnB,UAAUO,IANdY,EADsB,WAAnBpyB,QAAON,EAAI8xB,IACTa,EAEA,GAEN9a,IAID,IAAMyX,GAAOgC,wBAAwBtnC,EAAM,IAAM0oC,EAAK,IAAK1yB,EAAI8xB,GAAIW,EAC/DnD,IACH8B,EAAI5lC,KAAK8jC,GAIZ,MAAO8B,GAAIjyB,KAAKszB,GACV,GAAoB,kBAATzyB,GACjB,MAAOhW,GAAM,IAAMunC,UAAUvxB,EAE7B,MAAM,IAAI4rB,OAAM,yDAGjB,MAAO,GzBg+OwB5kC,oBAAuB,EAAIsY,WAC3BtY,oBAAuB,EAAIwqC,SAC3BxqC,oBAAuB,EAAIyqC,YAG3BzqC,oBAAuB,EAAI4qC,iBAC5D,IAAItxB,SAA4B,kBAAX5K,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU4K,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX7K,SAAyB6K,EAAIC,cAAgB9K,QAAU6K,IAAQ7K,OAAOvL,UAAY,eAAkBoW,IyBxuPhQzF,SAAWzH,OAAOyH,UzBsgQlB83B,KACA,SAAU7rC,EAAQmB,KAMlB2qC,KACA,SAAU9rC,EAAQC,EAAqBC,GAE7C,YACA6C,QAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,IACnCzG,EAAoBuB,EAAExB,EAAqB,cAAe,WAAa,MAAO8rC,KAC9E7rC,EAAoBuB,EAAExB,EAAqB,qBAAsB,WAAa,MAAO+rC,KACrF9rC,EAAoBuB,EAAExB,EAAqB,sBAAuB,WAAa,MAAOgsC,KACtF/rC,EAAoBuB,EAAExB,EAAqB,eAAgB,WAAa,MAAOisC,KAC/EhsC,EAAoBuB,EAAExB,EAAqB,oBAAqB,WAAa,MAAOksC,KACpFjsC,EAAoBuB,EAAExB,EAAqB,sBAAuB,WAAa,MAAOmsC,KACtFlsC,EAAoBuB,EAAExB,EAAqB,4BAA6B,WAAa,MAAOosC,KAC5FnsC,EAAoBuB,EAAExB,EAAqB,8BAA+B,WAAa,MAAOqsC,KAC9FpsC,EAAoBuB,EAAExB,EAAqB,6BAA8B,WAAa,MAAOssC,KAC7FrsC,EAAoBuB,EAAExB,EAAqB,sCAAuC,WAAa,MAAOusC,KACtGtsC,EAAoBuB,EAAExB,EAAqB,mCAAoC,WAAa,MAAOwsC,KACnGvsC,EAAoBuB,EAAExB,EAAqB,8BAA+B,WAAa,MAAOysC,KAC9FxsC,EAAoBuB,EAAExB,EAAqB,kDAAmD,WAAa,MAAO0sC,KAClHzsC,EAAoBuB,EAAExB,EAAqB,6CAA8C,WAAa,MAAO2sC,KAC7G1sC,EAAoBuB,EAAExB,EAAqB,kCAAmC,WAAa,MAAO4sC,KAClG3sC,EAAoBuB,EAAExB,EAAqB,4CAA6C,WAAa,MAAO6sC,KAC5G5sC,EAAoBuB,EAAExB,EAAqB,gCAAiC,WAAa,MAAO8sC,KAChG7sC,EAAoBuB,EAAExB,EAAqB,oCAAqC,WAAa,MAAO+sC,KACpG9sC,EAAoBuB,EAAExB,EAAqB,4CAA6C,WAAa,MAAOgtC,KAC5G/sC,EAAoBuB,EAAExB,EAAqB,gCAAiC,WAAa,MAAOitC,KAChGhtC,EAAoBuB,EAAExB,EAAqB,4BAA6B,WAAa,MAAOktC,KAC5FjtC,EAAoBuB,EAAExB,EAAqB,oCAAqC,WAAa,MAAOmtC,KACpGltC,EAAoBuB,EAAExB,EAAqB,mCAAoC,WAAa,MAAOotC,KACnGntC,EAAoBuB,EAAExB,EAAqB,2CAA4C,WAAa,MAAOqtC,KAC3GptC,EAAoBuB,EAAExB,EAAqB,qBAAsB,WAAa,MAAOstC,KACrFrtC,EAAoBuB,EAAExB,EAAqB,6BAA8B,WAAa,MAAOutC,IACvG,IAAIC,GAA6CvtC,EAAoB,QACtF8L,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,I0B9iQ1OwpC,GAKZxjC,KAAM,WAAyB,GAAhBmlC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACxB,OAAO9D,QAAA0qC,EAAA,GAAgB,QAAS,MAAOC,cAI5B1B,GAKZzjC,KAAM,WAAsB,GAAblF,GAAawD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACrB,OAAO9D,QAAA0qC,EAAA,GAAgB,eAAgBpqC,GACtCsb,OAAO,MAKGstB,GAMZ1jC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5B,OAAO9D,QAAA0qC,EAAA,GAAgB,iBAAkB9oC,OACxCga,OAAO,EACP+uB,cAKUxB,GAOZ3jC,KAAM,SAAS5D,GAAiC,GAA7B4Y,GAA6B1W,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAArB,KAAM+W,EAAe/W,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACzC,OAAO9D,QAAA0qC,EAAA,GAAgB,UAAW9oC,KAAI4Y,QAAOK,WAAUiX,YAAY,MAIxDsX,GAQZ5jC,KAAM,SAAS5D,GAA0D,GAAtDgpC,GAAsD9mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA1C,KAAM+mC,EAAoC/mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,MAAhB6mC,EAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KAC9DxD,KACHsB,KACAkpC,WAAYF,GACTC,EAGJ,OAAO7qC,QAAA0qC,EAAA,GAAgB,cAAepqC,GAAOqqC,cAIlCtB,GAMT7jC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACzB,OAAO9D,QAAA0qC,EAAA,GAAgB,iBAAkB9oC,OAAM+oC,cAI1CrB,GAMT9jC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACzB,OAAO9D,QAAA0qC,EAAA,GAAgB,uBAAwB9oC,OAAM6lB,MAAO,IAAKkjB,cAI5DpB,GAKZ/jC,KAAM,WAAyB,GAAhBmlC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAClB,OAAO9D,QAAA0qC,EAAA,GAAgB,4BAA8BjjB,MAAO,IAAKkjB,cAI5DnB,GAMZhkC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5B,OAAO9D,QAAA0qC,EAAA,GAAgB,wBAAyB9oC,OAAM4P,KAAM,SAAUm5B,cAI3DlB,GAMZjkC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5B,OAAO9D,QAAA0qC,EAAA,GAAgB,iCAAkC9oC,OAAM6lB,MAAO,IAAKkjB,cAIhEjB,GAMTlkC,KAAM,SAASulC,GAA4B,GAAhBJ,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACjC,OAAO9D,QAAA0qC,EAAA,GACN,8BACJM,YAAaD,IACbtjB,MAAO,KAAMkjB,cAKLhB,GAOZnkC,KAAM,SAAS5D,EAAI4P,GAAsB,GAAhBm5B,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAClC,OAAO9D,QAAA0qC,EAAA,GAAgB,yBAA0B9oC,KAAI4P,SAAQiW,MAAO,IAAKkjB,cAI9Df,GAMZpkC,KAAM,SAASylC,GAAqB,GAAhBN,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7B,OAAO9D,QAAA0qC,EAAA,GAAgB,4CAA6CO,QAClExjB,MAAO,KAAMkjB,cAIJd,GAKZrkC,KAAM,WAAyB,GAAhBmlC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACxB,OAAO9D,QAAA0qC,EAAA,GAAgB,uCAAwC,MAC7DjjB,MAAO,IAAKkjB,cAIHb,GAMZtkC,KAAM,SAAU5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7B,OAAO9D,QAAA0qC,EAAA,GAAgB,6BAA8B9oC,OAAM6lB,MAAO,IAAKkjB,cAI5DZ,GAMZvkC,KAAM,SAAU5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7B,OAAO9D,QAAA0qC,EAAA,GACN,uCACE9oC,OACA6lB,MAAO,IAAKkjB,cAKJX,GAQTxkC,KAAM,SAASylC,EAAKC,EAASC,GAAsB,GAAhBR,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACzC,OAAO9D,QAAA0qC,EAAA,GAAgB,2BAA4BO,MAAKC,UAASC,SAAQ1jB,MAAO,IAAKkjB,cAIhFV,GAMZzkC,KAAM,SAASylC,GAAqB,GAAhBN,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7B,OAAO9D,QAAA0qC,EAAA,GAAgB,+BAAgCO,QACrDxjB,MAAO,IAAKkjB,cAIHT,GAOZ1kC,KAAM,SAAU4lC,EAAQC,GAAyB,GAAhBV,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KACpCxD,EAAOg9B,mBAAmBsE,KAAKC,WAAYuJ,SAAQC,YACzD,OAAOrrC,QAAA0qC,EAAA,GAAgB,uCAAyCpqC,SAAUqqC,cAI/DR,GAQZ3kC,KAR4C,SAQvC8lC,GAA+F,GAAxEC,GAAwEznC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA/C,KAAM0nC,EAAyC1nC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6mC,EAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7F9D,QAAA0qC,EAAA,GAAgB,2BACfe,wBAAyBH,EACzBI,0BAA2BH,EAC3BI,mBAAoBH,IACjBb,cAIOP,GAWZ5kC,KAXwC,SAWnComC,EAAeC,EAAeC,EAAQX,EAAMY,EAC/CC,GAAkE,GAAzCR,GAAyC1nC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6mC,EAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC7D9D,QAAA0qC,EAAA,GACC,uBAECuB,eAAgBL,EAChBM,eAAgBL,EAChBC,SACAX,OACAgB,UAAWJ,EACXK,2BAA4BJ,EAC5BL,mBAAoBH,IAEpB/jB,MAAO,IAAKkjB,cAIHN,GAKZ7kC,KALgD,WAK3B,GAAhBmlC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACd,OAAO9D,QAAA0qC,EAAA,GAAgB,kCAAoCjjB,MAAO,IAAKkjB,cAI5DL,GAMZ9kC,KAN+C,WAMb,GAA7B8E,GAA6BxG,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM6mC,EAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC3B,OAAO9D,QAAA0qC,EAAA,GACN,8BACEpgC,SACAmd,MAAO,IAAKkjB,cAKJJ,GAIZ/kC,KAJuD,WAKtD,MAAOxF,QAAA0qC,EAAA,GAAgB,yCAA2CjjB,MAAO,SAI9D+iB,GAMZhlC,KAAM,SAAS5D,GAAoB,GAAhB+oC,GAAgB7mC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5B,OAAO9D,QAAA0qC,EAAA,GAAgB,gBAAiB9oC,OAAM+oC,cAInCF,GACZjlC,KAAM,SAASmlC,GACd,MAAO3qC,QAAA0qC,EAAA,GAAgB,2BAA6BjjB,MAAO,IAAKkjB,e1B+lQ5D0B,KACA,SAAUpvC,EAAQC,EAAqBC,GAE7C,Y2B56QO,SAASmvC,KACf,MAAO/iC,UAAWA,OAAOC,IAMnB,QAASmY,KACf,MAAO4qB,GAGD,QAASC,KACf,MAAOC,GAUD,QAASC,GAAuBC,GACtC,MAAO,IAAIC,SAAQ,SAACC,EAASC,GAC5B,IAAK9sC,OAAO0U,OAAOq4B,GAAeC,SAASL,GAE1C,WADAG,GAAO,uBAIR,IAAMG,IACLC,MAAO,2DACPC,SAAU,mDACVC,MAAO,mHACPC,UAAW,4HAENC,EAAM,GAAIC,MAChBD,GAAIE,OAAS,WACZ,GAAMhqC,GAAU8pC,EAAI7lB,MAAQ,GAAO6lB,EAAI/zB,OAAS,CAChDszB,GAAQrpC,IAET8pC,EAAIG,QAAU,WACbZ,GAAQ,IAETS,EAAInpB,IAAM,0BAA4B8oB,EAAYN,K3Bk4QnBzvC,EAAuB,EAAIovC,EAC3BpvC,EAAuB,EAAIykB,EAC3BzkB,EAAuB,EAAIsvC,EAC7BrvC,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO6vC,K2Bn7QnG7vC,EAAA,EAAAwvC,CAOA,IAAMH,GAAa,eAAiBhjC,UAAyD,IAA7CyZ,UAAUC,UAAUvW,QAAQ,YACtE+/B,EAAkB,gBAAkBljC,SAAUyZ,UAAU0qB,iBAUjDX,GACZY,MAAO,QACPC,SAAU,WACVC,MAAO,QACPC,UAAW,c3B49QNC,KACA,SAAU9wC,EAAQC,EAAqBC,GAE7C,YAMA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAEhH,QAASwZ,GAA2BC,EAAM7O,GAAQ,IAAK6O,EAAQ,KAAM,IAAIC,gBAAe,4DAAgE,QAAO9O,GAAyB,gBAATA,IAAqC,kBAATA,GAA8B6O,EAAP7O,EAElO,QAAS+O,GAAUC,EAAUC,GAAc,GAA0B,kBAAfA,IAA4C,OAAfA,EAAuB,KAAM,IAAI7Z,WAAU,iEAAoE6Z,GAAeD,GAAShY,UAAYL,OAAOuY,OAAOD,GAAcA,EAAWjY,WAAaqW,aAAe9S,MAAOyU,EAAUxY,YAAY,EAAOE,UAAU,EAAMD,cAAc,KAAewY,IAAYtY,OAAOwY,eAAiBxY,OAAOwY,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,GATlcnb,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO8wC,IAC9E,IAAIC,GAA4C9wC,EAAoB,QAChE+wC,EAAkD/wC,EAAoB,QAC3FmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,M4Bt/QnhBwvC,EAAb,SAAAG,GAAA,QAAAH,KAAA,MAAA1vC,GAAAkC,KAAAwtC,GAAA/1B,EAAAzX,MAAAwtC,EAAAv1B,WAAAzY,OAAA8Y,eAAAk1B,IAAA15B,MAAA9T,KAAAsD,YAAA,MAAAsU,GAAA41B,EAAAG,GAAA7uC,EAAA0uC,IAAA9tC,IAAA,gBAAA0D,MAAA,SAMkB6W,GAAO,GAAAlV,GAAA/E,IACpB,OAAOia,GAAMnZ,IAAI,SAAAkhC,GAEV,MADAA,GAAE5hC,OAAF2E,EACO,GAAI2oC,GAAA,EAAiB1L,QATxCtiC,IAAA,mBAAA0D,MAAA,SAiBqBiW,GACTrZ,KAAK6B,WACLkH,OAAOwR,KAAKlB,EAAKvZ,OAAOiC,IAAK,cAnBzCyrC,GAAsCC,EAAA,I5B8iRhCG,KACA,SAAUnxC,EAAQmB,KAMlBiwC,KACA,SAAUpxC,EAAQC,EAAqBC,GAE7C,Y6BpjRO,SAASmxC,GAAMp4B,GACrB,OAAQrX,EAAAjB,EAAE2wC,YAAYr4B,KAASrX,EAAAjB,EAAE4wC,OAAOt4B,GAUlC,QAAShD,GAAQu7B,EAAQvuC,GAA0B,GAArB4lC,GAAqBhiC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACnD,OAAOjF,GAAAjB,EAAE2nB,IAAIkpB,EAAQvuC,GAAOuuC,EAAOvuC,GAAO4lC,EAUpC,QAAS4I,GAAiBD,EAAQvuC,GAA0B,GAArB4lC,GAAqBhiC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC5D,OAAOjF,GAAAjB,EAAE2nB,IAAIkpB,EAAQvuC,IAAwB,OAAhBuuC,EAAOvuC,GAAgBuuC,EAAOvuC,GAAO4lC,EAU5D,QAAS6I,GAAcF,EAAQvuC,GACrC,MAAOwuC,GAAiBD,EAAQvuC,EAAK,WAS/B,QAAS0uC,GAAUhrC,GAA4B,GAArBkiC,GAAqBhiC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAC/C,OAAOwqC,GAAM1qC,GAASA,EAAQkiC,EASxB,QAAS+I,GAASjrC,GAAyBE,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,IAAAA,UAAA,EAEjD,OADAF,IAASA,EACD2jC,MAAM3jC,GAAiB,EAARA,EAcjB,QAASkrC,GAAUlrC,GACzB,MAAI/E,GAAAjB,EAAEmxC,UAAUnrC,GAAeA,EACjB,MAAVA,IACU,UAAVA,IACU,SAAVA,MACA/E,EAAAjB,EAAEqX,SAASrR,KAAU/E,EAAAjB,EAAE0X,QAAQ1R,QAC/B/E,EAAAjB,EAAEqO,QAAQrI,KAAU/E,EAAAjB,EAAE0X,QAAQ1R,OACzBA,MASH,QAASorC,GAASprC,GACxB,MAAc,QAAVA,GAAkB/E,EAAAjB,EAAE2wC,YAAY3qC,GAAe,GAC5C,GAAKA,EAQN,QAASuR,GAAKvR,GACpB,MAAOorC,GAASprC,GAAOuR,OAWjB,QAAS85B,GAAQrrC,GAAuB,GAAhBsrC,GAAgBprC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAJ,EAC1C,OAAKF,GACD/E,EAAAjB,EAAEqO,QAAQrI,GAAeA,GAC7BA,EAAQorC,EAASprC,GACVsrC,EAAYtrC,EAAM+gB,MAAMuqB,IAActrC,O7Bu8Qb1G,EAAuB,EAAIgW,EAE3BhW,EAAuB,EAAIyxC,EAC3BzxC,EAAuB,EAAI0xC,EAC3B1xC,EAAuB,EAAI2xC,EAC3B3xC,EAAuB,EAAI4xC,EAC3B5xC,EAAuB,EAAI8xC,EAC3B9xC,EAAuB,EAAIiY,EAC3BjY,EAAuB,EAAI+xC,CACvC,IAAIrwC,GAA+CzB,EAAoB,QACnE0B,EAAuD1B,EAAoBG,EAAEsB,IAsIhGuwC,KACA,SAAUlyC,EAAQC,EAAqBC,GAE7C,YAoBA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qC8BrtRzG,QAAS2wC,GAAmB7sC,GAAqB,GAAhBoH,GAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACjD,OAAOurC,MAAW5tB,QAASlf,EAAKiP,KAAM,SAAU89B,QAAS,KAAQ3lC,IAW3D,QAAS4lC,GAAiB9tB,GAAyB,GAAhB9X,GAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACnD,OAAOurC,MAAW5tB,UAASjQ,KAAM,OAAQg+B,iBAAiB,GAAS7lC,IAS7D,QAAS8lC,GAAehuB,GAAyB,GAAhB9X,GAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACjD,OAAOyrC,GAAiB9tB,EAAjBxY,GAA2BymC,UAAU,GAAS/lC,IAS/C,QAASgmC,GAAmBptC,GAAqB,GAAhBoH,GAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACjD,OAAOurC,MAAW5tB,QAASlf,EAAKiP,KAAM,UAAa7H,IA8uBpD,QAASimC,KACR,GAAMC,GAASx2B,EAAE,SAASM,KAAKm2B,WAAY,SAAUroB,MAAO,IAAKsoB,SAAU,WAAW1sB,SAAS,QAC9F2sB,EAAkB32B,EAAE,SAASM,KAAK8N,MAAO,SAASpE,SAASwsB,GAAQ5iB,YAEpE,OADA4iB,GAAOzqC,SACA,IAAM4qC,EAGd,QAASC,GAAap9B,GACrB,GAAMC,GAAMuG,EAAExG,EACd,OAAOC,GAAInT,OAAS,GAAImT,EAAI,GAAGsQ,aAAe/J,EAAE9P,QAAQgQ,S9B06PzDvZ,OAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,IACjC1G,EAAwC,mBAAIkyC,EAC5ClyC,EAAsC,iBAAIqyC,EAC1CryC,EAAoC,eAAIuyC,EACxCvyC,EAAwC,mBAAIyyC,EAC9CxyC,EAAoBuB,EAAExB,EAAqB,gBAAiB,WAAa,MAAOgzC,IAC1F,IAAIC,GAA6ChzC,EAAoB,QAEjEizC,GADqDjzC,EAAoBG,EAAE6yC,GAC5BhzC,EAAoB,SACnEkzC,EAAuDlzC,EAAoBG,EAAE8yC,GAC7EE,EAA6CnzC,EAAoB,QACjEozC,EAAqDpzC,EAAoBG,EAAEgzC,GAC3EE,EAA8CrzC,EAAoB,QAClEszC,EAA6CtzC,EAAoB,QACjEuzC,EAA2CvzC,EAAoB,QACpFmC,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MAE5hByK,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,I8B3tRjP2O,EAASnO,OAAAwwC,EAAA,GAAU,UA6CzBn3B,GAAEqI,OAAOrI,EAAE1G,IAKVg+B,QAAS,WAA0B,GAAhBhnC,GAAgB7F,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,KACtBgP,EAAMuG,EAAE7Y,MACR4sB,EAAe/T,EAAE,iDAAiDgU,YAAYva,GAC9E89B,EAAU99B,EAAI+9B,QAAQh6B,SAASkW,iBAC/BkC,EAAkC,QAAtBnc,EAAI6G,IAAI,UACtBi3B,IACH99B,EAAIg+B,SAEA7hB,GACJnc,EAAItN,MAEL,IAAMurC,GAASxB,EAAiBz8B,EAAKnJ,EAerC,OAdAonC,GAAOC,cAAc,WACpBl+B,EAAIg+B,WAELC,EAAOpG,QAAQ,WACViG,GACH99B,EAAIua,YAAYD,GAEZ6B,GACJnc,EAAIuS,OAEL+H,EAAahoB,WAEd2rC,EAAOh2B,OACPjI,EAAIxS,KAAK,kBAAmBywC,GACrBvwC,MAORywC,gBAAiB,WAChB,MAAOzwC,MAAKF,KAAK,qBAkCnB,IAAI+uC,GAAY,SAAU1lC,GACzB,MAAO,IAAIunC,GAAQvnC,IAIdzJ,EAAM,qBACRF,QAAAywC,EAAA,KACHpB,EAAY9lC,OAAOC,IAAItJ,GAEvBqJ,OAAOC,IAAItJ,GAAOmvC,C9BuvRnB,I8BjvRM6B,G9BivRQ,W8BhsRb,QAAAA,GAAYvnC,GAASrL,EAAAkC,KAAA0wC,GAAA1wC,KAzBrB2wC,OAASZ,EAAA3yC,EAAG+C,aAyBSH,KAxBrB4wC,QAAUb,EAAA3yC,EAAG+C,aAwBQH,KAvBrB6wC,SAAWd,EAAA3yC,EAAG+C,YAAW,GAuBJH,KAtBrB8wC,mBAAqBf,EAAA3yC,EAAG+C,YAAW,GAsBdH,KAjBrB+wC,WAAahB,EAAA3yC,EAAG+C,YAAW,GAiBNH,KAhBrBgxC,UAAYjB,EAAA3yC,EAAG+C,YAAW,GAgBLH,KAfrBixC,UAAYlB,EAAA3yC,EAAG+C,YAAW,GAeLH,KAdrBkxC,UAAYnB,EAAA3yC,EAAG+C,YAAW,GAcLH,KAbrBmxC,eAAiBpB,EAAA3yC,EAAG+C,WAAW,GAaVH,KAZrBoxC,cAAgBrB,EAAA3yC,EAAG+C,WAAW,GAYTH,KATrBqxC,SAAU,EASWrxC,KAPrBsxC,QAAUz4B,EAAEpX,YAOSzB,KALrBuxC,SAAW14B,EAAEpX,YAKQzB,KAHrBwxC,eAAiB34B,EAAEpX,YAGEzB,KAFrByxC,QAAU,IAGT,IAAMrkC,QACFsjC,EAAQl2B,SACRrR,EAGJnJ,MAAK+J,MAAQqD,EAAEtD,KACf9J,KAAK0xC,GAAKtkC,EACVpN,KAAK6wC,WAAWzjC,EAAEgO,OAClBpb,KAAK8wC,qBAAqB1jC,EAAE4hC,iBAC5BhvC,KAAK2wC,OAAOvjC,EAAE6Z,OACdjnB,KAAK4wC,QAAQxjC,EAAE2L,QAEX3L,EAAEukC,QACL3xC,KAAKsxC,QAAQ3sC,IAAIyI,EAAEukC,QAEhBvkC,EAAE+8B,SACLnqC,KAAKuxC,SAAS5sC,IAAIyI,EAAE+8B,SAGjB/8B,EAAE8hC,UACLlvC,KAAKua,O9BumSP,MAzYAzb,GAAa4xC,IACZhxC,IAAK,OACL0D,MAAO,W8B5tRD,GAAArD,GAAAC,IACFA,MAAK4xC,WAGT5xC,KAAKixC,WAAU,GACfjxC,KAAKkxC,WAAU,GACflxC,KAAKyxC,QAAU,KACG,WAAdzxC,KAAKgR,MACRhR,KAAK6xC,KAAO9oC,OAAOwR,KAAKva,KAAKihB,SAC7BjhB,KAAK6xC,KAAKlc,iBAAiB,mBAAoB,iBAAM51B,GAAK+xC,uBAC1D9xC,KAAK6xC,KAAKE,eAAiB,WACrBhyC,EAAKsC,UACTtC,EAAK2c,SAGP1c,KAAK+wC,YAAW,IACLrB,EAAcsC,aAAahyC,MAqB5BA,KAAKkxC,aACfxB,EAAc1qC,KAAKhF,OArBfA,KAAKiyC,eACRjyC,KAAK2wC,OAAO,IACZ3wC,KAAK4wC,QAAQ,IACb5wC,KAAKmxC,eAAe,IACpBnxC,KAAKoxC,cAAc,KAEF,WAAdpxC,KAAKgR,MACRhR,KAAK+wC,YAAW,GACX/wC,KAAKkyC,aAITlyC,KAAKmxC,eAAe,KAHpBnxC,KAAKmxC,eAAenxC,KAAK+Y,QACzB/Y,KAAKoxC,cAAcpxC,KAAK+Y,WAKzB/Y,KAAKmxC,eAAenxC,KAAK+Y,QACzB/Y,KAAKgxC,WAAU,GACf/9B,WAAW,iBAAMlT,GAAKuxC,QAAQvtC,SAAbhE,IAA6B,IAE/C2vC,EAAcpyC,SAAS0C,W9BwuRxBN,IAAK,QACL0D,MAAO,W8BnuRA,GAAA2B,GAAA/E,IACHA,MAAKqC,WAGTrC,KAAKwxC,eAAeztC,SAAS/D,MAAOA,KAAKyxC,UACzCzxC,KAAKgxC,WAAU,GACfhxC,KAAKkxC,WAAU,GACflxC,KAAKixC,WAAU,GACG,WAAdjxC,KAAKgR,KACJhR,KAAK6xC,OACR7xC,KAAK6xC,KAAKn1B,QACV3T,OAAOC,IAAIgc,QACXhlB,KAAK6xC,KAAO,KACZ5+B,WAAW,iBAAMlO,GAAKwsC,SAASxtC,SAAdgB,GAA8BA,EAAK0sC,WAAW,IAEtD/B,EAAcsC,aAAahyC,QACjCA,KAAKmyC,gBACRnyC,KAAKmyC,eAAe/nC,MAErBslC,EAAc0C,WAAWpyC,MACzBiT,WAAW,iBAAMlO,GAAKwsC,SAASxtC,SAAdgB,GAA8BA,EAAK0sC,WAAW,Q9B6uRhE/xC,IAAK,OACL0D,MAAO,W8BzuRW,WAAdpD,KAAKgR,KACRrD,EAAOzH,MAAM,mDACHwpC,EAAcsC,aAAahyC,QACrCA,KAAKgxC,WAAU,GACfhxC,KAAKkxC,WAAU,GACfxB,EAAc7qB,KAAK7kB,U9B8uRpBN,IAAK,kBACL0D,MAAO,S8B3uRQJ,GACfhD,KAAKgD,OAASA,EACdhD,KAAK0c,W9B8uRLhd,IAAK,iBACL0D,MAAO,W8B3uRW,WAAdpD,KAAKgR,MACRhR,KAAKmxC,eAAenxC,KAAKqyC,iB9BmvR1B3yC,IAAK,mBACL0D,MAAO,S8BvnRSiW,EAAM5V,GAAG,GAAAoC,GAAA7F,IACzB2N,GAAO1D,IAAI,SAAUxG,GACrBzD,KAAK+wC,YAAW,IAEX/wC,KAAKiyC,cAAgBjyC,KAAKkyC,aAC9BlyC,KAAKmyC,eAAiB,GAAIG,GAAc7uC,EAAEzE,OAAQ,SAAC04B,GAClD/pB,EAAO1D,IAAP,gBAA2BytB,GAC3B7xB,EAAKurC,cAAc1Z,GACd7xB,EAAK0sC,eACT1sC,EAAKsrC,eAAezZ,GAErB7xB,EAAKmrC,WAAU,GACf/9B,WAAW,iBAAMpN,GAAKyrC,QAAQvtC,SAAb8B,IAA6B,MAI/C7F,KAAKgxC,WAAU,GACf/9B,WAAW,iBAAMpN,GAAKyrC,QAAQvtC,SAAb8B,IAA6B,IAI/CpC,EAAEzE,OAAOstB,cAAckmB,eAAiBxyC,KAGxC6Y,EAAEpV,EAAEzE,OAAOstB,cAAcjW,SAASsM,MAChCqM,YAAY,uBAAwBhvB,KAAKyyC,SACzCzjB,YAAY,4BAA6BhvB,KAAKkyC,cAC9CljB,YAAY,4BAA6BhvB,KAAKiyC,cAG1CxuC,EAAEzE,OAAOstB,cAAczT,EAAEpV,EAAEzE,OAAOstB,cAAcjW,UAAU8M,QAAQ,oB9B4nRxEzjB,IAAK,qBACL0D,MAAO,S8B1nRWK,GAAG,GAAAwC,GAAAjG,IACrB2N,GAAO1D,IAAI,SAAUxG,GACrBzD,KAAK+wC,YAAW,GAChB/wC,KAAKgxC,WAAU,GAGfhxC,KAAK6xC,KAAKW,eAAiBxyC,KAC3B6Y,EAAE7Y,KAAK6xC,KAAKx7B,SAASsM,MAAMne,SAAS,yBAEpCyO,WAAW,iBAAMhN,GAAKqrC,QAAQvtC,SAAbkC,IAA6B,M9BioR9CvG,IAAK,mBACL0D,MAAO,S8B/nRSiW,EAAM5V,GACtB,GAAMC,GAAUmV,EAAEpV,EAAEzE,OAChB0E,GAAQG,GAAG,0BACd7D,KAAKgD,OAASU,EAAQ5D,KAAK,iBAE5BE,KAAK0c,W9BkoRLhd,IAAK,sBACL0D,MAAO,W8B/nRHssC,EAAcgD,UAAU1yC,QAAUA,KAAKyyC,SAC1CzyC,KAAK0c,W9BooRNhd,IAAK,SACL0D,MAAO,S8BjoRDmD,GACNvG,KAAKsxC,QAAQ3sC,IAAI4B,M9BooRjB7G,IAAK,UACL0D,MAAO,S8BloRAmD,GACPvG,KAAKsxC,QAAQ1sC,OAAO2B,M9BqoRpB7G,IAAK,UACL0D,MAAO,S8BnoRAmD,GACPvG,KAAKuxC,SAAS5sC,IAAI4B,M9BsoRlB7G,IAAK,WACL0D,MAAO,S8BpoRCmD,GACRvG,KAAKuxC,SAAS3sC,OAAO2B,M9BuoRrB7G,IAAK,gBACL0D,MAAO,S8BroRMmD,GACbvG,KAAKwxC,eAAe7sC,IAAI4B,M9BwoRxB7G,IAAK,iBACL0D,MAAO,S8BtoROmD,GACdvG,KAAKwxC,eAAe5sC,OAAO2B,M9ByoR3B7G,IAAK,OACL2G,IAAK,W8Bj1RL,MAAOrG,MAAK+J,S9Bw1RZrK,IAAK,OACL2G,IAAK,W8Bp1RL,MAAOrG,MAAK0xC,GAAG1gC,Q9B21RftR,IAAK,UACL2G,IAAK,W8Bv1RL,MAAOrG,MAAK0xC,GAAGzwB,W9B81RfvhB,IAAK,QACL2G,IAAK,W8B11RL,MAAOrG,MAAK0xC,GAAGvsC,S9Bi2RfzF,IAAK,QACL2G,IAAK,W8B71RL,MAAOrG,MAAK2wC,Y9Bo2RZjxC,IAAK,SACL2G,IAAK,W8Bh2RL,MAAOrG,MAAK4wC,a9Bu2RZlxC,IAAK,WACL2G,IAAK,W8Bn2RL,MAAOrG,MAAK0xC,GAAGiB,Y9B02RfjzC,IAAK,WACL2G,IAAK,W8Bt2RL,MAAOrG,MAAK0xC,GAAGkB,Y9B62RflzC,IAAK,eACL2G,IAAK,W8Bz2RL,MAAOrG,MAAK2wC,Y9Bg3RZjxC,IAAK,gBACL2G,IAAK,W8B52RL,MAAOrG,MAAKmxC,oB9Bm3RZzxC,IAAK,eACL2G,IAAK,W8B/2RL,MAAOrG,MAAKoxC,mB9Bs3RZ1xC,IAAK,YACL2G,IAAK,W8Bl3RL,MAAOrG,MAAK+wC,gB9By3RZrxC,IAAK,WACL2G,IAAK,W8Br3RL,MAAOrG,MAAKgxC,e9B43RZtxC,IAAK,WACL2G,IAAK,W8Bx3RL,MAAOrG,MAAKixC,e9B+3RZvxC,IAAK,WACL2G,IAAK,W8B33RL,MAAOrG,MAAKkxC,e9Bk4RZxxC,IAAK,UACL2G,IAAK,W8B93RL,MAAOrG,MAAK6wC,c9Bq4RZnxC,IAAK,oBACL2G,IAAK,W8Bj4RL,MAAOrG,MAAK8wC,wB9Bw4RZpxC,IAAK,eACL2G,IAAK,W8Bp4RL,MAAOrG,MAAK0xC,GAAGpgB,c9B24Rf5xB,IAAK,eACL2G,IAAK,W8Bv4RL,MAAiC,KAA1B7G,OAAA0wC,EAAA,GAASlwC,KAAK+Y,SAAkC,SAAhB/Y,KAAK+Y,U9B84R5CrZ,IAAK,SACL2G,IAAK,W8B14RL,MAAOrG,MAAKyxC,S9Bk5RZl6B,IAAK,S8B54RKnU,GACVpD,KAAKyxC,QAAUruC,K9Bo5Rf1D,IAAK,aACL2G,IAAK,W8B94RL,MAAOrG,MAAK0xC,GAAGmB,U9Bu5RfnzC,IAAK,WACL2G,IAAK,W8Bj5RL,MAAO7G,QAAA0wC,EAAA,GAASlwC,KAAK0xC,GAAGoB,c9Bs5RlBpC,I8B7qSFA,GACEl2B,UACN1Q,KAAM,GACNkH,KAAM,SACNiQ,QAAS,GACT9b,MAAO,GACP6V,WACAI,OAAO,EACP8zB,UAAU,EACVF,iBAAiB,EAEjB/nB,MAAO,GACPlO,OAAQ,GACRuY,YAAY,EACZwhB,SAAU,GAEVD,OAAQ,KAGRlB,OAAQ,KACRxH,QAAS,K9BkrSX,I8Bx1RM4I,G9Bw1Rc,W8B70RnB,QAAAA,KAAc,GAAAvsC,GAAAxG,IAAAlC,GAAAkC,KAAA+yC,GAAA/yC,KAVdgzC,SAAW,EAUGhzC,KARdizC,SAAWlD,EAAA3yC,EAAGwD,oBAQAZ,KANdkzC,WAAanD,EAAA3yC,EAAG+C,YAAW,GAMbH,KALdmzC,cAAe,EAKDnzC,KAFdozC,SAAW,GAAIC,GAGdrzC,KAAKszC,OAASz6B,EAAE,QAChB7Y,KAAKuzC,OAAS16B,EAAE,QAEhB7Y,KAAK+wC,WAAahB,EAAA3yC,EAAGwE,aAAa,WAC9B,MAAOiuC,GAAAzyC,EAAEo2C,IAAIhtC,EAAKitC,QAAS,SAAAv1C,GAAA,MAAKA,GAAEiR,cAGtCnP,KAAK0zC,gBAAkB3D,EAAA3yC,EAAGwE,aAAa,WACnC,MAAO4E,GAAKitC,QAAQp5B,OAAO,SAAAnc,GAAA,OAAMA,EAAEy1C,a9BuiSxC,MAjMA70C,GAAai0C,IACZrzC,IAAK,WACL0D,MAAO,S8Bj2RCmtC,GACJvwC,KAAKgyC,aAAazB,KAItBvwC,KAAKizC,SAAS/xC,KAAKqvC,GACnBvwC,KAAK4zC,4B9By2RLl0C,IAAK,aACL0D,MAAO,S8Bp2RGmtC,GACkC,IAAxCvwC,KAAKizC,SAASruC,OAAO2rC,GAAQpxC,QAIjCa,KAAK6zC,4B9B42RLn0C,IAAK,OACL0D,MAAO,S8Bv2RHmtC,GACAvwC,KAAKgyC,aAAazB,IACrBvwC,KAAK6zC,4B9Bg3RNn0C,IAAK,OACL0D,MAAO,S8B12RHmtC,GACAvwC,KAAKgyC,aAAazB,IACrBvwC,KAAK4zC,2B9B82RNl0C,IAAK,wBACL0D,MAAO,W8B12RHpD,KAAKkzC,cACRlgC,aAAahT,KAAK8zC,UAClB9zC,KAAK8zC,SAAW,KAChB9zC,KAAKkzC,YAAW,IACyB,IAA/BlzC,KAAK+zC,eAAe50C,QAAiBa,KAAKmzC,eACpDnzC,KAAKozC,SAASjpC,KAETnK,KAAKg0C,KAMTh0C,KAAKg0C,KAAKhvC,QALVhF,KAAKg0C,KAAOn7B,sMAEZk3B,EAAA3yC,EAAG4Q,cAAchO,KAAMA,KAAKg0C,KAAK,IACjCh0C,KAAKg0C,KAAKnxB,SAAS,SAIpB7iB,KAAKmzC,cAAe,M9B82RrBzzC,IAAK,yBACL0D,MAAO,W8B32RiB,GAAA4D,GAAAhH,MACnBA,KAAKkzC,cAA+C,IAA/BlzC,KAAK+zC,eAAe50C,QAAgBa,KAAKmzC,eAElEnzC,KAAKkzC,YAAW,GAChBlzC,KAAK8zC,SAAW7gC,WAAW,WAC1BjM,EAAKosC,SAAShpC,MAEdpD,EAAKgtC,KAAKpvC,SACVmrC,EAAA3yC,EAAG62C,UAAUjtC,EAAKgtC,KAAK,IACXhtC,EAAKgtC,KAAO,KACxBhtC,EAAKmsC,cAAe,EACpBnsC,EAAKksC,YAAW,IACd,S9Bu3RJxzC,IAAK,eACL0D,MAAO,S8Bh3RKmtC,GACZ,MAAOV,GAAAzyC,EAAE82C,SAASl0C,KAAKyzC,QAASlD,M9Bm3RhC7wC,IAAK,qBACL0D,MAAO,S8Bj3RW+wC,GACJt7B,EAAEs7B,GACVvvC,Y9B63RNlF,IAAK,mBACL0D,MAAO,W8Bh2RP,MAAOysC,GAAAzyC,EAAEg3C,KAAKp0C,KAAK+zC,eAAe15B,OAAO,SAAAnc,GAAA,OAAMA,EAAEiR,gB9Bs2RjDzP,IAAK,YACL0D,MAAO,S8Bp2REmtC,GACT,MAAOA,KAAWvwC,KAAKq0C,sB9B42RvB30C,IAAK,iBACL0D,MAAO,S8Bv2ROmtC,GACd,GAAMp3B,KA2BN,OA1BIo3B,GAAOkC,SACVt5B,EAAIjY,KAAK,iBAENqvC,EAAO0B,cACV94B,EAAIjY,KAAK,sBAENlB,KAAK0yC,UAAUnC,GAClBp3B,EAAIjY,KAAK,mBACClB,KAAK+zC,eAAe50C,OAAS,GACvCga,EAAIjY,KAAK,sBAENqvC,EAAOphC,WACVgK,EAAIjY,KAAK,mBAENqvC,EAAOqB,UACVz4B,EAAIjY,KAAK,kBAENqvC,EAAOoD,UACVx6B,EAAIjY,KAAK,kBAENqvC,EAAOzmC,MACVqP,EAAIjY,KAAK,oBAAsBqvC,EAAOzmC,MAEnCymC,EAAOuC,UACV35B,EAAIjY,KAAKqvC,EAAOuC,UAEV35B,EAAItE,KAAK,Q9B02RhBnV,IAAK,UACL2G,IAAK,W8Bp6RL,MAAOrG,MAAKizC,c9B26RZvzC,IAAK,iBACL2G,IAAK,W8Bv6RL,MAAOrG,MAAK0zC,qB9B86RZh0C,IAAK,YACL2G,IAAK,W8B16RL,MAAOrG,MAAK+wC,gB9Bi7RZrxC,IAAK,YACL2G,IAAK,W8B76RL,MAAOrG,MAAKkzC,iB9Bk7RNH,K8Bp4RFT,E9Bu4Rc,W8Bn4RnB,QAAAA,GAAY5mB,EAASnlB,GAAU,GAAA+tC,GAAAt0C,IAAAlC,GAAAkC,KAAAsyC,GAAAtyC,KAH/Bu0C,YAAc,EAGiBv0C,KAF/Bw0C,OAAS37B,EAAEpX,YAGVzB,KAAKw0C,OAAO7vC,IAAI4B,GAChBvG,KAAKy0C,OAAS57B,EAAE6S,GAAS,GAAGY,cAAcjW,SAASsM,KAEnD1P,WAAW,WACVqhC,EAAKI,eACLJ,EAAKK,UAAYnvB,YAAY,iBAAM8uB,GAAKI,gBAAgB,KACtD,G9Bg7RJ,MAhCA51C,GAAawzC,IACZ5yC,IAAK,eACL0D,MAAO,W8B74RP,GAAMs0B,GAAY13B,KAAK40C,WACnBld,KAAc13B,KAAKu0C,cACtBv0C,KAAKu0C,YAAc7c,EACnB13B,KAAKw0C,OAAO3sC,KAAK6vB,O9Bm5RlBh4B,IAAK,YACL0D,MAAO,W8B/4RP,GAAI2V,GAAS/Y,KAAKy0C,OAAO7xB,YASzB,OARA/J,GAAE7Y,KAAKy0C,QAAQpwC,KAAK,kBAAkBgW,OAAO,WAC5C,MAAqC,WAA9BxB,EAAE7Y,MAAMmZ,IAAI,gBACjB/G,KAAK,WACP,GAAIyiC,GAAUh8B,EAAE7Y,MAAM+Y,QAClB87B,GAAU97B,IACbA,EAAS87B,KAGJ97B,K9Bm5RPrZ,IAAK,MACL0D,MAAO,W8Bh5RPuiB,cAAc3lB,KAAK20C,WACnB30C,KAAKw0C,OAAO7nB,Y9Bq5RN2lB,K8Bj5RFe,E9Bo5Rc,W8B74RnB,QAAAA,KAAcv1C,EAAAkC,KAAAqzC,GAAArzC,KANd80C,MAAQj8B,EAAE9P,QAMI/I,KALdszC,OAASz6B,EAAE,QAKG7Y,KAJd+0C,OAASl8B,EAAE,QAIG7Y,KAHdg1C,WAAa,EAGCh1C,KAFdi1C,YAAc,EAGbj1C,KAAKk1C,iBAAmBr8B,qCAAqCgK,SAAS7iB,KAAK+0C,QAC3E/0C,KAAKm1C,gBAAkBt8B,qCAAqCgK,SAAS7iB,KAAK+0C,QAE1E/0C,KAAKo1C,gBAAkB51C,OAAAywC,EAAA,K9Bk8RxB,MAzCAnxC,GAAau0C,IACZ3zC,IAAK,KACL0D,MAAO,W8Bv5RHpD,KAAKo1C,kBACRp1C,KAAKg1C,WAAah1C,KAAK80C,MAAMzyB,YAC7BriB,KAAKi1C,YAAcj1C,KAAK80C,MAAMxyB,aAC9BtiB,KAAKq1C,sBACLr1C,KAAK80C,MAAMzyB,UAAU,GAAGC,WAAW,IAEpCtiB,KAAKs1C,uBAELt1C,KAAKszC,OACHtkB,YAAY,wBAAyBhvB,KAAKu1C,iBAC1CvmB,YAAY,uBAAwBhvB,KAAKo1C,iBACzC5wC,SAAS,mB9Bw5RX9E,IAAK,MACL0D,MAAO,W8Br5RPpD,KAAKszC,OACH1sB,YAAY,yBACZA,YAAY,wBACZA,YAAY,gBACV5mB,KAAKo1C,iBACRp1C,KAAK80C,MAAMzyB,UAAUriB,KAAKg1C,YAAY1yB,WAAWtiB,KAAKi1C,gB9Bu5RvDv1C,IAAK,uBACL0D,MAAO,W8Bn5RP,GAAMoyC,GAAiBpG,GAEvBpvC,MAAKk1C,iBAAiBnoB,KAAtB,gDAEgByoB,EAFhB,e9Bu5RA91C,IAAK,sBACL0D,MAAO,W8B/4RPpD,KAAKm1C,gBAAgBpoB,KAArB,2FAKO/sB,KAAKg1C,WALZ,iBAMQh1C,KAAKi1C,YANb,e9Bo5RAv1C,IAAK,gBACL0D,MAAO,W8Bz4RP,MAAOqsC,GAAazvC,KAAKszC,Y9B84RnBD,K8B93RK3D,EAAgB,GAAIqD,EAEjChD,GAAA3yC,EAAGC,WAAWC,SAAS,mBACtBI,SAAU,6XASTiX,SAEFo7B,EAAA3yC,EAAGC,WAAWC,SAAS,WACtBI,SAAU,mSAKTiX,SAEFo7B,EAAA3yC,EAAGC,WAAWC,SAAS,0BACtBI,SAAU,8UAITiX,SAEFo7B,EAAA3yC,EAAGC,WAAWC,SAAS,wBACtBI,SAAU,gmBAWTiX,U9Bq3RI8gC,KACA,SAAUh5C,EAAQC,EAAqBC,GAE7C,YACA6C,QAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,GAC7C,IAAIsyC,GAAsC/4C,EAAoB,OAC5CA,GAAoBuB,EAAExB,EAAqB,OAAQ,WAAa,MAAOg5C,MAOxGC,KACA,SAAUl5C,EAAQC,EAAqBC,GAE7C,YAGA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAFjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOk5C,IAC9E,IAAIC,GAA6Cl5C,EAAoB,Q+BrtT7Ei5C,EAAb,QAAAA,KAAA93C,EAAAkC,KAAA41C,GAAaA,GAEL1P,eAAiB,GAAI2P,GAAA,EAAY,mB/BkuTnCC,KACA,SAAUr5C,EAAQmB,GgC1uTxBnB,EAAAmB,QAAAqL,QhCgvTM8sC,KACA,SAAUt5C,EAAQC,EAAqBC,GAE7C,YAeA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAdjFtB,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAOs5C,IAC9E,IAAI/nC,GAAuCtR,EAAoB,QAC3DkR,EAA+ClR,EAAoBG,EAAEmR,GACrEC,EAA6CvR,EAAoB,QACjEoR,EAAqDpR,EAAoBG,EAAEoR,GAC3E+nC,EAA4Ct5C,EAAoB,QAChEu5C,EAA4Cv5C,EAAoB,QAChEw5C,EAA+Cx5C,EAAoB,QACnEy5C,EAAuDz5C,EAAoB,QAC3E05C,EAAoD15C,EAAoB,QAC7F8L,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IAEnPF,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MiCxvTnhBg4C,EAAb,WAkBC,QAAAA,GAAYl2C,GAAMhC,EAAAkC,KAAAg2C,GAAAh2C,KAjBlBmG,QAAU4H,EAAA3Q,EAAGwD,oBAiBKZ,KAhBlBkP,MAAQnB,EAAA3Q,EAAGwD,oBAgBOZ,KAdlBs2C,WAAavoC,EAAA3Q,EAAGwD,oBAcEZ,KAblB+Q,SAAW,EAaO/Q,KAXlBu2C,SAAW,KAWOv2C,KARlBoP,WAAa,KAQKpP,KAPlBqP,MAAQ,EAOUrP,KANlBsP,SAAWvB,EAAA3Q,EAAG+C,YAAW,GAMPH,KALlBw2C,KAAO,KAKWx2C,KAJlBy2C,QAAU5oC,EAAAzQ,EAAEqE,YAIMzB,KAHlB02C,YAAc,KAGI12C,KAFlB22C,eAAiB,IAyChB,KAAI,GAtCEvpC,GAAIpN,KAAK0xC,GAALjpC,GAITwH,iBAAkB,KAIToI,kBAAmB,IAI5BnI,SAAS,EACT0mC,aAAc,EAILC,wBAAwB,EAIxBv2C,YAAY,EAIrBE,YAAY,EAIHqB,WAAW,EAIpBi1C,cAAc,GAEXh3C,GAGIZ,EAAI,EAAGA,EAAIkO,EAAEwpC,aAAc13C,IAClCc,KAAKs2C,WAAWp1C,KAAK6M,EAAA3Q,EAAGwD,oBAGtBwM,GAAE6C,kBACEjQ,KAAK+2C,iBAGZ/2C,KAAKg3C,iBAAmBh3C,KAAKg3C,iBAAiBv0C,KAAKzC,MAjErD,MAAAlB,GAAAk3C,IAAAt2C,IAAA,OAAA0D,MAAA,SAyIM6N,GAAS,GAAAlR,GAAAC,IAGb,OAFAA,MAAK8Q,QACL9Q,KAAKu2C,SAAWtlC,EACTjR,KAAKi3C,eAAezvC,KAAK,SAAAvC,GAC/BlF,EAAK22C,YAAczxC,EAASiyC,eACE3zC,KAA3B0B,EAASkyC,gBACCp3C,EAAK42C,eAAiB1xC,EAASkyC,eAE5ClkC,WAAW,WACNlT,EAAKqP,YACRrP,EAAKqP,WAAWjF,YAnJrBzK,IAAA,gBAAA0D,MAAA,SA8Je+C,GAA4C,GAAApB,GAAA/E,KAAnCk3C,EAAmC5zC,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAtB,KAAM2N,EAAgB3N,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IACnDtD,MAAK8Q,QACC9Q,KAAKqP,MAAQ,CAGnB,IAAM+nC,KACNjxC,GAAQoG,QAAQ,SAAAjG,GAAA,MAAU8wC,GAAYl2C,KAAK2M,EAAAzQ,EAAE8jB,QAAO,KAAU5a,KAExD,IAAM+wC,GAAcr3C,KAAKs3C,UAAUF,GAE/BG,GAAU,CACI,QAAfL,IACFl3C,KAAK02C,YAAcQ,EAChBA,EAAaG,EAAYl4C,SAC3Bo4C,GAAU,IAIH,OAAZtmC,IACIjR,KAAKu2C,SAAWtlC,GAGjBgC,WAAW,iBAAMlO,GAAK0xC,QAAQ1yC,SAAbgB,GAA6BsyC,MAE3CE,GAAWv3C,KAAKoP,YACf6D,WAAW,iBAAMlO,GAAKqK,WAAWjF,UAvL7CzK,IAAA,QAAA0D,MAAA,WA+LS,GAAAyC,GAAA7F,IACPA,MAAKmG,UAAUoG,QAAQ,SAAA8M,GAAA,MAAQA,GAAKm+B,SAAS3xC,EAAKmxC,oBAClDh3C,KAAKmG,YACLnG,KAAKs2C,aAAa/pC,QAAQ,SAAAkrC,GAAA,MAAOA,SAC7Bz3C,KAAKoP,YACRpP,KAAKoP,WAAWhF,MAEjBpK,KAAK+Q,SAAW,EAChB/Q,KAAKqP,MAAQ,EACbrP,KAAKu2C,SAAW,KAChBv2C,KAAKsP,UAAS,GACVtP,KAAKw2C,MACRx2C,KAAKw2C,KAAKrsB,WA3MbzqB,IAAA,mBAAA0D,MAAA,WAgNQyK,IAAE9E,QAAQoB,GAAG,SAAU,WACnB6rC,EAAW0B,iBAAgB,KAErC13C,KAAK23C,OAAO3B,EAAW0B,oBAnNzBh4C,IAAA,SAAA0D,MAAA,SAsNQsB,GACN1E,KAAKy2C,QAAQ9xC,IAAID,MAvNnBhF,IAAA,UAAA0D,MAAA,SA0NSsB,GACP1E,KAAKy2C,QAAQ7xC,OAAOF,MA3NtBhF,IAAA,aAAA0D,MAAA,SAiOYiW,GAAM,GAAApT,GAAAjG,IACV6N,GAAAzQ,EAAE0I,KAAKtG,OAAA22C,EAAA,GAAQ,0BACV/0C,GAAIiY,EAAKjY,IACV,SAAA6D,GACI,GAAGA,EAASe,SACR,GAAsB,OAAnBC,EAAKid,UAAoB,CACxB,GAAGjd,EAAKyrC,GAAGxhC,QACP,IAAI,GAAIhR,GAAI,EAAGA,EAAI+G,EAAKqwC,aAAan3C,OAAQD,IACzC+G,EAAKqwC,aAAap3C,GAAG0F,OAAOyU,EAGpCpT,GAAKE,QAAQvB,OAAOyU,QAG3B+8B,GAAA,EAASlwC,MAAM,WAGpB,WAlPZxG,IAAA,kBAAA0D,MAAA,SA0PiBtD,GACf,GAAMuZ,GAAOrZ,KAAK43C,eAAe93C,IAAO,EAUxC,OAR4B,QAAnBE,KAAKkjB,YACDljB,KAAK0xC,GAAGxhC,SACPlQ,KAAKs2C,aAAa,KAAK3nB,QAAQtV,GAEnCrZ,KAAKmG,QAAQwoB,QAAQtV,IAE/BrZ,KAAK02C,cAEEr9B,KArQT3Z,IAAA,iBAAA0D,MAAA,WAwQkB,GAAAoD,GAAAxG,IAChBA,MAAKoP,WAAa,GAAIinC,GAAA,EAAer2C,KAAK0xC,GAAGzhC,kBAC5CmjB,SAAUpzB,KAAK0xC,GAAGr5B,kBACTw/B,WAAY,SAAAtxC,GACHC,EAAK8I,YACN9I,EAAKywC,aAAa1wC,SA7QtC7G,IAAA,eAAA0D,MAAA,WAwR+B,GAAA4D,GAAAhH,KAAjBuG,EAAiBjD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAEvB,OADAtD,MAAKsP,UAAS,GACPtP,KAAKw2C,KAAO3oC,EAAAzQ,EAAEiJ,IACpB7G,OAAA22C,EAAA,GAAQ,oBADU1tC,KAGdzI,KAAKu2C,UACRuB,OAAQ93C,KAAKqP,MACb0oC,yBAA0B/3C,KAAK0xC,GAAGmF,uBAAyB,EAAI,EAC/DmB,cAAeh4C,KAAK0xC,GAAGoF,aAAe,EAAI,IAE3C,KACA,QAECmB,OAAO,WACPjxC,EAAKsI,UAAS,GACdtI,EAAKwvC,KAAO,KACTjwC,GACFA,MAGDiB,KAAK,SAAAvC,GACL,GAAMoyC,GAAcrwC,EAAKswC,UAAUryC,EAASkB,QAC5C8M,YAAW,iBAAMjM,GAAKyvC,QAAQ1yC,SAAbiD,GAA6BqwC,OAC1CpyC,EAASsyC,SAAWvwC,EAAKoI,YACbpI,EAAKoI,WAAWhF,WAhTpC1K,IAAA,gBAAA0D,MAAA,SA0TkB6W,GAAO,GAAAq6B,GAAAt0C,IACpB,OAAOia,GAAMnZ,IAAI,SAAAkhC,GAEV,MADNA,GAAE5hC,OAAFk0C,EACa,GAAI2B,GAAA,EAAWjU,QA7TlCtiC,IAAA,YAAA0D,MAAA,SAqUW6W,GAAO,GAAAi+B,GAAAl4C,KACVq3C,EAAcr3C,KAAK43C,cAAc39B,EAOvC,IANAo9B,EAAY9qC,QAAQ,SAAA4rC,GACnBA,EAAWC,QAAQF,EAAKlB,oBAGzBh3C,KAAKmG,QAAQkyC,QAAQhB,GAEjBr3C,KAAK0xC,GAAGxhC,QAAS,CAEpB,IAAK,GADComC,MACGp3C,EAAI,EAAGA,EAAIc,KAAK0xC,GAAGkF,eAAgB13C,EAC3Co3C,EAAWp1C,QAGZm2C,GAAY9qC,QAAQ,SAAA4rC,GACfD,EAAKnnC,UAAYmnC,EAAKxG,GAAGkF,eAC5BsB,EAAKnnC,SAAW,GAEjBulC,EAAW4B,EAAKnnC,YAAY7P,KAAKi3C,KAGlC7B,EAAW/pC,QAAQ,SAACkrC,EAAKz9B,GACpBy9B,EAAIt4C,QACP+4C,EAAK5B,aAAat8B,GAAOq+B,QAAQZ,KAIpC,MAAOJ,MAhWT33C,IAAA,mBAAA0D,MAAA,SAuWkBiW,GAChB,IAAIrZ,KAAK6B,UACC,GAAGwX,EAAKvZ,OAAOgC,YACXiH,OAAOyH,SAAW6I,EAAKvZ,OAAOiC,QAC3B,CACH,GAAMiY,GAAQha,KAAKmG,UAAU+F,QAAQmN,EACrC68B,GAAA,aAAalxC,KAAKqU,EAAKjY,GAAI4Y,EAAOha,KAAKu2C,cA7WvD72C,IAAA,UAAA2G,IAAA,WAyEE,MAAOrG,MAAK0xC,GAAGxhC,WAzEjBxQ,IAAA,eAAA2G,IAAA,WAiFE,MAAOrG,MAAK0xC,GAAGkF,gBAjFjBl3C,IAAA,YAAA2G,IAAA,WAyFE,MAAOrG,MAAKsP,cAzFd5P,IAAA,aAAA2G,IAAA,WAiGQ,MAAOrG,MAAK02C,eAjGpBh3C,IAAA,gBAAA2G,IAAA,WAyGQ,MAAOrG,MAAK22C,kBAzGpBj3C,IAAA,aAAA2G,IAAA,WAiHQ,MAAOrG,MAAK0xC,GAAGpxC,cAjHvBZ,IAAA,aAAA2G,IAAA,WAyHK,MAAOrG,MAAK0xC,GAAGlxC,cAzHpBd,IAAA,YAAA2G,IAAA,WAiIQ,MAAOrG,MAAK0xC,GAAG7vC,eAjIvBnC,IAAA,kBAAA0D,MAAA,WAuX0C,GAAfk1C,GAAeh1C,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,IAAAA,UAAA,GAC9Bi1C,EAAS1qC,IAAE,gCACVyqC,KACDC,EAASA,EAAOC,IAAI,UAExB,IAAMvxB,GAAQsxB,EAAO9tB,YAElBxD,GAAQ,IACPsxB,EAAOx+B,KAAK,OAAQ,SACdkN,GAAS,KAAOA,GAAS,IAC/BsxB,EAAOx+B,KAAK,OAAQ,UACdkN,EAAQ,KACdsxB,EAAOx+B,KAAK,OAAQ,aAnYhCi8B,MjCkuUMyC,KACA,SAAUh8C,EAAQmB,GkC3uUxBnB,EAAAmB,QAAA,gmBlCivUM86C,KACA,SAAUj8C,EAAQC,EAAqBC,GAE7C,YmCzuUO,SAASg8C,GAAgB7uC,GAAyC,GAAnChK,GAAmCwD,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAA5B,KAAMs1C,EAAsBt1C,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,GAAAA,UAAA,GAAN,IAClExD,QAAWA,EACX,KAAI,GAAIJ,KAAOI,GAAuB,OAAdA,EAAKJ,UAAsBI,GAAKJ,EAExD,IAAM0U,GAAQvG,EAAAzQ,EAAEmzB,MAAF9nB,KAAY3I,IACpBiC,EAAMvC,OAAAq5C,EAAA,GAAQ,UAAY/uC,GAAQsK,EAAQ,IAAMA,EAAQ,IAC9D,OAAO5U,QAAAs5C,EAAA,oBAAmB/2C,EAAnB0G,GAAyBqB,QAAS8uC,GAAe1J,UAAU,KnCouUlCxyC,EAAuB,EAAIi8C,CACvC,IAAI1qC,GAAuCtR,EAAoB,QAC3DkR,EAA+ClR,EAAoBG,EAAEmR,GACrE4qC,EAAqCl8C,EAAoB,QACzDm8C,EAAgDn8C,EAAoB,QACzF8L,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,KA2BjP+5C,KACA,SAAUt8C,EAAQmB,GoCtxUxB,GAAAo7C,KAMA,iBAAAA,KACAA,MAEA,WAEA,GAAAC,MACAC,EAAA,KACAC,EAAA,IAEAH,GAAAnU,SAYAC,QAAA,SAAAsU,GAEA,IAAAA,EACA,MAAAD,OAAAn5C,KAAA8kC,QAAAoU,GAIAE,GAAA,IAAAA,EAAAC,cAAA,GAGA,QAAAC,KAAAL,GACA,GAAAA,EAAArwC,eAAA0wC,GAAA,CAEA,GAAAC,IAAA,IAAAD,EAAAptC,QAAAktC,EACA,IAAAG,EACA,MAAAN,GAAAK,GAKA,GAAAE,GAAAJ,EAAAltC,QAAA,IACA,SAAAstC,EAAA,CACA,GAAAC,GAAAL,EAAAzuB,UAAA,EAAA6uB,EACA,OAAAx5C,MAAA8kC,QAAA2U,GAGA,aAQAC,eAAA,SAAAN,GACAF,EAAAE,EAAAC,cACAF,EAAA,MASAQ,WAAA,SAAAL,EAAA3U,GAEA2U,EAAA,IAAAA,EAAAD,cAAA,GAEA,IAAAO,EAoBA,OAjBAA,GAFA,gBAAAjV,GAEA3kC,KAAA8kC,QAAAH,GAEA,SAAAvhC,EAAAy2C,GACA,sBAAAA,GACAlV,EAAAvhC,EAAAy2C,GACM,gBAAAA,GAAA16C,OACN06C,EAAAlV,EAAAvhC,EAAAy2C,EAAA16C,aADM,IAMN85C,EAAAK,GAAAM,EAEAV,GACAl5C,KAAA05C,eAAAJ,EAAAn1B,MAAA,SAGAy1B,OAwBAZ,EAAAnU,QAAA8U,WAAA,sEACA,SAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA,IAAA12C,CACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAC,GAAA,IAAA32C,CACA,YAAAy2C,EAAAE,EAAA,EAAAD,EAAA,IAEA12C,EAAA,EACA,EAAA22C,EAAA,EAAAD,EAAA,MAQAd,EAAAnU,QAAA8U,WAAA,uBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA,IAAA12C,CACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAE,GAAA52C,GAAA,GAAAA,GAAA,CACA,OAAA02C,GAAA,EAAAE,EAAA,MAOAhB,EAAAnU,QAAA8U,WAAA,2BAAAv2C,EAAAy2C,GAGA,MADA,KAAAz2C,GAAA,IAAAA,EACA,MAOA41C,EAAAnU,QAAA8U,WAAA,oBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA,IAAA12C,CACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAG,GAAA,IAAA72C,CACA,OAAA02C,GAAA,EAAAG,EAAA,MAOAjB,EAAAnU,QAAA8U,WAAA,sBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA12C,EAAA,OAAAA,EAAA,OACA,YAAAy2C,EAAAC,EAAA,IAEA,IAAA12C,EACA,EAAA02C,EAAA,MAOAd,EAAAnU,QAAA8U,WAAA,yBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA12C,EAAA,OAAAA,EAAA,OACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAE,GAAA52C,EAAA,SAAAA,EAAA,OACA,OAAA02C,GAAA,EAAAE,EAAA,MAOAhB,EAAAnU,QAAA8U,WAAA,qBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA,IAAA12C,CACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAE,GAAA52C,EAAA,OAAAA,EAAA,QAAAA,EAAA,QAAAA,EAAA,QACA,OAAA02C,GAAA,EAAAE,EAAA,MAOAhB,EAAAnU,QAAA8U,WAAA,uBAAAv2C,EAAAy2C,GAGA,GAAAC,GAAA,IAAA12C,CACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAE,GAAA,IAAA52C,KAAA,QAAAA,EAAA,OACA,OAAA02C,GAAA,EAAAE,EAAA,MAOAhB,EAAAnU,QAAA8U,WAAA,+BAAAv2C,EAAAy2C,GAIA,GAAAC,GAAA12C,EAAA,OAAAA,EAAA,OACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAE,GAAA52C,EAAA,OAAAA,EAAA,QAAAA,EAAA,QAAAA,EAAA,QACA,OAAA02C,GAAA,EAAAE,EAAA,MAOAhB,EAAAnU,QAAA8U,WAAA,wBAAAv2C,EAAAy2C,GAIA,GAAAC,GAAA12C,EAAA,MACA,QAAAy2C,EAAA,MAAAC,GAAA,GAEA,IAAAG,GAAA72C,EAAA,MACA,QAAAy2C,EAAA,MAAAC,GAAA,EAAAG,EAAA,GAEA,IAAAD,GAAA52C,EAAA,QAAAA,EAAA,MACA,OAAA02C,GAAA,EAAAG,EAAA,EAAAD,EAAA,MAIAv9C,EAAAmB,QAAAo7C,GpC6xUMkB,KACA,SAAUz9C,EAAQmB,KAMlBu8C,KACA,SAAU19C,EAAQC,EAAqBC,GAE7C,YACA6C,QAAOC,eAAe/C,EAAqB,cAAgB0G,OAAO,GAC7C,IAAIg3C,GAAoDz9C,EAAoB,QAExE09C,GAD4D19C,EAAoBG,EAAEs9C,GACLz9C,EAAoB,QACZA,GAAoBG,EAAEu9C,EqChjVpIxhC,GAAEyB,SAASE,SAASwE,KAAKs7B,IACxBp7B,MAAO,UACPC,KAAM,YACNC,KAAM,aACNC,MAAO,sEACPC,WAAY,kBACZC,UAAW,sBACXC,YAAa,gBACbC,OAAQ,gBAGT5G,EAAEyB,SAASE,SAASuE,KAAOgmB,MrCwjVrBwV,KACA,SAAU99C,EAAQC,EAAqBC,GAE7C,YAQA,SAASmB,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCsCvzUhH,QAAS6U,GAAO1P,GACf,MAAOyK,GAAAzQ,EAAEqsB,WAAWrmB,GAASA,IAAUA,EtC+yUTzG,EAAoBuB,EAAExB,EAAqB,IAAK,WAAa,MAAO89C,IAC9E,IAAIvsC,GAAuCtR,EAAoB,QAC3DkR,EAA+ClR,EAAoBG,EAAEmR,GAC1FxF,EAAWjJ,OAAOkJ,QAAU,SAAU1J,GAAU,IAAK,GAAIE,GAAI,EAAGA,EAAIoE,UAAUnE,OAAQD,IAAK,CAAE,GAAIyJ,GAASrF,UAAUpE,EAAI,KAAK,GAAIQ,KAAOiJ,GAAcnJ,OAAOK,UAAU+I,eAAeC,KAAKF,EAAQjJ,KAAQV,EAAOU,GAAOiJ,EAAOjJ,IAAY,MAAOV,IAEnPF,EAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAIC,GAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CAAE,GAAIE,GAAaH,EAAMC,EAAIE,GAAWC,WAAaD,EAAWC,aAAc,EAAOD,EAAWE,cAAe,EAAU,SAAWF,KAAYA,EAAWG,UAAW,GAAMC,OAAOC,eAAeT,EAAQI,EAAWM,IAAKN,IAAiB,MAAO,UAAUpB,EAAa2B,EAAYC,GAAiJ,MAA9HD,IAAYZ,EAAiBf,EAAY6B,UAAWF,GAAiBC,GAAab,EAAiBf,EAAa4B,GAAqB5B,MsCvkVnhBw8C,EAAb,WAQC,QAAAA,GAAY9nC,EAASvJ,GAASrL,EAAAkC,KAAAw6C,GAAAx6C,KAF9By6C,YAAc5sC,EAAAzQ,EAAEqE,YAGfzB,KAAKg0C,KAAOnmC,IAAE6E,GACd1S,KAAK06C,SAAW7sC,IAAE9E,QAClB/I,KAAK0xC,GAALjpC,GAKC2qB,SAAU,IAIVykB,WAAY,MAET1uC,GAEDnJ,KAAK0xC,GAAGmG,YACV73C,KAAKy6C,YAAY91C,IAAI3E,KAAK0xC,GAAGmG,YAzBhC,MAAA/4C,GAAA07C,IAAA96C,IAAA,KAAA0D,MAAA,WAiCMpD,KAAK26C,gBAGT36C,KAAK26C,cAAgB36C,KAAK+S,OAAOtQ,KAAKzC,MACtCA,KAAK06C,SAASvwC,GAAG,gBAAiBnK,KAAK26C,eACvC36C,KAAK+S,aAtCPrT,IAAA,MAAA0D,MAAA,WA6COpD,KAAK26C,gBAGV36C,KAAK06C,SAAStwC,IAAI,gBAAiBpK,KAAK26C,eACxC36C,KAAK26C,cAAgB,SAjDvBj7C,IAAA,SAAA0D,MAAA,WAwDE,GAD2BE,UAAAnE,OAAA,OAAAoE,KAAAD,UAAA,KAAAA,UAAA,IACPtD,KAAKg0C,KAAKnwC,GAAG,YAAjC,CAGA,GAAM+2C,GAAW56C,KAAKg0C,KAAKrmB,SAAS3kB,IAAMhJ,KAAKg0C,KAAK96B,cAC9C2hC,EAAe76C,KAAK06C,SAAS3hC,SAC7B+hC,EAAkB96C,KAAK06C,SAASr4B,YAClC04B,EAAeH,EAAWE,EAAkBD,EAAe76C,KAAK0xC,GAAGte,QAEpE2nB,IAAgB/6C,KAAKg7C,YACvBh7C,KAAKg7C,UAAYD,EAEdA,GACF/6C,KAAKy6C,YAAY12C,SAAS/D,KAAKg0C,KAAK,IAAKh0C,KAAKi7C,oBAAoBx4C,KAAKzC,aApE3EN,IAAA,sBAAA0D,MAAA,WA6EKpD,KAAKg7C,WAAY,KA7EtBt7C,IAAA,aAAA0D,MAAA,SAoFYmD,GACVvG,KAAKy6C,YAAY91C,IAAI4B,MArFvB7G,IAAA,cAAA0D,MAAA,SA4FamD,GACXvG,KAAKy6C,YAAY71C,OAAO2B,OA7F1Bi0C,IAiGA3sC,GAAAzQ,EAAE+U,GAAG+oC,gBAAkB,SAAU/xC,GA0FhC,QAASokB,KACH4tB,GACJC,EAAQjxC,GAAG,SAAUkxC,GAIvB,QAASv0B,KACRs0B,EAAQhxC,IAAI,SAAUixC,GAGvB,QAASA,KACR,IAA2B,IAAtBvoC,EAAO1F,EAAE2tB,WAAuBugB,GAAexyC,EAAEyyC,SAAYhtC,EAAS1K,GAAG,YAA9E,CAIA,GAAI+2C,GAAWrsC,EAASof,SAAS3kB,IAAMuF,EAASwK,SAC5C8hC,EAAeO,EAAQriC,SACvB+hC,EAAkBM,EAAQ/4B,YAC1B04B,EAAeH,EAAWE,EAAkBD,EAAe,IAC3DW,GAAgBpuC,EAAEquC,eAAiBb,EAAWE,EAAkB,EACxDC,IAAgBS,GAGlBE,KAIX,QAASA,KACF50B,IACA60B,EAAS,WACUC,IAAoBxuC,EAAE8pC,YAE5B9pC,EAAEyuC,kBAAoB/oC,EAAOgpC,GAAe1uC,EAAEyuC,kBAC/C/yC,EAAEowB,QACF3L,KAEAwuB,EAAa/2C,QAGpBm2C,GAAW,EACPttC,EAAAzQ,EAAEqsB,WAAWrc,EAAE+tC,WACf/tC,EAAE+tC,cAMlB,QAASQ,GAASp1C,GACb+0C,IAGJA,GAAa,EACbU,EAASh3C,OAEToI,EAAE6uC,MAAMnpC,EAAOgpC,GAAe,EAAG,SAAUI,GAC1C,GAAGC,EAKU,MAJAA,IAAc,EACdb,GAAa,MAEbI,IAGb,IAAInX,GAAQ,CACR12B,GAAAzQ,EAAEqsB,WAAWrc,EAAEpI,MAClBu/B,EAAQn3B,EAAEpI,KAAKk3C,IAEfA,EAAQ13C,SAAS,UACjB+J,EAAS9J,OAAOy3C,GAChB3X,EAAQ2X,EAAQ/8C,QAGJ0O,EAAAzQ,EAAEqsB,WAAWqyB,IACbA,IAEbR,GAAa,EACbU,EAASn3B,QAEM,IAAV0f,GAAoC,OAAnBn3B,EAAEgvC,cAAyB7X,EAAQn3B,EAAEgvC,gBAE1DhvC,EAAE8pC,WAAa0E,KAGhBr1C,OA3KF,GAAI6G,GAAIS,EAAAzQ,EAAE8jB,QACT+6B,MAAO,KACPnrC,MAAO,KACP9L,KAAM,KACN+1B,QAAS,KACTogB,SAAU,KACJS,gBAAiB,KACjBQ,aAAc,KACdlF,WAAYlrC,OAAOqwC,UACzBjiC,SAAU,IACVkiC,YAAa,KACbrd,QAAS,KACT4c,iBAAkB,KAClBJ,eAAe,EACfv+B,WAAW,GACT/T,GAECoF,EAAWV,IAAE7N,MACbo7C,EAAUvtC,IAAE9E,QACZgzC,EAAeluC,IAAET,EAAEkvC,aACnBN,EAAWnuC,IAAET,EAAE6xB,SACf2c,EAAkB/tC,EAAAzQ,EAAEqsB,WAAWrc,EAAEwuC,iBAClCxuC,EAAEwuC,gBAAkB,iBAAMrtC,GAAS8Y,SAASja,EAAEgN,UAAUjb,QACpD28C,EAAkC,OAAnB1uC,EAAEgvC,aAAyB,EAAI,WAAQ,MAAOR,KAAoBxuC,EAAEgvC,cACtFd,GAAa,EACba,GAAc,EACdhB,GAAW,EACXryC,EAAI,GAAIyzC,GAAU,GAyBtB,OAvBAR,GAAahf,MAAM,WAClBgf,EAAal3B,OACb82B,EAAS,SAAUpE,GACdA,GACHwE,EAAa/2C,WAKhBoI,EAAE8pC,YAAc9pC,EAAE8pC,WAClB9pC,EAAEyuC,kBAAoBzuC,EAAEyuC,iBAEpBzuC,EAAE8P,YACD0+B,IAAoBxuC,EAAE8pC,WACzB3pB,KAEA4tB,GAAW,EACPttC,EAAAzQ,EAAEqsB,WAAWrc,EAAE+tC,WAClB/tC,EAAE+tC,cAMJhxC,GAAI,WACHgxC,GAAW,EACPS,IAAoBxuC,EAAE8pC,WACzB3pB,KAEA4tB,GAAW,EACPttC,EAAAzQ,EAAEqsB,WAAWrc,EAAE+tC,WAClB/tC,EAAE+tC,aAIL/wC,IAAK,WACJ0c,IACAq0B,GAAW,GAEZ1qC,OAAQ,WACE0qC,GAAW,EACPttC,EAAAzQ,EAAEqsB,WAAWqyB,KACbA,EAAc,GAElB1uC,EAAE8pC,WAAalrC,OAAOqwC,UAEnBxuC,EAAAzQ,EAAEqsB,WAAWrc,EAAE0D,OACjB1D,EAAE0D,QAECvC,EAAS8Y,SAASja,EAAEgN,UAAUxV,SAGxC02C,EACOa,GAAc,EAEvBT,MtC0sVJ,IsC1mVMa,GtC0mVU,WsCzmVf,QAAAA,GAAYC,GAAQ1+C,EAAAkC,KAAAu8C,GACnBv8C,KAAKw8C,QAAUA,EACfx8C,KAAKutB,OAAS,GAAI5B,MtC+nVnB,MAhBA7sB,GAAay9C,IACZ78C,IAAK,QACL0D,MAAO,WsC7mVP,GAAIm4C,IAAU,GAAI5vB,MAAU3rB,KAAKutB,OAASvtB,KAAKw8C,MAI/C,OAHIjB,IACHv7C,KAAKk5B,QAECqiB,KtCinVP77C,IAAK,QACL0D,MAAO,WsC9mVPpD,KAAKutB,OAAS,GAAI5B,UtCmnVZ4wB,MAKFE,KACA,SAAUhgD,EAAQmB,EAASjB,GuCt6VjC,GAAA+/C,GAAAC,EAAAC,GAKA,SAAAld,EAAAE,GAEA+c,GAAAlgD,EAAAmB,GAAA8+C,EAAA,MAAAn5C,MAAAq5C,EAAA,kBAAAF,KAAA5oC,MAAAlW,EAAA++C,GAAAD,KAAAjgD,EAAAmB,QAAAg/C,IAUC58C,EAAA,SAAAvD,EAAAmB,GACD,YA2CA,SAAA8K,GAAAm0C,GA6BA,QAAAC,GAAA15C,GAKA,GAAA6jB,GAAA41B,EAAAh8B,MAAAoG,KACA41B,GAAAh8B,MAAAoG,MAAA,MAGA41B,EAAA/5B,YAEA+5B,EAAAh8B,MAAAoG,QAGA41B,EAAAh8B,MAAAmT,UAAA5wB,EAGA,QAAA25C,GAAA1qC,GAGA,IAFA,GAAAxH,MAEAwH,KAAA2qC,YAAA3qC,EAAA2qC,qBAAAC,UACA5qC,EAAA2qC,WAAA36B,WACAxX,EAAA3J,MACAizC,KAAA9hC,EAAA2qC,WACA36B,UAAAhQ,EAAA2qC,WAAA36B,YAGAhQ,IAAA2qC,UAGA,OAAAnyC,GAGA,QAAAqyC,KACA,OAAAL,EAAAj6B,aAAA,CAKA,GAAAu6B,GAAAJ,EAAAF,GACAO,EAAA/mC,SAAAkW,iBAAAlW,SAAAkW,gBAAAlK,SAEAw6B,GAAAh8B,MAAA9H,OAAA,GACA8jC,EAAAh8B,MAAA9H,OAAA8jC,EAAAj6B,aAAAy6B,EAAA,KAGAt6B,EAAA85B,EAAA95B,YAGAo6B,EAAA5wC,QAAA,SAAA8F,GACAA,EAAA8hC,KAAA9xB,UAAAhQ,EAAAgQ,YAGA+6B,IACA/mC,SAAAkW,gBAAAlK,UAAA+6B,IAIA,QAAArqC,KACAmqC,GAEA,IAAAI,GAAAv2B,KAAAC,MAAAuH,WAAAsuB,EAAAh8B,MAAA9H,SACAhS,EAAAgC,OAAA0mB,iBAAAotB,EAAA,MAGAU,EAAA,gBAAAx2C,EAAAy2C,UAAAz2B,KAAAC,MAAAuH,WAAAxnB,EAAAgS,SAAA8jC,EAAA97B,YAmBA,IAfAw8B,IAAAD,EACA,WAAAv2C,EAAAitB,YACA8oB,EAAA,UACAI,IACAK,EAAA,gBAAAx2C,EAAAy2C,UAAAz2B,KAAAC,MAAAuH,WAAAxlB,OAAA0mB,iBAAAotB,EAAA,MAAA9jC,SAAA8jC,EAAA97B,cAIA,WAAAha,EAAAitB,YACA8oB,EAAA,UACAI,IACAK,EAAA,gBAAAx2C,EAAAy2C,UAAAz2B,KAAAC,MAAAuH,WAAAxlB,OAAA0mB,iBAAAotB,EAAA,MAAA9jC,SAAA8jC,EAAA97B,cAIA08B,IAAAF,EAAA,CACAE,EAAAF,CACA,IAAAG,GAAAC,EAAA,mBACA,KACAd,EAAAe,cAAAF,GACK,MAAAnyC,MArHL,GAAAsxC,KAAA/oB,UAAA,aAAA+oB,EAAA/oB,WAAAhzB,EAAAikB,IAAA83B,GAAA,CAEA,GAAAQ,GAAA,KACAt6B,EAAA,KACA06B,EAAA,KAwHAI,EAAA,WACAhB,EAAA95B,iBACAhQ,KAIAsc,EAAA,SAAAxO,GACA9X,OAAA0vB,oBAAA,SAAAolB,GAAA,GACAhB,EAAApkB,oBAAA,QAAA1lB,GAAA,GACA8pC,EAAApkB,oBAAA,QAAA1lB,GAAA,GACA8pC,EAAApkB,oBAAA,mBAAApJ,GAAA,GACAwtB,EAAApkB,oBAAA,kBAAA1lB,GAAA,GAEAvT,OAAAwoC,KAAAnnB,GAAAtU,QAAA,SAAA7M,GACAm9C,EAAAh8B,MAAAnhB,GAAAmhB,EAAAnhB,KAGAoB,EAAAg9C,OAAAjB,IACGp6C,KAAAo6C,GACH9jC,OAAA8jC,EAAAh8B,MAAA9H,OACAmkC,OAAAL,EAAAh8B,MAAAq8B,OACAlpB,UAAA6oB,EAAAh8B,MAAAmT,UACAC,UAAA4oB,EAAAh8B,MAAAoT,UACA8pB,SAAAlB,EAAAh8B,MAAAk9B,UAGAlB,GAAAlnB,iBAAA,mBAAAtG,GAAA,GAKA,oBAAAwtB,IAAA,WAAAA,IACAA,EAAAlnB,iBAAA,QAAA5iB,GAAA,GAGAhK,OAAA4sB,iBAAA,SAAAkoB,GAAA,GACAhB,EAAAlnB,iBAAA,QAAA5iB,GAAA,GACA8pC,EAAAlnB,iBAAA,kBAAA5iB,GAAA,GACA8pC,EAAAh8B,MAAAoT,UAAA,SACA4oB,EAAAh8B,MAAAk9B,SAAA,aAEAj9C,EAAAyW,IAAAslC,GACAxtB,UACAtc,WAjKA,WACA,GAAA8N,GAAA9X,OAAA0mB,iBAAAotB,EAAA,KAEA,cAAAh8B,EAAAq8B,OACAL,EAAAh8B,MAAAq8B,OAAA,OACI,SAAAr8B,EAAAq8B,SACJL,EAAAh8B,MAAAq8B,OAAA,cAIAG,EADA,gBAAAx8B,EAAA28B,YACAjvB,WAAA1N,EAAAm9B,YAAAzvB,WAAA1N,EAAAo9B,gBAEA1vB,WAAA1N,EAAAq9B,gBAAA3vB,WAAA1N,EAAAs9B,mBAGApX,MAAAsW,KACAA,EAAA,GAGAtqC,QAoJA,QAAAsc,GAAAwtB,GACA,GAAAuB,GAAAt9C,EAAAuF,IAAAw2C,EACAuB,IACAA,EAAA/uB,UAIA,QAAAtc,GAAA8pC,GACA,GAAAuB,GAAAt9C,EAAAuF,IAAAw2C,EACAuB,IACAA,EAAArrC,SAjOA,GAAAjS,GAAA,kBAAAu9C,KAAA,GAAAA,KAAA,WACA,GAAArW,MACA9zB,IAEA,QACA6Q,IAAA,SAAArlB,GACA,MAAAsoC,GAAA97B,QAAAxM,IAAA,GAEA2G,IAAA,SAAA3G,GACA,MAAAwU,GAAA8zB,EAAA97B,QAAAxM,KAEA6X,IAAA,SAAA7X,EAAA0D,IACA,IAAA4kC,EAAA97B,QAAAxM,KACAsoC,EAAA9mC,KAAAxB,GACAwU,EAAAhT,KAAAkC,KAGA06C,OAAA,SAAAp+C,GACA,GAAAsa,GAAAguB,EAAA97B,QAAAxM,EACAsa,IAAA,IACAguB,EAAAjH,OAAA/mB,EAAA,GACA9F,EAAA6sB,OAAA/mB,EAAA,SAMA2jC,EAAA,SAAA7zC,GACA,UAAAw0C,OAAAx0C,GAA0By0C,SAAA,IAE1B,KACA,GAAAD,OAAA,QACE,MAAA76C,GAEFk6C,EAAA,SAAA7zC,GACA,GAAA4zC,GAAArnC,SAAAsnC,YAAA,QAEA,OADAD,GAAAc,UAAA10C,GAAA,MACA4zC,GAgMA,GAAAxrC,GAAA,IAGA,oBAAAnJ,SAAA,kBAAAA,QAAA0mB,kBACAvd,EAAA,SAAAG,GACA,MAAAA,IAEAH,EAAAmd,QAAA,SAAAhd,GACA,MAAAA,IAEAH,EAAAa,OAAA,SAAAV,GACA,MAAAA,MAGAH,EAAA,SAAAG,EAAAlJ,GAMA,MALAkJ,IACA7G,MAAA3L,UAAA0M,QAAA1D,KAAAwJ,EAAAlT,OAAAkT,MAAA,SAAAsV,GACA,MAAAjf,GAAAif,KAGAtV,GAEAH,EAAAmd,QAAA,SAAAhd,GAIA,MAHAA,IACA7G,MAAA3L,UAAA0M,QAAA1D,KAAAwJ,EAAAlT,OAAAkT,MAAAgd,GAEAhd,GAEAH,EAAAa,OAAA,SAAAV,GAIA,MAHAA,IACA7G,MAAA3L,UAAA0M,QAAA1D,KAAAwJ,EAAAlT,OAAAkT,MAAAU,GAEAV,IAIAzU,EAAA6gD,QAAAvsC,EACAzV,EAAAmB,UAAA,avCg7VG","file":"users.min.js","sourcesContent":["var zde = zde || {}; zde[\"modules\"] = zde[\"modules\"] || {}; zde[\"modules\"][\"users\"] =\nwebpackJsonpzde_modules__name_([13],{\n\n/***/ \"+KrN\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__model_reviewitem__ = __webpack_require__(\"/ryK\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__model_reviewcomment__ = __webpack_require__(\"R7O4\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__model_reviewlist__ = __webpack_require__(\"otQ7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__model_reviewitemmobile__ = __webpack_require__(\"FZjg\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__model_reviewlistmobile__ = __webpack_require__(\"cK6l\");\n\n\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.components.register('review-list', {\n\tviewModel: {\n\t\tcreateViewModel: function createViewModel(params) {\n\t\t\treturn params instanceof __WEBPACK_IMPORTED_MODULE_3__model_reviewlist__[\"a\" /* ReviewList */] ? params : new __WEBPACK_IMPORTED_MODULE_3__model_reviewlist__[\"a\" /* ReviewList */](params);\n\t\t}\n\t},\n\ttemplate: __webpack_require__(\"Vmcm\")\n});\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.components.register('review-item', {\n\tviewModel: {\n\t\tcreateViewModel: function createViewModel(params) {\n\t\t\treturn params instanceof __WEBPACK_IMPORTED_MODULE_1__model_reviewitem__[\"a\" /* ReviewItem */] ? params : new __WEBPACK_IMPORTED_MODULE_1__model_reviewitem__[\"a\" /* ReviewItem */](params);\n\t\t}\n\t},\n\ttemplate: __webpack_require__(\"QQLA\")\n});\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.components.register('review-comment', {\n\tviewModel: {\n\t\tcreateViewModel: function createViewModel(params) {\n\t\t\treturn params instanceof __WEBPACK_IMPORTED_MODULE_2__model_reviewcomment__[\"a\" /* ReviewComment */] ? params : new __WEBPACK_IMPORTED_MODULE_2__model_reviewcomment__[\"a\" /* ReviewComment */](params);\n\t\t}\n\t},\n\ttemplate: __webpack_require__(\"FA3v\")\n});\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.components.register('review-list-mobile', {\n\tviewModel: {\n\t\tcreateViewModel: function createViewModel(params) {\n\t\t\treturn params instanceof __WEBPACK_IMPORTED_MODULE_5__model_reviewlistmobile__[\"a\" /* ReviewListMobile */] ? params : new __WEBPACK_IMPORTED_MODULE_5__model_reviewlistmobile__[\"a\" /* ReviewListMobile */](params);\n\t\t}\n\t},\n\ttemplate: __webpack_require__(\"qQ5b\")\n});\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.components.register('review-item-mobile', {\n\tviewModel: {\n\t\tcreateViewModel: function createViewModel(params) {\n\t\t\treturn params instanceof __WEBPACK_IMPORTED_MODULE_4__model_reviewitemmobile__[\"a\" /* ReviewItemMobile */] ? params : new __WEBPACK_IMPORTED_MODULE_4__model_reviewitemmobile__[\"a\" /* ReviewItemMobile */](params);\n\t\t}\n\t},\n\ttemplate: __webpack_require__(\"/+4D\")\n});\n\n/***/ }),\n\n/***/ \"/+4D\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
0\\\">\\r\\n \\r\\n Ещё \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n Нет ответов\\r\\n \\r\\n \\r\\n Нет комментариев\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Подробнее\\r\\n
\\r\\n
\"\n\n/***/ }),\n\n/***/ \"/ryK\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ReviewItem; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_autosize__ = __webpack_require__(\"E27B\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reviewlist__ = __webpack_require__(\"otQ7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__likers__ = __webpack_require__(\"HNTF\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reviewcomment__ = __webpack_require__(\"R7O4\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_core_auth__ = __webpack_require__(\"UpRQ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__ = __webpack_require__(\"2uje\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__core_utils_lang__ = __webpack_require__(\"RaK1\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__core_modals__ = __webpack_require__(\"YdFU\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReviewItem = function () {\n\tfunction ReviewItem(data) {\n\t\tvar _this = this;\n\n\t\t_classCallCheck(this, ReviewItem);\n\n\t\tthis._parent = null;\n\n\t\tthis.data = ko.observable(data);\n\t\tthis._parent = data.parent;\n\t\tthis._showImage = this._parent.showImages;\n\t\tthis._showVideo = this._parent.showVideos;\n\t\tthis._author = new __WEBPACK_IMPORTED_MODULE_6_core_auth__[\"UserInfo\"](data.author);\n\t\tthis._comments = ko.observableArray(data.comments ? __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.map(data.comments, function (d) {\n\t\t\td.parent = _this;return new __WEBPACK_IMPORTED_MODULE_5__reviewcomment__[\"a\" /* ReviewComment */](d);\n\t\t}) : []);\n\t\tthis._newComment = new NewComment(this, function (comment) {\n\t\t\t_this._comments.push(comment);\n\t\t});\n\t\tthis._likers = new __WEBPACK_IMPORTED_MODULE_4__likers__[\"a\" /* Likers */](this.id, data.likes, data.my_like, data.is_sale ? __WEBPACK_IMPORTED_MODULE_4__likers__[\"d\" /* TYPE_SALE_LIKE */] : __WEBPACK_IMPORTED_MODULE_4__likers__[\"c\" /* TYPE_REVIEW_LIKE */]);\n\t\tthis._onClick = __WEBPACK_IMPORTED_MODULE_1_jquery___default.a.Callbacks();\n\n\t\tthis.collapsed = ko.observable(this._showImage);\n\t\tthis.titleUrl = ko.pureComputed(function () {\n\t\t\treturn _this._parent.isDetails ? null : _this.data().is_question ? _this.data().url : _this.data().package_info.order_id;\n\t\t});\n\t\tthis.displayHtml = ko.pureComputed(function () {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"d\" /* highlightUrls */])(_this.data().text);\n\t\t});\n\t\tthis.isBodyLess = ko.pureComputed(function () {\n\t\t\treturn !_this.data().text;\n\t\t});\n\t\tthis.isClosed = ko.observable(data.closed);\n\t\tthis.isAuthorHidden = !this._showImage && data.author.id === 1084; // Hide author if it is Alena\n\n\t\tthis.handleClick = this.handleClick.bind(this);\n\t\tthis.afterRender = this.afterRender.bind(this);\n\n\t\tif (zde.currentUser !== null && zde.currentUser.roleId == 2) {\n\t\t\tthis._forWhom = ko.observable(data.for_whom);\n\t\t\tthis.forWhomTitle = ko.pureComputed(function () {\n\t\t\t\tvar result = void 0;\n\t\t\t\tswitch (parseInt(_this._forWhom())) {\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tresult = 'Виден всем';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\tresult = 'Украина';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\tresult = 'Россия';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\tresult = 'Только участники';\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tresult = 'Виден всем';\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\n\t\t\tthis.isClosed.subscribe(function () {\n\t\t\t\treturn _this.changeClosed();\n\t\t\t});\n\t\t}\n\t}\n\t/** @var {ReviewList} */\n\n\n\t_createClass(ReviewItem, [{\n\t\tkey: 'getVideoUrl',\n\n\n\t\t/** @return string|null */\n\t\tvalue: function getVideoUrl() {\n\t\t\tvar autoplay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\tvar url = this.data().video_url;\n\t\t\tif (url && autoplay) {\n\t\t\t\turl += '?autoplay=1';\n\t\t\t}\n\t\t\treturn url;\n\t\t}\n\t}, {\n\t\tkey: 'handleClick',\n\t\tvalue: function handleClick(data, e) {\n\t\t\tvar $target = __WEBPACK_IMPORTED_MODULE_1_jquery___default()(e.target);\n\t\t\tvar $currentTarget = __WEBPACK_IMPORTED_MODULE_1_jquery___default()(e.currentTarget);\n\n\t\t\tif (this.data().is_sale) {\n\t\t\t\t// Allow default browser action\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (($target.is('a') || $currentTarget.hasClass('direct-link')) && !$target.hasClass('review-text-wrapper')) {\n\t\t\t\t// Allow default browser action\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis._onClick.fireWith(this, [this]);\n\t\t\treturn false;\n\t\t}\n\t}, {\n\t\tkey: 'afterRender',\n\t\tvalue: function afterRender(anchor) {\n\t\t\tif (!this.showImage) {\n\t\t\t\tvar $element = __WEBPACK_IMPORTED_MODULE_1_jquery___default()(anchor).parents('.review-item');\n\t\t\t\tvar $userInfo = $element.find('.review-header .user-info');\n\t\t\t\tvar $likeButton = $element.find('.review-main .review-like');\n\n\t\t\t\tvar $inlineContainer = __WEBPACK_IMPORTED_MODULE_1_jquery___default()('
');\n\n\t\t\t\t$userInfo.addClass('user-info-inline');\n\t\t\t\t$likeButton.addClass('review-like-inline');\n\t\t\t\t$inlineContainer.append($userInfo).append($likeButton);\n\t\t\t\tif (this.isBodyLess()) {\n\t\t\t\t\t$element.find('.question-info-block .question-title').append($inlineContainer);\n\t\t\t\t} else {\n\t\t\t\t\t$element.find('.review-text').append($inlineContainer);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'onClick',\n\t\tvalue: function onClick(handler) {\n\t\t\tthis._onClick.add(handler);\n\t\t}\n\t}, {\n\t\tkey: 'offClick',\n\t\tvalue: function offClick(handler) {\n\t\t\tthis._onClick.remove(handler);\n\t\t}\n\t}, {\n\t\tkey: 'expand',\n\t\tvalue: function expand() {\n\t\t\tthis.collapsed(false);\n\t\t}\n\t}, {\n\t\tkey: 'remove',\n\t\tvalue: function remove() {\n\t\t\tif (confirm('Вы действительно хотите удалить отзыв?')) {\n\t\t\t\tthis._parent.deleteItem(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'edit',\n\t\tvalue: function edit() {\n\t\t\tvar _this2 = this;\n\n\t\t\tif (this.data().is_question) {\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_10__core_modals__[\"MODAL_QUESTION_EDIT\"].show(this.id, function (response) {\n\t\t\t\t\tif (response && response.updatedValues) {\n\t\t\t\t\t\tvar data = _this2.data();\n\n\t\t\t\t\t\tdata.title = response.updatedValues.product_name;\n\t\t\t\t\t\tdata.text = response.updatedValues.text;\n\t\t\t\t\t\tdata.category_id = parseInt(response.updatedValues.category_id);\n\t\t\t\t\t\tif (response.updatedValues.date) {\n\t\t\t\t\t\t\tdata.date = response.updatedValues.date;\n\t\t\t\t\t\t\tdata.date_human = response.updatedValues.date_human;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this2.data(data);\n\n\t\t\t\t\t\tif (!_this2.showImage) {\n\t\t\t\t\t\t\t_this2._forceRedraw();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_10__core_modals__[\"MODAL_REVIEW_EDIT\"].show(this.id, null, {}, function (response) {\n\t\t\t\t\tif (response && response.updatedValues) {\n\t\t\t\t\t\tvar data = _this2.data();\n\n\t\t\t\t\t\tif (response.updatedValues.product_name) {\n\t\t\t\t\t\t\tdata.title = response.updatedValues.product_name;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.text = response.updatedValues.text;\n\t\t\t\t\t\tdata.category_id = parseInt(response.updatedValues.category_id);\n\t\t\t\t\t\tdata.forsale = parseInt(response.updatedValues.forsale);\n\t\t\t\t\t\tdata.rating = parseInt(response.updatedValues.rating);\n\t\t\t\t\t\tif (response.updatedValues.image_preview) {\n\t\t\t\t\t\t\tdata.preview = response.updatedValues.image_preview;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_this2.data(data);\n\n\t\t\t\t\t\tif (!_this2.showImage) {\n\t\t\t\t\t\t\t_this2._forceRedraw();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'changeForWhom',\n\t\tvalue: function changeForWhom() {\n\t\t\tvar _this3 = this;\n\n\t\t\t__WEBPACK_IMPORTED_MODULE_1_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"g\" /* siteUrl */])('reviews/changeForWhom'), {\n\t\t\t\tid: this.id,\n\t\t\t\tstate: this._forWhom()\n\t\t\t}, function (response) {\n\t\t\t\tif (response.success) {\n\t\t\t\t\t_this3._forWhom(response.state);\n\t\t\t\t}\n\t\t\t}, 'json');\n\t\t}\n\t}, {\n\t\tkey: 'changeClosed',\n\t\tvalue: function changeClosed() {\n\t\t\t__WEBPACK_IMPORTED_MODULE_1_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"g\" /* siteUrl */])('reviews/changeClosed'), {\n\t\t\t\tid: this.id,\n\t\t\t\tstate: this.isClosed() ? 1 : 0\n\t\t\t}, function (response) {}, 'json');\n\t\t}\n\n\t\t/** @param {ReviewComment} comment */\n\n\t}, {\n\t\tkey: 'deleteComment',\n\t\tvalue: function deleteComment(comment) {\n\t\t\tvar _this4 = this;\n\n\t\t\t__WEBPACK_IMPORTED_MODULE_1_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"g\" /* siteUrl */])('reviews/delete_comment'), { id: comment.id }, function (response) {\n\t\t\t\tif (response.success) {\n\t\t\t\t\t_this4._comments.remove(comment);\n\t\t\t\t} else {\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].error();\n\t\t\t\t}\n\t\t\t}, 'json');\n\t\t}\n\t}, {\n\t\tkey: '_forceRedraw',\n\t\tvalue: function _forceRedraw() {\n\t\t\tthis._parent.reviews.replace(this, new ReviewItem(this.data()));\n\t\t}\n\t}, {\n\t\tkey: 'id',\n\t\tget: function get() {\n\t\t\treturn this.data().id;\n\t\t}\n\n\t\t/** @return {UserInfo} */\n\n\t}, {\n\t\tkey: 'author',\n\t\tget: function get() {\n\t\t\treturn this._author;\n\t\t}\n\n\t\t/** @return {ReviewComment[]} */\n\n\t}, {\n\t\tkey: 'comments',\n\t\tget: function get() {\n\t\t\treturn this._comments();\n\t\t}\n\n\t\t/** @return {NewComment} */\n\n\t}, {\n\t\tkey: 'newComment',\n\t\tget: function get() {\n\t\t\treturn this._newComment;\n\t\t}\n\n\t\t/** @return {Likers} */\n\n\t}, {\n\t\tkey: 'likers',\n\t\tget: function get() {\n\t\t\treturn this._likers;\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: 'showImage',\n\t\tget: function get() {\n\t\t\treturn this._showImage;\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: 'showVideo',\n\t\tget: function get() {\n\t\t\treturn this._showVideo;\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: 'isDetailsPage',\n\t\tget: function get() {\n\t\t\treturn this._parent.isDetails;\n\t\t}\n\t}]);\n\n\treturn ReviewItem;\n}();\n\nvar NewComment = function () {\n\tfunction NewComment(review, callback) {\n\t\tvar _this5 = this;\n\n\t\t_classCallCheck(this, NewComment);\n\n\t\tthis.text = ko.observable('');\n\t\tthis.inputHasFocus = ko.observable(false);\n\t\tthis.isSaveButtonVisible = null;\n\n\t\tthis._review = review;\n\t\tthis._textTrimmed = this.text.trimmed();\n\t\tthis._onSave = __WEBPACK_IMPORTED_MODULE_1_jquery___default.a.Callbacks();\n\t\tif (callback) {\n\t\t\tthis._onSave.add(callback);\n\t\t}\n\t\tthis.isSaveButtonVisible = ko.computed(function () {\n\t\t\t// return this.inputHasFocus() && this.text();\n\t\t\treturn _this5._textTrimmed().length > 0;\n\t\t});\n\t}\n\n\t_createClass(NewComment, [{\n\t\tkey: 'save',\n\t\tvalue: function save() {\n\t\t\tvar _this6 = this;\n\n\t\t\tif (!this._textTrimmed().length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tObject(__WEBPACK_IMPORTED_MODULE_6_core_auth__[\"ensureLoggedIn\"])(function (user) {\n\t\t\t\tvar parentId = _this6._review.id;\n\t\t\t\tvar text = _this6._textTrimmed();\n\t\t\t\tvar postData = void 0;\n\n\t\t\t\t_this6.text('');\n\t\t\t\tif (!_this6._review.data().is_sale) {\n\t\t\t\t\tpostData = {\n\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\tparent_id: parentId,\n\t\t\t\t\t\tcomment_type: 'review'\n\t\t\t\t\t};\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_1_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"g\" /* siteUrl */])('reviews/save_comment'), postData, null, 'json').fail(__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\t\t\t\t\tif (!response || !response.success) {\n\t\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].error(response ? response.error : null);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar comment = new __WEBPACK_IMPORTED_MODULE_5__reviewcomment__[\"a\" /* ReviewComment */]({\n\t\t\t\t\t\t\t\tid: response.id,\n\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\tauthor: user,\n\t\t\t\t\t\t\t\tdate: response.date,\n\t\t\t\t\t\t\t\tdate_human: response.date_human,\n\t\t\t\t\t\t\t\tlikes: 0,\n\t\t\t\t\t\t\t\tmy_like: false,\n\t\t\t\t\t\t\t\tis_editable: true,\n\t\t\t\t\t\t\t\tparent: _this6._review\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t_this6._onSave.fire(comment);\n\t\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].success(\"Комментарий отправлен\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tpostData = {\n\t\t\t\t\t\tcomments_page_id: parentId,\n\t\t\t\t\t\tcomments_content: text\n\t\t\t\t\t};\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_1_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_8_core_utils_url__[\"g\" /* siteUrl */])('blog/comments_save'), postData, null, 'json').fail(__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\t\t\t\t\tif (!response || !response.success) {\n\t\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].error(response ? response.error : null);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar comment = new __WEBPACK_IMPORTED_MODULE_5__reviewcomment__[\"a\" /* ReviewComment */]({\n\t\t\t\t\t\t\t\tid: response.comment.comments_id,\n\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\tauthor: user,\n\t\t\t\t\t\t\t\tdate: response.comment.comments_date,\n\t\t\t\t\t\t\t\tdate_human: response.comment.comments_date_human,\n\t\t\t\t\t\t\t\tlikes: null,\n\t\t\t\t\t\t\t\tmy_like: false,\n\t\t\t\t\t\t\t\tis_editable: false,\n\t\t\t\t\t\t\t\tparent: _this6._review\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t_this6._onSave.fire(comment);\n\t\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_7_core_widgets_notifier__[\"a\" /* Notifier */].success(\"Комментарий отправлен\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'onSave',\n\t\tvalue: function onSave(callback) {\n\t\t\tthis._onSave.add(callback);\n\t\t}\n\t}]);\n\n\treturn NewComment;\n}();\n\n/***/ }),\n\n/***/ \"0iPh\":\n/***/ (function(module, exports) {\n\nmodule.exports = jQuery;\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"cbSx\");\nmodule.exports = __webpack_require__(\"oFSp\");\n\n\n/***/ }),\n\n/***/ \"2uje\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Notifier; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_toastr__ = __webpack_require__(\"og09\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_toastr___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_toastr__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_utils__ = __webpack_require__(\"YnTO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_var__ = __webpack_require__(\"dTkA\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar t = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"b\" /* checkIsIframe */])() ? window.top.toastr : __WEBPACK_IMPORTED_MODULE_0_lib_toastr___default.a;\n\nvar MSG_ERROR = 'Ошибка';\nvar MSG_ERROR_XHR = 'Не удалось выполнить запрос';\n\nvar Notifier = function () {\n\tfunction Notifier() {\n\t\t_classCallCheck(this, Notifier);\n\t}\n\n\t_createClass(Notifier, null, [{\n\t\tkey: \"error\",\n\t\tvalue: function error() {\n\t\t\tvar message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\t// Extend timeout for errors to 10 seconds by default\n\t\t\tvar timeOut = options ? Object(__WEBPACK_IMPORTED_MODULE_2__utils_var__[\"g\" /* orDefault */])(options.timeOut, 10000) : 10000;\n\t\t\tt.error(Object(__WEBPACK_IMPORTED_MODULE_2__utils_var__[\"g\" /* orDefault */])(message, MSG_ERROR), title, _extends({ timeOut: timeOut }, options));\n\t\t}\n\t}, {\n\t\tkey: \"errorXHR\",\n\t\tvalue: function errorXHR(jqXHR, textStatus, errorThrown) {\n\t\t\tif (textStatus != 'abort') {\n\t\t\t\tNotifier.error(MSG_ERROR_XHR);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"info\",\n\t\tvalue: function info(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.info(message, title, _extends({}, options));\n\t\t}\n\t}, {\n\t\tkey: \"success\",\n\t\tvalue: function success(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.success(message, title, _extends({}, options));\n\t\t}\n\t}, {\n\t\tkey: \"warning\",\n\t\tvalue: function warning(message) {\n\t\t\tvar title = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tt.warning(message, title, _extends({}, options));\n\t\t}\n\t}]);\n\n\treturn Notifier;\n}();\n\n/***/ }),\n\n/***/ \"49+S\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return GlobalEvent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_framebus__ = __webpack_require__(\"Oe2b\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_framebus___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_framebus__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__logger__ = __webpack_require__(\"5wqq\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n/**\n * System-wide event class\n */\nvar GlobalEvent = function () {\n\t/**\n * Event constructor\n * @param {string} name Event name\n */\n\tfunction GlobalEvent(name) {\n\t\t_classCallCheck(this, GlobalEvent);\n\n\t\tthis._name = name;\n\t}\n\n\t/**\n * Trigger this event\n * @param data The data to give to subscribers\n */\n\n\n\t_createClass(GlobalEvent, [{\n\t\tkey: 'trigger',\n\t\tvalue: function trigger() {\n\t\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\t\tObject(__WEBPACK_IMPORTED_MODULE_1__logger__[\"a\" /* newLogger */])(this.toString()).log('trigger', data);\n\t\t\t__WEBPACK_IMPORTED_MODULE_0_framebus__[\"trigger\"](this._name, data);\n\t\t}\n\n\t\t/**\n * Subscribe to this event\n * @param {function} handler Function that accepts event data as first argument\n * @return {Subscription}\n */\n\n\t}, {\n\t\tkey: 'on',\n\t\tvalue: function on(handler) {\n\t\t\treturn this._getSubscription(handler).on();\n\t\t}\n\n\t\t/**\n * Unsubscribe from this event\n * @param {function} handler The same function that was passed to {@link on} method\n */\n\n\t}, {\n\t\tkey: 'off',\n\t\tvalue: function off(handler) {\n\t\t\tthis._getSubscription(handler).off();\n\t\t}\n\t}, {\n\t\tkey: 'toString',\n\t\tvalue: function toString() {\n\t\t\treturn 'GlobalEvent/' + this._name;\n\t\t}\n\n\t\t/**\n * Creates subscription instance. To actually subscribe, call on() method.\n * @param {function} handler Function that accepts event data as first argument\n * @return {Subscription}\n */\n\n\t}, {\n\t\tkey: '_getSubscription',\n\t\tvalue: function _getSubscription(handler) {\n\t\t\treturn new Subscription(this._name, handler);\n\t\t}\n\t}]);\n\n\treturn GlobalEvent;\n}();\n\nvar Subscription = function () {\n\tfunction Subscription(name, handler) {\n\t\t_classCallCheck(this, Subscription);\n\n\t\tthis._name = name;\n\t\tthis._handler = handler;\n\t}\n\n\t/**\n * Attach the subscription to bus\n * @return {Subscription} This instance\n */\n\n\n\t_createClass(Subscription, [{\n\t\tkey: 'on',\n\t\tvalue: function on() {\n\t\t\t__WEBPACK_IMPORTED_MODULE_0_framebus__[\"on\"](this._name, this._handler);\n\t\t\treturn this;\n\t\t}\n\n\t\t/**\n * Cancel this subscription\n * @return {Subscription} This instance\n */\n\n\t}, {\n\t\tkey: 'off',\n\t\tvalue: function off() {\n\t\t\t__WEBPACK_IMPORTED_MODULE_0_framebus__[\"off\"](this._name, this._handler);\n\t\t\treturn this;\n\t\t}\n\t}]);\n\n\treturn Subscription;\n}();\n\n/***/ }),\n\n/***/ \"5wqq\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = newLogger;\n/* unused harmony export setDefaultLevel */\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LEVEL_DEBUG = 0;\nvar LEVEL_INFO = 1;\nvar LEVEL_WARN = 2;\nvar LEVEL_ERROR = 3;\n\nvar LEVELS = ['debug', 'info', 'warn', 'error'];\n\nvar defaultLevel = window.IS_PRODUCTION ? LEVEL_WARN : LEVEL_DEBUG;\n\n/**\n * Creates new logger instance with default level.\n * @param {string|null} name\n * @return {MyLogger}\n */\nfunction newLogger() {\n\tvar name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\treturn new MyLogger(name, defaultLevel);\n}\n\n/**\n * Sets level for new loggers.\n * @param {number} level\n */\nfunction setDefaultLevel(level) {\n\tdefaultLevel = level;\n}\n\nvar MyLogger = function () {\n\tfunction MyLogger(name, level) {\n\t\t_classCallCheck(this, MyLogger);\n\n\t\tthis._name = '';\n\t\tthis._level = -1;\n\n\t\tthis._dummy = function () {};\n\n\t\tthis._name = name;\n\t\tthis.setLevel(level);\n\t}\n\n\t_createClass(MyLogger, [{\n\t\tkey: 'setLevel',\n\t\tvalue: function setLevel(level) {\n\t\t\tvar _this = this;\n\n\t\t\tlevel = Number.isInteger(level) ? level : LEVELS.indexOf(level);\n\t\t\tthis._level = level;\n\n\t\t\tvar name = this._name ? '[' + this._name + ']' : null;\n\t\t\tvar bind = function bind(condition, methodName) {\n\t\t\t\tif (!condition || !console[methodName]) return _this._dummy;\n\t\t\t\treturn name ? console[methodName].bind(console, name) : console[methodName].bind(console);\n\t\t\t};\n\t\t\tvar bindSimple = function bindSimple(condition, methodName) {\n\t\t\t\treturn condition && console[methodName] ? console[methodName].bind(console) : _this._dummy;\n\t\t\t};\n\n\t\t\t[['log', LEVEL_DEBUG], ['info', LEVEL_INFO], ['warn', LEVEL_WARN], ['error', LEVEL_ERROR]].forEach(function (i) {\n\t\t\t\tvar _i = _slicedToArray(i, 2),\n\t\t\t\t method = _i[0],\n\t\t\t\t lvl = _i[1];\n\n\t\t\t\t_this[method] = bind(level <= lvl, method);\n\t\t\t});\n\n\t\t\t['time', 'timeEnd', 'profile', 'profileEnd'].forEach(function (method) {\n\t\t\t\t_this[method] = bindSimple(level <= LEVEL_DEBUG, method);\n\t\t\t});\n\t\t}\n\n\t\t/** The same as {@link Console.log} */\n\n\t}, {\n\t\tkey: 'log',\n\t\tvalue: function log(args) {}\n\n\t\t/** The same as {@link Console.info} */\n\n\t}, {\n\t\tkey: 'info',\n\t\tvalue: function info(args) {}\n\n\t\t/** The same as {@link Console.warn} */\n\n\t}, {\n\t\tkey: 'warn',\n\t\tvalue: function warn(args) {}\n\n\t\t/** The same as {@link Console.error} */\n\n\t}, {\n\t\tkey: 'error',\n\t\tvalue: function error(args) {}\n\n\t\t/** The same as {@link Console.time} */\n\n\t}, {\n\t\tkey: 'time',\n\t\tvalue: function time(label) {}\n\n\t\t/** The same as {@link Console.timeEnd} */\n\n\t}, {\n\t\tkey: 'timeEnd',\n\t\tvalue: function timeEnd(label) {}\n\n\t\t/** The same as {@link Console.profile} */\n\n\t}, {\n\t\tkey: 'profile',\n\t\tvalue: function profile(label) {}\n\n\t\t/** The same as {@link Console.profileEnd} */\n\n\t}, {\n\t\tkey: 'profileEnd',\n\t\tvalue: function profileEnd(label) {}\n\t}, {\n\t\tkey: 'measureTime',\n\t\tvalue: function measureTime(label, callable) {\n\t\t\tthis.time(label);\n\t\t\tvar result = callable();\n\t\t\tthis.timeEnd(label);\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'doProfile',\n\t\tvalue: function doProfile(label, callable) {\n\t\t\tthis.profile(label);\n\t\t\tvar result = callable();\n\t\t\tthis.profileEnd(label);\n\t\t\treturn result;\n\t\t}\n\t}, {\n\t\tkey: 'setLevelDebug',\n\t\tvalue: function setLevelDebug() {\n\t\t\tthis.setLevel(LEVEL_DEBUG);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelInfo',\n\t\tvalue: function setLevelInfo() {\n\t\t\tthis.setLevel(LEVEL_INFO);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelWarn',\n\t\tvalue: function setLevelWarn() {\n\t\t\tthis.setLevel(LEVEL_WARN);\n\t\t}\n\t}, {\n\t\tkey: 'setLevelError',\n\t\tvalue: function setLevelError() {\n\t\t\tthis.setLevel(LEVEL_ERROR);\n\t\t}\n\t}]);\n\n\treturn MyLogger;\n}();\n\n/* unused harmony default export */ var _unused_webpack_default_export = (newLogger());\n\n/***/ }),\n\n/***/ \"7fPx\":\n/***/ (function(module, exports) {\n\nmodule.exports = ko;\n\n/***/ }),\n\n/***/ \"BP4H\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"init\"] = init;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_utils_logger__ = __webpack_require__(\"5wqq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_lib_zinfinitescroll__ = __webpack_require__(\"wC9f\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_modules_reviews_common_model_reviewlist__ = __webpack_require__(\"otQ7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_modules_reviews_common_components__ = __webpack_require__(\"+KrN\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__core_widgets_notifier__ = __webpack_require__(\"2uje\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_lib_fancybox__ = __webpack_require__(\"w2CW\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_2_core_utils_logger__[\"a\" /* newLogger */])('Users');\n\nfunction init(options) {\n\tvar o = _extends({\n\t\tuserId: null,\n\t\tprincipalsCount: 0,\n\t\tfollowersCount: 0,\n\t\tisFollower: false\n\n\t}, options);\n\n\t// prevent browser from restoring scroll position\n\t// otherwise window scroll position can jump to the bottom on page refresh (because of initial ajax loading)\n\thistory.scrollRestoration = 'manual';\n\n\tlogger.log('init', o);\n\n\tvar $userWrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('#userWrapper');\n\tvar viewModel = new ViewModel(options, $userWrapper);\n\t__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.applyBindings(viewModel, $userWrapper[0]);\n}\n\nvar ViewModel = function () {\n\n\t/** @type {ReviewList} */\n\tfunction ViewModel(options, $wrapper) {\n\t\t_classCallCheck(this, ViewModel);\n\n\t\tthis.tabMyReviews = new Tab('reviews', 'reviews');\n\t\tthis.tabCommentsGiven = new Tab('reviews', 'comments_given');\n\t\tthis.tabLikesGiven = new Tab('reviews', 'likes_given');\n\t\tthis.tabLikesReceived = new Tab('users', 'likes_received');\n\t\tthis.tabCommentsReceived = new Tab('users', 'comments_received');\n\t\tthis.tabAllReviews = new Tab('reviews', '');\n\t\tthis.tabFollowers = new Tab('users', 'followers');\n\t\tthis.tabFollowing = new Tab('users', 'following');\n\t\tthis.activeTab = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable();\n\t\tthis.users = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observableArray([]);\n\t\tthis.isLoading = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(false);\n\t\tthis._infScroll = null;\n\t\tthis._page = 0;\n\t\tthis._loading = false;\n\n\t\tthis.o = _extends({\n\t\t\tuserId: null\n\n\t\t}, options);\n\n\t\tthis.showMyReviewsTab = this._showTab.bind(this, this.tabMyReviews);\n\t\tthis.showCommentsGivenTab = this._showTab.bind(this, this.tabCommentsGiven);\n\t\tthis.showLikesGivenTab = this._showTab.bind(this, this.tabLikesGiven);\n\t\tthis.showLikesReceivedTab = this._showTab.bind(this, this.tabLikesReceived);\n\t\tthis.showCommentsReceivedTab = this._showTab.bind(this, this.tabCommentsReceived);\n\t\tthis.showAllReviewsTab = this._showTab.bind(this, this.tabAllReviews);\n\t\tthis.showFollowers = this._showTab.bind(this, this.tabFollowers);\n\t\tthis.showFollowing = this._showTab.bind(this, this.tabFollowing);\n\n\t\tthis.principalsCount = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this.o.principalsCount);\n\t\tthis.followersCount = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this.o.followersCount);\n\t\tthis.isFollower = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this.o.isFollower);\n\n\t\tthis.reviewList = new __WEBPACK_IMPORTED_MODULE_5_modules_reviews_common_model_reviewlist__[\"a\" /* ReviewList */]({\n\t\t\tinfScrollWrapper: $wrapper,\n\t\t\tcolumns: true\n\t\t});\n\n\t\tthis.showAllReviewsTab();\n\t}\n\n\t/** @type {InfiniteScroll} */\n\n\n\t_createClass(ViewModel, [{\n\t\tkey: \"toggleFollowers\",\n\t\tvalue: function toggleFollowers(model, event) {\n\t\t\tvar _this = this;\n\n\t\t\tvar userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tvar targetId = void 0;\n\t\t\tif (targetId = USER_ID || userId) {\n\t\t\t\tvar url = this.isFollower() ? 'users1/removeFromFriends' : 'users1/addToFriends';\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])(url), { sourceId: this.o.userId, targetId: targetId }, function (response) {\n\t\t\t\t\tif (response.success) {\n\t\t\t\t\t\tif (userId) {\n\t\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this.isFollower(!_this.isFollower());\n\t\t\t\t\t\t\t_this.followersCount(response.followers.followersCount);\n\t\t\t\t\t\t\t_this.principalsCount(response.followers.principalsCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 'json');\n\t\t\t} else {\n\t\t\t\tzde.showLogin(function (data) {\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\t_this.toggleFollowers(model, event, data.id);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n * @param {Tab} tab\n * @private\n */\n\n\t}, {\n\t\tkey: \"_showTab\",\n\t\tvalue: function _showTab(tab) {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis.activeTab(tab);\n\n\t\t\t// reset\n\t\t\tthis.reviewList.clear();\n\t\t\tthis.users([]);\n\t\t\tthis.colIndex = 0;\n\t\t\tthis._page = 0;\n\t\t\tthis.isLoading(true);\n\n\t\t\tif (tab.type == 'reviews') {\n\t\t\t\tvar filters = { user: this.o.userId, mode: this.activeTab().mode, with_image: 0 };\n\t\t\t\tthis.reviewList.load(filters).done(function () {\n\t\t\t\t\t_this2.isLoading(false);\n\t\t\t\t});\n\t\t\t} else if (tab.type == 'users') {\n\t\t\t\tthis._loadUsers().done(function () {\n\t\t\t\t\t_this2.isLoading(false);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_loadUsers\",\n\t\tvalue: function _loadUsers() {\n\t\t\tvar _this3 = this;\n\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])('users/getUsersByMode'), { userId: this.o.userId, mode: this.activeTab().mode }, null, 'json').fail(__WEBPACK_IMPORTED_MODULE_7__core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\t\t\tif (response && response.success) {\n\t\t\t\t\t_this3._setUsers(response.users);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"_setUsers\",\n\t\tvalue: function _setUsers(users) {\n\t\t\tvar _this4 = this;\n\n\t\t\tusers.forEach(function (u) {\n\t\t\t\t_this4.users.push(new UserItem(u));\n\t\t\t\tconsole.log(new UserItem(u));\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn ViewModel;\n}();\n\nvar Tab = function Tab(type, mode) {\n\t_classCallCheck(this, Tab);\n\n\tthis.type = type;\n\tthis.mode = mode;\n};\n\nvar UserItem = function () {\n\tfunction UserItem(data) {\n\t\t_classCallCheck(this, UserItem);\n\n\t\tthis._data = data;\n\t\tthis.following = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this._data['following'] > 0);\n\t\tthis.fing_cnt = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this._data['fing_cnt']);\n\t\tthis.fers_cnt = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(this._data['fers_cnt']);\n\t}\n\n\t_createClass(UserItem, [{\n\t\tkey: \"toggleFollowers\",\n\n\n\t\t/*get fing_cnt() {\n \treturn this._data['fing_cnt'];\n }\n \tset fing_cnt(value) {\n this._data['fing_cnt'] = value;\n }\n \tget fers_cnt() {\n \treturn this._data['fers_cnt'];\n }\n \tset fers_cnt(value){\n this._data['fers_cnt'] = value;\n }*/\n\n\t\t/*following = ko.pureComputed({\n \tread: () =>{\n console.log(this._data['following']);\n return this._data['following'] > 0;\n \t\t},\n \twrite: value => {\n this._data['following'] = value ? 1 : 0;\n console.log(this._data['following']);\n \t},\n \towner: this\n })*/\n\n\t\tvalue: function toggleFollowers(model, event) {\n\t\t\tvar _this5 = this;\n\n\t\t\tvar userId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\t// console.log(this.following());\n\t\t\tvar targetId = void 0;\n\t\t\tif (targetId = USER_ID || userId) {\n\t\t\t\tvar url = this.following() ? 'users1/removeFromFriends' : 'users1/addToFriends';\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])(url), { sourceId: this.id, targetId: targetId }, function (response) {\n\t\t\t\t\tif (response.success) {\n\t\t\t\t\t\tif (userId) {\n\t\t\t\t\t\t\tlocation.reload();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this5.following(!_this5.following());\n\t\t\t\t\t\t\tconsole.log(_this5);\n\t\t\t\t\t\t\t_this5.fers_cnt(response.followers.followersCount);\n\t\t\t\t\t\t\t_this5.fing_cnt(response.followers.principalsCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, 'json');\n\t\t\t} else {\n\t\t\t\tzde.showLogin(function (data) {\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\t_this5.toggleFollowers(model, event, data.id);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"id\",\n\t\tget: function get() {\n\t\t\treturn this._data['user_id'];\n\t\t}\n\t}, {\n\t\tkey: \"name\",\n\t\tget: function get() {\n\t\t\treturn this._data['name_for_view'];\n\t\t}\n\t}, {\n\t\tkey: \"url\",\n\t\tget: function get() {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])('users/' + this.id);\n\t\t}\n\t}, {\n\t\tkey: \"level\",\n\t\tget: function get() {\n\t\t\treturn this._data['user_level'];\n\t\t}\n\t}, {\n\t\tkey: \"cnt\",\n\t\tget: function get() {\n\t\t\treturn this._data['cnt'];\n\t\t}\n\t}]);\n\n\treturn UserItem;\n}();\n\n/***/ }),\n\n/***/ \"E27B\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_autosize__ = __webpack_require__(\"xOlZ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_autosize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_autosize__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_jquery__);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n/* unused harmony default export */ var _unused_webpack_default_export = (__WEBPACK_IMPORTED_MODULE_0_autosize___default.a);\n\nwindow.autosize = __WEBPACK_IMPORTED_MODULE_0_autosize___default.a;\n\n/**\n * Initializes Autosize plugin.\n * @param {string} method Allowed values: update, destroy\n * @return {JQuery}\n */\n__WEBPACK_IMPORTED_MODULE_2_jquery___default.a.fn.autosize = function (method) {\n\treturn this.each(function () {\n\t\tvar el = this;\n\t\tvar $el = __WEBPACK_IMPORTED_MODULE_2_jquery___default()(this);\n\t\tif (typeof method === 'string') {\n\t\t\tif ($el.data('autosize') && typeof __WEBPACK_IMPORTED_MODULE_0_autosize___default.a[method] === 'function') {\n\t\t\t\tconsole.log('calling autosize.' + method, 'on', el);\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0_autosize___default.a[method](el);\n\t\t\t\t$el.data('autosize', null);\n\t\t\t}\n\t\t} else {\n\t\t\tvar o = _extends({\n\t\t\t\t/**\n * Defer plugin initialization until textarea gets focus\n */\n\t\t\t\tdeferInit: false\n\n\t\t\t}, method);\n\n\t\t\tvar init = function init() {\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0_autosize___default()(el);\n\t\t\t\t$el.data('autosize', true);\n\t\t\t};\n\n\t\t\tif (o.deferInit) {\n\t\t\t\t$el.one('focus', init);\n\t\t\t} else {\n\t\t\t\tinit();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/**\n * Binding for Autosize plugin\n */\n__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.bindingHandlers.autosize = {\n\tinit: function init(element, valueAccessor, allBindings, viewModel, bindingContext) {\n\t\tvar $el = __WEBPACK_IMPORTED_MODULE_2_jquery___default()(element);\n\t\tvar options = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.unwrap(valueAccessor());\n\t\tvar t = void 0;\n\t\t// autosize does not properly update itself when using with knockout\n\t\t// so manually fix it\n\t\tvar update = function update() {\n\t\t\tif (t) {\n\t\t\t\tclearTimeout(t);\n\t\t\t}\n\t\t\tt = setTimeout(function () {\n\t\t\t\t$el.autosize('update');\n\t\t\t}, 100);\n\t\t};\n\t\t$el.autosize(options).on('change', update);\n\n\t\t__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.utils.domNodeDisposal.addDisposeCallback(element, function () {\n\t\t\t__WEBPACK_IMPORTED_MODULE_2_jquery___default()(element).autosize('destroy').off('change', update);\n\t\t});\n\t}\n};\n\n/***/ }),\n\n/***/ \"FA3v\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
\\n
\\n
\\n\\t
\\n\\t... Читать далее\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\tПонравилось\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\tНет лайков\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\"\n\n/***/ }),\n\n/***/ \"FYi7\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BASE_URL; });\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = siteUrl;\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = joinPath;\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = isAbsolute;\n/* unused harmony export buildQuery */\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = highlightUrls;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return UrlParser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return UrlBuilder; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__location__ = __webpack_require__(\"XRua\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__var__ = __webpack_require__(\"dTkA\");\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar BASE_URL = (window.base_url || '/').replace(/(.*)\\/\\/$|([^/])$/, '$1/');\n\nvar isAbsoluteUrlRegex = /^https?:\\/\\//i;\n\n/**\n * @param {string|object} url Url path\n * @param {string|object} more Additional parts\n * @return {string}\n */\nfunction siteUrl(url) {\n\tfor (var _len = arguments.length, more = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t\tmore[_key - 1] = arguments[_key];\n\t}\n\n\tif (isAbsoluteUrlRegex.test(url)) {\n\t\tif (more.length === 0) {\n\t\t\treturn url;\n\t\t} else {\n\t\t\treturn joinPath.apply(null, [url].concat(more));\n\t\t}\n\t} else {\n\t\treturn joinPath.apply(null, [BASE_URL, url].concat(more));\n\t}\n}\n\n/**\n * Joins given values with slash.\n * If last value is an object - it will be formatted as query data.\n * @param {string|object} values\n * @return {string}\n */\nfunction joinPath() {\n\tfor (var _len2 = arguments.length, values = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t\tvalues[_key2] = arguments[_key2];\n\t}\n\n\tif (values.length == 0) return '';\n\tvar query = {};\n\tvar queryString = '';\n\tvar fragment = '';\n\tvar components = [];\n\tvar processValue = function processValue(v) {\n\t\tif (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isObject(v)) {\n\t\t\tquery = _extends({}, query, v);\n\t\t} else {\n\t\t\tv = Object(__WEBPACK_IMPORTED_MODULE_2__var__[\"d\" /* asString */])(v).trim();\n\t\t\tvar i = void 0;\n\t\t\tif ((i = v.indexOf('#')) >= 0) {\n\t\t\t\tfragment = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t} else if ((i = v.indexOf('?')) >= 0) {\n\t\t\t\tqueryString = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t}\n\t\t\tif (v) {\n\t\t\t\tif (components.length == 0) {\n\t\t\t\t\tv = v.replace(/\\/$/g, '');\n\t\t\t\t} else {\n\t\t\t\t\tv = v.replace(/^\\/|\\/$/g, '');\n\t\t\t\t}\n\t\t\t\tcomponents.push(v);\n\t\t\t}\n\t\t}\n\t};\n\tvalues.forEach(function (v) {\n\t\tif (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(v)) {\n\t\t\tv.forEach(processValue);\n\t\t} else {\n\t\t\tprocessValue(v);\n\t\t}\n\t});\n\tvar url = components.join('/');\n\tif (!__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(query)) {\n\t\tvar q = buildQuery(query);\n\t\tif (queryString) {\n\t\t\tqueryString += '&';\n\t\t}\n\t\tqueryString += q;\n\t}\n\tif (queryString) {\n\t\turl += '?' + queryString;\n\t}\n\tif (fragment) {\n\t\turl += '#' + fragment;\n\t}\n\treturn url;\n}\n\n/**\n *\n * @param {string} url\n * @return {boolean}\n */\nfunction isAbsolute(url) {\n\treturn isAbsoluteUrlRegex.test(url);\n}\n\n/**\n * Builds query string from given object\n * @param {object} queryData\n * @return {string}\n */\nfunction buildQuery(queryData) {\n\treturn __WEBPACK_IMPORTED_MODULE_1__location__[\"c\" /* buildQuery */](queryData);\n}\n\nfunction highlightUrls(text) {\n\tvar maxlength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30;\n\n\treturn text.replace(/(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\?+=&%#\\/\\wА-Яа-яёЁ\\.;-]*)*\\/?/g, function (s) {\n\t\tvar st = s;\n\n\t\tif (s.length > maxlength) {\n\t\t\tst = s.slice(0, maxlength) + \"...\";\n\t\t}\n\n\t\tif (!/^(https?:\\/\\/)/.test(s)) {\n\t\t\ts = \"http://\" + s;\n\t\t}\n\n\t\treturn \"\" + st + \"\";\n\t});\n}\n\nvar UrlParser = function () {\n\t/**\n * @param {string} url\n */\n\tfunction UrlParser(url) {\n\t\t_classCallCheck(this, UrlParser);\n\n\t\tthis._a = document.createElement('a');\n\t\tthis._a.href = url;\n\t}\n\n\t/** @return {string} */\n\n\n\t_createClass(UrlParser, [{\n\t\tkey: 'origin',\n\t\tget: function get() {\n\t\t\treturn this._a.origin;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'protocol',\n\t\tget: function get() {\n\t\t\treturn this._a.protocol;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'host',\n\t\tget: function get() {\n\t\t\treturn this._a.host;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'hostname',\n\t\tget: function get() {\n\t\t\treturn this._a.hostname;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'port',\n\t\tget: function get() {\n\t\t\treturn this._a.port;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'pathname',\n\t\tget: function get() {\n\t\t\treturn this._a.pathname;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'search',\n\t\tget: function get() {\n\t\t\treturn this._a.search;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: 'hash',\n\t\tget: function get() {\n\t\t\treturn this._a.hash;\n\t\t}\n\t}]);\n\n\treturn UrlParser;\n}();\n\nvar UrlBuilder = function () {\n\tfunction UrlBuilder() {\n\t\tvar protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar host = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\tvar port = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\t\tvar path = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\t\tvar query = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n\t\tvar hash = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n\n\t\t_classCallCheck(this, UrlBuilder);\n\n\t\tthis._protocol = protocol;\n\t\tthis._host = host;\n\t\tthis._port = port;\n\t\tthis._path = path;\n\t\tthis._query = query;\n\t\tthis._hash = hash;\n\t}\n\n\t/**\n * @param {string|null} value\n */\n\n\n\t_createClass(UrlBuilder, [{\n\t\tkey: 'build',\n\n\n\t\t/**\n * @return {string}\n */\n\t\tvalue: function build() {\n\t\t\tvar origin = (this._protocol ? this._protocol + '//' : '') + (this._host ? this._host + (this._port ? ':' + this._port : '') : '');\n\t\t\tvar query = _typeof(this._query) === 'object' ? prefix(buildQuery(this._query), '?') : this._query;\n\t\t\treturn joinPath(origin, this._path, query, this._hash);\n\t\t}\n\t}, {\n\t\tkey: 'protocol',\n\t\tset: function set(value) {\n\t\t\tthis._protocol = postfix(value, ':');\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._protocol;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'host',\n\t\tset: function set(value) {\n\t\t\tthis._host = value;\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._host;\n\t\t}\n\n\t\t/**\n * @param {string|number|null} value\n */\n\n\t}, {\n\t\tkey: 'port',\n\t\tset: function set(value) {\n\t\t\tthis._port = value;\n\t\t}\n\n\t\t/** @return {string|number|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._port;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'path',\n\t\tset: function set(value) {\n\t\t\tthis._path = value;\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._path;\n\t\t}\n\n\t\t/**\n * @param {string|object|null} value\n */\n\n\t}, {\n\t\tkey: 'query',\n\t\tset: function set(value) {\n\t\t\tthis._query = prefix(value, '?');\n\t\t}\n\n\t\t/** @return {string|object|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._query;\n\t\t}\n\n\t\t/**\n * @param {string|null} value\n */\n\n\t}, {\n\t\tkey: 'hash',\n\t\tset: function set(value) {\n\t\t\tthis._hash = prefix(value, '#');\n\t\t}\n\n\t\t/** @return {string|null} */\n\t\t,\n\t\tget: function get() {\n\t\t\treturn this._hash;\n\t\t}\n\t}]);\n\n\treturn UrlBuilder;\n}();\n\nfunction prefix(val, prefix) {\n\tif (val && typeof val === 'string' && !val.startsWith(prefix)) {\n\t\treturn prefix + val;\n\t}\n\treturn val;\n}\n\nfunction postfix(val, postfix) {\n\tif (val && typeof val === 'string' && !val.endsWith(postfix)) {\n\t\treturn val + postfix;\n\t}\n\treturn val;\n}\n\n/***/ }),\n\n/***/ \"FZjg\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ReviewItemMobile; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__reviewitem__ = __webpack_require__(\"/ryK\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar ReviewItemMobile = function (_ReviewItem) {\n _inherits(ReviewItemMobile, _ReviewItem);\n\n function ReviewItemMobile(data) {\n _classCallCheck(this, ReviewItemMobile);\n\n data.columns = false;\n data.infScrollDistance = 300;\n\n var _this = _possibleConstructorReturn(this, (ReviewItemMobile.__proto__ || Object.getPrototypeOf(ReviewItemMobile)).call(this, data));\n\n _this.opened = ko.observable(false);\n\n\n _this.afterCommentRender = _this._afterCommentRender.bind(_this);\n _this.newComment.isSaveButtonVisible.subscribe(_this._onCommentAddButtonToggle.bind(_this));\n return _this;\n }\n\n _createClass(ReviewItemMobile, [{\n key: '_afterCommentRender',\n value: function _afterCommentRender() {\n if (this.opened()) {\n var $panel = $('#review-list-item-mobile-' + this.id).find('.dropdown-content');\n this._setCommentsPanelSize($panel);\n }\n }\n }, {\n key: '_onCommentAddButtonToggle',\n value: function _onCommentAddButtonToggle(value) {\n var $panel = $('#review-list-item-mobile-' + this.id).find('.dropdown-content');\n var height = $panel.find('.content-inner').innerHeight();\n var buttonHeight = $panel.find('.add-comment-button').outerHeight();\n $panel.css('height', value ? height + buttonHeight : height - buttonHeight);\n }\n }, {\n key: '_setCommentsPanelSize',\n value: function _setCommentsPanelSize($content) {\n var height = $content.find('.content-inner').innerHeight();\n $content.css('height', height);\n }\n }, {\n key: 'toggleDetails',\n value: function toggleDetails(item, event) {\n var $toggler = $(event.currentTarget);\n var $content = $toggler.siblings('.dropdown-content');\n\n if (this.opened()) {\n $content.css('height', 0);\n } else {\n this._setCommentsPanelSize($content);\n }\n\n this.opened(!this.opened());\n }\n }]);\n\n return ReviewItemMobile;\n}(__WEBPACK_IMPORTED_MODULE_0__reviewitem__[\"a\" /* ReviewItem */]);\n\n/***/ }),\n\n/***/ \"GTd5\":\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n\n/***/ \"GfF8\":\n/***/ (function(module, exports) {\n\n// ==================================================\r\n// fancyBox v3.2.10\r\n//\r\n// Licensed GPLv3 for open source use\r\n// or fancyBox Commercial License for commercial use\r\n//\r\n// http://fancyapps.com/fancybox/\r\n// Copyright 2017 fancyApps\r\n//\r\n// ==================================================\r\n;(function (window, document, $, undefined) {\r\n 'use strict';\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ( $.fn.fancybox ) {\r\n\r\n if ( 'console' in window ) {\r\n console.log( 'fancyBox already initialized' );\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n\r\n // Enable infinite gallery navigation\r\n loop : false,\r\n\r\n // Space around image, ignored if zoomed-in or viewport width is smaller than 800px\r\n margin : [44, 0],\r\n\r\n // Horizontal space between slides\r\n gutter : 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard : true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows : true,\r\n\r\n // Should display infobar (counter and arrows at the top)\r\n infobar : true,\r\n\r\n // Should display toolbar (buttons at the top)\r\n toolbar : true,\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons : [\r\n 'slideShow',\r\n 'fullScreen',\r\n 'thumbs',\r\n 'share',\r\n //'download',\r\n //'zoom',\r\n 'close'\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime : 3,\r\n\r\n // Should display buttons at top right corner of the content\r\n // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'\r\n // Use template from `btnTpl.smallBtn` for customization\r\n smallBtn : 'auto',\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect : false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal : false,\r\n\r\n image : {\r\n\r\n // Wait for images to load before displaying\r\n // Requires predefined image dimensions\r\n // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found\r\n preload : \"auto\"\r\n\r\n },\r\n\r\n ajax : {\r\n\r\n // Object containing settings for ajax request\r\n settings : {\r\n\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data : {\r\n fancybox : true\r\n }\r\n }\r\n\r\n },\r\n\r\n iframe : {\r\n\r\n // Iframe template\r\n tpl : '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload : true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css : {},\r\n\r\n // Iframe tag attributes\r\n attr : {\r\n scrolling : 'auto'\r\n }\r\n\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType : 'image',\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect : \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration : 500,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity : \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect : \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration : 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass : '',\r\n\r\n // Custom CSS class for layout\r\n baseClass : '',\r\n\r\n // Base template for layout\r\n baseTpl\t:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' / ' +\r\n '
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n\r\n // Loading indicator template\r\n spinnerTpl : '
',\r\n\r\n // Error message template\r\n errorTpl : '

{{ERROR}}

',\r\n\r\n btnTpl : {\r\n\r\n download : '' +\r\n '' +\r\n '' +\r\n '' +\r\n '',\r\n\r\n zoom : '',\r\n\r\n close : '',\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn : '',\r\n\r\n // Arrows\r\n arrowLeft : '',\r\n\r\n arrowRight : ''\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl : 'body',\r\n\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus : false,\r\n\r\n // Put focus back to active element after closing\r\n backFocus : true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus : true,\r\n\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen : {\r\n autoStart : false,\r\n },\r\n\r\n // Set `touch: false` to disable dragging/swiping\r\n touch : {\r\n vertical : true, // Allow to drag content vertically\r\n momentum : true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash : null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media : {},\r\n\r\n slideShow : {\r\n autoStart : false,\r\n speed : 4000\r\n },\r\n\r\n thumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t},\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel : 'auto',\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit : $.noop, // When instance has been initialized\r\n\r\n beforeLoad : $.noop, // Before the content of a slide is being loaded\r\n afterLoad : $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow : $.noop, // Before open animation starts\r\n afterShow : $.noop, // When content is done loading and animating\r\n\r\n beforeClose : $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose : $.noop, // After instance has been closed\r\n\r\n onActivate : $.noop, // When instance is brought to front\r\n onDeactivate : $.noop, // When other instance has been activated\r\n\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide : 'close',\r\n\r\n // Clicked on the background (backdrop) element\r\n clickOutside : 'close',\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false,\r\n\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile : {\r\n idleTime : false,\r\n margin : 0,\r\n\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : false;\r\n },\r\n clickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : 'close';\r\n },\r\n dblclickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n dblclickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n }\r\n },\r\n\r\n\r\n // Internationalization\r\n // ============\r\n\r\n lang : 'en',\r\n i18n : {\r\n 'en' : {\r\n CLOSE : 'Close',\r\n NEXT : 'Next',\r\n PREV : 'Previous',\r\n ERROR : 'The requested content cannot be loaded.
Please try again later.',\r\n PLAY_START : 'Start slideshow',\r\n PLAY_STOP : 'Pause slideshow',\r\n FULL_SCREEN : 'Full screen',\r\n THUMBS : 'Thumbnails',\r\n DOWNLOAD : 'Download',\r\n SHARE : 'Share',\r\n ZOOM : 'Zoom'\r\n },\r\n 'de' : {\r\n CLOSE : 'Schliessen',\r\n NEXT : 'Weiter',\r\n PREV : 'Zurück',\r\n ERROR : 'Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.',\r\n PLAY_START : 'Diaschau starten',\r\n PLAY_STOP : 'Diaschau beenden',\r\n FULL_SCREEN : 'Vollbild',\r\n THUMBS : 'Vorschaubilder',\r\n DOWNLOAD : 'Herunterladen',\r\n SHARE : 'Teilen',\r\n ZOOM : 'Maßstab'\r\n }\r\n }\r\n\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n\r\n var isQuery = function ( obj ) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n\r\n var requestAFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n\r\n var transitionEnd = (function () {\r\n var t, el = document.createElement(\"fakeelement\");\r\n\r\n var transitions = {\r\n \"transition\" : \"transitionend\",\r\n \"OTransition\" : \"oTransitionEnd\",\r\n \"MozTransition\" : \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined){\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return 'transitionend';\r\n })();\r\n\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly.\r\n // =================================================================================\r\n\r\n var forceRedraw = function( $el ) {\r\n return ( $el && $el.length && $el[0].offsetHeight );\r\n };\r\n\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function( content, opts, index ) {\r\n var self = this;\r\n\r\n self.opts = $.extend( true, { index : index }, $.fancybox.defaults, opts || {} );\r\n\r\n if ( $.fancybox.isMobile ) {\r\n self.opts = $.extend( true, {}, self.opts, self.opts.mobile );\r\n }\r\n\r\n // Exclude buttons option from deep merging\r\n if ( opts && $.isArray( opts.buttons ) ) {\r\n self.opts.buttons = opts.buttons;\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n self.group = [];\r\n\r\n self.currIndex = parseInt( self.opts.index, 10 ) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = null;\r\n\r\n // Create group elements from original item collection\r\n self.createGroup( content );\r\n\r\n if ( !self.group.length ) {\r\n return;\r\n }\r\n\r\n // Save last active element and current scroll position\r\n self.$lastFocus = $(document.activeElement).blur();\r\n\r\n // Collection of gallery objects\r\n self.slides = {};\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n\r\n // Create DOM structure\r\n // ====================\r\n\r\n init : function() {\r\n var self = this,\r\n firstItem = self.group[ self.currIndex ],\r\n firstItemOpts = firstItem.opts,\r\n scrollbarWidth = $.fancybox.scrollbarWidth,\r\n $scrollDiv,\r\n $container,\r\n buttonStr;\r\n\r\n self.scrollTop = $D.scrollTop();\r\n self.scrollLeft = $D.scrollLeft();\r\n\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n if ( !$.fancybox.getInstance() ) {\r\n\r\n $( 'body' ).addClass( 'fancybox-active' );\r\n\r\n // iOS hack\r\n if ( /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ) {\r\n\r\n // iOS has problems for input elements inside fixed containers,\r\n // the workaround is to apply `position: fixed` to `` element,\r\n // unfortunately, this makes it lose the scrollbars and forces address bar to appear.\r\n\r\n if ( firstItem.type !== 'image' ) {\r\n $( 'body' ).css( 'top', $( 'body' ).scrollTop() * -1 ).addClass( 'fancybox-iosfix' );\r\n }\r\n\r\n } else if ( !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight ) {\r\n\r\n if ( scrollbarWidth === undefined ) {\r\n $scrollDiv = $('
').appendTo( 'body' );\r\n\r\n scrollbarWidth = $.fancybox.scrollbarWidth = $scrollDiv[0].offsetWidth - $scrollDiv[0].clientWidth;\r\n\r\n $scrollDiv.remove();\r\n }\r\n\r\n $( 'head' ).append( '' );\r\n $( 'body' ).addClass( 'compensate-for-scrollbar' );\r\n }\r\n }\r\n\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = '';\r\n\r\n $.each( firstItemOpts.buttons, function( index, value ) {\r\n buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate( self,\r\n firstItemOpts.baseTpl\r\n .replace( '\\{\\{buttons\\}\\}', buttonStr )\r\n .replace( '\\{\\{arrows\\}\\}', firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight )\r\n )\r\n )\r\n .attr( 'id', 'fancybox-container-' + self.id )\r\n .addClass( 'fancybox-is-hidden' )\r\n .addClass( firstItemOpts.baseClass )\r\n .data( 'FancyBox', self )\r\n .appendTo( firstItemOpts.parentEl );\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container : $container\r\n };\r\n\r\n [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption', 'navigation' ].forEach(function(item) {\r\n self.$refs[ item ] = $container.find( '.fancybox-' + item );\r\n });\r\n\r\n self.trigger( 'onInit' );\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo( self.currIndex );\r\n },\r\n\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate : function( obj, str ) {\r\n var arr = obj.opts.i18n[ obj.opts.lang ];\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function(match, n) {\r\n var value = arr[n];\r\n\r\n if ( value === undefined ) {\r\n return match;\r\n }\r\n\r\n return value;\r\n });\r\n },\r\n\r\n // Create array of gally item objects\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n createGroup : function ( content ) {\r\n var self = this;\r\n var items = $.makeArray( content );\r\n\r\n $.each(items, function( i, item ) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ( $.isPlainObject( item ) ) {\r\n\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n\r\n } else if ( $.type( item ) === 'object' && $( item ).length ) {\r\n\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $( item );\r\n\r\n opts = $item.data();\r\n opts = $.extend( {}, opts, opts.options || {} );\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = opts.src || $item.attr( 'href' );\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if ( !obj.type && !obj.src ) {\r\n obj.type = 'inline';\r\n obj.src = item;\r\n }\r\n\r\n } else {\r\n\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n\r\n obj = {\r\n type : 'html',\r\n src : item + ''\r\n };\r\n\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend( true, {}, self.opts, opts );\r\n\r\n // Do not merge buttons array\r\n if ( $.isArray( opts.buttons ) ) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || '';\r\n\r\n if ( !type && src ) {\r\n if ( src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i) ) {\r\n type = 'image';\r\n\r\n } else if ( src.match(/\\.(pdf)((\\?|#).*)?$/i) ) {\r\n type = 'pdf';\r\n\r\n } else if ( found = src.match(/\\.(mp4|mov|ogv)((\\?|#).*)?$/i) ) {\r\n type = 'video';\r\n\r\n if ( !obj.opts.videoFormat ) {\r\n obj.opts.videoFormat = 'video/' + ( found[1] === 'ogv' ? 'ogg' : found[1] );\r\n }\r\n\r\n } else if ( src.charAt(0) === '#' ) {\r\n type = 'inline';\r\n }\r\n }\r\n\r\n if ( type ) {\r\n obj.type = type;\r\n\r\n } else {\r\n self.trigger( 'objectNeedsType', obj );\r\n }\r\n\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n // Check if $orig and $thumb objects exist\r\n if ( obj.opts.$orig && !obj.opts.$orig.length ) {\r\n delete obj.opts.$orig;\r\n }\r\n\r\n if ( !obj.opts.$thumb && obj.opts.$orig ) {\r\n obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );\r\n }\r\n\r\n if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {\r\n delete obj.opts.$thumb;\r\n }\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item ..\r\n if ( $.type( obj.opts.caption ) === 'function' ) {\r\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n if ( $.type( self.opts.caption ) === 'function' ) {\r\n obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if ( !( obj.opts.caption instanceof $ ) ) {\r\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if ( type === 'ajax' ) {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if ( srcParts.length > 1 ) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n if ( obj.opts.smallBtn == 'auto' ) {\r\n\r\n if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {\r\n obj.opts.toolbar = false;\r\n obj.opts.smallBtn = true;\r\n\r\n } else {\r\n obj.opts.smallBtn = false;\r\n }\r\n\r\n }\r\n\r\n // If the type is \"pdf\", then simply load file into iframe\r\n if ( type === 'pdf' ) {\r\n obj.type = 'iframe';\r\n\r\n obj.opts.iframe.preload = false;\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if ( obj.opts.modal ) {\r\n\r\n obj.opts = $.extend(true, obj.opts, {\r\n // Remove buttons\r\n infobar : 0,\r\n toolbar : 0,\r\n\r\n smallBtn : 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard : 0,\r\n\r\n // Disable some modules\r\n slideShow : 0,\r\n fullScreen : 0,\r\n thumbs : 0,\r\n touch : 0,\r\n\r\n // Disable click event handlers\r\n clickContent : false,\r\n clickSlide : false,\r\n clickOutside : false,\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false\r\n });\r\n\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push( obj );\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detect idle\r\n // ======================================\r\n\r\n addEvents : function() {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n }).on( 'click.fb', '[data-fancybox-zoom]', function(e) {\r\n // Click handler for zoom button\r\n self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ]();\r\n });\r\n\r\n\r\n // Handle page scrolling and browser resizing\r\n $W.on('orientationchange.fb resize.fb', function(e) {\r\n\r\n if ( e && e.originalEvent && e.originalEvent.type === \"resize\" ) {\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n } else {\r\n\r\n self.$refs.stage.hide();\r\n\r\n setTimeout(function() {\r\n self.$refs.stage.show();\r\n\r\n self.update();\r\n }, 600);\r\n\r\n }\r\n\r\n });\r\n\r\n // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal\r\n // (a.k.a. \"escaping the modal\")\r\n $D.on('focusin.fb', function(e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null;\r\n\r\n if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {\r\n return;\r\n }\r\n\r\n if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {\r\n e.stopPropagation();\r\n\r\n instance.focus();\r\n\r\n // Sometimes page gets scrolled, set it back\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n }\r\n });\r\n\r\n\r\n // Enable keyboard navigation\r\n $D.on('keydown.fb', function (e) {\r\n var current = self.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n if ( !current || !current.opts.keyboard ) {\r\n return;\r\n }\r\n\r\n if ( $(e.target).is('input') || $(e.target).is('textarea') ) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if ( keycode === 8 || keycode === 27 ) {\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if ( keycode === 37 || keycode === 38 ) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if ( keycode === 39 || keycode === 40 ) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger('afterKeydown', e, keycode);\r\n });\r\n\r\n\r\n // Hide controls after some inactivity period\r\n if ( self.group[ self.currIndex ].opts.idleTime ) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if ( self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n });\r\n\r\n self.idleInterval = window.setInterval(function() {\r\n self.idleSecondsCounter++;\r\n\r\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime && !self.isDragging ) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n },\r\n\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents : function() {\r\n var self = this;\r\n\r\n $W.off( 'orientationchange.fb resize.fb' );\r\n $D.off( 'focusin.fb keydown.fb .fb-idle' );\r\n\r\n this.$refs.container.off( '.fb-close .fb-prev .fb-next' );\r\n\r\n if ( self.idleInterval ) {\r\n window.clearInterval( self.idleInterval );\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous : function( duration ) {\r\n return this.jumpTo( this.currPos - 1, duration );\r\n },\r\n\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next : function( duration ) {\r\n return this.jumpTo( this.currPos + 1, duration );\r\n },\r\n\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo : function ( pos, duration, slide ) {\r\n var self = this,\r\n firstRun,\r\n loop,\r\n current,\r\n previous,\r\n canvasWidth,\r\n currentPos,\r\n transitionProps;\r\n\r\n var groupLen = self.group.length;\r\n\r\n if ( self.isDragging || self.isClosing || ( self.isAnimating && self.firstRun ) ) {\r\n return;\r\n }\r\n\r\n pos = parseInt( pos, 10 );\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if ( !loop && ( pos < 0 || pos >= groupLen ) ) {\r\n return false;\r\n }\r\n\r\n firstRun = self.firstRun = ( self.firstRun === null );\r\n\r\n if ( groupLen < 2 && !firstRun && !!self.isDragging ) {\r\n return;\r\n }\r\n\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n // Create slides\r\n current = self.createSlide( pos );\r\n\r\n if ( groupLen > 1 ) {\r\n if ( loop || current.index > 0 ) {\r\n self.createSlide( pos - 1 );\r\n }\r\n\r\n if ( loop || current.index < groupLen - 1 ) {\r\n self.createSlide( pos + 1 );\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger( 'beforeShow', firstRun );\r\n\r\n self.updateControls();\r\n\r\n currentPos = $.fancybox.getTranslate( current.$slide );\r\n\r\n current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );\r\n current.forcedDuration = undefined;\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n }\r\n\r\n duration = parseInt( duration, 10 );\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if ( firstRun ) {\r\n\r\n if ( current.opts.animationEffect && duration ) {\r\n self.$refs.container.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n self.$refs.container.removeClass( 'fancybox-is-hidden' );\r\n\r\n forceRedraw( self.$refs.container );\r\n\r\n self.$refs.container.addClass( 'fancybox-is-open' );\r\n\r\n // Make first slide visible (to display loading icon, if needed)\r\n current.$slide.addClass( 'fancybox-slide--current' );\r\n\r\n self.loadSlide( current );\r\n\r\n self.preload( 'image' );\r\n\r\n return;\r\n }\r\n\r\n // Clean up\r\n $.each(self.slides, function( index, slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n });\r\n\r\n // Make current that slide is visible even if content is still loading\r\n current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );\r\n\r\n // If slides have been dragged, animate them to correct position\r\n if ( current.isMoved ) {\r\n canvasWidth = Math.round( current.$slide.width() );\r\n\r\n $.each(self.slides, function( index, slide ) {\r\n var pos = slide.pos - current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )\r\n }, duration, function() {\r\n\r\n slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n current.isMoved = false;\r\n\r\n self.complete();\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n self.$refs.stage.children().removeAttr( 'style' );\r\n }\r\n\r\n // Start transition that reveals current content\r\n // or wait when it will be loaded\r\n\r\n if ( current.isLoaded ) {\r\n self.revealContent( current );\r\n\r\n } else {\r\n self.loadSlide( current );\r\n }\r\n\r\n self.preload( 'image' );\r\n\r\n if ( previous.pos === current.pos ) {\r\n return;\r\n }\r\n\r\n // Handle previous slide\r\n // =====================\r\n\r\n transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );\r\n\r\n previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );\r\n\r\n previous.isComplete = false;\r\n\r\n if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {\r\n return;\r\n }\r\n\r\n if ( current.isMoved ) {\r\n previous.$slide.addClass( transitionProps );\r\n\r\n } else {\r\n\r\n transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;\r\n\r\n $.fancybox.animate( previous.$slide, transitionProps, duration, function() {\r\n previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );\r\n });\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide : function( pos ) {\r\n\r\n var self = this;\r\n var $slide;\r\n var index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if ( !self.slides[ pos ] && self.group[ index ] ) {\r\n $slide = $('
').appendTo( self.$refs.stage );\r\n\r\n self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {\r\n pos : pos,\r\n $slide : $slide,\r\n isLoaded : false,\r\n });\r\n\r\n self.updateSlide( self.slides[ pos ] );\r\n }\r\n\r\n return self.slides[ pos ];\r\n },\r\n\r\n\r\n // Scale image to the actual size of the image\r\n // ===========================================\r\n\r\n scaleToActual : function( x, y, duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var imgPos, posX, posY, scaleX, scaleY;\r\n\r\n var canvasWidth = parseInt( current.$slide.width(), 10 );\r\n var canvasHeight = parseInt( current.$slide.height(), 10 );\r\n\r\n var newImgWidth = current.width;\r\n var newImgHeight = current.height;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate( $what );\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 );\r\n posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );\r\n\r\n // Make sure image does not move away from edges\r\n if ( newImgWidth > canvasWidth ) {\r\n posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );\r\n\r\n if ( posX > 0 ) {\r\n posX = 0;\r\n }\r\n\r\n if ( posX < canvasWidth - newImgWidth ) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if ( newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - ( ( y * scaleY ) - y );\r\n\r\n if ( posY > 0 ) {\r\n posY = 0;\r\n }\r\n\r\n if ( posY < canvasHeight - newImgHeight ) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor( newImgWidth, newImgHeight );\r\n\r\n $.fancybox.animate( $what, {\r\n top : posY,\r\n left : posX,\r\n scaleX : scaleX,\r\n scaleY : scaleY\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n // Stop slideshow\r\n if ( self.SlideShow && self.SlideShow.isActive ) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit : function( duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n var end;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n end = self.getFitPos( current );\r\n\r\n self.updateCursor( end.width, end.height );\r\n\r\n $.fancybox.animate( $what, {\r\n top : end.top,\r\n left : end.left,\r\n scaleX : end.width / $what.width(),\r\n scaleY : end.height / $what.height()\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos : function( slide ) {\r\n var self = this;\r\n var $what = slide.$content;\r\n\r\n var imgWidth = slide.width;\r\n var imgHeight = slide.height;\r\n\r\n var margin = slide.opts.margin;\r\n\r\n var canvasWidth, canvasHeight, minRatio, width, height;\r\n\r\n if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {\r\n return false;\r\n }\r\n\r\n // Convert \"margin to CSS style: [ top, right, bottom, left ]\r\n if ( $.type( margin ) === \"number\" ) {\r\n margin = [ margin, margin ];\r\n }\r\n\r\n if ( margin.length == 2 ) {\r\n margin = [ margin[0], margin[1], margin[0], margin[1] ];\r\n }\r\n\r\n // We can not use $slide width here, because it can have different diemensions while in transiton\r\n canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] );\r\n canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );\r\n\r\n minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );\r\n\r\n width = Math.floor( minRatio * imgWidth );\r\n height = Math.floor( minRatio * imgHeight );\r\n\r\n // Use floor rounding to make sure it really fits\r\n return {\r\n top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],\r\n left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ],\r\n width : width,\r\n height : height\r\n };\r\n\r\n },\r\n\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update : function() {\r\n var self = this;\r\n\r\n $.each( self.slides, function( key, slide ) {\r\n self.updateSlide( slide );\r\n });\r\n },\r\n\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide : function( slide, duration ) {\r\n var self = this,\r\n $what = slide && slide.$content;\r\n\r\n if ( $what && ( slide.width || slide.height ) ) {\r\n self.isAnimating = false;\r\n\r\n $.fancybox.stop( $what );\r\n\r\n $.fancybox.setTranslate( $what, self.getFitPos( slide ) );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.trigger( 'onUpdate', slide );\r\n\r\n },\r\n\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide : function( slide, duration ) {\r\n var self = this, canvasWidth, pos;\r\n\r\n if ( self.current ) {\r\n canvasWidth = Math.round( slide.$slide.width() );\r\n pos = slide.pos - self.current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ),\r\n opacity : 1\r\n }, duration === undefined ? 0 : duration, null, false);\r\n }\r\n },\r\n\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor : function( nextWidth, nextHeight ) {\r\n\r\n var self = this;\r\n var isScaledDown;\r\n\r\n var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' );\r\n\r\n if ( !self.current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( self.isZoomable() ) {\r\n\r\n $container.addClass( 'fancybox-is-zoomable' );\r\n\r\n if ( nextWidth !== undefined && nextHeight !== undefined ) {\r\n isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;\r\n\r\n } else {\r\n isScaledDown = self.isScaledDown();\r\n }\r\n\r\n if ( isScaledDown ) {\r\n\r\n // If image is scaled down, then, obviously, it can be zoomed to full size\r\n $container.addClass( 'fancybox-can-zoomIn' );\r\n\r\n } else {\r\n\r\n if ( self.current.opts.touch ) {\r\n\r\n // If image size ir largen than available available and touch module is not disable,\r\n // then user can do panning\r\n $container.addClass( 'fancybox-can-drag' );\r\n\r\n } else {\r\n $container.addClass( 'fancybox-can-zoomOut' );\r\n }\r\n\r\n }\r\n\r\n } else if ( self.current.opts.touch ) {\r\n $container.addClass( 'fancybox-can-drag' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var fitPos;\r\n\r\n if ( !current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n // Assume that slide is zoomable if\r\n // - image is loaded successfuly\r\n // - click action is \"zoom\"\r\n // - actual size of the image is smaller than available area\r\n if ( current.type === 'image' && current.isLoaded && !current.hasError &&\r\n ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === \"zoom\" ) )\r\n ) {\r\n\r\n fitPos = self.getFitPos( current );\r\n\r\n if ( current.width > fitPos.width || current.height > fitPos.height ) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = $.fancybox.getTranslate( $what );\r\n rez = rez.width < current.width || rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = self.getFitPos( current );\r\n rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide : function( slide ) {\r\n\r\n var self = this, type, $slide;\r\n var ajaxLoad;\r\n\r\n if ( slide.isLoading ) {\r\n return;\r\n }\r\n\r\n if ( slide.isLoaded ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n self.trigger( 'beforeLoad', slide );\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off( 'refresh' )\r\n .trigger( 'onReset' )\r\n .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )\r\n .addClass( slide.opts.slideClass );\r\n\r\n // Create content depending on the type\r\n\r\n switch ( type ) {\r\n\r\n case 'image':\r\n\r\n self.setImage( slide );\r\n\r\n break;\r\n\r\n case 'iframe':\r\n\r\n self.setIframe( slide );\r\n\r\n break;\r\n\r\n case 'html':\r\n\r\n self.setContent( slide, slide.src || slide.content );\r\n\r\n break;\r\n\r\n case 'inline':\r\n\r\n if ( $( slide.src ).length ) {\r\n self.setContent( slide, $( slide.src ) );\r\n\r\n } else {\r\n self.setError( slide );\r\n }\r\n\r\n break;\r\n\r\n case 'ajax':\r\n\r\n self.showLoading( slide );\r\n\r\n ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {\r\n url : slide.src,\r\n success : function ( data, textStatus ) {\r\n\r\n if ( textStatus === 'success' ) {\r\n self.setContent( slide, data );\r\n }\r\n\r\n },\r\n error : function ( jqXHR, textStatus ) {\r\n\r\n if ( jqXHR && textStatus !== 'abort' ) {\r\n self.setError( slide );\r\n }\r\n\r\n }\r\n }));\r\n\r\n $slide.one( 'onReset', function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n case 'video' :\r\n\r\n self.setContent( slide,\r\n ''\r\n );\r\n\r\n break;\r\n\r\n default:\r\n\r\n self.setError( slide );\r\n\r\n break;\r\n\r\n }\r\n\r\n return true;\r\n\r\n },\r\n\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage : function( slide ) {\r\n\r\n var self = this;\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset;\r\n\r\n var found, temp, pxRatio, windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if ( srcset ) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(',').map(function ( el ) {\r\n \t\tvar ret = {};\r\n\r\n \t\tel.trim().split(/\\s+/).forEach(function ( el, i ) {\r\n var value = parseInt( el.substring(0, el.length - 1), 10 );\r\n\r\n \t\t\tif ( i === 0 ) {\r\n \t\t\t\treturn ( ret.url = el );\r\n \t\t\t}\r\n\r\n if ( value ) {\r\n ret.value = value;\r\n ret.postfix = el[ el.length - 1 ];\r\n }\r\n\r\n \t\t});\r\n\r\n \t\treturn ret;\r\n \t});\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for ( var j = 0; j < temp.length; j++ ) {\r\n var el = temp[ j ];\r\n\r\n if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if ( !found && temp.length ) {\r\n found = temp[ temp.length - 1 ];\r\n }\r\n\r\n if ( found ) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if ( slide.width && slide.height && found.postfix == 'w' ) {\r\n slide.height = ( slide.width / slide.height ) * found.value;\r\n slide.width = found.value;\r\n }\r\n }\r\n }\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass( 'fancybox-is-hidden' )\r\n .appendTo( slide.$slide );\r\n\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {\r\n\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n slide.$ghost = $('')\r\n .one('error', function() {\r\n\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n self.afterLoad( slide );\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .appendTo( slide.$content )\r\n .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );\r\n\r\n } else {\r\n\r\n self.setBigImage( slide );\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage : function ( slide ) {\r\n var self = this;\r\n var $img = $('');\r\n\r\n slide.$image = $img\r\n .one('error', function() {\r\n\r\n self.setError( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n // Clear timeout that checks if loading icon needs to be displayed\r\n clearTimeout( slide.timouts );\r\n\r\n slide.timouts = null;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.width = slide.opts.width || this.naturalWidth;\r\n slide.height = slide.opts.height || this.naturalHeight;\r\n\r\n if ( slide.opts.image.srcset ) {\r\n $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.$ghost ) {\r\n\r\n slide.timouts = setTimeout(function() {\r\n slide.timouts = null;\r\n\r\n slide.$ghost.hide();\r\n\r\n }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );\r\n\r\n } else {\r\n self.afterLoad( slide );\r\n }\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .attr('src', slide.src)\r\n .appendTo( slide.$content );\r\n\r\n if ( ( $img[0].complete || $img[0].readyState == \"complete\" ) && $img[0].naturalWidth && $img[0].naturalHeight ) {\r\n $img.trigger( 'load' );\r\n\r\n } else if( $img[0].error ) {\r\n $img.trigger( 'error' );\r\n\r\n } else {\r\n\r\n slide.timouts = setTimeout(function() {\r\n if ( !$img[0].complete && !slide.hasError ) {\r\n self.showLoading( slide );\r\n }\r\n\r\n }, 100);\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe : function( slide ) {\r\n var self\t= this,\r\n opts = slide.opts.iframe,\r\n $slide\t= slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css( opts.css )\r\n .appendTo( $slide );\r\n\r\n $iframe = $( opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()) )\r\n .attr( opts.attr )\r\n .appendTo( slide.$content );\r\n\r\n if ( opts.preload ) {\r\n\r\n self.showLoading( slide );\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on('load.fb error.fb', function(e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.afterLoad( slide );\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on('refresh.fb', function() {\r\n var $wrap = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n scrollWidth,\r\n $contents,\r\n $body;\r\n\r\n if ( $iframe[0].isReady !== 1 ) {\r\n return;\r\n }\r\n\r\n // Check if content is accessible,\r\n // it will fail if frame is not with the same origin\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find('body');\r\n\r\n } catch (ignore) {}\r\n\r\n // Calculate dimensions for the wrapper\r\n if ( $body && $body.length ) {\r\n\r\n if ( frameWidth === undefined ) {\r\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\r\n\r\n frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\r\n frameWidth += $wrap.outerWidth() - $wrap.innerWidth();\r\n }\r\n\r\n if ( frameHeight === undefined ) {\r\n frameHeight = Math.ceil( $body.outerHeight(true) );\r\n frameHeight += $wrap.outerHeight() - $wrap.innerHeight();\r\n }\r\n\r\n // Resize wrapper to fit iframe content\r\n if ( frameWidth ) {\r\n $wrap.width( frameWidth );\r\n }\r\n\r\n if ( frameHeight ) {\r\n $wrap.height( frameHeight );\r\n }\r\n }\r\n\r\n $wrap.removeClass( 'fancybox-is-hidden' );\r\n\r\n });\r\n\r\n } else {\r\n\r\n this.afterLoad( slide );\r\n\r\n }\r\n\r\n $iframe.attr( 'src', slide.src );\r\n\r\n if ( slide.opts.smallBtn === true ) {\r\n slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );\r\n }\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one( 'onReset', function () {\r\n\r\n // This helps IE not to throw errors when closing\r\n try {\r\n\r\n $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );\r\n\r\n } catch ( ignore ) {}\r\n\r\n $( this ).empty();\r\n\r\n slide.isLoaded = false;\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent : function ( slide, content ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n slide.$slide.empty();\r\n\r\n if ( isQuery( content ) && content.parent().length ) {\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n // If user is navigating gallery fast, then the content might be already inside fancyBox\r\n // =====================================================================================\r\n\r\n // Make sure content is not already moved to fancyBox\r\n content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $( '
' ).hide().insertAfter( content );\r\n\r\n // Make sure content is visible\r\n content.css('display', 'inline-block');\r\n\r\n } else if ( !slide.hasError ) {\r\n\r\n // If content is just a plain text, try to convert it to html\r\n if ( $.type( content ) === 'string' ) {\r\n content = $('
').append( $.trim( content ) ).contents();\r\n\r\n // If we have text node, then add wrapping element to make vertical alignment work\r\n if ( content[0].nodeType === 3 ) {\r\n content = $('
').html( content );\r\n }\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if ( slide.opts.filter ) {\r\n content = $('
').html( content ).find( slide.opts.filter );\r\n }\r\n\r\n }\r\n\r\n slide.$slide.one('onReset', function () {\r\n\r\n // Pause all html5 video/audio\r\n $( this ).find( 'video,audio' ).trigger( 'pause' );\r\n\r\n // Put content back\r\n if ( slide.$placeholder ) {\r\n slide.$placeholder.after( content.hide() ).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if ( slide.$smallBtn ) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if ( !slide.hasError ) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n }\r\n\r\n });\r\n\r\n slide.$content = $( content ).appendTo( slide.$slide );\r\n\r\n this.afterLoad( slide );\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError : function ( slide ) {\r\n\r\n slide.hasError = true;\r\n\r\n slide.$slide.removeClass( 'fancybox-slide--' + slide.type );\r\n\r\n this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );\r\n\r\n },\r\n\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && !slide.$spinner ) {\r\n slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );\r\n }\r\n\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && slide.$spinner ) {\r\n slide.$spinner.remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n\r\n },\r\n\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad : function( slide ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger( 'afterLoad', slide );\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.opts.smallBtn && !slide.$smallBtn ) {\r\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() );\r\n }\r\n\r\n if ( slide.opts.protect && slide.$content && !slide.hasError ) {\r\n\r\n // Disable right click\r\n slide.$content.on( 'contextmenu.fb', function( e ) {\r\n if ( e.button == 2 ) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if ( slide.type === 'image' ) {\r\n $( '
' ).appendTo( slide.$content );\r\n }\r\n\r\n }\r\n\r\n self.revealContent( slide );\r\n\r\n },\r\n\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent : function( slide ) {\r\n\r\n var self = this;\r\n var $slide = slide.$slide;\r\n\r\n var effect, effectClassName, duration, opacity, end, start = false;\r\n\r\n effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ];\r\n duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n\r\n duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );\r\n\r\n if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n\r\n if ( effect === 'zoom' ) {\r\n end = self.getFitPos( slide );\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n delete end.width;\r\n delete end.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );\r\n\r\n forceRedraw( slide.$content );\r\n\r\n // Start animation\r\n $.fancybox.animate( slide.$content, end, duration, function() {\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide( slide );\r\n\r\n\r\n // Simply show content\r\n // ===================\r\n\r\n if ( !effect ) {\r\n forceRedraw( $slide );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $slide );\r\n\r\n effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;\r\n\r\n $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n //Force reflow for CSS3 transitions\r\n forceRedraw( $slide );\r\n\r\n $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {\r\n $slide.removeClass( effectClassName ).removeAttr( 'style' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n }, true);\r\n\r\n },\r\n\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos : function( slide ) {\r\n\r\n var self = this;\r\n var rez = false;\r\n\r\n // Check if element is inside the viewport by at least 1 pixel\r\n var isElementVisible = function( $el ) {\r\n var element = $el[0];\r\n\r\n var elementRect = element.getBoundingClientRect();\r\n var parentRects = [];\r\n\r\n var visibleInAllParents;\r\n\r\n while ( element.parentElement !== null ) {\r\n if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) {\r\n parentRects.push(element.parentElement.getBoundingClientRect());\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n visibleInAllParents = parentRects.every(function(parentRect){\r\n var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);\r\n var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);\r\n\r\n return visiblePixelX > 0 && visiblePixelY > 0;\r\n });\r\n\r\n return visibleInAllParents &&\r\n elementRect.bottom > 0 && elementRect.right > 0 &&\r\n elementRect.left < $(window).width() && elementRect.top < $(window).height();\r\n };\r\n\r\n var $thumb = slide.opts.$thumb;\r\n var thumbPos = $thumb ? $thumb.offset() : 0;\r\n var slidePos;\r\n\r\n if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {\r\n slidePos = self.$refs.stage.offset();\r\n\r\n rez = {\r\n top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( \"border-top-width\" ) || 0 ),\r\n left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( \"border-left-width\" ) || 0 ),\r\n width : $thumb.width(),\r\n height : $thumb.height(),\r\n scaleX : 1,\r\n scaleY : 1\r\n };\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete : function() {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n promise;\r\n\r\n if ( current.isMoved || !current.isLoaded || current.isComplete ) {\r\n return;\r\n }\r\n\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger( 'onReset' );\r\n\r\n self.preload( 'inline' );\r\n\r\n // Trigger any CSS3 transiton inside the slide\r\n forceRedraw( current.$slide );\r\n\r\n current.$slide.addClass( 'fancybox-slide--complete' );\r\n\r\n // Remove unnecessary slides\r\n $.each( self.slides, function( key, slide ) {\r\n if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {\r\n slides[ slide.pos ] = slide;\r\n\r\n } else if ( slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger( 'afterShow' );\r\n\r\n // Play first html5 video/audio\r\n current.$slide.find( 'video,audio' ).first().trigger( 'play' );\r\n\r\n // Try to focus on the first focusable element\r\n if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {\r\n self.focus();\r\n }\r\n\r\n },\r\n\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload : function( type ) {\r\n var self = this,\r\n next = self.slides[ self.currPos + 1 ],\r\n prev = self.slides[ self.currPos - 1 ];\r\n\r\n if ( next && next.type === type ) {\r\n self.loadSlide( next );\r\n }\r\n\r\n if ( prev && prev.type === type ) {\r\n self.loadSlide( prev );\r\n }\r\n },\r\n\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus : function() {\r\n var current = this.current;\r\n var $el;\r\n\r\n if ( this.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( current && current.isComplete ) {\r\n\r\n // Look for first input with autofocus attribute\r\n $el = current.$slide.find('input[autofocus]:enabled:visible:first');\r\n\r\n if ( !$el.length ) {\r\n $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first');\r\n }\r\n }\r\n\r\n $el = $el && $el.length ? $el : this.$refs.container;\r\n\r\n $el.focus();\r\n },\r\n\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate : function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $( '.fancybox-container' ).each(function () {\r\n var instance = $(this).data( 'FancyBox' );\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger( 'onDeactivate' );\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if ( self.current || self.isIdle ) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger( 'onActivate' );\r\n\r\n self.addEvents();\r\n },\r\n\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close : function( e, d ) {\r\n\r\n var self = this;\r\n var current = self.current;\r\n\r\n var effect, duration;\r\n var $what, opacity, start, end;\r\n\r\n var done = function() {\r\n self.cleanUp( e );\r\n };\r\n\r\n if ( self.isClosing ) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if ( self.trigger( 'beforeClose', e ) === false ) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n if ( current.timouts ) {\r\n clearTimeout( current.timouts );\r\n }\r\n\r\n $what = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );\r\n\r\n // Remove other slides\r\n current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );\r\n\r\n current.$slide.siblings().trigger( 'onReset' ).remove();\r\n\r\n // Trigger animations\r\n if ( duration ) {\r\n self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );\r\n }\r\n\r\n // Clean up\r\n self.hideLoading( current );\r\n\r\n self.hideControls();\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n if ( effect === 'zoom' ) {\r\n $.fancybox.stop( $what );\r\n\r\n start = $.fancybox.getTranslate( $what );\r\n\r\n start.width = start.width * start.scaleX;\r\n start.height = start.height * start.scaleY;\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n end.opacity = 0;\r\n }\r\n\r\n start.scaleX = start.width / end.width;\r\n start.scaleY = start.height / end.height;\r\n\r\n start.width = end.width;\r\n start.height = end.height;\r\n\r\n $.fancybox.setTranslate( current.$content, start );\r\n\r\n forceRedraw( current.$content );\r\n\r\n $.fancybox.animate( current.$content, end, duration, done );\r\n\r\n return true;\r\n }\r\n\r\n if ( effect && duration ) {\r\n\r\n // If skip animation\r\n if ( e === true ) {\r\n setTimeout( done, duration );\r\n\r\n } else {\r\n $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );\r\n }\r\n\r\n } else {\r\n done();\r\n }\r\n\r\n return true;\r\n },\r\n\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp : function( e ) {\r\n var self = this,\r\n $body = $( 'body' ),\r\n instance,\r\n offset;\r\n\r\n self.current.$slide.trigger( 'onReset' );\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger( 'afterClose', e );\r\n\r\n // Place back focus\r\n if ( self.$lastFocus && !!self.current.opts.backFocus ) {\r\n self.$lastFocus.focus();\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if ( instance ) {\r\n instance.activate();\r\n\r\n } else {\r\n\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n\r\n $body.removeClass( 'fancybox-active compensate-for-scrollbar' );\r\n\r\n if ( $body.hasClass( 'fancybox-iosfix' ) ) {\r\n offset = parseInt(document.body.style.top, 10);\r\n\r\n $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 );\r\n }\r\n\r\n $( '#fancybox-style-noscroll' ).remove();\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger : function( name, slide ) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if ( obj ) {\r\n args.unshift( obj );\r\n\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift( self );\r\n\r\n if ( $.isFunction( obj.opts[ name ] ) ) {\r\n rez = obj.opts[ name ].apply( obj, args );\r\n }\r\n\r\n if ( rez === false ) {\r\n return rez;\r\n }\r\n\r\n if ( name === 'afterClose' || !self.$refs ) {\r\n $D.trigger( name + '.fb', args );\r\n\r\n } else {\r\n self.$refs.container.trigger( name + '.fb', args );\r\n }\r\n\r\n },\r\n\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls : function ( force ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current,\r\n index = current.index,\r\n caption = current.opts.caption,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger( 'refresh' );\r\n\r\n self.$caption = caption && caption.length ? $caption.html( caption ) : null;\r\n\r\n if ( !self.isHiddenControls && !self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find('[data-fancybox-count]').html( self.group.length );\r\n $container.find('[data-fancybox-index]').html( index + 1 );\r\n\r\n $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) );\r\n $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) );\r\n\r\n if ( current.type === 'image' ) {\r\n\r\n // Update download button source\r\n $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show();\r\n\r\n } else {\r\n $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide();\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls : function () {\r\n\r\n this.isHiddenControls = true;\r\n\r\n this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' );\r\n\r\n },\r\n\r\n showControls : function() {\r\n var self = this;\r\n var opts = self.current ? self.current.opts : self.opts;\r\n var $container = self.$refs.container;\r\n\r\n self.isHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )\r\n .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-is-modal', !!opts.modal );\r\n\r\n if ( self.$caption ) {\r\n $container.addClass( 'fancybox-show-caption ');\r\n\r\n } else {\r\n $container.removeClass( 'fancybox-show-caption' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls : function() {\r\n if ( this.isHiddenControls ) {\r\n this.showControls();\r\n\r\n } else {\r\n this.hideControls();\r\n }\r\n\r\n },\r\n\r\n\r\n });\r\n\r\n\r\n $.fancybox = {\r\n\r\n version : \"3.2.10\",\r\n defaults : defaults,\r\n\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance : function ( command ) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data( 'FancyBox' );\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if ( instance instanceof FancyBox ) {\r\n\r\n if ( $.type( command ) === 'string' ) {\r\n instance[ command ].apply( instance, args );\r\n\r\n } else if ( $.type( command ) === 'function' ) {\r\n command.apply( instance, args );\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open : function ( items, opts, index ) {\r\n return new FancyBox( items, opts, index );\r\n },\r\n\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close : function ( all ) {\r\n var instance = this.getInstance();\r\n\r\n if ( instance ) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n\r\n if ( all === true ) {\r\n this.close();\r\n }\r\n }\r\n\r\n },\r\n\r\n // Close instances and unbind all events\r\n // ==============================\r\n\r\n destroy : function() {\r\n\r\n this.close( true );\r\n\r\n $D.off( 'click.fb-start' );\r\n\r\n },\r\n\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d : (function() {\r\n var div = document.createElement('div');\r\n\r\n return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);\r\n }()),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate : function( $el ) {\r\n var matrix;\r\n\r\n if ( !$el || !$el.length ) {\r\n return false;\r\n }\r\n\r\n matrix = $el.eq( 0 ).css('transform');\r\n\r\n if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {\r\n matrix = matrix.split('(')[1];\r\n matrix = matrix.split(')')[0];\r\n matrix = matrix.split(',');\r\n } else {\r\n matrix = [];\r\n }\r\n\r\n if ( matrix.length ) {\r\n\r\n // If IE\r\n if ( matrix.length > 10 ) {\r\n matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];\r\n\r\n } else {\r\n matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];\r\n }\r\n\r\n matrix = matrix.map(parseFloat);\r\n\r\n } else {\r\n matrix = [ 0, 0, 1, 1 ];\r\n\r\n var transRegex = /\\.*translate\\((.*)px,(.*)px\\)/i;\r\n var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );\r\n\r\n if ( transRez ) {\r\n matrix[ 0 ] = parseFloat( transRez[2] );\r\n matrix[ 1 ] = parseFloat( transRez[1] );\r\n }\r\n }\r\n\r\n return {\r\n top : matrix[ 0 ],\r\n left : matrix[ 1 ],\r\n scaleX : matrix[ 2 ],\r\n scaleY : matrix[ 3 ],\r\n opacity : parseFloat( $el.css('opacity') ),\r\n width : $el.width(),\r\n height : $el.height()\r\n };\r\n\r\n },\r\n\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate : function( $el, props ) {\r\n var str = '';\r\n var css = {};\r\n\r\n if ( !$el || !props ) {\r\n return;\r\n }\r\n\r\n if ( props.left !== undefined || props.top !== undefined ) {\r\n str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';\r\n\r\n if ( this.use3d ) {\r\n str = 'translate3d(' + str + ', 0px)';\r\n\r\n } else {\r\n str = 'translate(' + str + ')';\r\n }\r\n }\r\n\r\n if ( props.scaleX !== undefined && props.scaleY !== undefined ) {\r\n str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';\r\n }\r\n\r\n if ( str.length ) {\r\n css.transform = str;\r\n }\r\n\r\n if ( props.opacity !== undefined ) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if ( props.width !== undefined ) {\r\n css.width = props.width;\r\n }\r\n\r\n if ( props.height !== undefined ) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css( css );\r\n },\r\n\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate : function ( $el, to, duration, callback, leaveAnimationName ) {\r\n if ( $.isFunction( duration ) ) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n if ( !$.isPlainObject( to ) ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n $el.on( transitionEnd, function(e) {\r\n\r\n // Skip events from child elements and z-index change\r\n if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $el );\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n\r\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\r\n $el.css( 'transition-duration', '' );\r\n\r\n to.width = Math.round( $el.width() * to.scaleX );\r\n to.height = Math.round( $el.height() * to.scaleY );\r\n\r\n to.scaleX = 1;\r\n to.scaleY = 1;\r\n\r\n $.fancybox.setTranslate( $el, to );\r\n }\r\n\r\n if ( leaveAnimationName === false ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n } else if ( leaveAnimationName !== true ) {\r\n $el.removeClass( to );\r\n }\r\n\r\n if ( $.isFunction( callback ) ) {\r\n callback( e );\r\n }\r\n\r\n });\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n $el.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n $.fancybox.setTranslate( $el, to );\r\n\r\n } else {\r\n $el.addClass( to );\r\n }\r\n\r\n if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().addClass( 'fancybox-is-scaling' );\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\"timer\", setTimeout(function() {\r\n $el.trigger( 'transitionend' );\r\n }, duration + 16));\r\n\r\n },\r\n\r\n stop : function( $el ) {\r\n clearTimeout( $el.data(\"timer\") );\r\n\r\n $el.off( 'transitionend' ).css( 'transition-duration', '' );\r\n\r\n if ( $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().removeClass( 'fancybox-is-scaling' );\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run( e ) {\r\n var $target\t= $( e.currentTarget ),\r\n opts\t= e.data ? e.data.options : {},\r\n value\t= $target.attr( 'data-fancybox' ) || '',\r\n index\t= 0,\r\n items = [];\r\n\r\n // Avoid opening multiple times\r\n if ( e.isDefaultPrevented() ) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n // Get all related items and find index for clicked one\r\n if ( value ) {\r\n items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] );\r\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\r\n\r\n index = items.index( $target );\r\n\r\n // Sometimes current item can not be found\r\n // (for example, when slider clones items)\r\n if ( index < 0 ) {\r\n index = 0;\r\n }\r\n\r\n } else {\r\n items = [ $target ];\r\n }\r\n\r\n $.fancybox.open( items, opts, index );\r\n }\r\n\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if ( selector ) {\r\n\r\n $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {\r\n options : options\r\n }, _run );\r\n\r\n } else {\r\n\r\n this.off( 'click.fb-start' ).on( 'click.fb-start', {\r\n items : this,\r\n options : options\r\n }, _run);\r\n\r\n }\r\n\r\n return this;\r\n };\r\n\r\n\r\n // Self initializing plugin\r\n // ========================\r\n\r\n $D.on( 'click.fb-start', '[data-fancybox]', _run );\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n;(function ($) {\r\n\r\n\t'use strict';\r\n\r\n\t// Formats matching url to final form\r\n\r\n\tvar format = function (url, rez, params) {\r\n\t\tif ( !url ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparams = params || '';\r\n\r\n\t\tif ( $.type(params) === \"object\" ) {\r\n\t\t\tparams = $.param(params, true);\r\n\t\t}\r\n\r\n\t\t$.each(rez, function (key, value) {\r\n\t\t\turl = url.replace('$' + key, value || '');\r\n\t\t});\r\n\r\n\t\tif (params.length) {\r\n\t\t\turl += (url.indexOf('?') > 0 ? '&' : '?') + params;\r\n\t\t}\r\n\r\n\t\treturn url;\r\n\t};\r\n\r\n\t// Object containing properties for each media type\r\n\r\n\tvar defaults = {\r\n\t\tyoutube : {\r\n\t\t\tmatcher : /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\tautohide : 1,\r\n\t\t\t\tfs : 1,\r\n\t\t\t\trel : 0,\r\n\t\t\t\thd : 1,\r\n\t\t\t\twmode : 'transparent',\r\n\t\t\t\tenablejsapi : 1,\r\n\t\t\t\thtml5 : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 8,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.youtube.com/embed/$4',\r\n\t\t\tthumb : '//img.youtube.com/vi/$4/hqdefault.jpg'\r\n\t\t},\r\n\r\n\t\tvimeo : {\r\n\t\t\tmatcher : /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\thd : 1,\r\n\t\t\t\tshow_title : 1,\r\n\t\t\t\tshow_byline : 1,\r\n\t\t\t\tshow_portrait : 0,\r\n\t\t\t\tfullscreen : 1,\r\n\t\t\t\tapi : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 3,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//player.vimeo.com/video/$2'\r\n\t\t},\r\n\r\n\t\tmetacafe : {\r\n\t\t\tmatcher : /metacafe.com\\/watch\\/(\\d+)\\/(.*)?/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.metacafe.com/embed/$1/?ap=1'\r\n\t\t},\r\n\r\n\t\tdailymotion : {\r\n\t\t\tmatcher : /dailymotion.com\\/video\\/(.*)\\/?(.*)/,\r\n\t\t\tparams : {\r\n\t\t\t\tadditionalInfos : 0,\r\n\t\t\t\tautoStart : 1\r\n\t\t\t},\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.dailymotion.com/embed/video/$1'\r\n\t\t},\r\n\r\n\t\tvine : {\r\n\t\t\tmatcher : /vine.co\\/v\\/([a-zA-Z0-9\\?\\=\\-]+)/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//vine.co/v/$1/embed/simple'\r\n\t\t},\r\n\r\n\t\tinstagram : {\r\n\t\t\tmatcher : /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n\t\t\ttype : 'image',\r\n\t\t\turl : '//$1/p/$2/media/?size=l'\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n\t\t// https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n\t\t// https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n\t\tgmap_place : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\\//, \"&\") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// https://www.google.com/maps/search/Empire+State+Building/\r\n\t\t// https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n\t\t// https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n\t\tgmap_search : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$(document).on('objectNeedsType.fb', function (e, instance, item) {\r\n\r\n\t\tvar url\t = item.src || '',\r\n\t\t\ttype = false,\r\n\t\t\tmedia,\r\n\t\t\tthumb,\r\n\t\t\trez,\r\n\t\t\tparams,\r\n\t\t\turlParams,\r\n\t\t\tparamObj,\r\n\t\t\tprovider;\r\n\r\n\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\r\n\r\n\t\t// Look for any matching media type\r\n\t\t$.each(media, function ( providerName, providerOpts ) {\r\n\t\t\trez = url.match( providerOpts.matcher );\r\n\r\n\t\t\tif ( !rez ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttype = providerOpts.type;\r\n\t\t\tparamObj = {};\r\n\r\n\t\t\tif ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) {\r\n\t\t\t\turlParams = rez[ providerOpts.paramPlace ];\r\n\r\n\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\r\n\t\t\t\t\turlParams = urlParams.substring(1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\turlParams = urlParams.split('&');\r\n\r\n\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\r\n\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\r\n\r\n\t\t\t\t\tif ( p.length == 2 ) {\r\n\t\t\t\t\t\tparamObj[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparams = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj );\r\n\r\n\t\t\turl = $.type( providerOpts.url ) === \"function\" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params );\r\n\t\t\tthumb = $.type( providerOpts.thumb ) === \"function\" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez );\r\n\r\n\t\t\tif ( providerName === 'vimeo' ) {\r\n\t\t\t\turl = url.replace('&%23', '#');\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\t// If it is found, then change content type and update the url\r\n\r\n\t\tif ( type ) {\r\n\t\t\titem.src = url;\r\n\t\t\titem.type = type;\r\n\r\n\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\r\n\t\t\t\titem.opts.thumb = thumb;\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === 'iframe' ) {\r\n\t\t\t\t$.extend(true, item.opts, {\r\n\t\t\t\t\tiframe : {\r\n\t\t\t\t\t\tpreload : false,\r\n\t\t\t\t\t\tattr : {\r\n\t\t\t\t\t\t\tscrolling : \"no\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.contentProvider = provider;\r\n\r\n\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );\r\n\t\t\t}\r\n\r\n\t\t} else if ( url ) {\r\n\t\t\titem.type = item.opts.defaultType;\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n;(function (window, document, $) {\r\n\t'use strict';\r\n\r\n\tvar requestAFrame = (function () {\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\t// if all else fails, use setTimeout\r\n\t\t\tfunction (callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar cancelAFrame = (function () {\r\n\t\treturn window.cancelAnimationFrame ||\r\n\t\t\twindow.webkitCancelAnimationFrame ||\r\n\t\t\twindow.mozCancelAnimationFrame ||\r\n\t\t\twindow.oCancelAnimationFrame ||\r\n\t\t\tfunction (id) {\r\n\t\t\t\twindow.clearTimeout(id);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar pointers = function( e ) {\r\n\t\tvar result = [];\r\n\r\n\t\te = e.originalEvent || e || window.e;\r\n\t\te = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );\r\n\r\n\t\tfor ( var key in e ) {\r\n\r\n\t\t\tif ( e[ key ].pageX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].pageX, y : e[ key ].pageY } );\r\n\r\n\t\t\t} else if ( e[ key ].clientX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].clientX, y : e[ key ].clientY } );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tvar distance = function( point2, point1, what ) {\r\n\t\tif ( !point1 || !point2 ) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif ( what === 'x' ) {\r\n\t\t\treturn point2.x - point1.x;\r\n\r\n\t\t} else if ( what === 'y' ) {\r\n\t\t\treturn point2.y - point1.y;\r\n\t\t}\r\n\r\n\t\treturn Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );\r\n\t};\r\n\r\n\tvar isClickable = function( $el ) {\r\n\t\tif ( $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check for attributes like data-fancybox-next or data-fancybox-close\r\n\t\tfor ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {\r\n\t\t\tif ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t \treturn false;\r\n\t};\r\n\r\n\tvar hasScrollbars = function( el ) {\r\n\t\tvar overflowY = window.getComputedStyle( el )['overflow-y'];\r\n\t\tvar overflowX = window.getComputedStyle( el )['overflow-x'];\r\n\r\n\t\tvar vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;\r\n\t\tvar horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;\r\n\r\n\t\treturn vertical || horizontal;\r\n\t};\r\n\r\n\tvar isScrollable = function ( $el ) {\r\n\t\tvar rez = false;\r\n\r\n\t\twhile ( true ) {\r\n\t\t\trez\t= hasScrollbars( $el.get(0) );\r\n\r\n\t\t\tif ( rez ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t$el = $el.parent();\r\n\r\n\t\t\tif ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rez;\r\n\t};\r\n\r\n\r\n\tvar Guestures = function ( instance ) {\r\n\t\tvar self = this;\r\n\r\n\t\tself.instance = instance;\r\n\r\n\t\tself.$bg = instance.$refs.bg;\r\n\t\tself.$stage = instance.$refs.stage;\r\n\t\tself.$container = instance.$refs.container;\r\n\r\n\t\tself.destroy();\r\n\r\n\t\tself.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );\r\n\t};\r\n\r\n\tGuestures.prototype.destroy = function() {\r\n\t\tthis.$container.off( '.fb.touch' );\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchstart = function( e ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar $target = $( e.target );\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\t\tvar $content = current.$content;\r\n\r\n\t\tvar isTouchDevice = ( e.type == 'touchstart' );\r\n\r\n\t\t// Do not respond to both (touch and mouse) events\r\n\t\tif ( isTouchDevice ) {\r\n\t\t\tself.$container.off( 'mousedown.fb.touch' );\r\n\t\t}\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore taping on links, buttons, input elements\r\n\t\tif ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks on the scrollbar\r\n\t\tif ( !$target.is('img') && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks while zooming or closing\r\n\t\tif ( !current || self.instance.isAnimating || self.instance.isClosing ) {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.realPoints = self.startPoints = pointers( e );\r\n\r\n\t\tif ( !self.startPoints ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tself.startEvent = e;\r\n\r\n\t\tself.canTap = true;\r\n\t\tself.$target = $target;\r\n\t\tself.$content = $content;\r\n\t\tself.opts = current.opts.touch;\r\n\r\n\t\tself.isPanning = false;\r\n\t\tself.isSwiping = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 };\r\n\t\tself.contentStartPos = $.fancybox.getTranslate( self.$content );\r\n\t\tself.contentLastPos = null;\r\n\r\n\t\tself.startTime = new Date().getTime();\r\n\t\tself.distanceX = self.distanceY = self.distance = 0;\r\n\r\n\t\tself.canvasWidth = Math.round( current.$slide[0].clientWidth );\r\n\t\tself.canvasHeight = Math.round( current.$slide[0].clientHeight );\r\n\r\n\t\t$(document)\r\n\t\t\t.off( '.fb.touch' )\r\n\t\t\t.on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"))\r\n\t\t\t.on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\r\n\r\n\t\tif ( $.fancybox.isMobile ) {\r\n\t\t\tdocument.addEventListener('scroll', self.onscroll, true);\r\n\t\t}\r\n\r\n\t\tif ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\r\n\t\t\t// Prevent image ghosting while dragging\r\n\t\t\tif ( $target.is('img') ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !( $.fancybox.isMobile && ( isScrollable( $target ) || isScrollable( $target.parent() ) ) ) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 1 ) {\r\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\r\n\t\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\t\tself.isPanning = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.isSwiping = true;\r\n\t\t\t}\r\n\r\n\t\t\tself.$container.addClass( 'fancybox-controls--isGrabbing' );\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\t\t\tself.canTap = false;\r\n\t\t\tself.isSwiping = false;\r\n\t\t\tself.isPanning = false;\r\n\r\n\t\t\tself.isZooming = true;\r\n\r\n\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\tself.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();\r\n\t\t\tself.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();\r\n\r\n\t\t\tself.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;\r\n\t\t\tself.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height;\r\n\r\n\t\t\tself.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onscroll = function(e) {\r\n\t\tself.isScrolling = true;\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchmove = function( e ) {\r\n\t\tvar self = this,\r\n\t\t\t$target = $(e.target);\r\n\r\n\t\tif ( self.isScrolling || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\t\t\tself.canTap = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.newPoints = pointers( e );\r\n\r\n\t\tif ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !(self.isSwiping && self.isSwiping === true) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tself.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );\r\n\t\tself.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );\r\n\r\n\t\tself.distance = distance( self.newPoints[0], self.startPoints[0] )\r\n\r\n\t\t// Skip false ontouchmove events (Chrome)\r\n\t\tif ( self.distance > 0 ) {\r\n\t\t\tif ( self.isSwiping ) {\r\n\t\t\t\tself.onSwipe(e);\r\n\r\n\t\t\t} else if ( self.isPanning ) {\r\n\t\t\t\tself.onPan();\r\n\r\n\t\t\t} else if ( self.isZooming ) {\r\n\t\t\t\tself.onZoom();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onSwipe = function(e) {\r\n\t\tvar self = this,\r\n\t\t\tswiping = self.isSwiping,\r\n\t\t\tleft = self.sliderStartPos.left || 0,\r\n\t\t\tangle;\r\n\r\n\t\t// If direction is not yet determined\r\n\t\tif ( swiping === true ) {\r\n\r\n\t\t\t// We need at least 10px distance to correctly calculate an angle\r\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\tif ( self.instance.group.length < 2 && self.opts.vertical ) {\r\n\t\t\t\t\tself.isSwiping = 'y';\r\n\r\n\t\t\t\t} else if ( self.instance.isDragging || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) {\r\n\t\t\t\t\tself.isSwiping = 'x';\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tangle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );\r\n\r\n\t\t\t\t\tself.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\t if ( self.isSwiping === 'y' && $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\r\n\t\t\t\t\t self.isScrolling = true;\r\n\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\tself.instance.isDragging = self.isSwiping;\r\n\r\n\t\t\t\t// Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n\t\t\t\tself.startPoints = self.newPoints;\r\n\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\t$.fancybox.stop( slide.$slide );\r\n\r\n\t\t\t\t\tslide.$slide.css( 'transition-duration', '' );\r\n\r\n\t\t\t\t\tslide.inTransition = false;\r\n\r\n\t\t\t\t\tif ( slide.pos === self.instance.current.pos ) {\r\n\t\t\t\t\t\tself.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Stop slideshow\r\n\t\t\t\tif ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {\r\n\t\t\t\t\tself.instance.SlideShow.stop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Sticky edges\r\n\t\tif ( swiping == 'x' ) {\r\n\t\t\tif ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left + Math.pow( self.distanceX, 0.8 );\r\n\r\n\t\t\t} else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tleft = left + self.distanceX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.sliderLastPos = {\r\n\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\r\n\t\t\tleft : left\r\n\t\t};\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\r\n\t\t\tif ( self.sliderLastPos ) {\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\r\n\r\n\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\r\n\t\t\t\t\t\ttop : self.sliderLastPos.top,\r\n\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onPan = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Sometimes, when tapping causally, image can move a bit and that breaks double tapping\r\n\t\tif ( distance( self.newPoints[0], self.realPoints[0] ) < ($.fancybox.isMobile ? 10 : 5) ) {\r\n\t\t\tself.startPoints = self.newPoints;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.contentLastPos = self.limitMovement();\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\t};\r\n\r\n\t// Make panning sticky to the edges\r\n\tGuestures.prototype.limitMovement = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tvar distanceX = self.distanceX;\r\n\t\tvar distanceY = self.distanceY;\r\n\r\n\t\tvar contentStartPos = self.contentStartPos;\r\n\r\n\t\tvar currentOffsetX = contentStartPos.left;\r\n\t\tvar currentOffsetY = contentStartPos.top;\r\n\r\n\t\tvar currentWidth = contentStartPos.width;\r\n\t\tvar currentHeight = contentStartPos.height;\r\n\r\n\t\tvar minTranslateX, minTranslateY,\r\n\t\t\tmaxTranslateX, maxTranslateY,\r\n\t\t\tnewOffsetX, newOffsetY;\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = currentOffsetX + distanceX;\r\n\r\n\t\t} else {\r\n\t\t\tnewOffsetX = currentOffsetX;\r\n\t\t}\r\n\r\n\t\tnewOffsetY = currentOffsetY + distanceY;\r\n\r\n\t\t// Slow down proportionally to traveled distance\r\n\t\tminTranslateX = Math.max( 0, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tminTranslateY = Math.max( 0, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tmaxTranslateX = Math.min( canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tmaxTranslateY = Math.min( canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\r\n\t\t\t// ->\r\n\t\t\tif ( distanceX > 0 && newOffsetX > minTranslateX ) {\r\n\t\t\t\tnewOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// <-\r\n\t\t\tif ( distanceX < 0 && newOffsetX < maxTranslateX ) {\r\n\t\t\t\tnewOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( currentHeight > canvasHeight ) {\r\n\r\n\t\t\t// \\/\r\n\t\t\tif ( distanceY > 0 && newOffsetY > minTranslateY ) {\r\n\t\t\t\tnewOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// /\\\r\n\t\t\tif ( distanceY < 0 && newOffsetY < maxTranslateY ) {\r\n\t\t\t\tnewOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : contentStartPos.scaleX,\r\n\t\t\tscaleY : contentStartPos.scaleY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tif ( newWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n\t\t\tnewOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center horizontally\r\n\t\t\tnewOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( newHeight > canvasHeight ) {\r\n\t\t\tnewOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n\t\t\tnewOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center vertically\r\n\t\t\tnewOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onZoom = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Calculate current distance between points to get pinch ratio and new width and height\r\n\r\n\t\tvar currentWidth = self.contentStartPos.width;\r\n\t\tvar currentHeight = self.contentStartPos.height;\r\n\r\n\t\tvar currentOffsetX = self.contentStartPos.left;\r\n\t\tvar currentOffsetY = self.contentStartPos.top;\r\n\r\n\t\tvar endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );\r\n\r\n\t\tvar pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n\t\tvar newWidth = Math.floor( currentWidth * pinchRatio );\r\n\t\tvar newHeight = Math.floor( currentHeight * pinchRatio );\r\n\r\n\t\t// This is the translation due to pinch-zooming\r\n\t\tvar translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n\t\tvar translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n\t\t//Point between the two touches\r\n\r\n\t\tvar centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();\r\n\t\tvar centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();\r\n\r\n\t\t// And this is the translation due to translation of the centerpoint\r\n\t\t// between the two fingers\r\n\r\n\t\tvar translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n\t\tvar translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n\t\t// The new offset is the old/current one plus the total translation\r\n\r\n\t\tvar newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );\r\n\t\tvar newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );\r\n\r\n\t\tvar newPos = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : self.contentStartPos.scaleX * pinchRatio,\r\n\t\t\tscaleY : self.contentStartPos.scaleY * pinchRatio\r\n\t\t};\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.newWidth = newWidth;\r\n\t\tself.newHeight = newHeight;\r\n\r\n\t\tself.contentLastPos = newPos;\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchend = function( e ) {\r\n\t\tvar self = this;\r\n\t\tvar dMs = Math.max( (new Date().getTime() ) - self.startTime, 1);\r\n\r\n\t\tvar swiping = self.isSwiping;\r\n\t\tvar panning = self.isPanning;\r\n\t\tvar zooming = self.isZooming;\r\n\t\tvar scrolling = self.isScrolling;\r\n\r\n\t\tself.endPoints = pointers( e );\r\n\r\n\t\tself.$container.removeClass( 'fancybox-controls--isGrabbing' );\r\n\r\n\t\t$(document).off( '.fb.touch' );\r\n\r\n\t\tdocument.removeEventListener('scroll', self.onscroll, true);\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.isSwiping = false;\r\n\t\tself.isPanning = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.instance.isDragging = false;\r\n\r\n\t\tif ( self.canTap ) {\r\n\t\t\treturn self.onTap( e );\r\n\t\t}\r\n\r\n\t\tself.speed = 366;\r\n\r\n\t\t// Speed in px/ms\r\n\t\tself.velocityX = self.distanceX / dMs * 0.5;\r\n\t\tself.velocityY = self.distanceY / dMs * 0.5;\r\n\r\n\t\tself.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );\r\n\r\n\t\tif ( panning ) {\r\n\t\t\tself.endPanning();\r\n\r\n\t\t} else if ( zooming ) {\r\n\t\t\tself.endZooming();\r\n\r\n\t\t} else {\r\n\t\t\tself.endSwiping( swiping, scrolling );\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t};\r\n\r\n\tGuestures.prototype.endSwiping = function( swiping, scrolling ) {\r\n\t\tvar self = this,\r\n\t\t\tret = false,\r\n\t\t\tlen = self.instance.group.length;\r\n\r\n\t\tself.sliderLastPos = null;\r\n\r\n\t\t// Close if swiped vertically / navigate if horizontally\r\n\t\tif ( swiping == 'y' && !scrolling && Math.abs( self.distanceY ) > 50 ) {\r\n\r\n\t\t\t// Continue vertical movement\r\n\t\t\t$.fancybox.animate( self.instance.current.$slide, {\r\n\t\t\t\ttop : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),\r\n\t\t\t\topacity : 0\r\n\t\t\t}, 150 );\r\n\r\n\t\t\tret = self.instance.close( true, 300 );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX > 50 && len > 1 ) {\r\n\t\t\tret = self.instance.previous( self.speedX );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && len > 1 ) {\r\n\t\t\tret = self.instance.next( self.speedX );\r\n\t\t}\r\n\r\n\t\tif ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {\r\n\t\t\tif ( scrolling || len < 2 ) {\r\n\t\t\t\tself.instance.centerSlide( self.instance.current, 150 );\r\n\t\t\t} else {\r\n\t\t\t\tself.instance.jumpTo( self.instance.current.index );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.$container.removeClass( 'fancybox-is-sliding' );\r\n\r\n\t};\r\n\r\n\t// Limit panning from edges\r\n\t// ========================\r\n\r\n\tGuestures.prototype.endPanning = function() {\r\n\r\n\t\tvar self = this;\r\n\t\tvar newOffsetX, newOffsetY, newPos;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( self.opts.momentum === false ) {\r\n\t\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Continue movement\r\n\t\t\tnewOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );\r\n\t\t\tnewOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed );\r\n\t\t}\r\n\r\n\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\r\n\r\n\t\t newPos.width = self.contentStartPos.width;\r\n\t\t newPos.height = self.contentStartPos.height;\r\n\r\n\t\t$.fancybox.animate( self.$content, newPos, 330 );\r\n\t};\r\n\r\n\r\n\tGuestures.prototype.endZooming = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar current = self.instance.current;\r\n\r\n\t\tvar newOffsetX, newOffsetY, newPos, reset;\r\n\r\n\t\tvar newWidth = self.newWidth;\r\n\t\tvar newHeight = self.newHeight;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\treset = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\twidth : newWidth,\r\n\t\t\theight : newHeight,\r\n\t\t\tscaleX : 1,\r\n\t\t\tscaleY : 1\r\n\t\t};\r\n\r\n\t\t// Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n\t\t$.fancybox.setTranslate( self.$content, reset );\r\n\r\n\t\tif ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {\r\n\t\t\tself.instance.scaleToFit( 150 );\r\n\r\n\t\t} else if ( newWidth > current.width || newHeight > current.height ) {\r\n\t\t\tself.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );\r\n\r\n\t\t\t// Switch from scale() to width/height or animation will not work correctly\r\n\t\t\t$.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );\r\n\r\n\t\t\t$.fancybox.animate( self.$content, newPos, 150 );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onTap = function(e) {\r\n\t\tvar self = this;\r\n\t\tvar $target = $( e.target );\r\n\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\r\n\t\tvar endPoints = ( e && pointers( e ) ) || self.startPoints;\r\n\r\n\t\tvar tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;\r\n\t\tvar tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0;\r\n\r\n\t\tvar where;\r\n\r\n\t\tvar process = function ( prefix ) {\r\n\r\n\t\t\tvar action = current.opts[ prefix ];\r\n\r\n\t\t\tif ( $.isFunction( action ) ) {\r\n\t\t\t\taction = action.apply( instance, [ current, e ] );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !action) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( action ) {\r\n\r\n\t\t\t\tcase \"close\" :\r\n\r\n\t\t\t\t\tinstance.close( self.startEvent );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"toggleControls\" :\r\n\r\n\t\t\t\t\tinstance.toggleControls( true );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"next\" :\r\n\r\n\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"nextOrClose\" :\r\n\r\n\t\t\t\t\tif ( instance.group.length > 1 ) {\r\n\t\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"zoom\" :\r\n\r\n\t\t\t\t\tif ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\r\n\t\t\t\t\t\tif ( instance.canPan() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToFit();\r\n\r\n\t\t\t\t\t\t} else if ( instance.isScaledDown() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToActual( tapX, tapY );\r\n\r\n\t\t\t\t\t\t} else if ( instance.group.length < 2 ) {\r\n\t\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Skip if clicked on the scrollbar\r\n\t\tif ( !$target.is('img') && tapX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check where is clicked\r\n\t\tif ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {\r\n\t\t\twhere = 'Outside';\r\n\r\n\t\t} else if ( $target.is( '.fancybox-slide' ) ) {\r\n\t\t\twhere = 'Slide';\r\n\r\n\t\t} else if ( instance.current.$content && instance.current.$content.find( $target ).addBack().filter( $target ).length ) {\r\n\t\t \twhere = 'Content';\r\n\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if this is a double tap\r\n\t\tif ( self.tapped ) {\r\n\r\n\t\t\t// Stop previously created single tap\r\n\t\t\tclearTimeout( self.tapped );\r\n\t\t\tself.tapped = null;\r\n\r\n\t\t\t// Skip if distance between taps is too big\r\n\t\t\tif ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 ) {\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// OK, now we assume that this is a double-tap\r\n\t\t\tprocess( 'dblclick' + where );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Single tap will be processed if user has not clicked second time within 300ms\r\n\t\t\t// or there is no need to wait for double-tap\r\n\t\t\tself.tapX = tapX;\r\n\t\t\tself.tapY = tapY;\r\n\r\n\t\t\tif ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {\r\n\r\n\t\t\t\tself.tapped = setTimeout(function() {\r\n\t\t\t\t\tself.tapped = null;\r\n\r\n\t\t\t\t\tprocess( 'click' + where );\r\n\r\n\t\t\t\t}, 500);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocess( 'click' + where );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t$(document).on('onActivate.fb', function (e, instance) {\r\n\t\tif ( instance && !instance.Guestures ) {\r\n\t\t\tinstance.Guestures = new Guestures( instance );\r\n\t\t}\r\n\t});\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tslideShow :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tslideShow : {\r\n\t\t\tautoStart : false,\r\n speed : 3000\r\n\t\t}\r\n\t});\r\n\r\n\tvar SlideShow = function( instance ) {\r\n\t\tthis.instance = instance;\r\n\t\tthis.init();\r\n\t};\r\n\r\n\t$.extend( SlideShow.prototype, {\r\n\t\ttimer : null,\r\n\t\tisActive : false,\r\n\t\t$button : null,\r\n\r\n\t\tinit : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {\r\n\t\t\t\tself.toggle();\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset : function( force ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\t// Check if reached last element\r\n\t\t\tif ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {\r\n\t\t\t\tself.timer = setTimeout(function() {\r\n\t\t\t\t\tif ( self.isActive ) {\r\n\t\t\t\t\t\tself.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, self.instance.current.opts.slideShow.speed);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.stop();\r\n\t\t\t\tself.instance.idleSecondsCounter = 0;\r\n\t\t\t\tself.instance.showControls();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclear : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tclearTimeout( self.timer );\r\n\r\n\t\t\tself.timer = null;\r\n\t\t},\r\n\r\n\t\tstart : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tif ( current ) {\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t\tself.$button\r\n\t\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )\r\n\t\t\t\t\t.removeClass( 'fancybox-button--play' )\r\n\t\t\t\t\t.addClass( 'fancybox-button--pause' );\r\n\r\n\t\t\t\t\tself.set( true );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstop : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tself.clear();\r\n\r\n\t\t\tself.$button\r\n\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )\r\n\t\t\t\t.removeClass( 'fancybox-button--pause' )\r\n\t\t\t\t.addClass( 'fancybox-button--play' );\r\n\r\n\t\t\tself.isActive = false;\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tif ( self.isActive ) {\r\n\t\t\t\tself.stop();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.start();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tif ( instance && !instance.SlideShow ) {\r\n\t\t\t\tinstance.SlideShow = new SlideShow( instance );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, current, firstRun) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( firstRun ) {\r\n\r\n\t\t\t\tif ( SlideShow && current.opts.slideShow.autoStart ) {\r\n\t\t\t\t\tSlideShow.start();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.clear();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterShow.fb' : function(e, instance, current) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tSlideShow.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb onDeactivate.fb' : function(e, instance) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow ) {\r\n\t\t\t\tSlideShow.stop();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t// Page Visibility API to pause slideshow when window is not active\r\n\t$(document).on(\"visibilitychange\", function() {\r\n\t\tvar instance = $.fancybox.getInstance();\r\n\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\tif ( document.hidden ) {\r\n\t\t\t\tSlideShow.clear();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Collection of methods supported by user browser\r\n\tvar fn = (function () {\r\n\r\n\t\tvar fnMap = [\r\n\t\t\t[\r\n\t\t\t\t'requestFullscreen',\r\n\t\t\t\t'exitFullscreen',\r\n\t\t\t\t'fullscreenElement',\r\n\t\t\t\t'fullscreenEnabled',\r\n\t\t\t\t'fullscreenchange',\r\n\t\t\t\t'fullscreenerror'\r\n\t\t\t],\r\n\t\t\t// new WebKit\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullscreen',\r\n\t\t\t\t'webkitExitFullscreen',\r\n\t\t\t\t'webkitFullscreenElement',\r\n\t\t\t\t'webkitFullscreenEnabled',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t// old WebKit (Safari 5.1)\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullScreen',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitCurrentFullScreenElement',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'mozRequestFullScreen',\r\n\t\t\t\t'mozCancelFullScreen',\r\n\t\t\t\t'mozFullScreenElement',\r\n\t\t\t\t'mozFullScreenEnabled',\r\n\t\t\t\t'mozfullscreenchange',\r\n\t\t\t\t'mozfullscreenerror'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'msRequestFullscreen',\r\n\t\t\t\t'msExitFullscreen',\r\n\t\t\t\t'msFullscreenElement',\r\n\t\t\t\t'msFullscreenEnabled',\r\n\t\t\t\t'MSFullscreenChange',\r\n\t\t\t\t'MSFullscreenError'\r\n\t\t\t]\r\n\t\t];\r\n\r\n\t\tvar val;\r\n\t\tvar ret = {};\r\n\t\tvar i, j;\r\n\r\n\t\tfor ( i = 0; i < fnMap.length; i++ ) {\r\n\t\t\tval = fnMap[ i ];\r\n\r\n\t\t\tif ( val && val[ 1 ] in document ) {\r\n\t\t\t\tfor ( j = 0; j < val.length; j++ ) {\r\n\t\t\t\t\tret[ fnMap[ 0 ][ j ] ] = val[ j ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t})();\r\n\r\n\t// If browser does not have Full Screen API, then simply unset default button template and stop\r\n\tif ( !fn ) {\r\n\r\n\t\tif ( $ && $.fancybox ) {\r\n\t\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar FullScreen = {\r\n\r\n\t\trequest : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\telem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );\r\n\r\n\t\t},\r\n\t\texit : function () {\r\n\r\n\t\t\tdocument[ fn.exitFullscreen ]();\r\n\r\n\t\t},\r\n\t\ttoggle : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\tif ( this.isFullscreen() ) {\r\n\t\t\t\tthis.exit();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.request( elem );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tisFullscreen : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenElement ] );\r\n\r\n\t\t},\r\n\t\tenabled : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenEnabled ] );\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tfullScreen :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tfullScreen : {\r\n\t\t\tautoStart : false\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar $container;\r\n\r\n\t\t\tif ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) {\r\n\t\t\t\t$container = instance.$refs.container;\r\n\r\n\t\t\t\t$container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tFullScreen.toggle( $container[ 0 ] );\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {\r\n\t\t\t\t\tFullScreen.request( $container[ 0 ] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Expose API\r\n\t\t\t\tinstance.FullScreen = FullScreen;\r\n\r\n\t\t\t} else if ( instance ) {\r\n\t\t\t\tinstance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( instance && instance.FullScreen && keycode === 70 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tinstance.FullScreen.toggle( instance.$refs.container[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( instance ) {\r\n\t\t\tif ( instance && instance.FullScreen ) {\r\n\t\t\t\tFullScreen.exit();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on(fn.fullscreenchange, function() {\r\n\t\tvar isFullscreen = FullScreen.isFullscreen(),\r\n\t\t\tinstance = $.fancybox.getInstance();\r\n\r\n\t\tif ( instance ) {\r\n\r\n\t\t\t// If image is zooming, then force to stop and reposition properly\r\n\t\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\r\n\t\t\t\tinstance.current.$content.css( 'transition', 'none' );\r\n\r\n\t\t\t\tinstance.isAnimating = false;\r\n\r\n\t\t\t\tinstance.update( true, true, 0 );\r\n\t\t\t}\r\n\r\n\t\t\tinstance.trigger( 'onFullscreenChange', isFullscreen );\r\n\r\n\t\t\tinstance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen );\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Make sure there are default values\r\n\t$.fancybox.defaults = $.extend(true, {\r\n\t\tbtnTpl : {\r\n\t\t\tthumbs :\r\n\t\t\t''\r\n\t\t},\r\n\t\tthumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t}\r\n\t}, $.fancybox.defaults);\r\n\r\n\tvar FancyThumbs = function( instance ) {\r\n\t\tthis.init( instance );\r\n\t};\r\n\r\n\t$.extend( FancyThumbs.prototype, {\r\n\r\n\t\t$button\t\t: null,\r\n\t\t$grid\t\t: null,\r\n\t\t$list\t\t: null,\r\n\t\tisVisible\t: false,\r\n\t\tisActive\t: false,\r\n\r\n\t\tinit : function( instance ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.instance = instance;\r\n\r\n\t\t\tinstance.Thumbs = self;\r\n\r\n\t\t\t// Enable thumbs if at least two group items have thumbnails\r\n\t\t\tvar first = instance.group[0],\r\n\t\t\t\tsecond = instance.group[1];\r\n\r\n\t\t\tself.opts = instance.group[ instance.currIndex ].opts.thumbs;\r\n\r\n\t\t\tself.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\r\n\r\n\t\t\tif ( self.opts && first && second && (\r\n\t\t \t\t( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) &&\r\n\t\t \t\t( second.type == 'image' || second.opts.thumb || second.opts.$thumb )\r\n\t\t\t)) {\r\n\r\n\t\t\t\tself.$button.show().on('click', function() {\r\n\t\t\t\t\tself.toggle();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcreate : function() {\r\n\t\t\tvar self = this,\r\n\t\t\t\tinstance = self.instance,\r\n\t\t\t\tparentEl = self.opts.parentEl,\r\n\t\t\t\tlist,\r\n\t\t\t\tsrc;\r\n\r\n\t\t\tself.$grid = $('
').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) );\r\n\r\n\t\t\t// Build list HTML\r\n\t\t\tlist = '
    ';\r\n\r\n\t\t\t$.each(instance.group, function( i, item ) {\r\n\t\t\t\tsrc = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null );\r\n\r\n\t\t\t\tif ( !src && item.type === 'image' ) {\r\n\t\t\t\t\tsrc = item.src;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( src && src.length ) {\r\n\t\t\t\t\tlist += '
  • ';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlist += '
';\r\n\r\n\t\t\tself.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() {\r\n\t\t\t\tinstance.jumpTo( $(this).data('index') );\r\n\t\t\t});\r\n\r\n\t\t\tself.$list.find( 'img' ).hide().one('load', function() {\r\n\t\t\t\tvar $parent\t\t= $(this).parent().removeClass( 'fancybox-thumbs-loading' ),\r\n\t\t\t\t\tthumbWidth\t= $parent.outerWidth(),\r\n\t\t\t\t\tthumbHeight\t= $parent.outerHeight(),\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidthRatio,\r\n\t\t\t\t\theightRatio;\r\n\r\n\t\t\t\twidth = this.naturalWidth\t|| this.width;\r\n\t\t\t\theight = this.naturalHeight\t|| this.height;\r\n\r\n\t\t\t\t// Calculate thumbnail dimensions; center vertically and horizontally\r\n\t\t\t\twidthRatio = width / thumbWidth;\r\n\t\t\t\theightRatio = height / thumbHeight;\r\n\r\n\t\t\t\tif (widthRatio >= 1 && heightRatio >= 1) {\r\n\t\t\t\t\tif (widthRatio > heightRatio) {\r\n\t\t\t\t\t\twidth = width / heightRatio;\r\n\t\t\t\t\t\theight = thumbHeight;\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidth = thumbWidth;\r\n\t\t\t\t\t\theight = height / widthRatio;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(this).css({\r\n\t\t\t\t\twidth : Math.floor(width),\r\n\t\t\t\t\theight : Math.floor(height),\r\n\t\t\t\t\t'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ),\r\n\t\t\t\t\t'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 )\r\n\t\t\t\t}).show();\r\n\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tthis.src = $( this ).data( 'src' );\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.opts.axis === 'x' ) {\r\n\t\t\t\tself.$list.width( parseInt( self.$grid.css(\"padding-right\") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocus : function( duration ) {\r\n\t\t\tvar self = this,\r\n\t\t\t\t$list = self.$list,\r\n\t\t\t\tthumb,\r\n\t\t\t\tthumbPos;\r\n\r\n\t\t\tif ( self.instance.current ) {\r\n\t\t\t\tthumb = $list.children()\r\n\t\t\t\t\t.removeClass( 'fancybox-thumbs-active' )\r\n\t\t\t\t\t.filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n\t\t\t\t\t.addClass('fancybox-thumbs-active');\r\n\r\n\t\t\t\tthumbPos = thumb.position();\r\n\r\n\t\t\t\t// Check if need to scroll to make current thumb visible\r\n\t\t\t\tif ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) {\r\n\t\t\t\t\t$list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration);\r\n\r\n\t\t\t\t} else if ( self.opts.axis === 'x' && (\r\n\t\t\t\t\t\tthumbPos.left < $list.parent().scrollLeft() ||\r\n\t\t\t\t\t\tthumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) )\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\t$list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tupdate : function() {\r\n\t\t\tthis.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );\r\n\r\n\t\t\tif ( this.isVisible ) {\r\n\t\t\t\tif ( !this.$grid ) {\r\n\t\t\t\t\tthis.create();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.instance.trigger( 'onThumbsShow' );\r\n\r\n\t\t\t\tthis.focus( 0 );\r\n\r\n\t\t\t} else if ( this.$grid ) {\r\n\t\t\t\tthis.instance.trigger( 'onThumbsHide' );\r\n\t\t\t}\r\n\r\n\t\t\t// Update content position\r\n\t\t\tthis.instance.update();\r\n\t\t},\r\n\r\n\t\thide : function() {\r\n\t\t\tthis.isVisible = false;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\tshow : function() {\r\n\t\t\tthis.isVisible = true;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tthis.isVisible = !this.isVisible;\r\n\t\t\tthis.update();\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar Thumbs;\r\n\r\n\t\t\tif ( instance && !instance.Thumbs ) {\r\n\t\t\t\tThumbs = new FancyThumbs( instance );\r\n\r\n\t\t\t\tif ( Thumbs.isActive && Thumbs.opts.autoStart === true ) {\r\n\t\t\t\t\tThumbs.show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, item, firstRun) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible ) {\r\n\t\t\t\tThumbs.focus( firstRun ? 0 : 250 );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\t// \"G\"\r\n\t\t\tif ( Thumbs && Thumbs.isActive && keycode === 71 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tThumbs.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( e, instance ) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) {\r\n\t\t\t\tThumbs.$grid.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n}(document, window.jQuery));\r\n\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tshare :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tshare : {\r\n\t\t\ttpl :\r\n\t\t\t\t'
' +\r\n\t\t\t\t\t'

{{SHARE}}

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Facebook' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Pinterest' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Twitter' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t'
'\r\n\t\t}\r\n\t});\r\n\r\n\tfunction escapeHtml(string) {\r\n\t\tvar entityMap = {\r\n\t\t '&': '&',\r\n\t\t '<': '<',\r\n\t\t '>': '>',\r\n\t\t '\"': '"',\r\n\t\t \"'\": ''',\r\n\t\t '/': '/',\r\n\t\t '`': '`',\r\n\t\t '=': '='\r\n\t\t};\r\n\r\n\t\treturn String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\treturn entityMap[s];\r\n\t\t});\r\n\t}\r\n\r\n\t$(document).on('click', '[data-fancybox-share]', function() {\r\n\t\tvar f = $.fancybox.getInstance(),\r\n\t\t\turl,\r\n\t\t\ttpl;\r\n\r\n\t\tif ( f ) {\r\n\t\t\turl = f.current.opts.hash === false ? f.current.src : window.location;\r\n\t\t\ttpl = f.current.opts.share.tpl\r\n\t\t\t\t\t.replace( /\\{\\{media\\}\\}/g, f.current.type === 'image' ? encodeURIComponent( f.current.src ) : '' )\r\n\t\t\t\t\t.replace( /\\{\\{url\\}\\}/g, encodeURIComponent( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{url_raw\\}\\}/g, escapeHtml( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{descr\\}\\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' );\r\n\r\n\t\t\t$.fancybox.open({\r\n\t\t\t\tsrc : f.translate( f, tpl ),\r\n\t\t\t\ttype : 'html',\r\n\t\t\t\topts : {\r\n\t\t\t\t\tanimationEffect : \"fade\",\r\n\t\t\t\t\tanimationDuration : 250,\r\n\t\t\t\t\tafterLoad : function(instance, current) {\r\n\t\t\t\t\t\t// Opening links in a popup window\r\n\t\t\t\t\t\tcurrent.$content.find('.fancybox-share__links a').click(function() {\r\n\t\t\t\t\t window.open(this.href, \"Share\", \"width=550, height=450\");\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n;(function (document, window, $) {\r\n\t'use strict';\r\n\r\n\t// Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n\tif ( !$.escapeSelector ) {\r\n\t\t$.escapeSelector = function( sel ) {\r\n\t\t\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n\t\t\tvar fcssescape = function( ch, asCodePoint ) {\r\n\t\t\t\tif ( asCodePoint ) {\r\n\t\t\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n\t\t\t\t\tif ( ch === \"\\0\" ) {\r\n\t\t\t\t\t\treturn \"\\uFFFD\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\r\n\t\t\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Other potentially-special ASCII characters get backslash-escaped\r\n\t\t\t\treturn \"\\\\\" + ch;\r\n\t\t\t};\r\n\r\n\t\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\r\n\t\t};\r\n\t}\r\n\r\n\t// Create new history entry only once\r\n\tvar shouldCreateHistory = true;\r\n\r\n\t// Variable containing last hash value set by fancyBox\r\n\t// It will be used to determine if fancyBox needs to close after hash change is detected\r\n var currentHash = null;\r\n\r\n\t// Throttling the history change\r\n\tvar timerID = null;\r\n\r\n\t// Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr( 1 );\r\n var rez = hash.split( '-' );\r\n var index = rez.length > 1 && /^\\+?\\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;\r\n var gallery = rez.join( '-' );\r\n\r\n\t\t// Index is starting from 1\r\n\t\tif ( index < 1 ) {\r\n\t\t\tindex = 1;\r\n\t\t}\r\n\r\n return {\r\n hash : hash,\r\n index : index,\r\n gallery : gallery\r\n };\r\n }\r\n\r\n\t// Trigger click evnt on links to open new fancyBox instance\r\n\tfunction triggerFromUrl( url ) {\r\n\t\tvar $el;\r\n\r\n if ( url.gallery !== '' ) {\r\n\r\n\t\t\t// If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..\r\n\t\t\t$el = $( \"[data-fancybox='\" + $.escapeSelector( url.gallery ) + \"']\" ).eq( url.index - 1 );\r\n\r\n if ( !$el.length ) {\r\n\t\t\t\t// .. if not, try finding element by ID\r\n\t\t\t\t$el = $( \"#\" + $.escapeSelector( url.gallery ) + \"\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( $el.length ) {\r\n\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t$el.trigger( 'click' );\r\n\t\t\t}\r\n\r\n }\r\n\t}\r\n\r\n\t// Get gallery name from current instance\r\n\tfunction getGalleryID( instance ) {\r\n\t\tvar opts;\r\n\r\n\t\tif ( !instance ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\topts = instance.current ? instance.current.opts : instance.opts;\r\n\r\n\t\treturn opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' );\r\n\t}\r\n\r\n\t// Start when DOM becomes ready\r\n $(function() {\r\n\r\n\t\t// Check if user has disabled this module\r\n\t\tif ( $.fancybox.defaults.hash === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Update hash when opening/closing fancyBox\r\n\t $(document).on({\r\n\t\t\t'onInit.fb' : function( e, instance ) {\r\n\t\t\t\tvar url, gallery;\r\n\r\n\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\turl = parseUrl();\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\r\n\t\t\t\t// Make sure gallery start index matches index from hash\r\n\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\r\n\t\t\t\t\tinstance.currIndex = url.index - 1;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t'beforeShow.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery;\r\n\r\n\t\t\t\tif ( !current || current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t gallery = getGalleryID( instance );\r\n\r\n\t // Update window hash\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\r\n\t\t instance.opts.origHash = window.location.hash;\r\n\t\t }\r\n\r\n\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\r\n\r\n\t\t\t\t\tif ( 'replaceState' in window.history ) {\r\n\t\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimerID = setTimeout(function() {\r\n\t\t\t\t\t\t\twindow.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\r\n\r\n\t\t\t\t\t\t\ttimerID = null;\r\n\r\n\t\t\t\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t\t\t}, 300);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.location.hash = currentHash;\r\n\t\t\t\t\t}\r\n\r\n\t }\r\n\r\n\t },\r\n\r\n\t\t\t'beforeClose.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery, origHash;\r\n\r\n\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\r\n\r\n\t // Remove hash from location bar\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t if ( 'replaceState' in history ) {\r\n\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\r\n\r\n\t } else {\r\n\t\t\t\t\t\twindow.location.hash = origHash;\r\n\r\n\t\t\t\t\t\t// Keep original scroll position\r\n\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\r\n\t }\r\n\t }\r\n\r\n\t\t\t\tcurrentHash = null;\r\n\t }\r\n\t });\r\n\r\n\t\t// Check if need to close after url has changed\r\n\t\t$(window).on('hashchange.fb', function() {\r\n\t\t\tvar url = parseUrl();\r\n\r\n\t\t\tif ( $.fancybox.getInstance() ) {\r\n\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\r\n\t\t\t\t\tcurrentHash = null;\r\n\r\n\t\t\t\t\t$.fancybox.close();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( url.gallery !== '' ) {\r\n\t\t\t\ttriggerFromUrl( url );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n\t\tsetTimeout(function() {\r\n\t\t\ttriggerFromUrl( parseUrl() );\r\n\t\t}, 50);\r\n });\r\n\r\n}( document, window, window.jQuery || jQuery ));\r\n\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\tvar prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n 'onInit.fb' : function( e, instance, current ) {\r\n\t\t\tinstance.$refs.stage.on('mousewheel DOMMouseScroll wheel MozMousePixelScroll', function(e) {\r\n\t\t\t\tvar current = instance.current,\r\n\t\t\t\t\tcurrTime = new Date().getTime();\r\n\r\n\t\t\t\tif ( instance.group.length < 1 || current.opts.wheel === false || ( current.opts.wheel === 'auto' && current.type !== 'image' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\tif ( current.$slide.hasClass( 'fancybox-animated' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te = e.originalEvent || e;\r\n\r\n\t\t\t\tif ( currTime - prevTime < 250 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprevTime = currTime;\r\n\r\n\t\t\t\tinstance[ ( -e.deltaY || -e.deltaX || e.wheelDelta || -e.detail ) < 0 ? 'next' : 'previous' ]();\r\n\r\n\t\t\t});\r\n\t\t}\r\n });\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\n\n/***/ }),\n\n/***/ \"HNTF\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return TYPE_REVIEW_LIKE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return TYPE_COMMENT_LIKE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return TYPE_SALE_LIKE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return Likers; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_auth__ = __webpack_require__(\"UpRQ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_core_widgets_notifier__ = __webpack_require__(\"2uje\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__core_utils_lang__ = __webpack_require__(\"RaK1\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar TYPE_REVIEW_LIKE = 'review_like';\nvar TYPE_COMMENT_LIKE = 'comment_like';\nvar TYPE_SALE_LIKE = 'sale_like';\n\nvar Likers = function () {\n\tfunction Likers(reviewId, likesCount, myLike) {\n\t\tvar _this = this;\n\n\t\tvar type = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : TYPE_REVIEW_LIKE;\n\n\t\t_classCallCheck(this, Likers);\n\n\t\tthis.visible = ko.observable(false);\n\t\tthis.loading = ko.observable(false);\n\t\tthis.likers = ko.observableArray([]);\n\t\tthis.likesCount = ko.observable(0);\n\t\tthis.myLike = ko.observable(false);\n\t\tthis.type = null;\n\n\t\tthis.reviewId = reviewId;\n\t\tthis.likesCount(+likesCount);\n\t\tthis.myLike(!!myLike);\n\n\t\tthis.likesCountUsersText = ko.pureComputed(function () {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_4__core_utils_lang__[\"b\" /* pluralize */](_this.likesCount(), '{n} пользователю|{n} пользователям|{n} пользователям', 'n');\n\t\t});\n\n\t\tswitch (type) {\n\t\t\tcase TYPE_REVIEW_LIKE:\n\t\t\t\tthis._saveUrl = '/reviews/save_like';\n\t\t\t\tthis._getLikersUrl = '/reviews/get_likers_ajax';\n\t\t\t\tbreak;\n\t\t\tcase TYPE_COMMENT_LIKE:\n\t\t\t\tthis._saveUrl = '/reviews/save_comment_like';\n\t\t\t\tthis._getLikersUrl = '/reviews/get_comment_likers_ajax';\n\t\t\t\tbreak;\n\t\t\tcase TYPE_SALE_LIKE:\n\t\t\t\tthis._saveUrl = '/blog/likes_save';\n\t\t\t\tthis._getLikersUrl = '/blog/get_likers';\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t_createClass(Likers, [{\n\t\tkey: \"show\",\n\t\tvalue: function show() {\n\t\t\tvar _this2 = this;\n\n\t\t\tthis._load().done(function () {\n\t\t\t\t_this2.visible(_this2.likesCount() > 0);\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"hide\",\n\t\tvalue: function hide() {\n\t\t\tthis.visible(false);\n\t\t}\n\t}, {\n\t\tkey: \"toggleMyLike\",\n\t\tvalue: function toggleMyLike(data, e) {\n\t\t\tvar _this3 = this;\n\n\t\t\te.stopPropagation();\n\t\t\tObject(__WEBPACK_IMPORTED_MODULE_1_core_auth__[\"ensureLoggedIn\"])(function () {\n\t\t\t\t__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])(_this3._saveUrl), { id: _this3.reviewId }, null, 'json').fail(__WEBPACK_IMPORTED_MODULE_2_core_widgets_notifier__[\"a\" /* Notifier */].errorXHR).done(function (response) {\n\t\t\t\t\tif (response && response.success) {\n\t\t\t\t\t\t_this3.likesCount(+response.likes);\n\t\t\t\t\t\t_this3.myLike(response.myAction && response.myAction == 'up' || response.action && response.action == 'up');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2_core_widgets_notifier__[\"a\" /* Notifier */].error();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"_load\",\n\t\tvalue: function _load() {\n\t\t\tvar _this4 = this;\n\n\t\t\tthis.loading(true);\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])(this._getLikersUrl), { id: this.reviewId }, null, 'json').done(function (response) {\n\t\t\t\t_this4.likesCount(+response.total);\n\t\t\t\t_this4.likers(response.likers);\n\t\t\t\t_this4.loading(false);\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn Likers;\n}();\n\n/***/ }),\n\n/***/ \"Oe2b\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\n(function (root, factory) {\n if (true) {\n module.exports = factory(typeof global === 'undefined' ? root : global);\n } else if (typeof define === 'function' && define.amd) {\n define([], function () { return factory(root); });\n } else {\n root.framebus = factory(root);\n }\n})(this, function (root) { // eslint-disable-line no-invalid-this\n var win, framebus;\n var popups = [];\n var subscribers = {};\n var prefix = '/*framebus*/';\n\n function include(popup) {\n if (popup == null) { return false; }\n if (popup.Window == null) { return false; }\n if (popup.constructor !== popup.Window) { return false; }\n\n popups.push(popup);\n return true;\n }\n\n function target(origin) {\n var key;\n var targetedFramebus = {};\n\n for (key in framebus) {\n if (!framebus.hasOwnProperty(key)) { continue; }\n\n targetedFramebus[key] = framebus[key];\n }\n\n targetedFramebus._origin = origin || '*';\n\n return targetedFramebus;\n }\n\n function publish(event) {\n var payload, args;\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_isntString(event)) { return false; }\n if (_isntString(origin)) { return false; }\n\n args = Array.prototype.slice.call(arguments, 1);\n\n payload = _packagePayload(event, args, origin);\n if (payload === false) { return false; }\n\n _broadcast(win.top || win.self, payload, origin);\n\n return true;\n }\n\n function subscribe(event, fn) {\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_subscriptionArgsInvalid(event, fn, origin)) { return false; }\n\n subscribers[origin] = subscribers[origin] || {};\n subscribers[origin][event] = subscribers[origin][event] || [];\n subscribers[origin][event].push(fn);\n\n return true;\n }\n\n function unsubscribe(event, fn) {\n var i, subscriberList;\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_subscriptionArgsInvalid(event, fn, origin)) { return false; }\n\n subscriberList = subscribers[origin] && subscribers[origin][event];\n if (!subscriberList) { return false; }\n\n for (i = 0; i < subscriberList.length; i++) {\n if (subscriberList[i] === fn) {\n subscriberList.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n function _getOrigin(scope) {\n return scope && scope._origin || '*';\n }\n\n function _isntString(string) {\n return typeof string !== 'string';\n }\n\n function _packagePayload(event, args, origin) {\n var packaged = false;\n var payload = {\n event: event,\n origin: origin\n };\n var reply = args[args.length - 1];\n\n if (typeof reply === 'function') {\n payload.reply = _subscribeReplier(reply, origin);\n args = args.slice(0, -1);\n }\n\n payload.args = args;\n\n try {\n packaged = prefix + JSON.stringify(payload);\n } catch (e) {\n throw new Error('Could not stringify event: ' + e.message);\n }\n return packaged;\n }\n\n function _unpackPayload(e) {\n var payload, replyOrigin, replySource, replyEvent;\n\n if (e.data.slice(0, prefix.length) !== prefix) { return false; }\n\n try {\n payload = JSON.parse(e.data.slice(prefix.length));\n } catch (err) {\n return false;\n }\n\n if (payload.reply != null) {\n replyOrigin = e.origin;\n replySource = e.source;\n replyEvent = payload.reply;\n\n payload.reply = function reply(data) { // eslint-disable-line consistent-return\n var replyPayload = _packagePayload(replyEvent, [data], replyOrigin);\n\n if (replyPayload === false) { return false; }\n\n replySource.postMessage(replyPayload, replyOrigin);\n };\n\n payload.args.push(payload.reply);\n }\n\n return payload;\n }\n\n function _attach(w) {\n if (win) { return; }\n win = w || root;\n\n if (win.addEventListener) {\n win.addEventListener('message', _onmessage, false);\n } else if (win.attachEvent) {\n win.attachEvent('onmessage', _onmessage);\n } else if (win.onmessage === null) {\n win.onmessage = _onmessage;\n } else {\n win = null;\n }\n }\n\n function _uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n return v.toString(16);\n });\n }\n\n function _onmessage(e) {\n var payload;\n\n if (_isntString(e.data)) { return; }\n\n payload = _unpackPayload(e);\n if (!payload) { return; }\n\n _dispatch('*', payload.event, payload.args, e);\n _dispatch(e.origin, payload.event, payload.args, e);\n _broadcastPopups(e.data, payload.origin, e.source);\n }\n\n function _dispatch(origin, event, args, e) {\n var i;\n\n if (!subscribers[origin]) { return; }\n if (!subscribers[origin][event]) { return; }\n\n for (i = 0; i < subscribers[origin][event].length; i++) {\n subscribers[origin][event][i].apply(e, args);\n }\n }\n\n function _hasOpener(frame) {\n if (frame.top !== frame) { return false; }\n if (frame.opener == null) { return false; }\n if (frame.opener === frame) { return false; }\n if (frame.opener.closed === true) { return false; }\n\n return true;\n }\n\n function _broadcast(frame, payload, origin) {\n var i;\n\n try {\n frame.postMessage(payload, origin);\n\n if (_hasOpener(frame)) {\n _broadcast(frame.opener.top, payload, origin);\n }\n\n for (i = 0; i < frame.frames.length; i++) {\n _broadcast(frame.frames[i], payload, origin);\n }\n } catch (_) { /* ignored */ }\n }\n\n function _broadcastPopups(payload, origin, source) {\n var i, popup;\n\n for (i = popups.length - 1; i >= 0; i--) {\n popup = popups[i];\n\n if (popup.closed === true) {\n popups = popups.slice(i, 1);\n } else if (source !== popup) {\n _broadcast(popup.top, payload, origin);\n }\n }\n }\n\n function _subscribeReplier(fn, origin) {\n var uuid = _uuid();\n\n function replier(d, o) {\n fn(d, o);\n framebus.target(origin).unsubscribe(uuid, replier);\n }\n\n framebus.target(origin).subscribe(uuid, replier);\n return uuid;\n }\n\n function _subscriptionArgsInvalid(event, fn, origin) {\n if (_isntString(event)) { return true; }\n if (typeof fn !== 'function') { return true; }\n if (_isntString(origin)) { return true; }\n\n return false;\n }\n\n _attach();\n\n framebus = {\n target: target,\n include: include,\n publish: publish,\n pub: publish,\n trigger: publish,\n emit: publish,\n subscribe: subscribe,\n sub: subscribe,\n on: subscribe,\n unsubscribe: unsubscribe,\n unsub: unsubscribe,\n off: unsubscribe\n };\n\n return framebus;\n});\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"GTd5\")))\n\n/***/ }),\n\n/***/ \"QQLA\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t
\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t
\\n\\t\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n\\t\\n
\\n\\n\\n
\\n\\t\\n
\\n\\n\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t:\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tЗа \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tиз \\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\n\\n
\\n\\t
\\n\\t\\tOn sale\\n\\t\\t\\n\\t\\t\\tТовар был приобретен через наш сайт и выставлен покупателем на продажу.\\n\\t\\t\\tДанный функционал не предусматривает коммерческой выгоды,\\n\\t\\t\\tа лишь дает возможность перепродать не подошедший товар (например по размеру) по закупочной цене.\\n\\t\\t\\n\\t
\\n\\tТовар выставлен на продажу\\n
\\n\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t... Читать далее\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tПонравилось\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tНет лайков\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t
\\n\\t\\n
\\n\\n\\n')}\\\">\"\n\n/***/ }),\n\n/***/ \"R7O4\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ReviewComment; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__likers__ = __webpack_require__(\"HNTF\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_auth__ = __webpack_require__(\"UpRQ\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__core_modals__ = __webpack_require__(\"YdFU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_widgets_notifier__ = __webpack_require__(\"2uje\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\nvar ReviewComment = function () {\n\tfunction ReviewComment(data) {\n\t\tvar _this = this;\n\n\t\t_classCallCheck(this, ReviewComment);\n\n\t\tthis._parent = null;\n\n\t\tthis._data = data;\n\t\tthis._parent = data.parent;\n\t\tthis._author = data.author instanceof __WEBPACK_IMPORTED_MODULE_1__core_auth__[\"UserInfo\"] ? data.author : new __WEBPACK_IMPORTED_MODULE_1__core_auth__[\"UserInfo\"](data.author);\n\n\t\tthis._data.best = ko.observable(this._data.best);\n\t\tthis._data.text = ko.observable(this._data.text);\n\t\tthis._data.date_human = ko.observable(this._data.date_human);\n\t\tthis._likers = new __WEBPACK_IMPORTED_MODULE_0__likers__[\"a\" /* Likers */](this.id, data.likes, data.my_like, __WEBPACK_IMPORTED_MODULE_0__likers__[\"b\" /* TYPE_COMMENT_LIKE */]);\n\n\t\tthis.collapsed = ko.observable(true);\n\t\tthis.displayHtml = ko.pureComputed(function () {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"d\" /* highlightUrls */])(_this._data.text());\n\t\t});\n\t}\n\n\t/** @return {int} */\n\n\t/** @var {ReviewItem} */\n\n\n\t_createClass(ReviewComment, [{\n\t\tkey: \"expand\",\n\t\tvalue: function expand() {\n\t\t\tthis.collapsed(false);\n\t\t}\n\t}, {\n\t\tkey: \"remove\",\n\t\tvalue: function remove() {\n\t\t\tif (confirm('Вы действительно хотите удалить комментарий?')) {\n\t\t\t\tthis._parent.deleteComment(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"edit\",\n\t\tvalue: function edit() {\n\t\t\tvar _this2 = this;\n\n\t\t\t__WEBPACK_IMPORTED_MODULE_2__core_modals__[\"MODAL_REVIEW_COMMENT_EDIT\"].show(this.id, function (response) {\n\t\t\t\tif (response && response.success) {\n\t\t\t\t\t_this2._data.text(response.text);\n\t\t\t\t\tif (response.date) {\n\t\t\t\t\t\t_this2._data.date = response.date;\n\t\t\t\t\t\t_this2._data.date_human(response.date_human);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: \"markAsBest\",\n\t\tvalue: function markAsBest() {\n\t\t\tvar _this3 = this;\n\n\t\t\t$.post(Object(__WEBPACK_IMPORTED_MODULE_3_core_utils_url__[\"g\" /* siteUrl */])('reviews/mark_comment_as_best'), { id: this.id }, null, 'json').done(function (response) {\n\t\t\t\tif (response.success) {\n\t\t\t\t\t_this3._parent.comments.forEach(function (comment) {\n\t\t\t\t\t\treturn comment.best(false);\n\t\t\t\t\t});\n\t\t\t\t\t_this3.best(true);\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_4_core_widgets_notifier__[\"a\" /* Notifier */].success('Ответ отмечен как лучший');\n\t\t\t\t} else {\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_4_core_widgets_notifier__[\"a\" /* Notifier */].error();\n\t\t\t\t}\n\t\t\t}).fail(__WEBPACK_IMPORTED_MODULE_4_core_widgets_notifier__[\"a\" /* Notifier */].errorXHR);\n\t\t}\n\t}, {\n\t\tkey: \"id\",\n\t\tget: function get() {\n\t\t\treturn this._data.id;\n\t\t}\n\n\t\t/** @return {UserInfo} */\n\n\t}, {\n\t\tkey: \"author\",\n\t\tget: function get() {\n\t\t\treturn this._author;\n\t\t}\n\n\t\t/** @return {string} Date in format Y-m-d H:i:s */\n\n\t}, {\n\t\tkey: \"date\",\n\t\tget: function get() {\n\t\t\treturn this._data.date;\n\t\t}\n\n\t\t/** @return {bool} Relative date */\n\n\t}, {\n\t\tkey: \"best\",\n\t\tget: function get() {\n\t\t\treturn this._data.best;\n\t\t}\n\n\t\t/** @return {string} Relative date */\n\n\t}, {\n\t\tkey: \"date_human\",\n\t\tget: function get() {\n\t\t\treturn this._data.date_human;\n\t\t}\n\n\t\t/** @return {bool} */\n\n\t}, {\n\t\tkey: \"is_editable\",\n\t\tget: function get() {\n\t\t\treturn this._data.is_editable;\n\t\t}\n\n\t\t/** @return {Likers} */\n\n\t}, {\n\t\tkey: \"likers\",\n\t\tget: function get() {\n\t\t\treturn this._likers;\n\t\t}\n\t}]);\n\n\treturn ReviewComment;\n}();\n\n/***/ }),\n\n/***/ \"RaK1\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = lang;\n/* unused harmony export tmpl */\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = pluralize;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_smart_plurals__ = __webpack_require__(\"tXil\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_smart_plurals___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_smart_plurals__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__globals__ = __webpack_require__(\"TxBK\");\n\n\n\n\n/**\n * Renders phrase\n * @param {string} lang Phrase name\n * @param {object|null} [data]\n * @param {boolean} [asHtml] Whether to render variables decorated with span tag. Default is FALSE\n * @returns {string} Rendered phrase\n */\nfunction lang(lang) {\n\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\tvar asHtml = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\tvar phrase = Object(__WEBPACK_IMPORTED_MODULE_2__globals__[\"b\" /* phrases */])()[lang];\n\tif (!phrase) return lang;\n\treturn tmpl(phrase, data, asHtml);\n}\n\n/**\n *\n * @param {string} template\n * @param {object|null} [data]\n * @param {boolean} [asHtml] Whether to render variables decorated with span tag. Default is TRUE\n * @returns {string}\n */\nfunction tmpl(template) {\n\tvar data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\tvar asHtml = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n\tif (!data) return template;\n\ttemplate = '' + template;\n\n\tvar result = template;\n\tfor (var key in data) {\n\t\tif (!data.hasOwnProperty(key)) continue;\n\t\tvar val = data[key];\n\n\t\t// unwrap value\n\t\tif (typeof val === 'function') {\n\t\t\tval = val();\n\t\t}\n\n\t\tvar keyParam = escapeRegExp(key);\n\t\tvar pluralRegex = new RegExp(\"\\\\[([^\\\\]]+{\" + keyParam + \"}[^\\\\]]+)\\\\]\");\n\t\tvar m = pluralRegex.exec(template);\n\t\tif (m) {\n\t\t\tresult = result.replace(pluralRegex, pluralize(val, m[1], key));\n\t\t}\n\n\t\tvar replacement = asHtml ? '' + val + '' : val;\n\t\tresult = result.split('{' + key + '}').join(replacement);\n\t}\n\treturn result;\n}\n\n/**\n *\n * @param {number} count\n * @param {string} text\n * @param {string} varName\n * @param {string|number|null} varValue\n */\nfunction pluralize(count, text) {\n\tvar varName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'n';\n\tvar varValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n\tvar parts = text.split('|');\n\tvar pluralRule = __WEBPACK_IMPORTED_MODULE_1_smart_plurals___default.a.Plurals.getRule(LANG);\n\tvar part = pluralRule(count, parts);\n\tif (part === undefined) {\n\t\tpart = parts[0];\n\t}\n\tvar replacement = varValue !== undefined && varValue !== null ? varValue : count;\n\treturn part.split('{' + varName + '}').join(replacement);\n}\n\nfunction escapeRegExp(string) {\n\treturn string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\n__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.bindingHandlers['lang'] = {\n\tinit: function init() {\n\t\treturn { 'controlsDescendantBindings': true };\n\t},\n\tupdate: function update(element, valueAccessor) {\n\t\tvar params = __WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.unwrap(valueAccessor());\n\t\tvar o = {\n\t\t\tname: '',\n\t\t\tdata: undefined,\n\t\t\thtml: undefined\n\t\t};\n\t\tif (!$.isPlainObject(params)) {\n\t\t\to.name = params;\n\t\t} else {\n\t\t\t$.extend(o, params);\n\t\t}\n\t\tvar args = [o.name, o.data, o.html];\n\t\tvar val = lang.apply(this, args);\n\t\t__WEBPACK_IMPORTED_MODULE_0_lib_knockout___default.a.utils.setHtml(element, val);\n\t}\n};\n\n/***/ }),\n\n/***/ \"TxBK\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = globals;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = phrases;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__var__ = __webpack_require__(\"dTkA\");\n\n\nvar _globals = {};\nvar _phrases = {};\n\n/**\n * Returns Globals object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object|*} Globals object if no key is provided, otherwise associated value\n */\nfunction globals() {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var g = window.globals || _globals;\n return key !== null ? Object(__WEBPACK_IMPORTED_MODULE_0__var__[\"e\" /* element */])(g, key, defaultValue) : g;\n}\n\n/**\n * Returns global Phrases object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object} Phrases object if no key is provided, otherwise associated value\n */\nfunction phrases() {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n var g = globals('phrases') || _phrases;\n return key !== null ? Object(__WEBPACK_IMPORTED_MODULE_0__var__[\"e\" /* element */])(g, key, defaultValue) : g;\n}\n\n/***/ }),\n\n/***/ \"UpRQ\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"UserInfo\", function() { return UserInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"currentUser\", function() { return currentUser; });\n/* harmony export (immutable) */ __webpack_exports__[\"ensureLoggedIn\"] = ensureLoggedIn;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__modals__ = __webpack_require__(\"YdFU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_globals__ = __webpack_require__(\"TxBK\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__events__ = __webpack_require__(\"oHD7\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar UserInfo = function () {\n\tfunction UserInfo(data) {\n\t\t_classCallCheck(this, UserInfo);\n\n\t\tthis._data = _extends({}, data);\n\t}\n\n\t_createClass(UserInfo, [{\n\t\tkey: \"id\",\n\t\tget: function get() {\n\t\t\treturn +this._data['id'];\n\t\t}\n\t}, {\n\t\tkey: \"roleId\",\n\t\tget: function get() {\n\t\t\treturn +this._data['role_id'];\n\t\t}\n\t}, {\n\t\tkey: \"isCustomer\",\n\t\tget: function get() {\n\t\t\treturn !!this._data['is_customer'];\n\t\t}\n\t}, {\n\t\tkey: \"url\",\n\t\tget: function get() {\n\t\t\treturn this._data['url'];\n\t\t}\n\t}, {\n\t\tkey: \"shortName\",\n\t\tget: function get() {\n\t\t\treturn this._data['short_name'];\n\t\t}\n\t}, {\n\t\tkey: \"fullName\",\n\t\tget: function get() {\n\t\t\treturn this._data['full_name'];\n\t\t}\n\t}, {\n\t\tkey: \"blogName\",\n\t\tget: function get() {\n\t\t\treturn this._data['blog_name'];\n\t\t}\n\t}, {\n\t\tkey: \"avatar\",\n\t\tget: function get() {\n\t\t\treturn this._data['avatar'];\n\t\t}\n\t}, {\n\t\tkey: \"avatarFull\",\n\t\tget: function get() {\n\t\t\treturn this._data['avatar_full'];\n\t\t}\n\t}, {\n\t\tkey: \"avatarExists\",\n\t\tget: function get() {\n\t\t\treturn !!this._data['avatar_exists'];\n\t\t}\n\t}, {\n\t\tkey: \"level\",\n\t\tget: function get() {\n\t\t\treturn +this._data['level'];\n\t\t}\n\t}]);\n\n\treturn UserInfo;\n}();\n\nvar data = Object(__WEBPACK_IMPORTED_MODULE_1__utils_globals__[\"a\" /* globals */])('userInfo');\n\n/**\n * Currently logged in user.\n * NULL means guest user.\n * @type {UserInfo}\n */\nvar currentUser = data ? new UserInfo(data) : null;\n\n/**\n * Executes given callback with logged in user.\n * If user is logged in - callback will be called immediately.\n * If not logged in - modal window will be shown and callback will be called only if user logged in.\n * @param callback Accepts {@link UserInfo} instance\n */\nfunction ensureLoggedIn(callback) {\n\tif (window.IS_LOGGED_IN) {\n\t\tcallback(currentUser);\n\t} else {\n\t\t__WEBPACK_IMPORTED_MODULE_0__modals__[\"MODAL_LOGIN\"].show(function (result) {\n\t\t\tif (result) {\n\t\t\t\t// currentUser has been already updated in event handler below\n\t\t\t\tcallback(currentUser);\n\t\t\t}\n\t\t});\n\t}\n}\n\n// catch global event and update user info\n__WEBPACK_IMPORTED_MODULE_2__events__[\"a\" /* GlobalEvents */].USER_LOGGED_IN.on(function (user) {\n\tcurrentUser = new UserInfo(user);\n\tconsole.log('user logged in', currentUser);\n\n\t// update currentUser variable\n\t// (do it explicitly because the first line of current function does not update the global object)\n\twindow.zde.currentUser = currentUser;\n\n\t// update legacy variables\n\twindow.IS_LOGGED_IN = true;\n\twindow.USER_ID = currentUser.id;\n\twindow.USER_NAME = currentUser.fullName;\n\twindow.USER_BLOG_NAME = currentUser.blogName;\n\twindow.IS_CUSTOMER = currentUser.isCustomer;\n});\n\n/***/ }),\n\n/***/ \"Vmcm\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t
Извините :(
\\n\\t\\t\\t\\t
В данном разделе отзывов пока нет
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\n\\t\\n\\n\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t
Извините :(
\\n\\t\\t\\t\\t
В данном разделе отзывов пока нет
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\n\\t\\n\\n\"\n\n/***/ }),\n\n/***/ \"X0GP\":\n/***/ (function(module, exports) {\n\nmodule.exports = _;\n\n/***/ }),\n\n/***/ \"XRua\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export buildUrl */\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = buildQuery;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = addQuery;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = appendQuery;\n/* unused harmony export query */\n/* unused harmony export hashQuery */\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = decodeQueryString;\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\r\n * This script adds some additional methods to window.location\r\n * buildQuery Helper method for constricting query strings\r\n * query location.query manipulator\r\n * hashQuery location.hash manipulator\r\n */\n\nvar location = window.location;\n\nfunction buildUrl(pathname, queryString) {\n\tif (!queryString) {\n\t\treturn pathname;\n\t}\n\tqueryString = '' + queryString;\n\tif (!queryString.startsWith('?')) {\n\t\tqueryString = '?' + queryString;\n\t}\n\treturn pathname + queryString;\n}\n\n/**\r\n * Builds query string from given object\r\n * @param {object} queryData\r\n * @param {boolean} [numeric_prefix]\r\n * @return {string}\r\n */\nfunction buildQuery(queryData, numeric_prefix) {\n\tvar value = void 0,\n\t key = void 0,\n\t tmp = [];\n\tvar arg_separator = \"&\";\n\n\tfor (key in queryData) {\n\t\tif (!queryData.hasOwnProperty(key)) {\n\t\t\tcontinue;\n\t\t}\n\t\tvalue = queryData[key];\n\t\tif (numeric_prefix && !isNaN(key)) {\n\t\t\tkey = String(numeric_prefix) + key;\n\t\t}\n\t\tvar _query = http_build_query_helper(urlencode(key), value, arg_separator);\n\t\tif (_query !== '') {\n\t\t\ttmp.push(_query);\n\t\t}\n\t}\n\n\treturn tmp.join(arg_separator);\n}\n\n/**\r\n * Appends given query data to given URL\r\n * @param {string} url\r\n * @param {object} queryData\r\n * @return {string} New url\r\n */\nfunction addQuery(url, queryData) {\n\tvar q = buildQuery(queryData);\n\turl = '' + url;\n\tvar m = /^([^?#]*)(\\?[^#]+)?(#.+)?$/.exec(url);\n\tif (!m) {\n\t\treturn url + '?' + q;\n\t}\n\treturn (m[1] || '') + (m[2] ? m[2] + '&' + q : '?' + q) + (m[3] || '');\n}\n\n/**\r\n * Appends given query data to given query string\r\n * @param {string} queryString\r\n * @param {object} queryData\r\n * @return {string} New query string\r\n */\nfunction appendQuery(queryString, queryData) {\n\tvar q = buildQuery(queryData);\n\tif (!q) {\n\t\treturn queryString;\n\t}\n\tvar str = '' + queryString;\n\treturn str.length > 0 ? str + '&' + q : q;\n}\n\n/**\r\n * Manipulates location.search as an object.
\r\n * With no arguments - returns the whole location.search object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.search with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.search object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\nfunction query(key, value, extend) {\n\treturn processQuery('search', key, value, extend);\n}\n\n/**\r\n * Manipulates location.hash as an object.
\r\n * With no arguments - returns the whole location.hash object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.hash with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.hash object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\nfunction hashQuery(key, value, extend) {\n\treturn processQuery('hash', key, value, extend);\n}\n\nfunction processQuery(type, key, value, extend) {\n\tvar queryData = decodeQueryString(location[type].substring(1));\n\tif (key !== undefined) {\n\t\tvar isObj = (typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object';\n\n\t\tif (value === undefined && !isObj) {\n\t\t\t// return value\n\t\t\treturn queryData[key] === undefined ? null : queryData[key];\n\t\t} else if (!isObj) {\n\t\t\tif (extend === undefined) extend = true;\n\n\t\t\t// set value to key\n\t\t\tvar k = key.toString();\n\t\t\tkey = {};\n\t\t\tkey[k] = value;\n\t\t}\n\n\t\tif (extend) {\n\t\t\t$.extend(queryData, key);\n\t\t} else {\n\t\t\tqueryData = key;\n\t\t}\n\n\t\t// clear data\n\t\tvar newData = {};\n\t\t$.each(queryData, function (key, value) {\n\t\t\tif (value) newData[key] = value;\n\t\t});\n\t\tqueryData = newData;\n\n\t\tlocation[type] = buildQuery(queryData);\n\t}\n\treturn queryData;\n}\n\n/**\r\n * Decodes query string like 'a=one&b=two&c[]=three' and returns an object\r\n * @param string\r\n * @return {Object}\r\n */\nfunction decodeQueryString(string) {\n\tvar glue1 = '=',\n\t glue2 = '&',\n\t array = {},\n\t // holds result\n\tarray2 = String(string).replace(/^&?([\\s\\S]*?)&?$/, '$1').split(glue2),\n\t i = void 0,\n\t j = void 0,\n\t chr = void 0,\n\t tmp = void 0,\n\t key = void 0,\n\t value = void 0,\n\t bracket = void 0,\n\t keys = void 0,\n\t evalStr = void 0,\n\t fixStr = function fixStr(str) {\n\t\treturn decodeURIComponent(str).replace(/([\\\\\"'])/g, '\\\\$1').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\+/g, ' ');\n\t};\n\n\tfor (i = 0; i < array2.length; i++) {\n\t\ttmp = array2[i].split(glue1);\n\t\tif (tmp.length < 2) {\n\t\t\ttmp = [tmp, ''];\n\t\t}\n\t\tkey = fixStr(tmp[0]);\n\t\tvalue = fixStr(tmp[1]);\n\t\twhile (key.charAt(0) === ' ') {\n\t\t\tkey = key.substr(1);\n\t\t}\n\t\tif (key.indexOf('\\0') !== -1) {\n\t\t\tkey = key.substr(0, key.indexOf('\\0'));\n\t\t}\n\t\tif (key && key.charAt(0) !== '[') {\n\t\t\tkeys = [];\n\t\t\tbracket = 0;\n\t\t\tfor (j = 0; j < key.length; j++) {\n\t\t\t\tif (key.charAt(j) === '[' && !bracket) {\n\t\t\t\t\tbracket = j + 1;\n\t\t\t\t} else if (key.charAt(j) === ']') {\n\t\t\t\t\tif (bracket) {\n\t\t\t\t\t\tif (!keys.length) {\n\t\t\t\t\t\t\tkeys.push(key.substr(0, bracket - 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tkeys.push(key.substr(bracket, j - bracket));\n\t\t\t\t\t\tbracket = 0;\n\t\t\t\t\t\tif (key.charAt(j + 1) !== '[') {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!keys.length) {\n\t\t\t\tkeys = [key];\n\t\t\t}\n\t\t\tfor (j = 0; j < keys[0].length; j++) {\n\t\t\t\tchr = keys[0].charAt(j);\n\t\t\t\tif (chr === ' ' || chr === '.' || chr === '[') {\n\t\t\t\t\tkeys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);\n\t\t\t\t}\n\t\t\t\tif (chr === '[') {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tevalStr = 'array';\n\t\t\tfor (j = 0; j < keys.length; j++) {\n\t\t\t\tkey = keys[j];\n\t\t\t\tif (key !== '' && key !== ' ' || j === 0) {\n\t\t\t\t\tkey = \"'\" + key + \"'\";\n\t\t\t\t} else {\n\t\t\t\t\tkey = eval(evalStr + '.push([]);') - 1;\n\t\t\t\t}\n\t\t\t\tevalStr += '[' + key + ']';\n\t\t\t\tif (j !== keys.length - 1 && eval('typeof ' + evalStr) === 'undefined') {\n\t\t\t\t\teval(evalStr + ' = [];');\n\t\t\t\t}\n\t\t\t}\n\t\t\tevalStr += \" = '\" + value + \"';\\n\";\n\t\t\teval(evalStr);\n\t\t}\n\t}\n\n\treturn array;\n}\n\nfunction urlencode(str) {\n\tstr = (str + '').toString();\n\treturn encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/\\*/g, '%2A').replace(/%20/g, '+');\n}\n\nfunction http_build_query_helper(key, val, arg_separator) {\n\tvar k = void 0,\n\t tmp = [];\n\tif (val === true) {\n\t\tval = \"1\";\n\t} else if (val === false) {\n\t\tval = \"0\";\n\t}\n\tif (val !== null && val !== undefined && val !== '') {\n\t\tif ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === \"object\") {\n\t\t\tvar start = 0;\n\t\t\tfor (k in val) {\n\t\t\t\tif (!val.hasOwnProperty(k)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (val[k] !== null) {\n\t\t\t\t\tvar sk = void 0,\n\t\t\t\t\t num = Number(k);\n\t\t\t\t\tif (!isNaN(num) && num - start === 0) {\n\t\t\t\t\t\tif (_typeof(val[k]) === \"object\") {\n\t\t\t\t\t\t\tsk = num;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsk = '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstart++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsk = urlencode(k);\n\t\t\t\t\t}\n\t\t\t\t\tvar part = http_build_query_helper(key + \"[\" + sk + \"]\", val[k], arg_separator);\n\t\t\t\t\tif (part) {\n\t\t\t\t\t\ttmp.push(part);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tmp.join(arg_separator);\n\t\t} else if (typeof val !== \"function\") {\n\t\t\treturn key + \"=\" + urlencode(val);\n\t\t} else {\n\t\t\tthrow new Error('There was an error processing for http_build_query().');\n\t\t}\n\t} else {\n\t\treturn '';\n\t}\n}\n\n/***/ }),\n\n/***/ \"XXni\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"YdFU\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_LOGIN\", function() { return MODAL_LOGIN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ASK_REDIRECT\", function() { return MODAL_ASK_REDIRECT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_CRITICAL_NEWS\", function() { return MODAL_CRITICAL_NEWS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_REVIEW\", function() { return MODAL_REVIEW; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_REVIEW_EDIT\", function() { return MODAL_REVIEW_EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_QUESTION_EDIT\", function() { return MODAL_QUESTION_EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_REVIEW_COMMENT_EDIT\", function() { return MODAL_REVIEW_COMMENT_EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_CREATE_COMPUTER_ORDER\", function() { return MODAL_CREATE_COMPUTER_ORDER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_ORDER_PAGE\", function() { return MODAL_FILIALIST_ORDER_PAGE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_EXCLUDE_FROM_PARCEL\", function() { return MODAL_FILIALIST_EXCLUDE_FROM_PARCEL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_FREE_ORDERS_EDIT\", function() { return MODAL_FILIALIST_FREE_ORDERS_EDIT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_CREATE_TODO\", function() { return MODAL_FILIALIST_CREATE_TODO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIIST_REASSIGN_PACKAGES_TO_CUSTOMERS\", function() { return MODAL_FILIALIIST_REASSIGN_PACKAGES_TO_CUSTOMERS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_CHANGE_ASSIGNMENT_CUSTOMER\", function() { return MODAL_FILIALIST_CHANGE_ASSIGNMENT_CUSTOMER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_EDIT_ASSIGNMENT\", function() { return MODAL_FILIALIST_EDIT_ASSIGNMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_GET_ASSIGNMENT_MEEST_DATA\", function() { return MODAL_FILIALIST_GET_ASSIGNMENT_MEEST_DATA; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_BATCH_PAYMENT\", function() { return MODAL_FILIALIST_BATCH_PAYMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_SET_PACKAGE_KINDS\", function() { return MODAL_FILIALIST_SET_PACKAGE_KINDS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_FILIALIST_SET_MEEST_ADDRESS_ALIASES\", function() { return MODAL_FILIALIST_SET_MEEST_ADDRESS_ALIASES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ADMIN_REPLENISH_BALANCE\", function() { return MODAL_ADMIN_REPLENISH_BALANCE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ADMIN_BATCH_PAYMENT\", function() { return MODAL_ADMIN_BATCH_PAYMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ADMIN_IMPORT_BANK_STATEMENT\", function() { return MODAL_ADMIN_IMPORT_BANK_STATEMENT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ADMIN_VALIDATE_INVOICE_CSV\", function() { return MODAL_ADMIN_VALIDATE_INVOICE_CSV; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_ADMIN_SHOP_BANK_STATEMENT_KEYWORDS\", function() { return MODAL_ADMIN_SHOP_BANK_STATEMENT_KEYWORDS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_PACKAGE_INFO\", function() { return MODAL_PACKAGE_INFO; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MODAL_SELECT_SHOP_CATEGORY\", function() { return MODAL_SELECT_SHOP_CATEGORY; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_modal__ = __webpack_require__(\"rItL\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/*\nThis file contains shortcuts for different kinds of modals\n */\n\n\n\nvar MODAL_LOGIN = {\n\t/**\n * @param {Function} onClose Callback accepts one parameter of type {object} - dialog's result\n * @return {ZDialog}\n */\n\tshow: function show() {\n\t\tvar onClose = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('login', null, { onClose: onClose });\n\t}\n};\n\nvar MODAL_ASK_REDIRECT = {\n\t/**\n * @param {object} data\n * @return {ZDialog}\n */\n\tshow: function show() {\n\t\tvar data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('ask_redirect', data, {\n\t\t\tmodal: true\n\t\t});\n\t}\n};\n\nvar MODAL_CRITICAL_NEWS = {\n\t/**\n * @param {number} id News ID\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('critical_news', { id: id }, {\n\t\t\tmodal: true,\n\t\t\tonClose: onClose\n\t\t});\n\t}\n};\n\nvar MODAL_REVIEW = {\n\t/**\n * @param {number} id\n * @param {number} index\n * @param {*} filter\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\tvar filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('review', { id: id, index: index, filter: filter }, { fullscreen: true });\n\t}\n};\n\nvar MODAL_REVIEW_EDIT = {\n\t/**\n * @param {number} id\n * @param {number} packageId\n * @param {Object} initialValues\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar packageId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\tvar initialValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\t\tvar onClose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n\t\tvar data = _extends({\n\t\t\tid: id,\n\t\t\tpackage_id: packageId\n\t\t}, initialValues);\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('review_edit', data, { onClose: onClose });\n\t}\n};\n\nvar MODAL_QUESTION_EDIT = {\n\t/**\n * @param {number} id\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('question_edit', { id: id }, { onClose: onClose });\n\t}\n};\n\nvar MODAL_REVIEW_COMMENT_EDIT = {\n\t/**\n * @param {number} id\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('review_comment_edit', { id: id }, { width: 650, onClose: onClose });\n\t}\n};\n\nvar MODAL_CREATE_COMPUTER_ORDER = {\n\t/**\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show() {\n\t\tvar onClose = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('create_computer_order', {}, { width: 780, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_ORDER_PAGE = {\n\t/**\n * @param {number} id Package ID\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_order_page', { id: id }, { type: 'window', onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_EXCLUDE_FROM_PARCEL = {\n\t/**\n * @param {number} id Package ID\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_exclude_from_parcel', { id: id }, { width: 470, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_FREE_ORDERS_EDIT = {\n\t/**\n * @param {number} customerId\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(customerId) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_free_orders_edit', { customer_id: customerId }, { width: 1300, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_CREATE_TODO = {\n\t/**\n * @param {number} id\n * @param {string} type\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id, type) {\n\t\tvar onClose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_create_todo', { id: id, type: type }, { width: 600, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIIST_REASSIGN_PACKAGES_TO_CUSTOMERS = {\n\t/**\n * @param {number[]} ids\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(ids) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_reassign_packages_to_customers', { ids: ids }, { width: 1800, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_CHANGE_ASSIGNMENT_CUSTOMER = {\n\t/**\n * @param {Function} onClose\n * @returns {ZDialog}\n */\n\tshow: function show() {\n\t\tvar onClose = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_change_assignment_customer', null, { width: 900, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_EDIT_ASSIGNMENT = {\n\t/**\n * @param {number} id\n * @param {Function} onClose\n * @returns {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_edit_assignment', { id: id }, { width: 500, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_GET_ASSIGNMENT_MEEST_DATA = {\n\t/**\n * @param {string} id\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_get_assignment_meest_data', { id: id }, { width: 450, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_BATCH_PAYMENT = {\n\t/**\n * @param {array} ids\n * $param {string} account\n * @param {number} rate\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(ids, account, rate) {\n\t\tvar onClose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_batch_payment', { ids: ids, account: account, rate: rate }, { width: 400, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_SET_PACKAGE_KINDS = {\n\t/**\n * @param {number[]} ids\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(ids) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_set_package_kinds', { ids: ids }, { width: 900, onClose: onClose });\n\t}\n};\n\nvar MODAL_FILIALIST_SET_MEEST_ADDRESS_ALIASES = {\n\t/**\n * @param {string[]} cities\n * @param {Object[]} streets\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(cities, streets) {\n\t\tvar onClose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\tvar data = encodeURIComponent(JSON.stringify({ cities: cities, streets: streets }));\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('filialist_set_meest_address_aliases', { data: data }, { onClose: onClose });\n\t}\n};\n\nvar MODAL_ADMIN_REPLENISH_BALANCE = {\n\t/**\n * @param {number} pendingReplenihmentId\n * @param {number} boundBankTransactionId\n * @param {number} suggestionBondId\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(pendingReplenihmentId) {\n\t\tvar boundBankTransactionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\tvar suggestionBondId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\t\tvar onClose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n\t\tObject(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('admin_replenish_balance', {\n\t\t\tpending_replenihment_id: pendingReplenihmentId,\n\t\t\tbound_bank_transaction_id: boundBankTransactionId,\n\t\t\tsuggestion_bond_id: suggestionBondId\n\t\t}, { onClose: onClose });\n\t}\n};\n\nvar MODAL_ADMIN_BATCH_PAYMENT = {\n\t/**\n * @param {string} accountSource\n * @param {string} accountTarget\n * @param {number} amount\n * @param {number} rate\n * @param {number[]} groupIds\n * @param {number[]} boundBankTransactionIds\n * @param {number} suggestionBondId\n * @param {Function} onClose\n */\n\tshow: function show(accountSource, accountTarget, amount, rate, groupIds, boundBankTransactionIds) {\n\t\tvar suggestionBondId = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n\t\tvar onClose = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n\n\t\tObject(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('admin_batch_payment', {\n\t\t\taccount_source: accountSource,\n\t\t\taccount_target: accountTarget,\n\t\t\tamount: amount,\n\t\t\trate: rate,\n\t\t\tgroup_ids: groupIds,\n\t\t\tbound_bank_transaction_ids: boundBankTransactionIds,\n\t\t\tsuggestion_bond_id: suggestionBondId\n\t\t}, { width: 500, onClose: onClose });\n\t}\n};\n\nvar MODAL_ADMIN_IMPORT_BANK_STATEMENT = {\n\t/**\n * @param {Function} onClose\n * @returns {ZDialog}\n */\n\tshow: function show() {\n\t\tvar onClose = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('admin_import_bank_statement', {}, { width: 800, onClose: onClose });\n\t}\n};\n\nvar MODAL_ADMIN_VALIDATE_INVOICE_CSV = {\n\t/**\n * @param {string | null} name\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show() {\n\t\tvar name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('admin_validate_invoice_csv', { name: name }, { width: 500, onClose: onClose });\n\t}\n};\n\nvar MODAL_ADMIN_SHOP_BANK_STATEMENT_KEYWORDS = {\n\t/**\n * @returns {ZDialog}\n */\n\tshow: function show() {\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('admin_shop_bank_statement_keywords', {}, { width: 1200 });\n\t}\n};\n\nvar MODAL_PACKAGE_INFO = {\n\t/**\n * @param {number} id Package ID\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function show(id) {\n\t\tvar onClose = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('package_info', { id: id }, { onClose: onClose });\n\t}\n};\n\nvar MODAL_SELECT_SHOP_CATEGORY = {\n\tshow: function show(onClose) {\n\t\treturn Object(__WEBPACK_IMPORTED_MODULE_0__utils_modal__[\"a\" /* showModalIframe */])('select_shop_category', {}, { width: 550, onClose: onClose });\n\t}\n};\n\n/***/ }),\n\n/***/ \"YnTO\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = checkIsIframe;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = isMobile;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = isTouchScreen;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return WEBP_FEATURES; });\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = isWebpFeatureSupported;\n/**\n * @return {boolean} TRUE if current window is an iframe window\n */\nfunction checkIsIframe() {\n\treturn window !== window.top;\n}\n\nvar _isMobile = 'orientation' in window || navigator.userAgent.indexOf('IEMobile') !== -1;\nvar _isTouchScreen = 'ontouchstart' in window || navigator.msMaxTouchPoints;\n\nfunction isMobile() {\n\treturn _isMobile;\n}\n\nfunction isTouchScreen() {\n\treturn _isTouchScreen;\n}\n\nvar WEBP_FEATURES = {\n\tLOSSY: 'lossy',\n\tLOSSLESS: 'lossless',\n\tALPHA: 'alpha',\n\tANIMATION: 'animation'\n};\n\nfunction isWebpFeatureSupported(feature) {\n\treturn new Promise(function (resolve, reject) {\n\t\tif (!Object.values(WEBP_FEATURES).includes(feature)) {\n\t\t\treject('Invalid feature name');\n\t\t\treturn;\n\t\t}\n\n\t\tvar kTestImages = {\n\t\t\tlossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\n\t\t\tlossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\n\t\t\talpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\n\t\t\tanimation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\n\t\t};\n\t\tvar img = new Image();\n\t\timg.onload = function () {\n\t\t\tvar result = img.width > 0 && img.height > 0;\n\t\t\tresolve(result);\n\t\t};\n\t\timg.onerror = function () {\n\t\t\tresolve(false);\n\t\t};\n\t\timg.src = \"data:image/webp;base64,\" + kTestImages[feature];\n\t});\n}\n\n/*export class MobileDetect {\n\tstatic Android = navigator.userAgent.match(/Android/i);\n\tstatic BlackBerry = navigator.userAgent.match(/BlackBerry/i);\n\tstatic iOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\tstatic Opera = navigator.userAgent.match(/Opera Mini/i);\n\tstatic Windows = navigator.userAgent.match(/IEMobile/i);\n\tstatic Any = MobileDetect.Android || MobileDetect.BlackBerry || MobileDetect.iOS || MobileDetect.Opera || MobileDetect.Windows;\n}*/\n\n/***/ }),\n\n/***/ \"cK6l\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ReviewListMobile; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__reviewlist__ = __webpack_require__(\"otQ7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__reviewitemmobile__ = __webpack_require__(\"FZjg\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar ReviewListMobile = function (_ReviewList) {\n _inherits(ReviewListMobile, _ReviewList);\n\n function ReviewListMobile() {\n _classCallCheck(this, ReviewListMobile);\n\n return _possibleConstructorReturn(this, (ReviewListMobile.__proto__ || Object.getPrototypeOf(ReviewListMobile)).apply(this, arguments));\n }\n\n _createClass(ReviewListMobile, [{\n key: \"_prepareItems\",\n\n /**\n * @param {array} items\n * @return {array}\n * @private\n */\n value: function _prepareItems(items) {\n var _this2 = this;\n\n return items.map(function (r) {\n r.parent = _this2;\n return new __WEBPACK_IMPORTED_MODULE_1__reviewitemmobile__[\"a\" /* ReviewItemMobile */](r);\n });\n }\n\n /**\n * @param {ReviewItem} item\n * @private\n */\n\n }, {\n key: \"_handleItemClick\",\n value: function _handleItemClick(item) {\n if (!this.isDetails) {\n window.open(item.data().url, '_blank');\n }\n }\n }]);\n\n return ReviewListMobile;\n}(__WEBPACK_IMPORTED_MODULE_0__reviewlist__[\"a\" /* ReviewList */]);\n\n/***/ }),\n\n/***/ \"cbSx\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"dTkA\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export isset */\n/* harmony export (immutable) */ __webpack_exports__[\"e\"] = element;\n/* unused harmony export elementOrDefault */\n/* harmony export (immutable) */ __webpack_exports__[\"f\"] = elementOrDash;\n/* harmony export (immutable) */ __webpack_exports__[\"g\"] = orDefault;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = asNumber;\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = asBoolean;\n/* harmony export (immutable) */ __webpack_exports__[\"d\"] = asString;\n/* harmony export (immutable) */ __webpack_exports__[\"h\"] = trim;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = asArray;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lib_underscore__);\n\n\n/**\n * Is a given variable defined and has value?\n * @param {*} val\n * @return {boolean} false if given value is undefined or null, otherwise true\n */\nfunction isset(val) {\n return !__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isUndefined(val) && !__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isNull(val);\n}\n\n/**\n * Returns object's property or array's index if exists and default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction element(object, key) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n return __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.has(object, key) ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction elementOrDefault(object, key) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n return __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.has(object, key) && object[key] !== null ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or \"—\" value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nfunction elementOrDash(object, key) {\n return elementOrDefault(object, key, '—');\n}\n\n/**\n * Returns value if it's not undefined or null, otherwise defaultValue\n * @param {*} value\n * @param {*} defaultValue\n * @return {*}\n */\nfunction orDefault(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n return isset(value) ? value : defaultValue;\n}\n\n/**\n * Converts given value to number using standard javascript converter: +value\n * @param {*} value Input value\n * @param {number} defaultValue\n * @return {number} Either converted value if it's not NaN and default value otherwise\n */\nfunction asNumber(value) {\n var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n value = +value;\n return !isNaN(value) ? value : 0;\n}\n\n/**\n * Converts given value to boolean using such algo:\n * - string \"0\" results in false;\n * - string \"false\" results in false;\n * - string \"null\" results in false;\n * - empty object results in false;\n * - empty array results in false;\n * - other values go through standard javascript converter: !!value\n * @param {*} value Input value\n * @return {boolean} Converted value\n */\nfunction asBoolean(value) {\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isBoolean(value)) return value;\n if (value === '0') return false;\n if (value === 'false') return false;\n if (value === 'null') return false;\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isObject(value) && __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(value)) return false;\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(value) && __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isEmpty(value)) return false;\n return !!value;\n}\n\n/**\n * Converts given value to string using standard javascript converter: ''+value\n * except that null and undefined values will be converted to empty string.\n * @param {*} value Input value\n * @return {string} Converted value\n */\nfunction asString(value) {\n if (value === null || __WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isUndefined(value)) return '';\n return '' + value;\n}\n\n/**\n * Converts given value to string using {@link asString()} and trims whitespace characters.\n * @param {string|*} value\n * @return {string} Converted and trimmed value\n */\nfunction trim(value) {\n return asString(value).trim();\n}\n\n/**\n * If input value is an array - it will be returned as is.\n * In other cases input value will be converted to string and either split with given delimiter\n * or just returned as a single array element.\n * @param {array|string} value\n * @param {string} delimiter\n * @return {array}\n */\nfunction asArray(value) {\n var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n if (!value) return [];\n if (__WEBPACK_IMPORTED_MODULE_0_lib_underscore___default.a.isArray(value)) return value;\n value = asString(value);\n return delimiter ? value.split(delimiter) : [value];\n}\n\n/***/ }),\n\n/***/ \"fokk\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (immutable) */ __webpack_exports__[\"createIframeDialog\"] = createIframeDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"createHtmlDialog\"] = createHtmlDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"openHtmlDialog\"] = openHtmlDialog;\n/* harmony export (immutable) */ __webpack_exports__[\"createWindowDialog\"] = createWindowDialog;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dialogManager\", function() { return dialogManager; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dialog_less__ = __webpack_require__(\"vBks\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dialog_less___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__dialog_less__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore__ = __webpack_require__(\"X0GP\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_logger__ = __webpack_require__(\"5wqq\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_utils__ = __webpack_require__(\"YnTO\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_var__ = __webpack_require__(\"dTkA\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\nvar logger = Object(__WEBPACK_IMPORTED_MODULE_3__utils_logger__[\"a\" /* newLogger */])('ZDialog');\n\n/**\n * Creates new dialog with IFrame with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nfunction createIframeDialog(url) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: url, type: 'iframe', __width: 800 }, options));\n}\n\n/**\n * Creates new dialog instance.\n * autoOpen option is false by default, so you should either call open() method\n * or override autoOpen option\n * @param {*} content HTML content. Can be either valid HTML string, or DOM node, or jQuery object\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog} Dialog instance\n */\nfunction createHtmlDialog(content) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: content, type: 'html', showCloseButton: true }, options));\n}\n\n/**\n * The same as {@link createHtmlDialog()} but with autoOpen enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nfunction openHtmlDialog(content) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn createHtmlDialog(content, _extends({ autoOpen: true }, options));\n}\n\n/**\n * Creates new dialog as new window with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nfunction createWindowDialog(url) {\n\tvar options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\treturn newDialog(_extends({ content: url, type: 'window' }, options));\n}\n\n// add some helper functions to jQuery\n$.extend($.fn, {\n\t/**\n * Calls {@link openHtmlDialog()} with source element as content\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n */\n\tzdialog: function zdialog() {\n\t\tvar options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\tvar $el = $(this);\n\t\tvar $placeholder = $('
').insertAfter($el);\n\t\tvar isInDom = $el.closest(document.documentElement);\n\t\tvar isVisible = $el.css('display') != 'none';\n\t\tif (isInDom) {\n\t\t\t$el.detach();\n\t\t}\n\t\tif (!isVisible) {\n\t\t\t$el.show();\n\t\t}\n\t\tvar dialog = createHtmlDialog($el, options);\n\t\tdialog.onBeforeClose(function () {\n\t\t\t$el.detach();\n\t\t});\n\t\tdialog.onClose(function () {\n\t\t\tif (isInDom) {\n\t\t\t\t$el.insertAfter($placeholder);\n\t\t\t}\n\t\t\tif (!isVisible) {\n\t\t\t\t$el.hide();\n\t\t\t}\n\t\t\t$placeholder.remove();\n\t\t});\n\t\tdialog.open();\n\t\t$el.data('zdialogInstance', dialog);\n\t\treturn this;\n\t},\n\n\t/**\n * Returns ZDialog instance for given element (if the dialog was created with {@link jQuery.fn.zdialog} function)\n * @return {ZDialog}\n */\n\tzdialogInstance: function zdialogInstance() {\n\t\treturn this.data('zdialogInstance');\n\t}\n});\n\n// FOR TESTING\n/*import {MODAL_ASK_REDIRECT, MODAL_CRITICAL_NEWS, MODAL_LOGIN, MODAL_PACKAGE_INFO, MODAL_REVIEW} from \"../modals\";\n$('.logo').click(function(e) {\n\te.preventDefault();\n\tconst queue = [];\n\tconst showNext = () => {\n\t\tif (queue.length > 0) {\n\t\t\tqueue.shift()();\n\t\t}\n\t};\n\tconst onOpen = () => {};\n\t// queue.push(() => MODAL_REVIEW.show(104625).onOpen(showNext));\n\t// queue.push(() => MODAL_LOGIN.show().onOpen(showNext));\n\t// queue.push(() => MODAL_PACKAGE_INFO.show(1803110691).onOpen(showNext));\n\t// queue.push(() => MODAL_ASK_REDIRECT.show().onOpen(showNext));\n\t// queue.push(() => MODAL_CRITICAL_NEWS.show(312).onOpen(showNext));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tshowNext();\n\n\t$(document).on('click', '.zdialog-html > div', showNext);\n});*/\n\n/**\n * @param {object} options\n * @return {ZDialog}\n */\nvar newDialog = function newDialog(options) {\n\treturn new ZDialog(options);\n};\n\n// force use newDialog function from top window\nvar key = '__zdialog_newDialog';\nif (Object(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"b\" /* checkIsIframe */])()) {\n\tnewDialog = window.top[key];\n} else {\n\twindow.top[key] = newDialog;\n}\n\n/**\n * Dialog class\n */\n\nvar ZDialog = function () {\n\t/** @type {JQuery.Callbacks} */\n\n\t/** @type {JQuery.Callbacks} */\n\n\t/** @type {HeightWatcher} */\n\tfunction ZDialog(options) {\n\t\t_classCallCheck(this, ZDialog);\n\n\t\tthis._width = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable();\n\t\tthis._height = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable();\n\t\tthis._isModal = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isCloseBtnVisible = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isLoading = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isOpened = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isClosed = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._isHidden = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._contentHeight = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(0);\n\t\tthis._iframeHeight = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(0);\n\t\tthis._opened = false;\n\t\tthis._onOpen = $.Callbacks();\n\t\tthis._onClose = $.Callbacks();\n\t\tthis._onBeforeClose = $.Callbacks();\n\t\tthis._result = null;\n\n\t\tvar o = _extends({}, ZDialog.defaults, options);\n\n\t\tthis._name = o.name;\n\t\tthis._o = o;\n\t\tthis._isModal(!!o.modal);\n\t\tthis._isCloseBtnVisible(!!o.showCloseButton);\n\t\tthis._width(o.width);\n\t\tthis._height(o.height);\n\n\t\tif (o.onOpen) {\n\t\t\tthis._onOpen.add(o.onOpen);\n\t\t}\n\t\tif (o.onClose) {\n\t\t\tthis._onClose.add(o.onClose);\n\t\t}\n\n\t\tif (o.autoOpen) {\n\t\t\tthis.open();\n\t\t}\n\t}\n\t/** @type {JQuery.Callbacks} */\n\n\n\t// options\n\n\n\t_createClass(ZDialog, [{\n\t\tkey: \"open\",\n\t\tvalue: function open() {\n\t\t\tvar _this = this;\n\n\t\t\tif (this.isOpened) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._isClosed(false);\n\t\t\tthis._isHidden(false);\n\t\t\tthis._result = null;\n\t\t\tif (this.type === 'window') {\n\t\t\t\tthis._wnd = window.open(this.content);\n\t\t\t\tthis._wnd.addEventListener('DOMContentLoaded', function () {\n\t\t\t\t\treturn _this._handleWindowReady();\n\t\t\t\t});\n\t\t\t\tthis._wnd.onbeforeunload = function () {\n\t\t\t\t\tif (!_this.isClosed) {\n\t\t\t\t\t\t_this.close();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tthis._isLoading(true);\n\t\t\t} else if (!dialogManager.isRegistered(this)) {\n\t\t\t\tif (this.isFullScreen) {\n\t\t\t\t\tthis._width('');\n\t\t\t\t\tthis._height('');\n\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t\tthis._iframeHeight('');\n\t\t\t\t}\n\t\t\t\tif (this.type === 'iframe') {\n\t\t\t\t\tthis._isLoading(true);\n\t\t\t\t\tif (!this.isAutoHeight) {\n\t\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\t\tthis._iframeHeight(this.height);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\tthis._isOpened(true);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this._onOpen.fireWith(_this);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t\tdialogManager.register(this);\n\t\t\t} else if (this._isHidden()) {\n\t\t\t\tdialogManager.show(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"close\",\n\t\tvalue: function close() {\n\t\t\tvar _this2 = this;\n\n\t\t\tif (this.isClosed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._onBeforeClose.fireWith(this, [this._result]);\n\t\t\tthis._isOpened(false);\n\t\t\tthis._isHidden(false);\n\t\t\tthis._isClosed(true);\n\t\t\tif (this.type === 'window') {\n\t\t\t\tif (this._wnd) {\n\t\t\t\t\tthis._wnd.close();\n\t\t\t\t\twindow.top.focus();\n\t\t\t\t\tthis._wnd = null;\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this2._onClose.fireWith(_this2, [_this2._result]);\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\t\tif (this._heightWatcher) {\n\t\t\t\t\tthis._heightWatcher.off();\n\t\t\t\t}\n\t\t\t\tdialogManager.unregister(this);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this2._onClose.fireWith(_this2, [_this2._result]);\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"hide\",\n\t\tvalue: function hide() {\n\t\t\tif (this.type === 'window') {\n\t\t\t\tlogger.error('Method is not supported for current dialog type');\n\t\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\t\tthis._isOpened(false);\n\t\t\t\tthis._isHidden(true);\n\t\t\t\tdialogManager.hide(this);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"closeWithResult\",\n\t\tvalue: function closeWithResult(result) {\n\t\t\tthis.result = result;\n\t\t\tthis.close();\n\t\t}\n\t}, {\n\t\tkey: \"updatePosition\",\n\t\tvalue: function updatePosition() {\n\t\t\tif (this.type === 'iframe') {\n\t\t\t\tthis._contentHeight(this.iframeHeight);\n\t\t\t}\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"handleIframeLoad\",\n\t\tvalue: function handleIframeLoad(item, e) {\n\t\t\tvar _this3 = this;\n\n\t\t\tlogger.log('loaded', e);\n\t\t\tthis._isLoading(false);\n\n\t\t\tif (!this.isFullScreen && this.isAutoHeight) {\n\t\t\t\tthis._heightWatcher = new HeightWatcher(e.target, function (newHeight) {\n\t\t\t\t\tlogger.log(\"new height = \" + newHeight);\n\t\t\t\t\t_this3._iframeHeight(newHeight);\n\t\t\t\t\tif (!_this3.contentHeight) {\n\t\t\t\t\t\t_this3._contentHeight(newHeight);\n\t\t\t\t\t}\n\t\t\t\t\t_this3._isOpened(true);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\treturn _this3._onOpen.fireWith(_this3);\n\t\t\t\t\t}, 0);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this3._onOpen.fireWith(_this3);\n\t\t\t\t}, 0);\n\t\t\t}\n\n\t\t\t// inject this instance to iframe\n\t\t\te.target.contentWindow.dialogInstance = this;\n\n\t\t\t// apply special classes\n\t\t\t$(e.target.contentWindow.document.body).toggleClass('zdialog-layout-modal', this.isModal).toggleClass('zdialog-layout-autoheight', this.isAutoHeight).toggleClass('zdialog-layout-fullscreen', this.isFullScreen);\n\n\t\t\t// triger event inside iframe\n\t\t\te.target.contentWindow.$(e.target.contentWindow.document).trigger('zdialog-shown');\n\t\t}\n\t}, {\n\t\tkey: \"_handleWindowReady\",\n\t\tvalue: function _handleWindowReady(e) {\n\t\t\tvar _this4 = this;\n\n\t\t\tlogger.log('loaded', e);\n\t\t\tthis._isLoading(false);\n\t\t\tthis._isOpened(true);\n\n\t\t\t// inject this instance to iframe\n\t\t\tthis._wnd.dialogInstance = this;\n\t\t\t$(this._wnd.document.body).addClass('zdialog-layout-window');\n\n\t\t\tsetTimeout(function () {\n\t\t\t\treturn _this4._onOpen.fireWith(_this4);\n\t\t\t}, 0);\n\t\t}\n\t}, {\n\t\tkey: \"handleCloseClick\",\n\t\tvalue: function handleCloseClick(item, e) {\n\t\t\tvar $target = $(e.target);\n\t\t\tif ($target.is('[data-dialog-result]')) {\n\t\t\t\tthis.result = $target.data('dialogResult');\n\t\t\t}\n\t\t\tthis.close();\n\t\t}\n\t}, {\n\t\tkey: \"handleBackdropClick\",\n\t\tvalue: function handleBackdropClick() {\n\t\t\tif (dialogManager.isTopmost(this) && !this.isModal) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"onOpen\",\n\t\tvalue: function onOpen(callback) {\n\t\t\tthis._onOpen.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offOpen\",\n\t\tvalue: function offOpen(callback) {\n\t\t\tthis._onOpen.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"onClose\",\n\t\tvalue: function onClose(callback) {\n\t\t\tthis._onClose.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offClose\",\n\t\tvalue: function offClose(callback) {\n\t\t\tthis._onClose.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"onBeforeClose\",\n\t\tvalue: function onBeforeClose(callback) {\n\t\t\tthis._onBeforeClose.add(callback);\n\t\t}\n\t}, {\n\t\tkey: \"offBeforeClose\",\n\t\tvalue: function offBeforeClose(callback) {\n\t\t\tthis._onBeforeClose.remove(callback);\n\t\t}\n\t}, {\n\t\tkey: \"name\",\n\t\tget: function get() {\n\t\t\treturn this._name;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"type\",\n\t\tget: function get() {\n\t\t\treturn this._o.type;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"content\",\n\t\tget: function get() {\n\t\t\treturn this._o.content;\n\t\t}\n\n\t\t/** @return {string} */\n\n\t}, {\n\t\tkey: \"title\",\n\t\tget: function get() {\n\t\t\treturn this._o.title;\n\t\t}\n\n\t\t/** @return {number} */\n\n\t}, {\n\t\tkey: \"width\",\n\t\tget: function get() {\n\t\t\treturn this._width();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"height\",\n\t\tget: function get() {\n\t\t\treturn this._height();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"minWidth\",\n\t\tget: function get() {\n\t\t\treturn this._o.minWidth;\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"maxWidth\",\n\t\tget: function get() {\n\t\t\treturn this._o.maxWidth;\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"contentWidth\",\n\t\tget: function get() {\n\t\t\treturn this._width();\n\t\t}\n\n\t\t/** @return {number|string} */\n\n\t}, {\n\t\tkey: \"contentHeight\",\n\t\tget: function get() {\n\t\t\treturn this._contentHeight();\n\t\t}\n\n\t\t/** @return {number} */\n\n\t}, {\n\t\tkey: \"iframeHeight\",\n\t\tget: function get() {\n\t\t\treturn this._iframeHeight();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isLoading\",\n\t\tget: function get() {\n\t\t\treturn this._isLoading();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isOpened\",\n\t\tget: function get() {\n\t\t\treturn this._isOpened();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isClosed\",\n\t\tget: function get() {\n\t\t\treturn this._isClosed();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isHidden\",\n\t\tget: function get() {\n\t\t\treturn this._isHidden();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isModal\",\n\t\tget: function get() {\n\t\t\treturn this._isModal();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isCloseBtnVisible\",\n\t\tget: function get() {\n\t\t\treturn this._isCloseBtnVisible();\n\t\t}\n\n\t\t/** @type {boolean} */\n\n\t}, {\n\t\tkey: \"isFullScreen\",\n\t\tget: function get() {\n\t\t\treturn this._o.fullscreen;\n\t\t}\n\n\t\t/** @type {boolean} */\n\n\t}, {\n\t\tkey: \"isAutoHeight\",\n\t\tget: function get() {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_5__utils_var__[\"d\" /* asString */])(this.height) === '' || this.height === 'auto';\n\t\t}\n\n\t\t/** @return {*} */\n\n\t}, {\n\t\tkey: \"result\",\n\t\tget: function get() {\n\t\t\treturn this._result;\n\t\t}\n\n\t\t/**\n * @param {*} value\n */\n\t\t,\n\t\tset: function set(value) {\n\t\t\tthis._result = value;\n\t\t}\n\n\t\t/**\n * @return {*}\n */\n\n\t}, {\n\t\tkey: \"customData\",\n\t\tget: function get() {\n\t\t\treturn this._o.custom;\n\t\t}\n\n\t\t/**\n * @return {string}\n */\n\n\t}, {\n\t\tkey: \"cssClass\",\n\t\tget: function get() {\n\t\t\treturn Object(__WEBPACK_IMPORTED_MODULE_5__utils_var__[\"d\" /* asString */])(this._o.cssClass);\n\t\t}\n\t}]);\n\n\treturn ZDialog;\n}();\n\nZDialog.defaults = {\n\tname: '',\n\ttype: 'iframe', // iframe, html\n\tcontent: '',\n\ttitle: '',\n\tbuttons: [],\n\tmodal: false,\n\tautoOpen: false,\n\tshowCloseButton: false,\n\n\twidth: '',\n\theight: '',\n\tfullscreen: false,\n\tcssClass: '',\n\n\tcustom: null,\n\n\t//events\n\tonOpen: null,\n\tonClose: null\n};\n\nvar DialogManager = function () {\n\t/** @type {KnockoutObservableArray} */\n\tfunction DialogManager() {\n\t\tvar _this5 = this;\n\n\t\t_classCallCheck(this, DialogManager);\n\n\t\tthis._counter = 0;\n\t\tthis._dialogs = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observableArray([]);\n\t\tthis._isClosing = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.observable(false);\n\t\tthis._initialized = false;\n\t\tthis._wrapper = new WindowWrapper();\n\n\t\tthis._$html = $('html');\n\t\tthis._$body = $('body');\n\n\t\tthis._isLoading = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.pureComputed(function () {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.any(_this5.dialogs, function (d) {\n\t\t\t\treturn d.isLoading;\n\t\t\t});\n\t\t});\n\n\t\tthis._visibleDialogs = __WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.pureComputed(function () {\n\t\t\treturn _this5.dialogs.filter(function (d) {\n\t\t\t\treturn !d.isHidden;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n * @param {ZDialog} dialog\n */\n\n\n\t_createClass(DialogManager, [{\n\t\tkey: \"register\",\n\t\tvalue: function register(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._dialogs.push(dialog);\n\t\t\tthis._checkMarkupAfterOpen();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"unregister\",\n\t\tvalue: function unregister(dialog) {\n\t\t\tif (this._dialogs.remove(dialog).length === 0) {\n\t\t\t\t// nothing has been removed\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._checkMarkupAfterClose();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"hide\",\n\t\tvalue: function hide(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\tthis._checkMarkupAfterClose();\n\t\t\t}\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"show\",\n\t\tvalue: function show(dialog) {\n\t\t\tif (this.isRegistered(dialog)) {\n\t\t\t\tthis._checkMarkupAfterOpen();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_checkMarkupAfterOpen\",\n\t\tvalue: function _checkMarkupAfterOpen() {\n\t\t\tif (this._isClosing()) {\n\t\t\t\tclearTimeout(this._timeout);\n\t\t\t\tthis._timeout = null;\n\t\t\t\tthis._isClosing(false);\n\t\t\t} else if (this.visibleDialogs.length === 1 && !this._initialized) {\n\t\t\t\tthis._wrapper.on();\n\n\t\t\t\tif (!this._$el) {\n\t\t\t\t\tthis._$el = $(\"
\");\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.applyBindings(this, this._$el[0]);\n\t\t\t\t\tthis._$el.appendTo('body');\n\t\t\t\t} else {\n\t\t\t\t\tthis._$el.show();\n\t\t\t\t}\n\t\t\t\tthis._initialized = true;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_checkMarkupAfterClose\",\n\t\tvalue: function _checkMarkupAfterClose() {\n\t\t\tvar _this6 = this;\n\n\t\t\tif (!this._isClosing() && this.visibleDialogs.length === 0 && this._initialized) {\n\t\t\t\t// no dialogs left\n\t\t\t\tthis._isClosing(true);\n\t\t\t\tthis._timeout = setTimeout(function () {\n\t\t\t\t\t_this6._wrapper.off();\n\t\t\t\t\t// logger.log('remove container');\n\t\t\t\t\t_this6._$el.remove();\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.cleanNode(_this6._$el[0]);\n\t\t\t\t\t_this6._$el = null;\n\t\t\t\t\t_this6._initialized = false;\n\t\t\t\t\t_this6._isClosing(false);\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"isRegistered\",\n\t\tvalue: function isRegistered(dialog) {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.contains(this.dialogs, dialog);\n\t\t}\n\t}, {\n\t\tkey: \"handleBeforeRemove\",\n\t\tvalue: function handleBeforeRemove(node) {\n\t\t\tvar $node = $(node);\n\t\t\t$node.remove();\n\t\t\t/*if (node.nodeType === 3) {\n \t$node.remove();\n \treturn;\n }\n $node.addClass('zdialog-closing');\n setTimeout(() => $node.remove(), 300);*/\n\t\t}\n\n\t\t/** @return {ZDialog[]} */\n\n\t}, {\n\t\tkey: \"getTopmostDialog\",\n\t\tvalue: function getTopmostDialog() {\n\t\t\treturn __WEBPACK_IMPORTED_MODULE_1_lib_underscore___default.a.last(this.visibleDialogs.filter(function (d) {\n\t\t\t\treturn !d.isLoading;\n\t\t\t}));\n\t\t}\n\t}, {\n\t\tkey: \"isTopmost\",\n\t\tvalue: function isTopmost(dialog) {\n\t\t\treturn dialog === this.getTopmostDialog();\n\t\t}\n\n\t\t/**\n * @param {ZDialog} dialog\n */\n\n\t}, {\n\t\tkey: \"getDialogClass\",\n\t\tvalue: function getDialogClass(dialog) {\n\t\t\tvar css = [];\n\t\t\tif (dialog.isModal) {\n\t\t\t\tcss.push('zdialog-modal');\n\t\t\t}\n\t\t\tif (dialog.isFullScreen) {\n\t\t\t\tcss.push('zdialog-fullscreen');\n\t\t\t}\n\t\t\tif (this.isTopmost(dialog)) {\n\t\t\t\tcss.push('zdialog-topmost');\n\t\t\t} else if (this.visibleDialogs.length > 1) {\n\t\t\t\tcss.push('zdialog-overlapped');\n\t\t\t}\n\t\t\tif (dialog.isLoading) {\n\t\t\t\tcss.push('zdialog-loading');\n\t\t\t}\n\t\t\tif (dialog.isOpened) {\n\t\t\t\tcss.push('zdialog-opened');\n\t\t\t}\n\t\t\tif (dialog.isHidden) {\n\t\t\t\tcss.push('zdialog-hidden');\n\t\t\t}\n\t\t\tif (dialog.name) {\n\t\t\t\tcss.push('zdialog-instance-' + dialog.name);\n\t\t\t}\n\t\t\tif (dialog.cssClass) {\n\t\t\t\tcss.push(dialog.cssClass);\n\t\t\t}\n\t\t\treturn css.join(' ');\n\t\t}\n\t}, {\n\t\tkey: \"dialogs\",\n\t\tget: function get() {\n\t\t\treturn this._dialogs();\n\t\t}\n\n\t\t/** @return {ZDialog[]} */\n\n\t}, {\n\t\tkey: \"visibleDialogs\",\n\t\tget: function get() {\n\t\t\treturn this._visibleDialogs();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isLoading\",\n\t\tget: function get() {\n\t\t\treturn this._isLoading();\n\t\t}\n\n\t\t/** @return {boolean} */\n\n\t}, {\n\t\tkey: \"isClosing\",\n\t\tget: function get() {\n\t\t\treturn this._isClosing();\n\t\t}\n\t}]);\n\n\treturn DialogManager;\n}();\n\nvar HeightWatcher = function () {\n\tfunction HeightWatcher($iframe, callback) {\n\t\tvar _this7 = this;\n\n\t\t_classCallCheck(this, HeightWatcher);\n\n\t\tthis._currHeight = 0;\n\t\tthis._event = $.Callbacks();\n\n\t\tthis._event.add(callback);\n\t\tthis._ibody = $($iframe)[0].contentWindow.document.body;\n\t\t// this.updateHeight();\n\t\tsetTimeout(function () {\n\t\t\t_this7.updateHeight();\n\t\t\t_this7._interval = setInterval(function () {\n\t\t\t\treturn _this7.updateHeight();\n\t\t\t}, 50);\n\t\t}, 0);\n\t}\n\n\t_createClass(HeightWatcher, [{\n\t\tkey: \"updateHeight\",\n\t\tvalue: function updateHeight() {\n\t\t\t// const newHeight = this._ibody.offsetHeight;\n\t\t\tvar newHeight = this.getHeight();\n\t\t\tif (newHeight !== this._currHeight) {\n\t\t\t\tthis._currHeight = newHeight;\n\t\t\t\tthis._event.fire(newHeight);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"getHeight\",\n\t\tvalue: function getHeight() {\n\t\t\tvar height = this._ibody.scrollHeight;\n\t\t\t$(this._ibody).find('iframe:visible').filter(function () {\n\t\t\t\treturn $(this).css('visibility') !== 'hidden';\n\t\t\t}).each(function () {\n\t\t\t\tvar iHeight = $(this).height();\n\t\t\t\tif (iHeight > height) {\n\t\t\t\t\theight = iHeight;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn height;\n\t\t}\n\t}, {\n\t\tkey: \"off\",\n\t\tvalue: function off() {\n\t\t\tclearInterval(this._interval);\n\t\t\tthis._event.empty();\n\t\t}\n\t}]);\n\n\treturn HeightWatcher;\n}();\n\nvar WindowWrapper = function () {\n\tfunction WindowWrapper() {\n\t\t_classCallCheck(this, WindowWrapper);\n\n\t\tthis._$wnd = $(window);\n\t\tthis._$html = $('html');\n\t\tthis._$head = $('head');\n\t\tthis._scrollTop = 0;\n\t\tthis._scrollLeft = 0;\n\n\t\tthis._$scrollBarStyle = $(\"\").appendTo(this._$head);\n\t\tthis._$positionStyle = $(\"\").appendTo(this._$head);\n\t\t// this._useFixedLayout = /(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t\tthis._useFixedLayout = Object(__WEBPACK_IMPORTED_MODULE_4__utils_utils__[\"c\" /* isMobile */])(); ///(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t}\n\n\t_createClass(WindowWrapper, [{\n\t\tkey: \"on\",\n\t\tvalue: function on() {\n\t\t\tif (this._useFixedLayout) {\n\t\t\t\tthis._scrollTop = this._$wnd.scrollTop();\n\t\t\t\tthis._scrollLeft = this._$wnd.scrollLeft();\n\t\t\t\tthis._applyPositionStyle();\n\t\t\t\tthis._$wnd.scrollTop(0).scrollLeft(0);\n\t\t\t}\n\t\t\tthis._applyScrollbarStyle();\n\n\t\t\tthis._$html.toggleClass('zdialog-scrollbar-fix', this._hasScrollBar()).toggleClass('zdialog-position-fix', this._useFixedLayout).addClass('zdialog-open');\n\t\t}\n\t}, {\n\t\tkey: \"off\",\n\t\tvalue: function off() {\n\t\t\tthis._$html.removeClass('zdialog-scrollbar-fix').removeClass('zdialog-position-fix').removeClass('zdialog-open');\n\t\t\tif (this._useFixedLayout) {\n\t\t\t\tthis._$wnd.scrollTop(this._scrollTop).scrollLeft(this._scrollLeft);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"_applyScrollbarStyle\",\n\t\tvalue: function _applyScrollbarStyle() {\n\t\t\tvar scrollBarWidth = getScrollBarWidth();\n\t\t\t// language=CSS\n\t\t\tthis._$scrollBarStyle.html(\"\\n.zdialog-scrollbar-fix {\\n\\tpadding-right: \" + scrollBarWidth + \"px;\\n}\\n\");\n\t\t}\n\t}, {\n\t\tkey: \"_applyPositionStyle\",\n\t\tvalue: function _applyPositionStyle() {\n\t\t\t// language=CSS\n\t\t\tthis._$positionStyle.html(\"\\n.zdialog-position-fix {\\n\\tposition: fixed;\\n\\twidth: 100%;\\n\\theight: 100%;\\n\\ttop: -\" + this._scrollTop + \"px;\\n\\tleft: -\" + this._scrollLeft + \"px;\\n}\\n\");\n\t\t}\n\t}, {\n\t\tkey: \"_hasScrollBar\",\n\t\tvalue: function _hasScrollBar() {\n\t\t\treturn hasScrollBar(this._$html);\n\t\t}\n\t}]);\n\n\treturn WindowWrapper;\n}();\n\nfunction getScrollBarWidth() {\n\tvar $outer = $('
').css({ visibility: 'hidden', width: 100, overflow: 'scroll' }).appendTo('body'),\n\t widthWithScroll = $('
').css({ width: '100%' }).appendTo($outer).outerWidth();\n\t$outer.remove();\n\treturn 100 - widthWithScroll;\n}\n\nfunction hasScrollBar(el) {\n\tvar $el = $(el);\n\treturn $el.length > 0 ? $el[0].scrollHeight > $(window).height() : false;\n}\n\nvar dialogManager = new DialogManager();\n\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-wrapper', {\n\ttemplate: \"\\n
\\n
\\n
\\n\\t
\\n\\t\\t
\\n\\t
\\n
\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog', {\n\ttemplate: \"\\n
\\n
\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-content-iframe', {\n\ttemplate: \"\\n
\\n\\n\".trim()\n});\n__WEBPACK_IMPORTED_MODULE_2_lib_knockout___default.a.components.register('zdialog-content-html', {\n\ttemplate: \"\\n\\n

\\n\\t\\n\\t
\\n

\\n\\n\\n
\\n\\n
\\n\".trim()\n});\n\n/***/ }),\n\n/***/ \"oFSp\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__view__ = __webpack_require__(\"BP4H\");\n/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, \"view\", function() { return __WEBPACK_IMPORTED_MODULE_0__view__; });\n\n\n\n\n/***/ }),\n\n/***/ \"oHD7\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return GlobalEvents; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_event__ = __webpack_require__(\"49+S\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n/**\n * This class contains different system-wide events as static properties\n */\nvar GlobalEvents = function GlobalEvents() {\n _classCallCheck(this, GlobalEvents);\n};\nGlobalEvents.USER_LOGGED_IN = new __WEBPACK_IMPORTED_MODULE_0__utils_event__[\"a\" /* GlobalEvent */]('USER_LOGGED_IN');\n\n/***/ }),\n\n/***/ \"og09\":\n/***/ (function(module, exports) {\n\nmodule.exports = toastr;\n\n/***/ }),\n\n/***/ \"otQ7\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ReviewList; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout__ = __webpack_require__(\"7fPx\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lib_knockout__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reviewitem__ = __webpack_require__(\"/ryK\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_core_modals__ = __webpack_require__(\"YdFU\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_core_utils_url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__core_widgets_notifier__ = __webpack_require__(\"2uje\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_lib_zinfinitescroll__ = __webpack_require__(\"wC9f\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\n\nvar ReviewList = function () {\n\tfunction ReviewList(data) {\n\t\t_classCallCheck(this, ReviewList);\n\n\t\tthis.reviews = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observableArray([]);\n\t\tthis.users = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observableArray([]);\n\t\tthis.reviewCols = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observableArray([]);\n\t\tthis.colIndex = 0;\n\t\tthis._filters = null;\n\t\tthis._infScroll = null;\n\t\tthis._page = 0;\n\t\tthis._loading = __WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observable(false);\n\t\tthis._xhr = null;\n\t\tthis._onLoad = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.Callbacks();\n\t\tthis._totalCount = null;\n\t\tthis._averageRating = null;\n\n\t\tvar o = this._o = _extends({\n\t\t\t/**\n * Wrapper element to enable infinite scroll plugin\n */\n\t\t\tinfScrollWrapper: null,\n\t\t\t/**\n * Infinite scroll plugin distance parameter\n */\n\t\t\tinfScrollDistance: 2000,\n\t\t\t/**\n * Render in columns or linear\n */\n\t\t\tcolumns: true,\n\t\t\tcolumnsCount: 5,\n\t\t\t/**\n * Calculate average rating on server\n */\n\t\t\tcalculateAverageRating: false,\n\t\t\t/**\n * Show images\n */\n\t\t\tshowImages: true,\n\t\t\t/**\n * Show videos\n */\n\t\t\tshowVideos: false,\n\t\t\t/**\n * Single review/question details\n */\n\t\t\tisDetails: false,\n\t\t\t/**\n * Include sales into list\n */\n\t\t\tincludeSales: false\n\n\t\t}, data);\n\n\t\tfor (var i = 0; i < o.columnsCount; i++) {\n\t\t\tthis.reviewCols.push(__WEBPACK_IMPORTED_MODULE_1_lib_knockout___default.a.observableArray([]));\n\t\t}\n\n\t\tif (o.infScrollWrapper) {\n\t\t\tthis._initInfScroll();\n\t\t}\n\n\t\tthis._handleItemClick = this._handleItemClick.bind(this);\n\t}\n\n\t/**\n * Render as columns\n * @return {boolean}\n */\n\n\n\t/** @type {InfiniteScroll} */\n\n\n\t_createClass(ReviewList, [{\n\t\tkey: \"load\",\n\n\n\t\t/**\n * Loads reviews from server with given filters\n * @param {object} filters\n * @return {JQuery.jqXHR}\n */\n\t\tvalue: function load(filters) {\n\t\t\tvar _this = this;\n\n\t\t\tthis.clear();\n\t\t\tthis._filters = filters;\n\t\t\treturn this._loadReviews().done(function (response) {\n\t\t\t\t_this._totalCount = response.totalCount;\n\t\t\t\tif (response.averageRating !== undefined) {\n\t\t\t\t\t_this._averageRating = response.averageRating;\n\t\t\t\t}\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (_this._infScroll) {\n\t\t\t\t\t\t_this._infScroll.on();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n * Sets reviews from array\n * @param {array} reviews\n * @param {number} totalCount\n */\n\n\t}, {\n\t\tkey: \"loadFromArray\",\n\t\tvalue: function loadFromArray(reviews) {\n\t\t\tvar _this2 = this;\n\n\t\t\tvar totalCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\t\tvar filters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t\t\tthis.clear();\n\t\t\tthis._page = 1;\n\n\t\t\t// Model updates data internally so deep copy of data is created\n\t\t\tvar reviewsCopy = [];\n\t\t\treviews.forEach(function (review) {\n\t\t\t\treturn reviewsCopy.push(__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend(true, {}, review));\n\t\t\t});\n\n\t\t\tvar reviewItems = this._addItems(reviewsCopy);\n\n\t\t\tvar hasMore = false;\n\t\t\tif (totalCount !== null) {\n\t\t\t\tthis._totalCount = totalCount;\n\t\t\t\tif (totalCount > reviewItems.length) {\n\t\t\t\t\thasMore = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (filters !== null) {\n\t\t\t\tthis._filters = filters;\n\t\t\t}\n\n\t\t\tsetTimeout(function () {\n\t\t\t\treturn _this2._onLoad.fireWith(_this2, [reviewItems]);\n\t\t\t});\n\n\t\t\tif (hasMore && this._infScroll) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this2._infScroll.on();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Clears everything\n */\n\n\t}, {\n\t\tkey: \"clear\",\n\t\tvalue: function clear() {\n\t\t\tvar _this3 = this;\n\n\t\t\tthis.reviews().forEach(function (item) {\n\t\t\t\treturn item.offClick(_this3._handleItemClick);\n\t\t\t});\n\t\t\tthis.reviews([]);\n\t\t\tthis.reviewCols().forEach(function (col) {\n\t\t\t\treturn col([]);\n\t\t\t});\n\t\t\tif (this._infScroll) {\n\t\t\t\tthis._infScroll.off();\n\t\t\t}\n\t\t\tthis.colIndex = 0;\n\t\t\tthis._page = 0;\n\t\t\tthis._filters = null;\n\t\t\tthis._loading(false);\n\t\t\tif (this._xhr) {\n\t\t\t\tthis._xhr.abort();\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: \"enableSizWatcher\",\n\t\tvalue: function enableSizWatcher() {\n\t\t\t__WEBPACK_IMPORTED_MODULE_0_jquery___default()(window).on('resize', function () {\n\t\t\t\tReviewList._reviewSizeSpot(true);\n\t\t\t});\n\t\t\tthis.onLoad(ReviewList._reviewSizeSpot);\n\t\t}\n\t}, {\n\t\tkey: \"onLoad\",\n\t\tvalue: function onLoad(handler) {\n\t\t\tthis._onLoad.add(handler);\n\t\t}\n\t}, {\n\t\tkey: \"offLoad\",\n\t\tvalue: function offLoad(handler) {\n\t\t\tthis._onLoad.remove(handler);\n\t\t}\n\n\t\t/**\n * @param {ReviewItem} item\n */\n\n\t}, {\n\t\tkey: \"deleteItem\",\n\t\tvalue: function deleteItem(item) {\n\t\t\tvar _this4 = this;\n\n\t\t\t__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.post(Object(__WEBPACK_IMPORTED_MODULE_4_core_utils_url__[\"g\" /* siteUrl */])('reviews/delete_review'), { id: item.id }, function (response) {\n\t\t\t\tif (response.success) {\n\t\t\t\t\tif (_this4.container !== null) {\n\t\t\t\t\t\tif (_this4._o.columns) {\n\t\t\t\t\t\t\tfor (var i = 0; i < _this4.reviewCols().length; i++) {\n\t\t\t\t\t\t\t\t_this4.reviewCols()[i].remove(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t_this4.reviews.remove(item);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_5__core_widgets_notifier__[\"a\" /* Notifier */].error('Ошибка');\n\t\t\t\t}\n\t\t\t}, 'json');\n\t\t}\n\n\t\t/**\n * @param {object} data\n * @return {ReviewItem}\n */\n\n\t}, {\n\t\tkey: \"prependDataItem\",\n\t\tvalue: function prependDataItem(data) {\n\t\t\tvar item = this._prepareItems([data])[0];\n\n\t\t\tif (this.container !== null) {\n\t\t\t\tif (this._o.columns) {\n\t\t\t\t\tthis.reviewCols()[0]().unshift(item);\n\t\t\t\t}\n\t\t\t\tthis.reviews.unshift(item);\n\t\t\t}\n\t\t\tthis._totalCount++;\n\n\t\t\treturn item;\n\t\t}\n\t}, {\n\t\tkey: \"_initInfScroll\",\n\t\tvalue: function _initInfScroll() {\n\t\t\tvar _this5 = this;\n\n\t\t\tthis._infScroll = new __WEBPACK_IMPORTED_MODULE_6_lib_zinfinitescroll__[\"a\" /* InfiniteScroll */](this._o.infScrollWrapper, {\n\t\t\t\tdistance: this._o.infScrollDistance,\n\t\t\t\tonNeedMore: function onNeedMore(callback) {\n\t\t\t\t\tif (!_this5._loading()) {\n\t\t\t\t\t\t_this5._loadReviews(callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n *\n * @return {JQuery.jqXHR}\n * @private\n */\n\n\t}, {\n\t\tkey: \"_loadReviews\",\n\t\tvalue: function _loadReviews() {\n\t\t\tvar _this6 = this;\n\n\t\t\tvar callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n\t\t\tthis._loading(true);\n\t\t\treturn this._xhr = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.get(Object(__WEBPACK_IMPORTED_MODULE_4_core_utils_url__[\"g\" /* siteUrl */])('reviews/get_ajax'), _extends({}, this._filters, {\n\t\t\t\tpage: ++this._page,\n\t\t\t\tcalculate_average_rating: this._o.calculateAverageRating ? 1 : 0,\n\t\t\t\tinclude_sales: this._o.includeSales ? 1 : 0\n\t\t\t}), null, 'json').always(function () {\n\t\t\t\t_this6._loading(false);\n\t\t\t\t_this6._xhr = null;\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}).done(function (response) {\n\t\t\t\tvar reviewItems = _this6._addItems(response.reviews);\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\treturn _this6._onLoad.fireWith(_this6, [reviewItems]);\n\t\t\t\t});\n\t\t\t\tif (!response.hasMore && _this6._infScroll) {\n\t\t\t\t\t_this6._infScroll.off();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n * @param {array} items\n * @return {array}\n * @private\n */\n\n\t}, {\n\t\tkey: \"_prepareItems\",\n\t\tvalue: function _prepareItems(items) {\n\t\t\tvar _this7 = this;\n\n\t\t\treturn items.map(function (r) {\n\t\t\t\tr.parent = _this7;\n\t\t\t\treturn new __WEBPACK_IMPORTED_MODULE_2__reviewitem__[\"a\" /* ReviewItem */](r);\n\t\t\t});\n\t\t}\n\n\t\t/**\n * @param {array} items\n * @private\n */\n\n\t}, {\n\t\tkey: \"_addItems\",\n\t\tvalue: function _addItems(items) {\n\t\t\tvar _this8 = this;\n\n\t\t\tvar reviewItems = this._prepareItems(items);\n\t\t\treviewItems.forEach(function (reviewItem) {\n\t\t\t\treviewItem.onClick(_this8._handleItemClick);\n\t\t\t});\n\n\t\t\tthis.reviews.pushAll(reviewItems);\n\n\t\t\tif (this._o.columns) {\n\t\t\t\tvar reviewCols = [];\n\t\t\t\tfor (var i = 0; i < this._o.columnsCount; ++i) {\n\t\t\t\t\treviewCols.push([]);\n\t\t\t\t}\n\n\t\t\t\treviewItems.forEach(function (reviewItem) {\n\t\t\t\t\tif (_this8.colIndex >= _this8._o.columnsCount) {\n\t\t\t\t\t\t_this8.colIndex = 0;\n\t\t\t\t\t}\n\t\t\t\t\treviewCols[_this8.colIndex++].push(reviewItem);\n\t\t\t\t});\n\n\t\t\t\treviewCols.forEach(function (col, index) {\n\t\t\t\t\tif (col.length) {\n\t\t\t\t\t\t_this8.reviewCols()[index].pushAll(col);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn reviewItems;\n\t\t}\n\n\t\t/**\n * @param {ReviewItem} item\n * @private\n */\n\n\t}, {\n\t\tkey: \"_handleItemClick\",\n\t\tvalue: function _handleItemClick(item) {\n\t\t\tif (!this.isDetails) {\n\t\t\t\tif (item.data().is_question) {\n\t\t\t\t\twindow.location = item.data().url;\n\t\t\t\t} else {\n\t\t\t\t\tvar index = this.reviews().indexOf(item);\n\t\t\t\t\t__WEBPACK_IMPORTED_MODULE_3_core_modals__[\"MODAL_REVIEW\"].show(item.id, index, this._filters);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n *\n * @param {boolean} reinit\n * @private\n */\n\n\t}, {\n\t\tkey: \"columns\",\n\t\tget: function get() {\n\t\t\treturn this._o.columns;\n\t\t}\n\n\t\t/**\n * Number of columns\n * @return {int}\n */\n\n\t}, {\n\t\tkey: \"columnsCount\",\n\t\tget: function get() {\n\t\t\treturn this._o.columnsCount;\n\t\t}\n\n\t\t/**\n * Is loading at the moment\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"isLoading\",\n\t\tget: function get() {\n\t\t\treturn this._loading();\n\t\t}\n\n\t\t/**\n * Total reviews count\n * @return {int}\n */\n\n\t}, {\n\t\tkey: \"totalCount\",\n\t\tget: function get() {\n\t\t\treturn this._totalCount;\n\t\t}\n\n\t\t/**\n * Average reviews rating\n * @return {int}\n */\n\n\t}, {\n\t\tkey: \"averageRating\",\n\t\tget: function get() {\n\t\t\treturn this._averageRating;\n\t\t}\n\n\t\t/**\n * Are images visible\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"showImages\",\n\t\tget: function get() {\n\t\t\treturn this._o.showImages;\n\t\t}\n\n\t\t/**\n * Are videos visible\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"showVideos\",\n\t\tget: function get() {\n\t\t\treturn this._o.showVideos;\n\t\t}\n\n\t\t/**\n * Are images visible\n * @return {boolean}\n */\n\n\t}, {\n\t\tkey: \"isDetails\",\n\t\tget: function get() {\n\t\t\treturn this._o.isDetails;\n\t\t}\n\t}], [{\n\t\tkey: \"_reviewSizeSpot\",\n\t\tvalue: function _reviewSizeSpot() {\n\t\t\tvar reinit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t\t\tvar $items = __WEBPACK_IMPORTED_MODULE_0_jquery___default()('.reviews-wrapper .review-item');\n\t\t\tif (!reinit) {\n\t\t\t\t$items = $items.not('[size]');\n\t\t\t}\n\t\t\tvar width = $items.innerWidth();\n\n\t\t\tif (width > 240) {\n\t\t\t\t$items.attr('size', 'large');\n\t\t\t} else if (width <= 240 && width >= 223) {\n\t\t\t\t$items.attr('size', 'medium');\n\t\t\t} else if (width < 223) {\n\t\t\t\t$items.attr('size', 'small');\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn ReviewList;\n}();\n\n/***/ }),\n\n/***/ \"qQ5b\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n
\\n\\t
\\n\\t
\\n
\\n\\n\\n\\t\\n\\t
\\n\\t\\t
Извините :(
\\n\\t\\t
На этот магазин отзывов нет
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\n\"\n\n/***/ }),\n\n/***/ \"rItL\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = showModalIframe;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__url__ = __webpack_require__(\"FYi7\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__widgets_dialog__ = __webpack_require__(\"fokk\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n/**\n * Shows iframe-based modal window\n * @param {string} name Modal name\n * @param {object} data Custom data to passed as GET parameters\n * @param {object} dialogOptions Options for {@link ZDialog} instance\n * @return {ZDialog}\n */\nfunction showModalIframe(name) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var dialogOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n data = _extends({}, data);\n for (var key in data) {\n if (data[key] === null) delete data[key];\n }var query = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.param(_extends({}, data));\n var url = Object(__WEBPACK_IMPORTED_MODULE_1__url__[\"g\" /* siteUrl */])('modals/' + name + (query ? '?' + query : ''));\n return Object(__WEBPACK_IMPORTED_MODULE_2__widgets_dialog__[\"createIframeDialog\"])(url, _extends({ name: name }, dialogOptions, { autoOpen: true }));\n}\n\n/***/ }),\n\n/***/ \"tXil\":\n/***/ (function(module, exports) {\n\nvar Smart = {};\r\n\r\n// Embed the Smart.Plurals source: \r\n\r\n\r\n// Create namespace:\r\nif (typeof Smart !== 'object')\r\n\tSmart = {};\r\n\r\n(function() {\r\n\r\n\tvar rules = {} // Map of language codes to rules\r\n\t\t, defaultCode = null\r\n\t\t, defaultRule = null;\r\n\r\n\tSmart.Plurals = {\r\n\t\t/**\r\n\t\t * Retrieves a plural rule, based on the supplied language code.\r\n\t\t * If no languageCode is specified, the default rule will be returned.\r\n\t\t *\r\n\t\t * A plural rule is a function that takes in a value\r\n\t\t * and determines whether it should be singular form, plural form,\r\n\t\t * or even other forms, depending on the number of choices.\r\n\t\t *\r\n\t\t * @param {String} [languageCode] - Optional - a 2-letter or 4-letter language code, or the full ruleName.\r\n\t\t * @returns {function({Number} value, {Number|Array} choices)}\r\n\t\t */\r\n\t\tgetRule: function(languageCode) {\r\n\t\t\t// Calling this with no parameters will return the default:\r\n\t\t\tif (!languageCode) {\r\n\t\t\t\treturn defaultRule || (defaultRule = this.getRule(defaultCode));\r\n\t\t\t}\r\n\r\n\t\t\t// Normalize:\r\n\t\t\tlanguageCode = ',' + languageCode.toLowerCase() + ',';\r\n\r\n\t\t\t// Search for an \"exact match\":\r\n\t\t\tfor (var languageCodes in rules) {\r\n\t\t\t\tif (!rules.hasOwnProperty(languageCodes)) continue;\r\n\r\n\t\t\t\tvar isExactMatch = (languageCodes.indexOf(languageCode) !== -1);\r\n\t\t\t\tif (isExactMatch) {\r\n\t\t\t\t\treturn rules[languageCodes];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// If we've got a 4-letter code, search for a \"generic match\" (2-letter code):\r\n\t\t\tvar dash = languageCode.indexOf('-');\r\n\t\t\tif (dash !== -1) {\r\n\t\t\t\tvar twoLetterCode = languageCode.substring(1, dash);\r\n\t\t\t\treturn this.getRule(twoLetterCode);\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t,\r\n\t\t/**\r\n\t\t * Sets the default language rule.\r\n\t\t *\r\n\t\t * @param {String} languageCode - 2-letter or 4-letter language code\r\n\t\t */\r\n\t\tsetDefaultRule: function(languageCode) {\r\n\t\t\tdefaultCode = languageCode.toLowerCase();\r\n\t\t\tdefaultRule = null; // it's lazy loaded\r\n\t\t}\r\n\t\t,\r\n\t\t/**\r\n\t\t * Defines a language rule.\r\n\t\t *\r\n\t\t * @param {String} languageCodes - A comma-separated list of 2-letter or 4-letter language codes\r\n\t\t * @param {function({Number} value, {Number} choices)|String} pluralRule - The rule; see getRule for a description.\r\n\t\t */\r\n\t\tdefineRule: function(languageCodes, pluralRule) {\r\n\t\t\t// Normalize:\r\n\t\t\tlanguageCodes = ',' + languageCodes.toLowerCase() + ',';\r\n\r\n\t\t\tvar normalizedRule;\r\n\t\t\tif (typeof pluralRule === 'string') {\r\n\t\t\t\t// Allows for aliases\r\n\t\t\t\tnormalizedRule = this.getRule(pluralRule);\r\n\t\t\t} else {\r\n\t\t\t\tnormalizedRule = function (value, choices) {\r\n\t\t\t\t\tif (typeof choices === 'number') {\r\n\t\t\t\t\t\treturn pluralRule(value, choices);\r\n\t\t\t\t\t} else if (typeof choices.length === 'number') {\r\n\t\t\t\t\t\treturn choices[pluralRule(value, choices.length)];\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\trules[languageCodes] = normalizedRule;\r\n\r\n\t\t\tif (!defaultCode) {\r\n\t\t\t\tthis.setDefaultRule(languageCodes.split(',')[1]);\r\n\t\t\t}\r\n\r\n\t\t\treturn normalizedRule;\r\n\t\t}\r\n\t};\r\n\r\n})();\r\n\r\n/**\r\n * Germanic family\r\n * English, German, Dutch, Swedish, Danish, Norwegian, Faroese\r\n * Romanic family\r\n * Spanish, Portuguese, Italian, Bulgarian\r\n * Latin/Greek family\r\n * Greek\r\n * Finno-Ugric family\r\n * Finnish, Estonian\r\n * Semitic family\r\n * Hebrew\r\n * Artificial\r\n * Esperanto\r\n * Finno-Ugric family\r\n * Hungarian\r\n * Turkic/Altaic family\r\n * Turkish\r\n */\r\nSmart.Plurals.defineRule('english,en,de,nl,sv,da,no,nn,nb,fo,es,pt,it,bg,el,fi,et,he,eo,hu,tr',\r\n\tfunction pluralRule_english(value, choices) {\r\n\t\t// singular used for 1\r\n\t\t// special cases for 0 and negative\r\n\t\tvar singular = (value === 1);\r\n\t\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\t\tvar zero = (value === 0);\r\n\t\tif (choices === 3) return (zero ? 0 : singular ? 1 : 2);\r\n\r\n\t\tvar negative = (value < 0);\r\n\t\treturn (negative ? 0 : zero ? 1 : singular ? 2 : 3);\r\n\t}\r\n);\r\n\r\n/**\r\n * Slavic family\r\n * Czech, Slovak\r\n */\r\nSmart.Plurals.defineRule('czech,cs,sk', function pluralRule_czech(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 2-4\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value >= 2 && value <= 4);\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Romanic family\r\n * French, Brazilian Portuguese\r\n */\r\nSmart.Plurals.defineRule('french,fr,pt-br', function pluralRule_french(value, choices) {\r\n\t// singular used for 0 and 1\r\n\tvar singular = (value === 0 || value === 1);\r\n\treturn (singular ? 0 : 1);\r\n});\r\n\r\n/**\r\n * Celtic\r\n * Gaeilge (Irish)\r\n */\r\nSmart.Plurals.defineRule('irish,ga', function pluralRule_irish(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 2\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar two = (value === 2);\r\n\treturn (singular ? 0 : two ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Baltic family\r\n * Latvian\r\n */\r\nSmart.Plurals.defineRule('latvian,lv', function pluralRule_latvian(value, choices) {\r\n\t// singular used for 1, 21, 31, 41... -- but not 11, 111, 211, 311, 411...\r\n\t// special case for 0\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar zero = (value === 0);\r\n\treturn (zero ? 0 : singular ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Baltic family\r\n * Lithuanian\r\n */\r\nSmart.Plurals.defineRule('lithuanian,lt', function pluralRule_lithuanian(value, choices) {\r\n\t// singular used for numbers ending in 1 (1, 21, 31, 41...)\r\n\t// special case for numbers ending in 12-19 (12-19, 112-119, 212-219...)\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 100 >= 12 && value % 100 <= 19);\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Polish\r\n */\r\nSmart.Plurals.defineRule('polish,pl', function pluralRule_polish(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for numbers ending in 2-4, except for 12-14 (2-4, 22-24, 32-34...)\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 10 >= 2 && value % 10 <= 4 && (value % 100 < 10 || value % 100 >= 20));\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Romanic family\r\n * Romanian\r\n */\r\nSmart.Plurals.defineRule('romanian,ro', function pluralRule_romanian(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 0 and numbers ending in 01-19 (0, 2-19, 101-119, 201-219...)\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar few = (value === 0 || (value % 100 >= 1 && value % 100 <= 19));\r\n\treturn (singular ? 0 : few ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Russian, Ukrainian, Serbian, Croatian\r\n */\r\nSmart.Plurals.defineRule('russian,ru,uk,sr,hr', function pluralRule_russian(value, choices) {\r\n\t// singular used for numbers ending in 1, except 11 (1, 21, 31...)\r\n\t// special case for numbers ending in 2-4, except 12-14 (2-4, 22-24, 32-34...)\r\n\t// numbers ending in 11-14 use plural (11-14, 111-114, 211-214...)\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 10 >= 2 && value % 10 <= 4 && (value % 100 < 10 || value % 100 >= 20));\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Slovenian\r\n */\r\nSmart.Plurals.defineRule('slovenian,sl', function pluralRule_slovenian(value, choices) {\r\n\t// singular used for numbers ending in 01 (1, 101, 201...)\r\n\t// special case for numbers ending in 02 (2, 102, 202...)\r\n\t// special case for numbers ending in 03-04 (3-4, 103-104, 203-204...)\r\n\tvar singular = (value % 100 === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar two = (value % 100 === 2);\r\n\tif (choices === 3) return singular ? 0 : two ? 1 : 2;\r\n\r\n\tvar few = (value % 100 === 3 || value % 100 === 4);\r\n\treturn singular ? 0 : two ? 1 : few ? 2 : 3;\r\n});\r\n\r\n\r\nmodule.exports = Smart;\r\n\n\n/***/ }),\n\n/***/ \"vBks\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"w2CW\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__ = __webpack_require__(\"GfF8\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__fancyapps_fancybox__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__ = __webpack_require__(\"XXni\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__fancyapps_fancybox_dist_jquery_fancybox_css__);\n\n\n\n$.fancybox.defaults.i18n.ru = {\n\tCLOSE: 'Закрыть',\n\tNEXT: 'Следующий',\n\tPREV: 'Предыдущий',\n\tERROR: 'Не удалось загрузить содержимое
Пожалуйста, попробуйте позже.',\n\tPLAY_START: 'Начать слайдшоу',\n\tPLAY_STOP: 'Остановить слайдшоу',\n\tFULL_SCREEN: 'На весь экран',\n\tTHUMBS: 'Предпросмотр'\n};\n\n$.fancybox.defaults.lang = LANG;\n\n/***/ }),\n\n/***/ \"wC9f\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return InfiniteScroll; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery__ = __webpack_require__(\"0iPh\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_jquery___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_jquery__);\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* Copy-paste of Vadim's extension*/\n\n\n\n/**\n * This is simple plugin that checks when window is scrolled\n * to the bottom of the element and fires event in this case\n */\nvar InfiniteScroll = function () {\n\tfunction InfiniteScroll(element, options) {\n\t\t_classCallCheck(this, InfiniteScroll);\n\n\t\tthis._clNeedMore = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.Callbacks();\n\n\t\tthis._$el = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(element);\n\t\tthis._$window = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(window);\n\t\tthis._o = _extends({\n\t\t\t/**\n * If distance in pixels between bottom of the window and bottom of the element\n * becomes less than this value - event is fired\n */\n\t\t\tdistance: 500,\n\t\t\t/**\n * Event handler\n */\n\t\t\tonNeedMore: null\n\n\t\t}, options);\n\t\tif (this._o.onNeedMore) {\n\t\t\tthis._clNeedMore.add(this._o.onNeedMore);\n\t\t}\n\t}\n\n\t/**\n * Subscribe to needed events and start monitoring\n */\n\n\n\t_createClass(InfiniteScroll, [{\n\t\tkey: 'on',\n\t\tvalue: function on() {\n\t\t\tif (this._eventHandler) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._eventHandler = this.update.bind(this);\n\t\t\tthis._$window.on('scroll resize', this._eventHandler);\n\t\t\tthis.update();\n\t\t}\n\n\t\t/**\n * Unsubscribe from all events and stop monitoring\n */\n\n\t}, {\n\t\tkey: 'off',\n\t\tvalue: function off() {\n\t\t\tif (!this._eventHandler) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis._$window.off('scroll resize', this._eventHandler);\n\t\t\tthis._eventHandler = null;\n\t\t}\n\n\t\t/**\n * Manual update. Event will be fired immediately if needed.\n */\n\n\t}, {\n\t\tkey: 'update',\n\t\tvalue: function update() {\n\t\t\tvar checkVisible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n\t\t\tif (checkVisible && !this._$el.is(':visible')) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar blockEnd = this._$el.offset().top + this._$el.outerHeight();\n\t\t\tvar windowHeight = this._$window.height();\n\t\t\tvar windowScrollTop = this._$window.scrollTop();\n\t\t\tvar isNearBottom = blockEnd < windowScrollTop + windowHeight + this._o.distance;\n\n\t\t\tif (isNearBottom != this._needMore) {\n\t\t\t\tthis._needMore = isNearBottom;\n\n\t\t\t\tif (isNearBottom) {\n\t\t\t\t\tthis._clNeedMore.fireWith(this._$el[0], [this._loadedMoreCallback.bind(this)]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Change internal state in response to loaded more event\n */\n\n\t}, {\n\t\tkey: '_loadedMoreCallback',\n\t\tvalue: function _loadedMoreCallback() {\n\t\t\tthis._needMore = false;\n\t\t}\n\n\t\t/**\n * Add event handler\n * @param callback\n */\n\n\t}, {\n\t\tkey: 'onNeedMore',\n\t\tvalue: function onNeedMore(callback) {\n\t\t\tthis._clNeedMore.add(callback);\n\t\t}\n\n\t\t/**\n * Remove event handler\n * @param callback\n */\n\n\t}, {\n\t\tkey: 'offNeedMore',\n\t\tvalue: function offNeedMore(callback) {\n\t\t\tthis._clNeedMore.remove(callback);\n\t\t}\n\t}]);\n\n\treturn InfiniteScroll;\n}();\n\n__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.fn.zInfiniteScroll = function (options) {\n\tvar o = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.extend({\n\t\tfetch: null,\n\t\tclear: null,\n\t\tshow: null,\n\t\tenabled: null,\n\t\tfinished: null,\n\t\tgetCurrentCount: null,\n\t\tcountPerPage: null,\n\t\ttotalCount: Number.MAX_VALUE,\n\t\tselector: '*',\n\t\tbtnShowMore: null,\n\t\tloading: null,\n\t\tmaxAutoloadPages: null,\n\t\tcheckViewport: true,\n\t\tautoStart: true\n\t}, options);\n\n\tvar $wrapper = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(this);\n\tvar $window = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(window);\n\tvar $btnShowMore = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(o.btnShowMore);\n\tvar $loading = __WEBPACK_IMPORTED_MODULE_0_jquery___default()(o.loading);\n\tvar getCurrentCount = __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.getCurrentCount) ? o.getCurrentCount : function () {\n\t\treturn $wrapper.children(o.selector).length;\n\t};\n\tvar currentPage = o.countPerPage === null ? 1 : function () {\n\t\treturn getCurrentCount() / o.countPerPage;\n\t};\n\tvar inProgress = false;\n\tvar isReloading = false;\n\tvar finished = false;\n\tvar t = new Throttler(50);\n\n\t$btnShowMore.click(function () {\n\t\t$btnShowMore.hide();\n\t\tloadMore(function (hasMore) {\n\t\t\tif (hasMore) {\n\t\t\t\t$btnShowMore.show();\n\t\t\t}\n\t\t});\n\t});\n\n\to.totalCount = +o.totalCount;\n\to.maxAutoloadPages = +o.maxAutoloadPages;\n\n\tif (o.autoStart) {\n\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\tstart();\n\t\t} else {\n\t\t\tfinished = true;\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\to.finished();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ton: function on() {\n\t\t\tfinished = false;\n\t\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\toff: function off() {\n\t\t\tstop();\n\t\t\tfinished = true;\n\t\t},\n\t\treload: function reload() {\n\t\t\tfinished = false;\n\t\t\tif (!__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(currentPage)) {\n\t\t\t\tcurrentPage = 0;\n\t\t\t}\n\t\t\to.totalCount = Number.MAX_VALUE;\n\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.clear)) {\n\t\t\t\to.clear();\n\t\t\t} else {\n\t\t\t\t$wrapper.children(o.selector).remove();\n\t\t\t}\n\n\t\t\tif (inProgress) {\n\t\t\t\tisReloading = true;\n\t\t\t} else {\n\t\t\t\tloadRoutine();\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction start() {\n\t\tif (!finished) {\n\t\t\t$window.on('scroll', onScroll);\n\t\t}\n\t}\n\n\tfunction stop() {\n\t\t$window.off('scroll', onScroll);\n\t}\n\n\tfunction onScroll() {\n\t\tif (unwrap(o.enabled) === false || inProgress || !t.ready() || !$wrapper.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar blockEnd = $wrapper.offset().top + $wrapper.height();\n\t\tvar windowHeight = $window.height();\n\t\tvar windowScrollTop = $window.scrollTop();\n\t\tvar isNearBottom = blockEnd < windowScrollTop + windowHeight + 500;\n\t\tvar isInViewport = !o.checkViewport || blockEnd > windowScrollTop + 50;\n\t\tvar ready = isNearBottom && isInViewport;\n\n\t\tif (ready) {\n\t\t\tloadRoutine();\n\t\t}\n\t}\n\n\tfunction loadRoutine() {\n\t\tstop();\n\t\tloadMore(function () {\n\t\t\tvar needMore = getCurrentCount() < o.totalCount;\n\t\t\tif (needMore) {\n\t\t\t\tif (!o.maxAutoloadPages || unwrap(currentPage) < o.maxAutoloadPages) {\n\t\t\t\t\tt.reset();\n\t\t\t\t\tstart();\n\t\t\t\t} else {\n\t\t\t\t\t$btnShowMore.show();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction loadMore(callback) {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\t\tinProgress = true;\n\t\t$loading.show();\n\n\t\to.fetch(unwrap(currentPage) + 1, function ($blocks) {\n\t\t\tif (isReloading) {\n\t\t\t\tisReloading = false;\n\t\t\t\tinProgress = false;\n\n\t\t\t\tloadRoutine();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar count = 0;\n\t\t\tif (__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(o.show)) {\n\t\t\t\tcount = o.show($blocks);\n\t\t\t} else {\n\t\t\t\t$blocks.addClass('fadein');\n\t\t\t\t$wrapper.append($blocks);\n\t\t\t\tcount = $blocks.length;\n\t\t\t}\n\n\t\t\tif (!__WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(currentPage)) {\n\t\t\t\tcurrentPage++;\n\t\t\t}\n\t\t\tinProgress = false;\n\t\t\t$loading.hide();\n\n\t\t\tif (count === 0 || o.countPerPage !== null && count < o.countPerPage) {\n\t\t\t\t// force stop because no more data on server\n\t\t\t\to.totalCount = getCurrentCount();\n\t\t\t}\n\n\t\t\tcallback();\n\t\t});\n\t}\n};\n\nfunction unwrap(value) {\n\treturn __WEBPACK_IMPORTED_MODULE_0_jquery___default.a.isFunction(value) ? value() : value;\n}\n\nvar Throttler = function () {\n\tfunction Throttler(period) {\n\t\t_classCallCheck(this, Throttler);\n\n\t\tthis.period = +period;\n\t\tthis.start = +new Date();\n\t}\n\n\t_createClass(Throttler, [{\n\t\tkey: 'ready',\n\t\tvalue: function ready() {\n\t\t\tvar ready = +new Date() - this.start >= this.period;\n\t\t\tif (ready) {\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t\treturn ready;\n\t\t}\n\t}, {\n\t\tkey: 'reset',\n\t\tvalue: function reset() {\n\t\t\tthis.start = +new Date();\n\t\t}\n\t}]);\n\n\treturn Throttler;\n}();\n\n/***/ }),\n\n/***/ \"xOlZ\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\tautosize 4.0.1\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, exports);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, mod.exports);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (module, exports) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function createEvent(name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = null;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\t\t\tta.style.height = ta.scrollHeight + heightOffset + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that \n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight !== styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap.delete(ta);\n\t\t}.bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function autosize(el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function autosize(el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\texports.default = autosize;\n\tmodule.exports = exports['default'];\n});\n\n/***/ })\n\n},[22]);\n\n\n// WEBPACK FOOTER //\n// users.min.js","import ko from \"lib/knockout\";\nimport {ReviewItem} from \"./model/reviewitem\";\nimport {ReviewComment} from \"./model/reviewcomment\";\nimport {ReviewList} from \"./model/reviewlist\";\nimport {ReviewItemMobile} from \"./model/reviewitemmobile\";\nimport {ReviewListMobile} from \"./model/reviewlistmobile\";\n\nko.components.register('review-list', {\n\tviewModel: {\n\t\tcreateViewModel: function (params) {\n\t\t\treturn params instanceof ReviewList ? params : new ReviewList(params);\n\t\t}\n\t},\n\ttemplate: require('./templates/review-list.html')\n});\n\nko.components.register('review-item', {\n\tviewModel: {\n\t\tcreateViewModel: function (params) {\n\t\t\treturn params instanceof ReviewItem ? params : new ReviewItem(params);\n\t\t}\n\t},\n\ttemplate: require('./templates/review-item.html')\n});\n\nko.components.register('review-comment', {\n\tviewModel: {\n\t\tcreateViewModel: function (params) {\n\t\t\treturn params instanceof ReviewComment ? params : new ReviewComment(params);\n\t\t}\n\t},\n\ttemplate: require('./templates/review-comment.html')\n});\n\nko.components.register('review-list-mobile', {\n viewModel: {\n createViewModel: function (params) {\n return params instanceof ReviewListMobile ? params : new ReviewListMobile(params);\n }\n },\n template: require('./templates/review-list-mobile.html')\n});\n\nko.components.register('review-item-mobile', {\n viewModel: {\n createViewModel: function (params) {\n return params instanceof ReviewItemMobile ? params : new ReviewItemMobile(params);\n }\n },\n template: require('./templates/review-item-mobile.html')\n});\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/components.js","module.exports = \"\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
0\\\">\\r\\n \\r\\n Ещё \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n Нет ответов\\r\\n \\r\\n \\r\\n Нет комментариев\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n Подробнее\\r\\n
\\r\\n
\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/reviews/common/templates/review-item-mobile.html\n// module id = /+4D\n// module chunks = 10 12 13","import _ from 'lib/underscore';\nimport $ from 'jquery';\nimport 'lib/autosize';\nimport {ReviewList} from \"./reviewlist\";\nimport {Likers, TYPE_REVIEW_LIKE, TYPE_SALE_LIKE} from \"./likers\";\nimport {ReviewComment} from \"./reviewcomment\";\nimport {ensureLoggedIn, UserInfo} from \"core/auth\";\nimport {Notifier} from \"core/widgets/notifier\";\nimport {siteUrl} from \"core/utils/url\";\nimport {highlightUrls} from \"core/utils/url\";\nimport * as langUtils from \"../../../../core/utils/lang\";\nimport {MODAL_REVIEW_EDIT, MODAL_QUESTION_EDIT} from \"../../../../core/modals\";\n\nexport class ReviewItem {\n\t/** @var {ReviewList} */\n\t_parent = null;\n\n\tconstructor(data) {\n\t\tthis.data = ko.observable(data);\n\t\tthis._parent = data.parent;\n\t\tthis._showImage = this._parent.showImages;\n\t\tthis._showVideo = this._parent.showVideos;\n\t\tthis._author = new UserInfo(data.author);\n\t\tthis._comments = ko.observableArray(data.comments\n\t\t\t? _.map(data.comments, d => {d.parent = this; return new ReviewComment(d)})\n\t\t\t: []);\n\t\tthis._newComment = new NewComment(this, comment => {\n\t\t\tthis._comments.push(comment);\n\t\t});\n\t\tthis._likers = new Likers(\n\t\t\tthis.id,\n\t\t\tdata.likes,\n\t\t\tdata.my_like,\n\t\t\tdata.is_sale ? TYPE_SALE_LIKE : TYPE_REVIEW_LIKE\n\t\t);\n\t\tthis._onClick = $.Callbacks();\n\n this.collapsed = ko.observable(this._showImage);\n this.titleUrl = ko.pureComputed(\n \t() => this._parent.isDetails\n\t\t\t\t? null\n\t\t\t\t: (this.data().is_question ? this.data().url : this.data().package_info.order_id)\n\t\t);\n\t\tthis.displayHtml = ko.pureComputed(() => highlightUrls(this.data().text));\n\t\tthis.isBodyLess = ko.pureComputed(() => !this.data().text);\n this.isClosed = ko.observable(data.closed);\n this.isAuthorHidden = !this._showImage && data.author.id === 1084; // Hide author if it is Alena\n\n\t\tthis.handleClick = this.handleClick.bind(this);\n\t\tthis.afterRender = this.afterRender.bind(this);\n\n\t\tif(zde.currentUser !== null && zde.currentUser.roleId == 2) {\n this._forWhom = ko.observable(data.for_whom);\n this.forWhomTitle = ko.pureComputed(() => {\n let result;\n switch (parseInt(this._forWhom())) {\n case 1:\n result = 'Виден всем';\n break;\n case 2:\n result = 'Украина';\n break;\n case 3:\n result = 'Россия';\n break;\n case 4:\n result = 'Только участники';\n break;\n default:\n result = 'Виден всем';\n break;\n }\n return result;\n });\n\n this.isClosed.subscribe(() => this.changeClosed());\n }\n\t}\n\n\tget id() {\n\t\treturn this.data().id;\n\t}\n\n\t/** @return {UserInfo} */\n\tget author() {\n\t\treturn this._author;\n\t}\n\n\t/** @return {ReviewComment[]} */\n\tget comments() {\n\t\treturn this._comments();\n\t}\n\n\t/** @return {NewComment} */\n\tget newComment() {\n\t\treturn this._newComment;\n\t}\n\n\t/** @return {Likers} */\n\tget likers() {\n\t\treturn this._likers;\n\t}\n\n\t/** @return {boolean} */\n\tget showImage() {\n\t\treturn this._showImage;\n\t}\n\n\t/** @return {boolean} */\n\tget showVideo() {\n\t\treturn this._showVideo;\n\t}\n\n\t/** @return {boolean} */\n\tget isDetailsPage() {\n\t\treturn this._parent.isDetails;\n\t}\n\n\t/** @return string|null */\n\tgetVideoUrl(autoplay=false) {\n\t\tlet url = this.data().video_url;\n\t\tif (url && autoplay) {\n\t\t\turl += '?autoplay=1';\n\t\t}\n\t\treturn url;\n\t}\n\n\thandleClick(data, e) {\n\t\tconst $target = $(e.target);\n\t\tconst $currentTarget = $(e.currentTarget);\n\n\t\tif (this.data().is_sale) {\n\t\t\t// Allow default browser action\n\t\t\treturn true;\n\t\t}\n\n\t\tif (($target.is('a') || $currentTarget.hasClass('direct-link')) && !$target.hasClass('review-text-wrapper')) {\n // Allow default browser action\n return true;\n }\n\n\t\tthis._onClick.fireWith(this, [this]);\n return false;\n\t}\n\n\tafterRender(anchor) {\n\t\tif(!this.showImage) {\n const $element = $(anchor).parents('.review-item');\n const $userInfo = $element.find('.review-header .user-info');\n const $likeButton = $element.find('.review-main .review-like');\n\n const $inlineContainer = $('
');\n\n $userInfo.addClass('user-info-inline');\n $likeButton.addClass('review-like-inline');\n $inlineContainer.append($userInfo).append($likeButton);\n if(this.isBodyLess()) {\n $element.find('.question-info-block .question-title').append($inlineContainer);\n } else {\n \t$element.find('.review-text').append($inlineContainer);\n\t\t\t}\n }\n\t}\n\n\tonClick(handler) {\n\t\tthis._onClick.add(handler);\n\t}\n\n\toffClick(handler) {\n\t\tthis._onClick.remove(handler);\n\t}\n\n\texpand() {\n\t\tthis.collapsed(false);\n\t}\n\n\tremove() {\n if(confirm('Вы действительно хотите удалить отзыв?')) {\n this._parent.deleteItem(this);\n }\n\t}\n\n\tedit() {\n\t\tif(this.data().is_question) {\n MODAL_QUESTION_EDIT.show(this.id, response => {\n if(response && response.updatedValues) {\n const data = this.data();\n\n data.title = response.updatedValues.product_name;\n data.text = response.updatedValues.text;\n data.category_id = parseInt(response.updatedValues.category_id);\n if(response.updatedValues.date) {\n data.date = response.updatedValues.date;\n data.date_human = response.updatedValues.date_human;\n }\n\n this.data(data);\n\n if(!this.showImage) {\n \tthis._forceRedraw();\n\t\t\t\t\t}\n }\n\t\t\t});\n\t\t} else {\n MODAL_REVIEW_EDIT.show(this.id, null, {}, response => {\n if(response && response.updatedValues) {\n const data = this.data();\n\n if(response.updatedValues.product_name) {\n data.title = response.updatedValues.product_name;\n }\n data.text = response.updatedValues.text;\n data.category_id = parseInt(response.updatedValues.category_id);\n data.forsale = parseInt(response.updatedValues.forsale);\n data.rating = parseInt(response.updatedValues.rating);\n if(response.updatedValues.image_preview) {\n data.preview = response.updatedValues.image_preview;\n }\n\n this.data(data);\n\n if(!this.showImage) {\n this._forceRedraw();\n }\n }\n });\n\t\t}\n\t}\n\n\tchangeForWhom() {\n $.post(siteUrl('reviews/changeForWhom'),\n\t\t\t{\n\t\t\t\tid: this.id,\n\t\t\t\tstate: this._forWhom()\n\t\t\t},\n\t\t\tresponse => {\n \tif(response.success) {\n \tthis._forWhom(response.state);\n \t }\n \t},\n\t\t\t'json'\n\t\t);\n\t}\n\n\tchangeClosed() {\n\t\t$.post(\n\t\t\tsiteUrl('reviews/changeClosed'),\n\t\t\t{\n\t\t\t\tid: this.id,\n\t\t\t\tstate: this.isClosed() ? 1 : 0\n\t\t\t},\n response => {},\n\t\t\t'json'\n\t\t);\n\t}\n\n\t/** @param {ReviewComment} comment */\n\tdeleteComment(comment) {\n $.post(siteUrl('reviews/delete_comment'),\n {id: comment.id},\n response => {\n if(response.success) {\n this._comments.remove(comment);\n } else {\n \tNotifier.error();\n\t\t\t\t}\n },\n 'json'\n );\n\t}\n\n\t_forceRedraw() {\n\t\tthis._parent.reviews.replace(this, new ReviewItem(this.data()));\n\t}\n}\n\nclass NewComment {\n\ttext = ko.observable('');\n\n\tinputHasFocus = ko.observable(false);\n\tisSaveButtonVisible = null;\n\n\tconstructor(review, callback) {\n\t\tthis._review = review;\n\t\tthis._textTrimmed = this.text.trimmed();\n\t\tthis._onSave = $.Callbacks();\n\t\tif (callback) {\n\t\t\tthis._onSave.add(callback);\n\t\t}\n this.isSaveButtonVisible = ko.computed(() => {\n // return this.inputHasFocus() && this.text();\n return this._textTrimmed().length > 0;\n });\n\t}\n\n\tsave() {\n\t\tif (!this._textTrimmed().length) {\n\t\t\treturn;\n\t\t}\n\t\tensureLoggedIn(user => {\n\t\t\tconst parentId = this._review.id;\n\t\t\tconst text = this._textTrimmed();\n\t\t\tlet postData;\n\n\t\t\tthis.text('');\n\t\t\tif (!this._review.data().is_sale) {\n\t\t\t\tpostData = {\n\t\t\t\t\ttext,\n\t\t\t\t\tparent_id: parentId,\n\t\t\t\t\tcomment_type: 'review',\n\t\t\t\t};\n\t\t\t\t$.post(siteUrl('reviews/save_comment'), postData, null, 'json')\n\t\t\t\t\t.fail(Notifier.errorXHR)\n\t\t\t\t\t.done(response => {\n\t\t\t\t\t\tif (!response || !response.success) {\n\t\t\t\t\t\t\tNotifier.error(response ? response.error : null);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst comment = new ReviewComment({\n\t\t\t\t\t\t\t\tid: response.id,\n\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\tauthor: user,\n\t\t\t\t\t\t\t\tdate: response.date,\n\t\t\t\t\t\t\t\tdate_human: response.date_human,\n\t\t\t\t\t\t\t\tlikes: 0,\n\t\t\t\t\t\t\t\tmy_like: false,\n\t\t\t\t\t\t\t\tis_editable: true,\n\t\t\t\t\t\t\t\tparent: this._review\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis._onSave.fire(comment);\n\t\t\t\t\t\t\tNotifier.success(\"Комментарий отправлен\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpostData = {\n\t\t\t\t\tcomments_page_id: parentId,\n\t\t\t\t\tcomments_content: text\n\t\t\t\t};\n\t\t\t\t$.post(siteUrl('blog/comments_save'), postData, null, 'json')\n\t\t\t\t\t.fail(Notifier.errorXHR)\n\t\t\t\t\t.done(response => {\n\t\t\t\t\t\tif (!response || !response.success) {\n\t\t\t\t\t\t\tNotifier.error(response ? response.error : null);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst comment = new ReviewComment({\n\t\t\t\t\t\t\t\tid: response.comment.comments_id,\n\t\t\t\t\t\t\t\ttext: text,\n\t\t\t\t\t\t\t\tauthor: user,\n\t\t\t\t\t\t\t\tdate: response.comment.comments_date,\n\t\t\t\t\t\t\t\tdate_human: response.comment.comments_date_human,\n\t\t\t\t\t\t\t\tlikes: null,\n\t\t\t\t\t\t\t\tmy_like: false,\n\t\t\t\t\t\t\t\tis_editable: false,\n\t\t\t\t\t\t\t\tparent: this._review\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis._onSave.fire(comment);\n\t\t\t\t\t\t\tNotifier.success(\"Комментарий отправлен\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tonSave(callback) {\n\t\tthis._onSave.add(callback);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/reviewitem.js","module.exports = jQuery;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"jQuery\"\n// module id = 0iPh\n// module chunks = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 21 24 25 26 30 31","import toastr from 'lib/toastr';\nimport {checkIsIframe} from \"../utils/utils\";\nimport {orDefault} from \"../utils/var\";\n\nconst t = checkIsIframe() ? window.top.toastr : toastr;\n\nconst MSG_ERROR = 'Ошибка';\nconst MSG_ERROR_XHR = 'Не удалось выполнить запрос';\n\nexport class Notifier {\n\tstatic error(message = null, title = null, options = null) {\n\t\t// Extend timeout for errors to 10 seconds by default\n\t\tconst timeOut = options ? orDefault(options.timeOut, 10000) : 10000;\n\t\tt.error(orDefault(message, MSG_ERROR), title, { timeOut, ...options });\n\t}\n\n\tstatic errorXHR(jqXHR, textStatus, errorThrown) {\n\t\tif(textStatus != 'abort') {\n\t\t\tNotifier.error(MSG_ERROR_XHR);\n\t\t}\n\t}\n\n\tstatic info(message, title = null, options = null) {\n\t\tt.info(message, title, {...options});\n\t}\n\n\tstatic success(message, title = null, options = null) {\n\t\tt.success(message, title, {...options});\n\t}\n\n\tstatic warning(message, title = null, options = null) {\n\t\tt.warning(message, title, {...options});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/notifier.js","import * as bus from 'framebus';\nimport {newLogger} from \"./logger\";\n\n/**\n * System-wide event class\n */\nexport class GlobalEvent {\n\t/**\n\t * Event constructor\n\t * @param {string} name Event name\n\t */\n\tconstructor(name) {\n\t\tthis._name = name;\n\t}\n\n\t/**\n\t * Trigger this event\n\t * @param data The data to give to subscribers\n\t */\n\ttrigger(data = null) {\n\t\tnewLogger(this.toString()).log('trigger', data);\n\t\tbus.trigger(this._name, data);\n\t}\n\n\t/**\n\t * Subscribe to this event\n\t * @param {function} handler Function that accepts event data as first argument\n\t * @return {Subscription}\n\t */\n\ton(handler) {\n\t\treturn this._getSubscription(handler).on();\n\t}\n\n\t/**\n\t * Unsubscribe from this event\n\t * @param {function} handler The same function that was passed to {@link on} method\n\t */\n\toff (handler) {\n\t\tthis._getSubscription(handler).off();\n\t}\n\n\ttoString() {\n\t\treturn `GlobalEvent/${this._name}`;\n\t}\n\n\t/**\n\t * Creates subscription instance. To actually subscribe, call on() method.\n\t * @param {function} handler Function that accepts event data as first argument\n\t * @return {Subscription}\n\t */\n\t_getSubscription(handler) {\n\t\treturn new Subscription(this._name, handler);\n\t}\n}\n\nclass Subscription {\n\t_name;\n\t_handler;\n\n\tconstructor(name, handler) {\n\t\tthis._name = name;\n\t\tthis._handler = handler;\n\t}\n\n\t/**\n\t * Attach the subscription to bus\n\t * @return {Subscription} This instance\n\t */\n\ton() {\n\t\tbus.on(this._name, this._handler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Cancel this subscription\n\t * @return {Subscription} This instance\n\t */\n\toff() {\n\t\tbus.off(this._name, this._handler);\n\t\treturn this;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/event.js","const LEVEL_DEBUG = 0;\nconst LEVEL_INFO = 1;\nconst LEVEL_WARN = 2;\nconst LEVEL_ERROR = 3;\n\nconst LEVELS = ['debug', 'info', 'warn', 'error'];\n\nlet defaultLevel = window.IS_PRODUCTION ? LEVEL_WARN : LEVEL_DEBUG;\n\n/**\n * Creates new logger instance with default level.\n * @param {string|null} name\n * @return {MyLogger}\n */\nexport function newLogger(name = null) {\n\treturn new MyLogger(name, defaultLevel);\n}\n\n/**\n * Sets level for new loggers.\n * @param {number} level\n */\nexport function setDefaultLevel(level) {\n\tdefaultLevel = level;\n}\n\nclass MyLogger {\n\t_name = '';\n\t_level = -1;\n\t_dummy = () => {\n\t};\n\n\tconstructor(name, level) {\n\t\tthis._name = name;\n\t\tthis.setLevel(level);\n\t}\n\n\tsetLevel(level) {\n\t\tlevel = Number.isInteger(level) ? level : LEVELS.indexOf(level);\n\t\tthis._level = level;\n\n\t\tconst name = this._name ? '[' + this._name + ']' : null;\n\t\tconst bind = (condition, methodName) => {\n\t\t\tif (!condition || !console[methodName]) return this._dummy;\n\t\t\treturn name ? console[methodName].bind(console, name) : console[methodName].bind(console);\n\t\t};\n\t\tconst bindSimple = (condition, methodName) => {\n\t\t\treturn condition && console[methodName] ? console[methodName].bind(console) : this._dummy;\n\t\t};\n\n\t\t[\n\t\t\t['log', LEVEL_DEBUG],\n\t\t\t['info', LEVEL_INFO],\n\t\t\t['warn', LEVEL_WARN],\n\t\t\t['error', LEVEL_ERROR],\n\t\t].forEach(i => {\n\t\t\tconst [method, lvl] = i;\n\t\t\tthis[method] = bind(level <= lvl, method);\n\t\t});\n\n\t\t[\n\t\t\t'time',\n\t\t\t'timeEnd',\n\t\t\t'profile',\n\t\t\t'profileEnd',\n\t\t].forEach(method => {\n\t\t\tthis[method] = bindSimple(level <= LEVEL_DEBUG, method);\n\t\t});\n\t}\n\n\t/** The same as {@link Console.log} */\n\tlog(args) {\n\t}\n\n\t/** The same as {@link Console.info} */\n\tinfo(args) {\n\t}\n\n\t/** The same as {@link Console.warn} */\n\twarn(args) {\n\t}\n\n\t/** The same as {@link Console.error} */\n\terror(args) {\n\t}\n\n\t/** The same as {@link Console.time} */\n\ttime(label) {\n\t}\n\n\t/** The same as {@link Console.timeEnd} */\n\ttimeEnd(label) {\n\t}\n\n\t/** The same as {@link Console.profile} */\n\tprofile(label) {\n\t}\n\n\t/** The same as {@link Console.profileEnd} */\n\tprofileEnd(label) {\n\t}\n\n\tmeasureTime(label, callable) {\n\t\tthis.time(label);\n\t\tconst result = callable();\n\t\tthis.timeEnd(label);\n\t\treturn result;\n\t}\n\n\tdoProfile(label, callable) {\n\t\tthis.profile(label);\n\t\tconst result = callable();\n\t\tthis.profileEnd(label);\n\t\treturn result;\n\t}\n\n\tsetLevelDebug() {\n\t\tthis.setLevel(LEVEL_DEBUG);\n\t}\n\n\tsetLevelInfo() {\n\t\tthis.setLevel(LEVEL_INFO);\n\t}\n\n\tsetLevelWarn() {\n\t\tthis.setLevel(LEVEL_WARN);\n\t}\n\n\tsetLevelError() {\n\t\tthis.setLevel(LEVEL_ERROR);\n\t}\n}\n\nexport default newLogger();\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/logger.js","module.exports = ko;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"ko\"\n// module id = 7fPx\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 25 26","import $ from \"jquery\";\nimport ko from 'lib/knockout';\nimport {newLogger} from \"core/utils/logger\";\nimport {siteUrl} from \"core/utils/url\";\nimport {InfiniteScroll} from \"lib/zinfinitescroll\";\nimport {ReviewList} from \"modules/reviews/common/model/reviewlist\";\nimport 'modules/reviews/common/components';\nimport {Notifier} from \"../../../core/widgets/notifier\";\nimport \"lib/fancybox\";\n\nconst logger = newLogger('Users');\n\nexport function init(options) {\n\tconst o = {\n\t\tuserId: null,\n principalsCount: 0,\n followersCount: 0,\n\t\tisFollower: false,\n\n\t\t...options\n\t};\n\n\t// prevent browser from restoring scroll position\n\t// otherwise window scroll position can jump to the bottom on page refresh (because of initial ajax loading)\n\thistory.scrollRestoration = 'manual';\n\n\tlogger.log('init', o);\n\n\tconst $userWrapper = $('#userWrapper');\n\tconst viewModel = new ViewModel(options, $userWrapper);\n\tko.applyBindings(viewModel, $userWrapper[0]);\n}\n\nclass ViewModel {\n\ttabMyReviews = new Tab('reviews', 'reviews');\n\ttabCommentsGiven = new Tab('reviews', 'comments_given');\n\ttabLikesGiven = new Tab('reviews', 'likes_given');\n\ttabLikesReceived = new Tab('users', 'likes_received');\n\ttabCommentsReceived = new Tab('users', 'comments_received');\n\ttabAllReviews = new Tab('reviews', '');\n\ttabFollowers = new Tab('users', 'followers');\n\ttabFollowing = new Tab('users', 'following');\n\n\tactiveTab = ko.observable();\n\n\t/** @type {ReviewList} */\n\treviewList;\n\n\tusers = ko.observableArray([]);\n\n\tisLoading = ko.observable(false);\n\n\t/** @type {InfiniteScroll} */\n\t_infScroll = null;\n\t_page = 0;\n\t_loading = false;\n\n\tconstructor(options, $wrapper) {\n\t\tthis.o = {\n\t\t\tuserId: null,\n\n\t\t\t...options\n\t\t};\n\n\t\tthis.showMyReviewsTab = this._showTab.bind(this, this.tabMyReviews);\n\t\tthis.showCommentsGivenTab = this._showTab.bind(this, this.tabCommentsGiven);\n\t\tthis.showLikesGivenTab = this._showTab.bind(this, this.tabLikesGiven);\n\t\tthis.showLikesReceivedTab = this._showTab.bind(this, this.tabLikesReceived);\n\t\tthis.showCommentsReceivedTab = this._showTab.bind(this, this.tabCommentsReceived);\n\t\tthis.showAllReviewsTab = this._showTab.bind(this, this.tabAllReviews);\n\t\tthis.showFollowers = this._showTab.bind(this, this.tabFollowers);\n\t\tthis.showFollowing = this._showTab.bind(this, this.tabFollowing);\n\n\t\tthis.principalsCount = ko.observable(this.o.principalsCount);\n\t\tthis.followersCount = ko.observable(this.o.followersCount);\n\t\tthis.isFollower = ko.observable(this.o.isFollower);\n\n\t\tthis.reviewList = new ReviewList({\n\t\t\tinfScrollWrapper: $wrapper,\n\t\t\tcolumns: true,\n\t\t});\n\n\t\tthis.showAllReviewsTab();\n\t}\n\n\ttoggleFollowers(model, event, userId = null) {\n\t\tlet targetId;\n if(targetId = USER_ID || userId) {\n \tconst url = this.isFollower() ? 'users1/removeFromFriends' : 'users1/addToFriends';\n $.post(\n siteUrl(url),\n {sourceId: this.o.userId, targetId: targetId},\n response => {\n \tif(response.success) {\n if(userId) {\n location.reload();\n } else {\n this.isFollower(!this.isFollower());\n this.followersCount(response.followers.followersCount);\n this.principalsCount(response.followers.principalsCount);\n }\n }\n },\n 'json'\n );\n } else {\n zde.showLogin(data => {\n if(data) {\n this.toggleFollowers(model, event, data.id);\n }\n });\n\t\t}\n\t}\n\n\t/**\n\t * @param {Tab} tab\n\t * @private\n\t */\n\t_showTab(tab) {\n\t\tthis.activeTab(tab);\n\n\t\t// reset\n\t\tthis.reviewList.clear();\n\t\tthis.users([]);\n\t\tthis.colIndex = 0;\n\t\tthis._page = 0;\n\t\tthis.isLoading(true);\n\n\t\tif (tab.type == 'reviews') {\n\t\t\tconst filters = {user: this.o.userId, mode: this.activeTab().mode, with_image: 0};\n\t\t\tthis.reviewList.load(filters).done(() => {\n\t\t\t\tthis.isLoading(false);\n\t\t\t});\n\t\t}\n\t\telse if (tab.type == 'users') {\n\t\t\tthis._loadUsers().done(() => {\n\t\t\t\tthis.isLoading(false);\n\t\t\t});\n\t\t}\n\t}\n\n\t_loadUsers() {\n\t\treturn $.post(siteUrl('users/getUsersByMode'), {userId: this.o.userId, mode: this.activeTab().mode}, null, 'json')\n\t\t\t.fail(Notifier.errorXHR)\n\t\t\t.done(response => {\n\t\t\t\tif (response && response.success) {\n\t\t\t\t\tthis._setUsers(response.users);\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\t_setUsers(users) {\n\t\tusers.forEach(u => {\n\t\t\tthis.users.push(new UserItem(u));\n\t\t\tconsole.log(new UserItem(u));\n\t\t});\n\t}\n}\n\nclass Tab {\n\tconstructor(type, mode) {\n\t\tthis.type = type;\n\t\tthis.mode = mode;\n\t}\n}\n\nclass UserItem {\n\tconstructor(data) {\n\t\tthis._data = data;\n\t\tthis.following = ko.observable(this._data['following'] > 0);\n\t\tthis.fing_cnt = ko.observable(this._data['fing_cnt']);\n\t\tthis.fers_cnt = ko.observable(this._data['fers_cnt']);\n\t}\n\n\tget id() {\n\t\treturn this._data['user_id'];\n\t}\n\n\tget name() {\n\t\treturn this._data['name_for_view'];\n\t}\n\n\tget url() {\n\t\treturn siteUrl('users/' + this.id);\n\t}\n\n\tget level() {\n\t\treturn this._data['user_level'];\n\t}\n\n\tget cnt() {\n\t\treturn this._data['cnt'];\n\t}\n\n\t/*get fing_cnt() {\n\t\treturn this._data['fing_cnt'];\n\t}\n\n\tset fing_cnt(value) {\n this._data['fing_cnt'] = value;\n\t}\n\n\tget fers_cnt() {\n\t\treturn this._data['fers_cnt'];\n\t}\n\n\tset fers_cnt(value){\n this._data['fers_cnt'] = value;\n\t}*/\n\n\t/*following = ko.pureComputed({\n\t\tread: () =>{\n console.log(this._data['following']);\n return this._data['following'] > 0;\n\n\t\t},\n\t\twrite: value => {\n this._data['following'] = value ? 1 : 0;\n console.log(this._data['following']);\n\t\t},\n\t\towner: this\n\t})*/\n\n\n\n\ttoggleFollowers(model, event, userId = null) {\n // console.log(this.following());\n let targetId;\n if(targetId = USER_ID || userId) {\n const url = this.following() ? 'users1/removeFromFriends' : 'users1/addToFriends';\n $.post(\n siteUrl(url),\n {sourceId: this.id, targetId: targetId},\n response => {\n if(response.success) {\n if(userId) {\n location.reload();\n } else {\n this.following(!this.following());\n console.log(this);\n this.fers_cnt(response.followers.followersCount);\n this.fing_cnt(response.followers.principalsCount);\n }\n }\n },\n 'json'\n );\n } else {\n zde.showLogin(data => {\n if(data) {\n this.toggleFollowers(model, event, data.id);\n }\n });\n }\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/users/view/index.js","import autosize from 'autosize';\nimport ko from 'lib/knockout';\nimport $ from 'jquery';\n\nexport default autosize;\n\nwindow.autosize = autosize;\n\n/**\n * Initializes Autosize plugin.\n * @param {string} method Allowed values: update, destroy\n * @return {JQuery}\n */\n$.fn.autosize = function(method) {\n\treturn this.each(function() {\n\t\tconst el = this;\n\t\tconst $el = $(this);\n\t\tif (typeof method === 'string') {\n\t\t\tif ($el.data('autosize') && typeof autosize[method] === 'function') {\n\t\t\t\tconsole.log('calling autosize.' + method, 'on', el);\n\t\t\t\tautosize[method](el);\n\t\t\t\t$el.data('autosize', null);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst o = {\n\t\t\t\t/**\n\t\t\t\t * Defer plugin initialization until textarea gets focus\n\t\t\t\t */\n\t\t\t\tdeferInit: false,\n\n\t\t\t\t...method\n\t\t\t};\n\n\t\t\tconst init = () => {\n\t\t\t\tautosize(el);\n\t\t\t\t$el.data('autosize', true)\n\t\t\t};\n\n\t\t\tif (o.deferInit) {\n\t\t\t\t$el.one('focus', init);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tinit();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/**\n * Binding for Autosize plugin\n */\nko.bindingHandlers.autosize = {\n\tinit: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\n\t\tconst $el = $(element);\n\t\tconst options = ko.unwrap(valueAccessor());\n\t\tlet t;\n\t\t// autosize does not properly update itself when using with knockout\n\t\t// so manually fix it\n\t\tconst update = () => {\n\t\t\tif (t) {\n\t\t\t\tclearTimeout(t);\n\t\t\t}\n\t\t\tt = setTimeout(() => {\n\t\t\t\t$el.autosize('update');\n\t\t\t}, 100);\n\t\t};\n\t\t$el.autosize(options).on('change', update);\n\n\t\tko.utils.domNodeDisposal.addDisposeCallback(element, function () {\n\t\t\t$(element).autosize('destroy').off('change', update);\n\t\t});\n\t}\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./lib/autosize/index.js","module.exports = \"
\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
\\n
\\n
\\n\\t
\\n\\t... Читать далее\\n
\\n\\n
\\n\\t
\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\tПонравилось\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\tНет лайков\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n
\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/reviews/common/templates/review-comment.html\n// module id = FA3v\n// module chunks = 10 12 13","import _ from 'lib/underscore';\nimport * as location from './location';\nimport {asString} from \"./var\";\n\nexport const BASE_URL = (window.base_url || '/').replace(/(.*)\\/\\/$|([^/])$/, '$1/');\n\nconst isAbsoluteUrlRegex = /^https?:\\/\\//i;\n\n/**\n * @param {string|object} url Url path\n * @param {string|object} more Additional parts\n * @return {string}\n */\nexport function siteUrl(url, ...more) {\n\tif (isAbsoluteUrlRegex.test(url)) {\n\t\tif (more.length === 0) {\n\t\t\treturn url;\n\t\t} else {\n\t\t\treturn joinPath.apply(null, [url, ...more]);\n\t\t}\n\t} else {\n\t\treturn joinPath.apply(null, [BASE_URL, url, ...more]);\n\t}\n}\n\n/**\n * Joins given values with slash.\n * If last value is an object - it will be formatted as query data.\n * @param {string|object} values\n * @return {string}\n */\nexport function joinPath(...values) {\n\tif (values.length == 0) return '';\n\tlet query = {};\n\tlet queryString = '';\n\tlet fragment = '';\n\tlet components = [];\n\tconst processValue = (v) => {\n\t\tif (_.isObject(v)) {\n\t\t\tquery = {...query, ...v};\n\t\t} else {\n\t\t\tv = asString(v).trim();\n\t\t\tlet i;\n\t\t\tif ((i = v.indexOf('#')) >= 0) {\n\t\t\t\tfragment = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t} else if ((i = v.indexOf('?')) >= 0) {\n\t\t\t\tqueryString = v.substr(i + 1);\n\t\t\t\tv = v.substr(0, i);\n\t\t\t}\n\t\t\tif (v) {\n\t\t\t\tif (components.length == 0) {\n\t\t\t\t\tv = v.replace(/\\/$/g, '');\n\t\t\t\t} else {\n\t\t\t\t\tv = v.replace(/^\\/|\\/$/g, '');\n\t\t\t\t}\n\t\t\t\tcomponents.push(v);\n\t\t\t}\n\t\t}\n\t};\n\tvalues.forEach(v => {\n\t\tif (_.isArray(v)) {\n\t\t\tv.forEach(processValue);\n\t\t} else {\n\t\t\tprocessValue(v);\n\t\t}\n\t});\n\tlet url = components.join('/');\n\tif (!_.isEmpty(query)) {\n\t\tconst q = buildQuery(query);\n\t\tif (queryString) {\n\t\t\tqueryString += '&';\n\t\t}\n\t\tqueryString += q;\n\t}\n\tif (queryString) {\n\t\turl += '?' + queryString;\n\t}\n\tif (fragment) {\n\t\turl += '#' + fragment;\n\t}\n\treturn url;\n}\n\n/**\n *\n * @param {string} url\n * @return {boolean}\n */\nexport function isAbsolute(url) {\n\treturn isAbsoluteUrlRegex.test(url);\n}\n\n/**\n * Builds query string from given object\n * @param {object} queryData\n * @return {string}\n */\nexport function buildQuery(queryData) {\n\treturn location.buildQuery(queryData);\n}\n\nexport function highlightUrls(text, maxlength = 30) {\n\treturn text.replace(/(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\?+=&%#\\/\\wА-Яа-яёЁ\\.;-]*)*\\/?/g, function (s) {\n var st = s;\n\n if (s.length > maxlength) {\n st = s.slice(0, maxlength) + \"...\";\n }\n\n if (!/^(https?:\\/\\/)/.test(s)) {\n s = \"http://\" + s;\n }\n\n return \"\" + st + \"\";\n })\n}\n\nexport class UrlParser {\n\t/**\n\t * @param {string} url\n\t */\n\tconstructor(url) {\n\t\tthis._a = document.createElement('a');\n\t\tthis._a.href = url;\n\t}\n\n\t/** @return {string} */\n\tget origin() {\n\t\treturn this._a.origin;\n\t}\n\n\t/** @return {string} */\n\tget protocol() {\n\t\treturn this._a.protocol;\n\t}\n\n\t/** @return {string} */\n\tget host() {\n\t\treturn this._a.host;\n\t}\n\n\t/** @return {string} */\n\tget hostname() {\n\t\treturn this._a.hostname;\n\t}\n\n\t/** @return {string} */\n\tget port() {\n\t\treturn this._a.port;\n\t}\n\n\t/** @return {string} */\n\tget pathname() {\n\t\treturn this._a.pathname;\n\t}\n\n\t/** @return {string} */\n\tget search() {\n\t\treturn this._a.search;\n\t}\n\n\t/** @return {string} */\n\tget hash() {\n\t\treturn this._a.hash;\n\t}\n}\n\nexport class UrlBuilder {\n\tconstructor(protocol = null, host = null, port = null, path = null, query = null, hash = null) {\n\t\tthis._protocol = protocol;\n\t\tthis._host = host;\n\t\tthis._port = port;\n\t\tthis._path = path;\n\t\tthis._query = query;\n\t\tthis._hash = hash;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset protocol(value) {\n\t\tthis._protocol = postfix(value, ':');\n\t}\n\n\t/** @return {string|null} */\n\tget protocol() {\n\t\treturn this._protocol;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset host(value) {\n\t\tthis._host = value;\n\t}\n\n\t/** @return {string|null} */\n\tget host() {\n\t\treturn this._host;\n\t}\n\n\t/**\n\t * @param {string|number|null} value\n\t */\n\tset port(value) {\n\t\tthis._port = value;\n\t}\n\n\t/** @return {string|number|null} */\n\tget port() {\n\t\treturn this._port;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset path(value) {\n\t\tthis._path = value;\n\t}\n\n\t/** @return {string|null} */\n\tget path() {\n\t\treturn this._path;\n\t}\n\n\t/**\n\t * @param {string|object|null} value\n\t */\n\tset query(value) {\n\t\tthis._query = prefix(value, '?');\n\t}\n\n\t/** @return {string|object|null} */\n\tget query() {\n\t\treturn this._query;\n\t}\n\n\t/**\n\t * @param {string|null} value\n\t */\n\tset hash(value) {\n\t\tthis._hash = prefix(value, '#');\n\t}\n\n\t/** @return {string|null} */\n\tget hash() {\n\t\treturn this._hash;\n\t}\n\n\t/**\n\t * @return {string}\n\t */\n\tbuild() {\n\t\tconst origin = (this._protocol ? this._protocol + '//' : '') +\n\t\t\t(this._host ? this._host + (this._port ? ':' + this._port : '') : '');\n\t\tconst query = typeof(this._query) === 'object' ? prefix(buildQuery(this._query), '?') : this._query;\n\t\treturn joinPath(origin, this._path, query, this._hash);\n\t}\n}\n\nfunction prefix(val, prefix) {\n\tif (val && typeof(val) === 'string' && !val.startsWith(prefix)) {\n\t\treturn prefix + val;\n\t}\n\treturn val;\n}\n\nfunction postfix(val, postfix) {\n\tif (val && typeof(val) === 'string' && !val.endsWith(postfix)) {\n\t\treturn val + postfix;\n\t}\n\treturn val;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/url.js","import {ReviewItem} from \"./reviewitem\";\n\nexport class ReviewItemMobile extends ReviewItem {\n constructor(data) {\n \tdata.columns = false;\n \tdata.infScrollDistance = 300;\n \tsuper(data);\n\n this.afterCommentRender = this._afterCommentRender.bind(this);\n this.newComment.isSaveButtonVisible.subscribe(this._onCommentAddButtonToggle.bind(this));\n\t}\n\n\topened = ko.observable(false);\n\n _afterCommentRender() {\n if(this.opened()) {\n const $panel = $(`#review-list-item-mobile-${this.id}`).find('.dropdown-content');\n this._setCommentsPanelSize($panel);\n }\n }\n\n _onCommentAddButtonToggle(value) {\n const $panel = $(`#review-list-item-mobile-${this.id}`).find('.dropdown-content');\n const height = $panel.find('.content-inner').innerHeight();\n const buttonHeight = $panel.find('.add-comment-button').outerHeight();\n $panel.css('height', value ? (height + buttonHeight) : (height - buttonHeight));\n }\n\n _setCommentsPanelSize($content) {\n const height = $content.find('.content-inner').innerHeight();\n $content.css('height', height);\n }\n\n toggleDetails(item, event) {\n const $toggler = $(event.currentTarget);\n const $content = $toggler.siblings('.dropdown-content');\n\n\t\tif(this.opened()){\n $content.css('height', 0);\n } else{\n this._setCommentsPanelSize($content);\n }\n\n this.opened(!this.opened());\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/reviewitemmobile.js","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = GTd5\n// module chunks = 0 1 2 3 4 5 10 12 13 15","// ==================================================\r\n// fancyBox v3.2.10\r\n//\r\n// Licensed GPLv3 for open source use\r\n// or fancyBox Commercial License for commercial use\r\n//\r\n// http://fancyapps.com/fancybox/\r\n// Copyright 2017 fancyApps\r\n//\r\n// ==================================================\r\n;(function (window, document, $, undefined) {\r\n 'use strict';\r\n\r\n // If there's no jQuery, fancyBox can't work\r\n // =========================================\r\n\r\n if ( !$ ) {\r\n return;\r\n }\r\n\r\n // Check if fancyBox is already initialized\r\n // ========================================\r\n\r\n if ( $.fn.fancybox ) {\r\n\r\n if ( 'console' in window ) {\r\n console.log( 'fancyBox already initialized' );\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Private default settings\r\n // ========================\r\n\r\n var defaults = {\r\n\r\n // Enable infinite gallery navigation\r\n loop : false,\r\n\r\n // Space around image, ignored if zoomed-in or viewport width is smaller than 800px\r\n margin : [44, 0],\r\n\r\n // Horizontal space between slides\r\n gutter : 50,\r\n\r\n // Enable keyboard navigation\r\n keyboard : true,\r\n\r\n // Should display navigation arrows at the screen edges\r\n arrows : true,\r\n\r\n // Should display infobar (counter and arrows at the top)\r\n infobar : true,\r\n\r\n // Should display toolbar (buttons at the top)\r\n toolbar : true,\r\n\r\n // What buttons should appear in the top right corner.\r\n // Buttons will be created using templates from `btnTpl` option\r\n // and they will be placed into toolbar (class=\"fancybox-toolbar\"` element)\r\n buttons : [\r\n 'slideShow',\r\n 'fullScreen',\r\n 'thumbs',\r\n 'share',\r\n //'download',\r\n //'zoom',\r\n 'close'\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime : 3,\r\n\r\n // Should display buttons at top right corner of the content\r\n // If 'auto' - they will be created for content having type 'html', 'inline' or 'ajax'\r\n // Use template from `btnTpl.smallBtn` for customization\r\n smallBtn : 'auto',\r\n\r\n // Disable right-click and use simple image protection for images\r\n protect : false,\r\n\r\n // Shortcut to make content \"modal\" - disable keyboard navigtion, hide buttons, etc\r\n modal : false,\r\n\r\n image : {\r\n\r\n // Wait for images to load before displaying\r\n // Requires predefined image dimensions\r\n // If 'auto' - will zoom in thumbnail if 'width' and 'height' attributes are found\r\n preload : \"auto\"\r\n\r\n },\r\n\r\n ajax : {\r\n\r\n // Object containing settings for ajax request\r\n settings : {\r\n\r\n // This helps to indicate that request comes from the modal\r\n // Feel free to change naming\r\n data : {\r\n fancybox : true\r\n }\r\n }\r\n\r\n },\r\n\r\n iframe : {\r\n\r\n // Iframe template\r\n tpl : '',\r\n\r\n // Preload iframe before displaying it\r\n // This allows to calculate iframe content width and height\r\n // (note: Due to \"Same Origin Policy\", you can't get cross domain data).\r\n preload : true,\r\n\r\n // Custom CSS styling for iframe wrapping element\r\n // You can use this to set custom iframe dimensions\r\n css : {},\r\n\r\n // Iframe tag attributes\r\n attr : {\r\n scrolling : 'auto'\r\n }\r\n\r\n },\r\n\r\n // Default content type if cannot be detected automatically\r\n defaultType : 'image',\r\n\r\n // Open/close animation type\r\n // Possible values:\r\n // false - disable\r\n // \"zoom\" - zoom images from/to thumbnail\r\n // \"fade\"\r\n // \"zoom-in-out\"\r\n //\r\n animationEffect : \"zoom\",\r\n\r\n // Duration in ms for open/close animation\r\n animationDuration : 500,\r\n\r\n // Should image change opacity while zooming\r\n // If opacity is \"auto\", then opacity will be changed if image and thumbnail have different aspect ratios\r\n zoomOpacity : \"auto\",\r\n\r\n // Transition effect between slides\r\n //\r\n // Possible values:\r\n // false - disable\r\n // \"fade'\r\n // \"slide'\r\n // \"circular'\r\n // \"tube'\r\n // \"zoom-in-out'\r\n // \"rotate'\r\n //\r\n transitionEffect : \"fade\",\r\n\r\n // Duration in ms for transition animation\r\n transitionDuration : 366,\r\n\r\n // Custom CSS class for slide element\r\n slideClass : '',\r\n\r\n // Custom CSS class for layout\r\n baseClass : '',\r\n\r\n // Base template for layout\r\n baseTpl\t:\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n ' / ' +\r\n '
' +\r\n '
{{buttons}}
' +\r\n '
{{arrows}}
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
',\r\n\r\n // Loading indicator template\r\n spinnerTpl : '
',\r\n\r\n // Error message template\r\n errorTpl : '

{{ERROR}}

',\r\n\r\n btnTpl : {\r\n\r\n download : '' +\r\n '' +\r\n '' +\r\n '' +\r\n '',\r\n\r\n zoom : '',\r\n\r\n close : '',\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn : '',\r\n\r\n // Arrows\r\n arrowLeft : '',\r\n\r\n arrowRight : ''\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl : 'body',\r\n\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus : false,\r\n\r\n // Put focus back to active element after closing\r\n backFocus : true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus : true,\r\n\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen : {\r\n autoStart : false,\r\n },\r\n\r\n // Set `touch: false` to disable dragging/swiping\r\n touch : {\r\n vertical : true, // Allow to drag content vertically\r\n momentum : true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash : null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media : {},\r\n\r\n slideShow : {\r\n autoStart : false,\r\n speed : 4000\r\n },\r\n\r\n thumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t},\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel : 'auto',\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit : $.noop, // When instance has been initialized\r\n\r\n beforeLoad : $.noop, // Before the content of a slide is being loaded\r\n afterLoad : $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow : $.noop, // Before open animation starts\r\n afterShow : $.noop, // When content is done loading and animating\r\n\r\n beforeClose : $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose : $.noop, // After instance has been closed\r\n\r\n onActivate : $.noop, // When instance is brought to front\r\n onDeactivate : $.noop, // When other instance has been activated\r\n\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide : 'close',\r\n\r\n // Clicked on the background (backdrop) element\r\n clickOutside : 'close',\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false,\r\n\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile : {\r\n idleTime : false,\r\n margin : 0,\r\n\r\n clickContent : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : false;\r\n },\r\n clickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'toggleControls' : 'close';\r\n },\r\n dblclickContent : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n },\r\n dblclickSlide : function( current, event ) {\r\n return current.type === 'image' ? 'zoom' : false;\r\n }\r\n },\r\n\r\n\r\n // Internationalization\r\n // ============\r\n\r\n lang : 'en',\r\n i18n : {\r\n 'en' : {\r\n CLOSE : 'Close',\r\n NEXT : 'Next',\r\n PREV : 'Previous',\r\n ERROR : 'The requested content cannot be loaded.
Please try again later.',\r\n PLAY_START : 'Start slideshow',\r\n PLAY_STOP : 'Pause slideshow',\r\n FULL_SCREEN : 'Full screen',\r\n THUMBS : 'Thumbnails',\r\n DOWNLOAD : 'Download',\r\n SHARE : 'Share',\r\n ZOOM : 'Zoom'\r\n },\r\n 'de' : {\r\n CLOSE : 'Schliessen',\r\n NEXT : 'Weiter',\r\n PREV : 'Zurück',\r\n ERROR : 'Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.',\r\n PLAY_START : 'Diaschau starten',\r\n PLAY_STOP : 'Diaschau beenden',\r\n FULL_SCREEN : 'Vollbild',\r\n THUMBS : 'Vorschaubilder',\r\n DOWNLOAD : 'Herunterladen',\r\n SHARE : 'Teilen',\r\n ZOOM : 'Maßstab'\r\n }\r\n }\r\n\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n\r\n var isQuery = function ( obj ) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n\r\n var requestAFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n\r\n var transitionEnd = (function () {\r\n var t, el = document.createElement(\"fakeelement\");\r\n\r\n var transitions = {\r\n \"transition\" : \"transitionend\",\r\n \"OTransition\" : \"oTransitionEnd\",\r\n \"MozTransition\" : \"transitionend\",\r\n \"WebkitTransition\": \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined){\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return 'transitionend';\r\n })();\r\n\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly.\r\n // =================================================================================\r\n\r\n var forceRedraw = function( $el ) {\r\n return ( $el && $el.length && $el[0].offsetHeight );\r\n };\r\n\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function( content, opts, index ) {\r\n var self = this;\r\n\r\n self.opts = $.extend( true, { index : index }, $.fancybox.defaults, opts || {} );\r\n\r\n if ( $.fancybox.isMobile ) {\r\n self.opts = $.extend( true, {}, self.opts, self.opts.mobile );\r\n }\r\n\r\n // Exclude buttons option from deep merging\r\n if ( opts && $.isArray( opts.buttons ) ) {\r\n self.opts.buttons = opts.buttons;\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n self.group = [];\r\n\r\n self.currIndex = parseInt( self.opts.index, 10 ) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = null;\r\n\r\n // Create group elements from original item collection\r\n self.createGroup( content );\r\n\r\n if ( !self.group.length ) {\r\n return;\r\n }\r\n\r\n // Save last active element and current scroll position\r\n self.$lastFocus = $(document.activeElement).blur();\r\n\r\n // Collection of gallery objects\r\n self.slides = {};\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n\r\n // Create DOM structure\r\n // ====================\r\n\r\n init : function() {\r\n var self = this,\r\n firstItem = self.group[ self.currIndex ],\r\n firstItemOpts = firstItem.opts,\r\n scrollbarWidth = $.fancybox.scrollbarWidth,\r\n $scrollDiv,\r\n $container,\r\n buttonStr;\r\n\r\n self.scrollTop = $D.scrollTop();\r\n self.scrollLeft = $D.scrollLeft();\r\n\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n if ( !$.fancybox.getInstance() ) {\r\n\r\n $( 'body' ).addClass( 'fancybox-active' );\r\n\r\n // iOS hack\r\n if ( /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ) {\r\n\r\n // iOS has problems for input elements inside fixed containers,\r\n // the workaround is to apply `position: fixed` to `` element,\r\n // unfortunately, this makes it lose the scrollbars and forces address bar to appear.\r\n\r\n if ( firstItem.type !== 'image' ) {\r\n $( 'body' ).css( 'top', $( 'body' ).scrollTop() * -1 ).addClass( 'fancybox-iosfix' );\r\n }\r\n\r\n } else if ( !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight ) {\r\n\r\n if ( scrollbarWidth === undefined ) {\r\n $scrollDiv = $('
').appendTo( 'body' );\r\n\r\n scrollbarWidth = $.fancybox.scrollbarWidth = $scrollDiv[0].offsetWidth - $scrollDiv[0].clientWidth;\r\n\r\n $scrollDiv.remove();\r\n }\r\n\r\n $( 'head' ).append( '' );\r\n $( 'body' ).addClass( 'compensate-for-scrollbar' );\r\n }\r\n }\r\n\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = '';\r\n\r\n $.each( firstItemOpts.buttons, function( index, value ) {\r\n buttonStr += ( firstItemOpts.btnTpl[ value ] || '' );\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate( self,\r\n firstItemOpts.baseTpl\r\n .replace( '\\{\\{buttons\\}\\}', buttonStr )\r\n .replace( '\\{\\{arrows\\}\\}', firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight )\r\n )\r\n )\r\n .attr( 'id', 'fancybox-container-' + self.id )\r\n .addClass( 'fancybox-is-hidden' )\r\n .addClass( firstItemOpts.baseClass )\r\n .data( 'FancyBox', self )\r\n .appendTo( firstItemOpts.parentEl );\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container : $container\r\n };\r\n\r\n [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption', 'navigation' ].forEach(function(item) {\r\n self.$refs[ item ] = $container.find( '.fancybox-' + item );\r\n });\r\n\r\n self.trigger( 'onInit' );\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo( self.currIndex );\r\n },\r\n\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate : function( obj, str ) {\r\n var arr = obj.opts.i18n[ obj.opts.lang ];\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function(match, n) {\r\n var value = arr[n];\r\n\r\n if ( value === undefined ) {\r\n return match;\r\n }\r\n\r\n return value;\r\n });\r\n },\r\n\r\n // Create array of gally item objects\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n createGroup : function ( content ) {\r\n var self = this;\r\n var items = $.makeArray( content );\r\n\r\n $.each(items, function( i, item ) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ( $.isPlainObject( item ) ) {\r\n\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n\r\n } else if ( $.type( item ) === 'object' && $( item ).length ) {\r\n\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $( item );\r\n\r\n opts = $item.data();\r\n opts = $.extend( {}, opts, opts.options || {} );\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = opts.src || $item.attr( 'href' );\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if ( !obj.type && !obj.src ) {\r\n obj.type = 'inline';\r\n obj.src = item;\r\n }\r\n\r\n } else {\r\n\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n\r\n obj = {\r\n type : 'html',\r\n src : item + ''\r\n };\r\n\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend( true, {}, self.opts, opts );\r\n\r\n // Do not merge buttons array\r\n if ( $.isArray( opts.buttons ) ) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || '';\r\n\r\n if ( !type && src ) {\r\n if ( src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i) ) {\r\n type = 'image';\r\n\r\n } else if ( src.match(/\\.(pdf)((\\?|#).*)?$/i) ) {\r\n type = 'pdf';\r\n\r\n } else if ( found = src.match(/\\.(mp4|mov|ogv)((\\?|#).*)?$/i) ) {\r\n type = 'video';\r\n\r\n if ( !obj.opts.videoFormat ) {\r\n obj.opts.videoFormat = 'video/' + ( found[1] === 'ogv' ? 'ogg' : found[1] );\r\n }\r\n\r\n } else if ( src.charAt(0) === '#' ) {\r\n type = 'inline';\r\n }\r\n }\r\n\r\n if ( type ) {\r\n obj.type = type;\r\n\r\n } else {\r\n self.trigger( 'objectNeedsType', obj );\r\n }\r\n\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n // Check if $orig and $thumb objects exist\r\n if ( obj.opts.$orig && !obj.opts.$orig.length ) {\r\n delete obj.opts.$orig;\r\n }\r\n\r\n if ( !obj.opts.$thumb && obj.opts.$orig ) {\r\n obj.opts.$thumb = obj.opts.$orig.find( 'img:first' );\r\n }\r\n\r\n if ( obj.opts.$thumb && !obj.opts.$thumb.length ) {\r\n delete obj.opts.$thumb;\r\n }\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item ..\r\n if ( $.type( obj.opts.caption ) === 'function' ) {\r\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n if ( $.type( self.opts.caption ) === 'function' ) {\r\n obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] );\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if ( !( obj.opts.caption instanceof $ ) ) {\r\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if ( type === 'ajax' ) {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if ( srcParts.length > 1 ) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n if ( obj.opts.smallBtn == 'auto' ) {\r\n\r\n if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) {\r\n obj.opts.toolbar = false;\r\n obj.opts.smallBtn = true;\r\n\r\n } else {\r\n obj.opts.smallBtn = false;\r\n }\r\n\r\n }\r\n\r\n // If the type is \"pdf\", then simply load file into iframe\r\n if ( type === 'pdf' ) {\r\n obj.type = 'iframe';\r\n\r\n obj.opts.iframe.preload = false;\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if ( obj.opts.modal ) {\r\n\r\n obj.opts = $.extend(true, obj.opts, {\r\n // Remove buttons\r\n infobar : 0,\r\n toolbar : 0,\r\n\r\n smallBtn : 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard : 0,\r\n\r\n // Disable some modules\r\n slideShow : 0,\r\n fullScreen : 0,\r\n thumbs : 0,\r\n touch : 0,\r\n\r\n // Disable click event handlers\r\n clickContent : false,\r\n clickSlide : false,\r\n clickOutside : false,\r\n dblclickContent : false,\r\n dblclickSlide : false,\r\n dblclickOutside : false\r\n });\r\n\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push( obj );\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detect idle\r\n // ======================================\r\n\r\n addEvents : function() {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n }).on( 'click.fb', '[data-fancybox-zoom]', function(e) {\r\n // Click handler for zoom button\r\n self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ]();\r\n });\r\n\r\n\r\n // Handle page scrolling and browser resizing\r\n $W.on('orientationchange.fb resize.fb', function(e) {\r\n\r\n if ( e && e.originalEvent && e.originalEvent.type === \"resize\" ) {\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n } else {\r\n\r\n self.$refs.stage.hide();\r\n\r\n setTimeout(function() {\r\n self.$refs.stage.show();\r\n\r\n self.update();\r\n }, 600);\r\n\r\n }\r\n\r\n });\r\n\r\n // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal\r\n // (a.k.a. \"escaping the modal\")\r\n $D.on('focusin.fb', function(e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null;\r\n\r\n if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) {\r\n return;\r\n }\r\n\r\n if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) {\r\n e.stopPropagation();\r\n\r\n instance.focus();\r\n\r\n // Sometimes page gets scrolled, set it back\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n }\r\n });\r\n\r\n\r\n // Enable keyboard navigation\r\n $D.on('keydown.fb', function (e) {\r\n var current = self.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n if ( !current || !current.opts.keyboard ) {\r\n return;\r\n }\r\n\r\n if ( $(e.target).is('input') || $(e.target).is('textarea') ) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if ( keycode === 8 || keycode === 27 ) {\r\n e.preventDefault();\r\n\r\n self.close( e );\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if ( keycode === 37 || keycode === 38 ) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if ( keycode === 39 || keycode === 40 ) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger('afterKeydown', e, keycode);\r\n });\r\n\r\n\r\n // Hide controls after some inactivity period\r\n if ( self.group[ self.currIndex ].opts.idleTime ) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if ( self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n });\r\n\r\n self.idleInterval = window.setInterval(function() {\r\n self.idleSecondsCounter++;\r\n\r\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime && !self.isDragging ) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n\r\n }, 1000);\r\n }\r\n\r\n },\r\n\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents : function() {\r\n var self = this;\r\n\r\n $W.off( 'orientationchange.fb resize.fb' );\r\n $D.off( 'focusin.fb keydown.fb .fb-idle' );\r\n\r\n this.$refs.container.off( '.fb-close .fb-prev .fb-next' );\r\n\r\n if ( self.idleInterval ) {\r\n window.clearInterval( self.idleInterval );\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous : function( duration ) {\r\n return this.jumpTo( this.currPos - 1, duration );\r\n },\r\n\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next : function( duration ) {\r\n return this.jumpTo( this.currPos + 1, duration );\r\n },\r\n\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo : function ( pos, duration, slide ) {\r\n var self = this,\r\n firstRun,\r\n loop,\r\n current,\r\n previous,\r\n canvasWidth,\r\n currentPos,\r\n transitionProps;\r\n\r\n var groupLen = self.group.length;\r\n\r\n if ( self.isDragging || self.isClosing || ( self.isAnimating && self.firstRun ) ) {\r\n return;\r\n }\r\n\r\n pos = parseInt( pos, 10 );\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if ( !loop && ( pos < 0 || pos >= groupLen ) ) {\r\n return false;\r\n }\r\n\r\n firstRun = self.firstRun = ( self.firstRun === null );\r\n\r\n if ( groupLen < 2 && !firstRun && !!self.isDragging ) {\r\n return;\r\n }\r\n\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n // Create slides\r\n current = self.createSlide( pos );\r\n\r\n if ( groupLen > 1 ) {\r\n if ( loop || current.index > 0 ) {\r\n self.createSlide( pos - 1 );\r\n }\r\n\r\n if ( loop || current.index < groupLen - 1 ) {\r\n self.createSlide( pos + 1 );\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger( 'beforeShow', firstRun );\r\n\r\n self.updateControls();\r\n\r\n currentPos = $.fancybox.getTranslate( current.$slide );\r\n\r\n current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' );\r\n current.forcedDuration = undefined;\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n }\r\n\r\n duration = parseInt( duration, 10 );\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if ( firstRun ) {\r\n\r\n if ( current.opts.animationEffect && duration ) {\r\n self.$refs.container.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n self.$refs.container.removeClass( 'fancybox-is-hidden' );\r\n\r\n forceRedraw( self.$refs.container );\r\n\r\n self.$refs.container.addClass( 'fancybox-is-open' );\r\n\r\n // Make first slide visible (to display loading icon, if needed)\r\n current.$slide.addClass( 'fancybox-slide--current' );\r\n\r\n self.loadSlide( current );\r\n\r\n self.preload( 'image' );\r\n\r\n return;\r\n }\r\n\r\n // Clean up\r\n $.each(self.slides, function( index, slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n });\r\n\r\n // Make current that slide is visible even if content is still loading\r\n current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' );\r\n\r\n // If slides have been dragged, animate them to correct position\r\n if ( current.isMoved ) {\r\n canvasWidth = Math.round( current.$slide.width() );\r\n\r\n $.each(self.slides, function( index, slide ) {\r\n var pos = slide.pos - current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter )\r\n }, duration, function() {\r\n\r\n slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n current.isMoved = false;\r\n\r\n self.complete();\r\n }\r\n });\r\n });\r\n\r\n } else {\r\n self.$refs.stage.children().removeAttr( 'style' );\r\n }\r\n\r\n // Start transition that reveals current content\r\n // or wait when it will be loaded\r\n\r\n if ( current.isLoaded ) {\r\n self.revealContent( current );\r\n\r\n } else {\r\n self.loadSlide( current );\r\n }\r\n\r\n self.preload( 'image' );\r\n\r\n if ( previous.pos === current.pos ) {\r\n return;\r\n }\r\n\r\n // Handle previous slide\r\n // =====================\r\n\r\n transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' );\r\n\r\n previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' );\r\n\r\n previous.isComplete = false;\r\n\r\n if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) {\r\n return;\r\n }\r\n\r\n if ( current.isMoved ) {\r\n previous.$slide.addClass( transitionProps );\r\n\r\n } else {\r\n\r\n transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect;\r\n\r\n $.fancybox.animate( previous.$slide, transitionProps, duration, function() {\r\n previous.$slide.removeClass( transitionProps ).removeAttr( 'style' );\r\n });\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide : function( pos ) {\r\n\r\n var self = this;\r\n var $slide;\r\n var index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if ( !self.slides[ pos ] && self.group[ index ] ) {\r\n $slide = $('
').appendTo( self.$refs.stage );\r\n\r\n self.slides[ pos ] = $.extend( true, {}, self.group[ index ], {\r\n pos : pos,\r\n $slide : $slide,\r\n isLoaded : false,\r\n });\r\n\r\n self.updateSlide( self.slides[ pos ] );\r\n }\r\n\r\n return self.slides[ pos ];\r\n },\r\n\r\n\r\n // Scale image to the actual size of the image\r\n // ===========================================\r\n\r\n scaleToActual : function( x, y, duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var imgPos, posX, posY, scaleX, scaleY;\r\n\r\n var canvasWidth = parseInt( current.$slide.width(), 10 );\r\n var canvasHeight = parseInt( current.$slide.height(), 10 );\r\n\r\n var newImgWidth = current.width;\r\n var newImgHeight = current.height;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate( $what );\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 );\r\n posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 );\r\n\r\n // Make sure image does not move away from edges\r\n if ( newImgWidth > canvasWidth ) {\r\n posX = imgPos.left * scaleX - ( ( x * scaleX ) - x );\r\n\r\n if ( posX > 0 ) {\r\n posX = 0;\r\n }\r\n\r\n if ( posX < canvasWidth - newImgWidth ) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if ( newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - ( ( y * scaleY ) - y );\r\n\r\n if ( posY > 0 ) {\r\n posY = 0;\r\n }\r\n\r\n if ( posY < canvasHeight - newImgHeight ) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor( newImgWidth, newImgHeight );\r\n\r\n $.fancybox.animate( $what, {\r\n top : posY,\r\n left : posX,\r\n scaleX : scaleX,\r\n scaleY : scaleY\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n // Stop slideshow\r\n if ( self.SlideShow && self.SlideShow.isActive ) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit : function( duration ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n var end;\r\n\r\n if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $what );\r\n\r\n self.isAnimating = true;\r\n\r\n end = self.getFitPos( current );\r\n\r\n self.updateCursor( end.width, end.height );\r\n\r\n $.fancybox.animate( $what, {\r\n top : end.top,\r\n left : end.left,\r\n scaleX : end.width / $what.width(),\r\n scaleY : end.height / $what.height()\r\n }, duration || 330, function() {\r\n self.isAnimating = false;\r\n });\r\n\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos : function( slide ) {\r\n var self = this;\r\n var $what = slide.$content;\r\n\r\n var imgWidth = slide.width;\r\n var imgHeight = slide.height;\r\n\r\n var margin = slide.opts.margin;\r\n\r\n var canvasWidth, canvasHeight, minRatio, width, height;\r\n\r\n if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) {\r\n return false;\r\n }\r\n\r\n // Convert \"margin to CSS style: [ top, right, bottom, left ]\r\n if ( $.type( margin ) === \"number\" ) {\r\n margin = [ margin, margin ];\r\n }\r\n\r\n if ( margin.length == 2 ) {\r\n margin = [ margin[0], margin[1], margin[0], margin[1] ];\r\n }\r\n\r\n // We can not use $slide width here, because it can have different diemensions while in transiton\r\n canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] );\r\n canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] );\r\n\r\n minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight );\r\n\r\n width = Math.floor( minRatio * imgWidth );\r\n height = Math.floor( minRatio * imgHeight );\r\n\r\n // Use floor rounding to make sure it really fits\r\n return {\r\n top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ],\r\n left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ],\r\n width : width,\r\n height : height\r\n };\r\n\r\n },\r\n\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update : function() {\r\n var self = this;\r\n\r\n $.each( self.slides, function( key, slide ) {\r\n self.updateSlide( slide );\r\n });\r\n },\r\n\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide : function( slide, duration ) {\r\n var self = this,\r\n $what = slide && slide.$content;\r\n\r\n if ( $what && ( slide.width || slide.height ) ) {\r\n self.isAnimating = false;\r\n\r\n $.fancybox.stop( $what );\r\n\r\n $.fancybox.setTranslate( $what, self.getFitPos( slide ) );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.trigger( 'onUpdate', slide );\r\n\r\n },\r\n\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide : function( slide, duration ) {\r\n var self = this, canvasWidth, pos;\r\n\r\n if ( self.current ) {\r\n canvasWidth = Math.round( slide.$slide.width() );\r\n pos = slide.pos - self.current.pos;\r\n\r\n $.fancybox.animate( slide.$slide, {\r\n top : 0,\r\n left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ),\r\n opacity : 1\r\n }, duration === undefined ? 0 : duration, null, false);\r\n }\r\n },\r\n\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor : function( nextWidth, nextHeight ) {\r\n\r\n var self = this;\r\n var isScaledDown;\r\n\r\n var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' );\r\n\r\n if ( !self.current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( self.isZoomable() ) {\r\n\r\n $container.addClass( 'fancybox-is-zoomable' );\r\n\r\n if ( nextWidth !== undefined && nextHeight !== undefined ) {\r\n isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height;\r\n\r\n } else {\r\n isScaledDown = self.isScaledDown();\r\n }\r\n\r\n if ( isScaledDown ) {\r\n\r\n // If image is scaled down, then, obviously, it can be zoomed to full size\r\n $container.addClass( 'fancybox-can-zoomIn' );\r\n\r\n } else {\r\n\r\n if ( self.current.opts.touch ) {\r\n\r\n // If image size ir largen than available available and touch module is not disable,\r\n // then user can do panning\r\n $container.addClass( 'fancybox-can-drag' );\r\n\r\n } else {\r\n $container.addClass( 'fancybox-can-zoomOut' );\r\n }\r\n\r\n }\r\n\r\n } else if ( self.current.opts.touch ) {\r\n $container.addClass( 'fancybox-can-drag' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var fitPos;\r\n\r\n if ( !current || self.isClosing ) {\r\n return;\r\n }\r\n\r\n // Assume that slide is zoomable if\r\n // - image is loaded successfuly\r\n // - click action is \"zoom\"\r\n // - actual size of the image is smaller than available area\r\n if ( current.type === 'image' && current.isLoaded && !current.hasError &&\r\n ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === \"zoom\" ) )\r\n ) {\r\n\r\n fitPos = self.getFitPos( current );\r\n\r\n if ( current.width > fitPos.width || current.height > fitPos.height ) {\r\n return true;\r\n }\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = $.fancybox.getTranslate( $what );\r\n rez = rez.width < current.width || rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan : function() {\r\n\r\n var self = this;\r\n\r\n var current = self.current;\r\n var $what = current.$content;\r\n\r\n var rez = false;\r\n\r\n if ( $what ) {\r\n rez = self.getFitPos( current );\r\n rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1;\r\n }\r\n\r\n return rez;\r\n\r\n },\r\n\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide : function( slide ) {\r\n\r\n var self = this, type, $slide;\r\n var ajaxLoad;\r\n\r\n if ( slide.isLoading ) {\r\n return;\r\n }\r\n\r\n if ( slide.isLoaded ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n self.trigger( 'beforeLoad', slide );\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off( 'refresh' )\r\n .trigger( 'onReset' )\r\n .addClass( 'fancybox-slide--' + ( type || 'unknown' ) )\r\n .addClass( slide.opts.slideClass );\r\n\r\n // Create content depending on the type\r\n\r\n switch ( type ) {\r\n\r\n case 'image':\r\n\r\n self.setImage( slide );\r\n\r\n break;\r\n\r\n case 'iframe':\r\n\r\n self.setIframe( slide );\r\n\r\n break;\r\n\r\n case 'html':\r\n\r\n self.setContent( slide, slide.src || slide.content );\r\n\r\n break;\r\n\r\n case 'inline':\r\n\r\n if ( $( slide.src ).length ) {\r\n self.setContent( slide, $( slide.src ) );\r\n\r\n } else {\r\n self.setError( slide );\r\n }\r\n\r\n break;\r\n\r\n case 'ajax':\r\n\r\n self.showLoading( slide );\r\n\r\n ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, {\r\n url : slide.src,\r\n success : function ( data, textStatus ) {\r\n\r\n if ( textStatus === 'success' ) {\r\n self.setContent( slide, data );\r\n }\r\n\r\n },\r\n error : function ( jqXHR, textStatus ) {\r\n\r\n if ( jqXHR && textStatus !== 'abort' ) {\r\n self.setError( slide );\r\n }\r\n\r\n }\r\n }));\r\n\r\n $slide.one( 'onReset', function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n case 'video' :\r\n\r\n self.setContent( slide,\r\n ''\r\n );\r\n\r\n break;\r\n\r\n default:\r\n\r\n self.setError( slide );\r\n\r\n break;\r\n\r\n }\r\n\r\n return true;\r\n\r\n },\r\n\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage : function( slide ) {\r\n\r\n var self = this;\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset;\r\n\r\n var found, temp, pxRatio, windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if ( srcset ) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(',').map(function ( el ) {\r\n \t\tvar ret = {};\r\n\r\n \t\tel.trim().split(/\\s+/).forEach(function ( el, i ) {\r\n var value = parseInt( el.substring(0, el.length - 1), 10 );\r\n\r\n \t\t\tif ( i === 0 ) {\r\n \t\t\t\treturn ( ret.url = el );\r\n \t\t\t}\r\n\r\n if ( value ) {\r\n ret.value = value;\r\n ret.postfix = el[ el.length - 1 ];\r\n }\r\n\r\n \t\t});\r\n\r\n \t\treturn ret;\r\n \t});\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for ( var j = 0; j < temp.length; j++ ) {\r\n var el = temp[ j ];\r\n\r\n if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if ( !found && temp.length ) {\r\n found = temp[ temp.length - 1 ];\r\n }\r\n\r\n if ( found ) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if ( slide.width && slide.height && found.postfix == 'w' ) {\r\n slide.height = ( slide.width / slide.height ) * found.value;\r\n slide.width = found.value;\r\n }\r\n }\r\n }\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass( 'fancybox-is-hidden' )\r\n .appendTo( slide.$slide );\r\n\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) {\r\n\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n slide.$ghost = $('')\r\n .one('error', function() {\r\n\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n self.afterLoad( slide );\r\n\r\n self.setBigImage( slide );\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .appendTo( slide.$content )\r\n .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) );\r\n\r\n } else {\r\n\r\n self.setBigImage( slide );\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage : function ( slide ) {\r\n var self = this;\r\n var $img = $('');\r\n\r\n slide.$image = $img\r\n .one('error', function() {\r\n\r\n self.setError( slide );\r\n\r\n })\r\n .one('load', function() {\r\n\r\n // Clear timeout that checks if loading icon needs to be displayed\r\n clearTimeout( slide.timouts );\r\n\r\n slide.timouts = null;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.width = slide.opts.width || this.naturalWidth;\r\n slide.height = slide.opts.height || this.naturalHeight;\r\n\r\n if ( slide.opts.image.srcset ) {\r\n $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset );\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.$ghost ) {\r\n\r\n slide.timouts = setTimeout(function() {\r\n slide.timouts = null;\r\n\r\n slide.$ghost.hide();\r\n\r\n }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) );\r\n\r\n } else {\r\n self.afterLoad( slide );\r\n }\r\n\r\n })\r\n .addClass( 'fancybox-image' )\r\n .attr('src', slide.src)\r\n .appendTo( slide.$content );\r\n\r\n if ( ( $img[0].complete || $img[0].readyState == \"complete\" ) && $img[0].naturalWidth && $img[0].naturalHeight ) {\r\n $img.trigger( 'load' );\r\n\r\n } else if( $img[0].error ) {\r\n $img.trigger( 'error' );\r\n\r\n } else {\r\n\r\n slide.timouts = setTimeout(function() {\r\n if ( !$img[0].complete && !slide.hasError ) {\r\n self.showLoading( slide );\r\n }\r\n\r\n }, 100);\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe : function( slide ) {\r\n var self\t= this,\r\n opts = slide.opts.iframe,\r\n $slide\t= slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css( opts.css )\r\n .appendTo( $slide );\r\n\r\n $iframe = $( opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()) )\r\n .attr( opts.attr )\r\n .appendTo( slide.$content );\r\n\r\n if ( opts.preload ) {\r\n\r\n self.showLoading( slide );\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on('load.fb error.fb', function(e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger( 'refresh' );\r\n\r\n self.afterLoad( slide );\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on('refresh.fb', function() {\r\n var $wrap = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n scrollWidth,\r\n $contents,\r\n $body;\r\n\r\n if ( $iframe[0].isReady !== 1 ) {\r\n return;\r\n }\r\n\r\n // Check if content is accessible,\r\n // it will fail if frame is not with the same origin\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find('body');\r\n\r\n } catch (ignore) {}\r\n\r\n // Calculate dimensions for the wrapper\r\n if ( $body && $body.length ) {\r\n\r\n if ( frameWidth === undefined ) {\r\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\r\n\r\n frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\r\n frameWidth += $wrap.outerWidth() - $wrap.innerWidth();\r\n }\r\n\r\n if ( frameHeight === undefined ) {\r\n frameHeight = Math.ceil( $body.outerHeight(true) );\r\n frameHeight += $wrap.outerHeight() - $wrap.innerHeight();\r\n }\r\n\r\n // Resize wrapper to fit iframe content\r\n if ( frameWidth ) {\r\n $wrap.width( frameWidth );\r\n }\r\n\r\n if ( frameHeight ) {\r\n $wrap.height( frameHeight );\r\n }\r\n }\r\n\r\n $wrap.removeClass( 'fancybox-is-hidden' );\r\n\r\n });\r\n\r\n } else {\r\n\r\n this.afterLoad( slide );\r\n\r\n }\r\n\r\n $iframe.attr( 'src', slide.src );\r\n\r\n if ( slide.opts.smallBtn === true ) {\r\n slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) );\r\n }\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one( 'onReset', function () {\r\n\r\n // This helps IE not to throw errors when closing\r\n try {\r\n\r\n $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' );\r\n\r\n } catch ( ignore ) {}\r\n\r\n $( this ).empty();\r\n\r\n slide.isLoaded = false;\r\n\r\n });\r\n\r\n },\r\n\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent : function ( slide, content ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n self.hideLoading( slide );\r\n\r\n slide.$slide.empty();\r\n\r\n if ( isQuery( content ) && content.parent().length ) {\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n // If user is navigating gallery fast, then the content might be already inside fancyBox\r\n // =====================================================================================\r\n\r\n // Make sure content is not already moved to fancyBox\r\n content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' );\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $( '
' ).hide().insertAfter( content );\r\n\r\n // Make sure content is visible\r\n content.css('display', 'inline-block');\r\n\r\n } else if ( !slide.hasError ) {\r\n\r\n // If content is just a plain text, try to convert it to html\r\n if ( $.type( content ) === 'string' ) {\r\n content = $('
').append( $.trim( content ) ).contents();\r\n\r\n // If we have text node, then add wrapping element to make vertical alignment work\r\n if ( content[0].nodeType === 3 ) {\r\n content = $('
').html( content );\r\n }\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if ( slide.opts.filter ) {\r\n content = $('
').html( content ).find( slide.opts.filter );\r\n }\r\n\r\n }\r\n\r\n slide.$slide.one('onReset', function () {\r\n\r\n // Pause all html5 video/audio\r\n $( this ).find( 'video,audio' ).trigger( 'pause' );\r\n\r\n // Put content back\r\n if ( slide.$placeholder ) {\r\n slide.$placeholder.after( content.hide() ).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if ( slide.$smallBtn ) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if ( !slide.hasError ) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n }\r\n\r\n });\r\n\r\n slide.$content = $( content ).appendTo( slide.$slide );\r\n\r\n this.afterLoad( slide );\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError : function ( slide ) {\r\n\r\n slide.hasError = true;\r\n\r\n slide.$slide.removeClass( 'fancybox-slide--' + slide.type );\r\n\r\n this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) );\r\n\r\n },\r\n\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && !slide.$spinner ) {\r\n slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide );\r\n }\r\n\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading : function( slide ) {\r\n\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if ( slide && slide.$spinner ) {\r\n slide.$spinner.remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n\r\n },\r\n\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad : function( slide ) {\r\n\r\n var self = this;\r\n\r\n if ( self.isClosing ) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger( 'afterLoad', slide );\r\n\r\n self.hideLoading( slide );\r\n\r\n if ( slide.opts.smallBtn && !slide.$smallBtn ) {\r\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() );\r\n }\r\n\r\n if ( slide.opts.protect && slide.$content && !slide.hasError ) {\r\n\r\n // Disable right click\r\n slide.$content.on( 'contextmenu.fb', function( e ) {\r\n if ( e.button == 2 ) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if ( slide.type === 'image' ) {\r\n $( '
' ).appendTo( slide.$content );\r\n }\r\n\r\n }\r\n\r\n self.revealContent( slide );\r\n\r\n },\r\n\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent : function( slide ) {\r\n\r\n var self = this;\r\n var $slide = slide.$slide;\r\n\r\n var effect, effectClassName, duration, opacity, end, start = false;\r\n\r\n effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ];\r\n duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ];\r\n\r\n duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 );\r\n\r\n if ( slide.isMoved || slide.pos !== self.currPos || !duration ) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n\r\n if ( effect === 'zoom' ) {\r\n end = self.getFitPos( slide );\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n delete end.width;\r\n delete end.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start );\r\n\r\n forceRedraw( slide.$content );\r\n\r\n // Start animation\r\n $.fancybox.animate( slide.$content, end, duration, function() {\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide( slide );\r\n\r\n\r\n // Simply show content\r\n // ===================\r\n\r\n if ( !effect ) {\r\n forceRedraw( $slide );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $slide );\r\n\r\n effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect;\r\n\r\n $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName );\r\n\r\n slide.$content.removeClass( 'fancybox-is-hidden' );\r\n\r\n //Force reflow for CSS3 transitions\r\n forceRedraw( $slide );\r\n\r\n $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) {\r\n $slide.removeClass( effectClassName ).removeAttr( 'style' );\r\n\r\n if ( slide.pos === self.currPos ) {\r\n self.complete();\r\n }\r\n\r\n }, true);\r\n\r\n },\r\n\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos : function( slide ) {\r\n\r\n var self = this;\r\n var rez = false;\r\n\r\n // Check if element is inside the viewport by at least 1 pixel\r\n var isElementVisible = function( $el ) {\r\n var element = $el[0];\r\n\r\n var elementRect = element.getBoundingClientRect();\r\n var parentRects = [];\r\n\r\n var visibleInAllParents;\r\n\r\n while ( element.parentElement !== null ) {\r\n if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) {\r\n parentRects.push(element.parentElement.getBoundingClientRect());\r\n }\r\n\r\n element = element.parentElement;\r\n }\r\n\r\n visibleInAllParents = parentRects.every(function(parentRect){\r\n var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left);\r\n var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top);\r\n\r\n return visiblePixelX > 0 && visiblePixelY > 0;\r\n });\r\n\r\n return visibleInAllParents &&\r\n elementRect.bottom > 0 && elementRect.right > 0 &&\r\n elementRect.left < $(window).width() && elementRect.top < $(window).height();\r\n };\r\n\r\n var $thumb = slide.opts.$thumb;\r\n var thumbPos = $thumb ? $thumb.offset() : 0;\r\n var slidePos;\r\n\r\n if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) {\r\n slidePos = self.$refs.stage.offset();\r\n\r\n rez = {\r\n top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( \"border-top-width\" ) || 0 ),\r\n left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( \"border-left-width\" ) || 0 ),\r\n width : $thumb.width(),\r\n height : $thumb.height(),\r\n scaleX : 1,\r\n scaleY : 1\r\n };\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete : function() {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n promise;\r\n\r\n if ( current.isMoved || !current.isLoaded || current.isComplete ) {\r\n return;\r\n }\r\n\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger( 'onReset' );\r\n\r\n self.preload( 'inline' );\r\n\r\n // Trigger any CSS3 transiton inside the slide\r\n forceRedraw( current.$slide );\r\n\r\n current.$slide.addClass( 'fancybox-slide--complete' );\r\n\r\n // Remove unnecessary slides\r\n $.each( self.slides, function( key, slide ) {\r\n if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) {\r\n slides[ slide.pos ] = slide;\r\n\r\n } else if ( slide ) {\r\n $.fancybox.stop( slide.$slide );\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger( 'afterShow' );\r\n\r\n // Play first html5 video/audio\r\n current.$slide.find( 'video,audio' ).first().trigger( 'play' );\r\n\r\n // Try to focus on the first focusable element\r\n if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) {\r\n self.focus();\r\n }\r\n\r\n },\r\n\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload : function( type ) {\r\n var self = this,\r\n next = self.slides[ self.currPos + 1 ],\r\n prev = self.slides[ self.currPos - 1 ];\r\n\r\n if ( next && next.type === type ) {\r\n self.loadSlide( next );\r\n }\r\n\r\n if ( prev && prev.type === type ) {\r\n self.loadSlide( prev );\r\n }\r\n },\r\n\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus : function() {\r\n var current = this.current;\r\n var $el;\r\n\r\n if ( this.isClosing ) {\r\n return;\r\n }\r\n\r\n if ( current && current.isComplete ) {\r\n\r\n // Look for first input with autofocus attribute\r\n $el = current.$slide.find('input[autofocus]:enabled:visible:first');\r\n\r\n if ( !$el.length ) {\r\n $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first');\r\n }\r\n }\r\n\r\n $el = $el && $el.length ? $el : this.$refs.container;\r\n\r\n $el.focus();\r\n },\r\n\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate : function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $( '.fancybox-container' ).each(function () {\r\n var instance = $(this).data( 'FancyBox' );\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger( 'onDeactivate' );\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if ( self.current || self.isIdle ) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger( 'onActivate' );\r\n\r\n self.addEvents();\r\n },\r\n\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close : function( e, d ) {\r\n\r\n var self = this;\r\n var current = self.current;\r\n\r\n var effect, duration;\r\n var $what, opacity, start, end;\r\n\r\n var done = function() {\r\n self.cleanUp( e );\r\n };\r\n\r\n if ( self.isClosing ) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if ( self.trigger( 'beforeClose', e ) === false ) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function() {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n if ( current.timouts ) {\r\n clearTimeout( current.timouts );\r\n }\r\n\r\n $what = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 );\r\n\r\n // Remove other slides\r\n current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' );\r\n\r\n current.$slide.siblings().trigger( 'onReset' ).remove();\r\n\r\n // Trigger animations\r\n if ( duration ) {\r\n self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' );\r\n }\r\n\r\n // Clean up\r\n self.hideLoading( current );\r\n\r\n self.hideControls();\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) {\r\n effect = 'fade';\r\n }\r\n\r\n if ( effect === 'zoom' ) {\r\n $.fancybox.stop( $what );\r\n\r\n start = $.fancybox.getTranslate( $what );\r\n\r\n start.width = start.width * start.scaleX;\r\n start.height = start.height * start.scaleY;\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if ( opacity == 'auto' ) {\r\n opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1;\r\n }\r\n\r\n if ( opacity ) {\r\n end.opacity = 0;\r\n }\r\n\r\n start.scaleX = start.width / end.width;\r\n start.scaleY = start.height / end.height;\r\n\r\n start.width = end.width;\r\n start.height = end.height;\r\n\r\n $.fancybox.setTranslate( current.$content, start );\r\n\r\n forceRedraw( current.$content );\r\n\r\n $.fancybox.animate( current.$content, end, duration, done );\r\n\r\n return true;\r\n }\r\n\r\n if ( effect && duration ) {\r\n\r\n // If skip animation\r\n if ( e === true ) {\r\n setTimeout( done, duration );\r\n\r\n } else {\r\n $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done );\r\n }\r\n\r\n } else {\r\n done();\r\n }\r\n\r\n return true;\r\n },\r\n\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp : function( e ) {\r\n var self = this,\r\n $body = $( 'body' ),\r\n instance,\r\n offset;\r\n\r\n self.current.$slide.trigger( 'onReset' );\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger( 'afterClose', e );\r\n\r\n // Place back focus\r\n if ( self.$lastFocus && !!self.current.opts.backFocus ) {\r\n self.$lastFocus.focus();\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if ( instance ) {\r\n instance.activate();\r\n\r\n } else {\r\n\r\n $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft );\r\n\r\n $body.removeClass( 'fancybox-active compensate-for-scrollbar' );\r\n\r\n if ( $body.hasClass( 'fancybox-iosfix' ) ) {\r\n offset = parseInt(document.body.style.top, 10);\r\n\r\n $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 );\r\n }\r\n\r\n $( '#fancybox-style-noscroll' ).remove();\r\n\r\n }\r\n\r\n },\r\n\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger : function( name, slide ) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if ( obj ) {\r\n args.unshift( obj );\r\n\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift( self );\r\n\r\n if ( $.isFunction( obj.opts[ name ] ) ) {\r\n rez = obj.opts[ name ].apply( obj, args );\r\n }\r\n\r\n if ( rez === false ) {\r\n return rez;\r\n }\r\n\r\n if ( name === 'afterClose' || !self.$refs ) {\r\n $D.trigger( name + '.fb', args );\r\n\r\n } else {\r\n self.$refs.container.trigger( name + '.fb', args );\r\n }\r\n\r\n },\r\n\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls : function ( force ) {\r\n\r\n var self = this;\r\n\r\n var current = self.current,\r\n index = current.index,\r\n caption = current.opts.caption,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger( 'refresh' );\r\n\r\n self.$caption = caption && caption.length ? $caption.html( caption ) : null;\r\n\r\n if ( !self.isHiddenControls && !self.isIdle ) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find('[data-fancybox-count]').html( self.group.length );\r\n $container.find('[data-fancybox-index]').html( index + 1 );\r\n\r\n $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) );\r\n $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) );\r\n\r\n if ( current.type === 'image' ) {\r\n\r\n // Update download button source\r\n $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show();\r\n\r\n } else {\r\n $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide();\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls : function () {\r\n\r\n this.isHiddenControls = true;\r\n\r\n this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' );\r\n\r\n },\r\n\r\n showControls : function() {\r\n var self = this;\r\n var opts = self.current ? self.current.opts : self.opts;\r\n var $container = self.$refs.container;\r\n\r\n self.isHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) )\r\n .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) )\r\n .toggleClass( 'fancybox-is-modal', !!opts.modal );\r\n\r\n if ( self.$caption ) {\r\n $container.addClass( 'fancybox-show-caption ');\r\n\r\n } else {\r\n $container.removeClass( 'fancybox-show-caption' );\r\n }\r\n\r\n },\r\n\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls : function() {\r\n if ( this.isHiddenControls ) {\r\n this.showControls();\r\n\r\n } else {\r\n this.hideControls();\r\n }\r\n\r\n },\r\n\r\n\r\n });\r\n\r\n\r\n $.fancybox = {\r\n\r\n version : \"3.2.10\",\r\n defaults : defaults,\r\n\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance : function ( command ) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data( 'FancyBox' );\r\n var args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if ( instance instanceof FancyBox ) {\r\n\r\n if ( $.type( command ) === 'string' ) {\r\n instance[ command ].apply( instance, args );\r\n\r\n } else if ( $.type( command ) === 'function' ) {\r\n command.apply( instance, args );\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open : function ( items, opts, index ) {\r\n return new FancyBox( items, opts, index );\r\n },\r\n\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close : function ( all ) {\r\n var instance = this.getInstance();\r\n\r\n if ( instance ) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n\r\n if ( all === true ) {\r\n this.close();\r\n }\r\n }\r\n\r\n },\r\n\r\n // Close instances and unbind all events\r\n // ==============================\r\n\r\n destroy : function() {\r\n\r\n this.close( true );\r\n\r\n $D.off( 'click.fb-start' );\r\n\r\n },\r\n\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d : (function() {\r\n var div = document.createElement('div');\r\n\r\n return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11);\r\n }()),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate : function( $el ) {\r\n var matrix;\r\n\r\n if ( !$el || !$el.length ) {\r\n return false;\r\n }\r\n\r\n matrix = $el.eq( 0 ).css('transform');\r\n\r\n if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) {\r\n matrix = matrix.split('(')[1];\r\n matrix = matrix.split(')')[0];\r\n matrix = matrix.split(',');\r\n } else {\r\n matrix = [];\r\n }\r\n\r\n if ( matrix.length ) {\r\n\r\n // If IE\r\n if ( matrix.length > 10 ) {\r\n matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ];\r\n\r\n } else {\r\n matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]];\r\n }\r\n\r\n matrix = matrix.map(parseFloat);\r\n\r\n } else {\r\n matrix = [ 0, 0, 1, 1 ];\r\n\r\n var transRegex = /\\.*translate\\((.*)px,(.*)px\\)/i;\r\n var transRez = transRegex.exec( $el.eq( 0 ).attr('style') );\r\n\r\n if ( transRez ) {\r\n matrix[ 0 ] = parseFloat( transRez[2] );\r\n matrix[ 1 ] = parseFloat( transRez[1] );\r\n }\r\n }\r\n\r\n return {\r\n top : matrix[ 0 ],\r\n left : matrix[ 1 ],\r\n scaleX : matrix[ 2 ],\r\n scaleY : matrix[ 3 ],\r\n opacity : parseFloat( $el.css('opacity') ),\r\n width : $el.width(),\r\n height : $el.height()\r\n };\r\n\r\n },\r\n\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate : function( $el, props ) {\r\n var str = '';\r\n var css = {};\r\n\r\n if ( !$el || !props ) {\r\n return;\r\n }\r\n\r\n if ( props.left !== undefined || props.top !== undefined ) {\r\n str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px';\r\n\r\n if ( this.use3d ) {\r\n str = 'translate3d(' + str + ', 0px)';\r\n\r\n } else {\r\n str = 'translate(' + str + ')';\r\n }\r\n }\r\n\r\n if ( props.scaleX !== undefined && props.scaleY !== undefined ) {\r\n str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')';\r\n }\r\n\r\n if ( str.length ) {\r\n css.transform = str;\r\n }\r\n\r\n if ( props.opacity !== undefined ) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if ( props.width !== undefined ) {\r\n css.width = props.width;\r\n }\r\n\r\n if ( props.height !== undefined ) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css( css );\r\n },\r\n\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate : function ( $el, to, duration, callback, leaveAnimationName ) {\r\n if ( $.isFunction( duration ) ) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n if ( !$.isPlainObject( to ) ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n $el.on( transitionEnd, function(e) {\r\n\r\n // Skip events from child elements and z-index change\r\n if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) {\r\n return;\r\n }\r\n\r\n $.fancybox.stop( $el );\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n\r\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\r\n $el.css( 'transition-duration', '' );\r\n\r\n to.width = Math.round( $el.width() * to.scaleX );\r\n to.height = Math.round( $el.height() * to.scaleY );\r\n\r\n to.scaleX = 1;\r\n to.scaleY = 1;\r\n\r\n $.fancybox.setTranslate( $el, to );\r\n }\r\n\r\n if ( leaveAnimationName === false ) {\r\n $el.removeAttr( 'style' );\r\n }\r\n\r\n } else if ( leaveAnimationName !== true ) {\r\n $el.removeClass( to );\r\n }\r\n\r\n if ( $.isFunction( callback ) ) {\r\n callback( e );\r\n }\r\n\r\n });\r\n\r\n if ( $.isNumeric( duration ) ) {\r\n $el.css( 'transition-duration', duration + 'ms' );\r\n }\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n $.fancybox.setTranslate( $el, to );\r\n\r\n } else {\r\n $el.addClass( to );\r\n }\r\n\r\n if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().addClass( 'fancybox-is-scaling' );\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\"timer\", setTimeout(function() {\r\n $el.trigger( 'transitionend' );\r\n }, duration + 16));\r\n\r\n },\r\n\r\n stop : function( $el ) {\r\n clearTimeout( $el.data(\"timer\") );\r\n\r\n $el.off( 'transitionend' ).css( 'transition-duration', '' );\r\n\r\n if ( $el.hasClass( 'fancybox-image-wrap' ) ) {\r\n $el.parent().removeClass( 'fancybox-is-scaling' );\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run( e ) {\r\n var $target\t= $( e.currentTarget ),\r\n opts\t= e.data ? e.data.options : {},\r\n value\t= $target.attr( 'data-fancybox' ) || '',\r\n index\t= 0,\r\n items = [];\r\n\r\n // Avoid opening multiple times\r\n if ( e.isDefaultPrevented() ) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n // Get all related items and find index for clicked one\r\n if ( value ) {\r\n items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] );\r\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\r\n\r\n index = items.index( $target );\r\n\r\n // Sometimes current item can not be found\r\n // (for example, when slider clones items)\r\n if ( index < 0 ) {\r\n index = 0;\r\n }\r\n\r\n } else {\r\n items = [ $target ];\r\n }\r\n\r\n $.fancybox.open( items, opts, index );\r\n }\r\n\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if ( selector ) {\r\n\r\n $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, {\r\n options : options\r\n }, _run );\r\n\r\n } else {\r\n\r\n this.off( 'click.fb-start' ).on( 'click.fb-start', {\r\n items : this,\r\n options : options\r\n }, _run);\r\n\r\n }\r\n\r\n return this;\r\n };\r\n\r\n\r\n // Self initializing plugin\r\n // ========================\r\n\r\n $D.on( 'click.fb-start', '[data-fancybox]', _run );\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n;(function ($) {\r\n\r\n\t'use strict';\r\n\r\n\t// Formats matching url to final form\r\n\r\n\tvar format = function (url, rez, params) {\r\n\t\tif ( !url ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tparams = params || '';\r\n\r\n\t\tif ( $.type(params) === \"object\" ) {\r\n\t\t\tparams = $.param(params, true);\r\n\t\t}\r\n\r\n\t\t$.each(rez, function (key, value) {\r\n\t\t\turl = url.replace('$' + key, value || '');\r\n\t\t});\r\n\r\n\t\tif (params.length) {\r\n\t\t\turl += (url.indexOf('?') > 0 ? '&' : '?') + params;\r\n\t\t}\r\n\r\n\t\treturn url;\r\n\t};\r\n\r\n\t// Object containing properties for each media type\r\n\r\n\tvar defaults = {\r\n\t\tyoutube : {\r\n\t\t\tmatcher : /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\tautohide : 1,\r\n\t\t\t\tfs : 1,\r\n\t\t\t\trel : 0,\r\n\t\t\t\thd : 1,\r\n\t\t\t\twmode : 'transparent',\r\n\t\t\t\tenablejsapi : 1,\r\n\t\t\t\thtml5 : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 8,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.youtube.com/embed/$4',\r\n\t\t\tthumb : '//img.youtube.com/vi/$4/hqdefault.jpg'\r\n\t\t},\r\n\r\n\t\tvimeo : {\r\n\t\t\tmatcher : /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n\t\t\tparams : {\r\n\t\t\t\tautoplay : 1,\r\n\t\t\t\thd : 1,\r\n\t\t\t\tshow_title : 1,\r\n\t\t\t\tshow_byline : 1,\r\n\t\t\t\tshow_portrait : 0,\r\n\t\t\t\tfullscreen : 1,\r\n\t\t\t\tapi : 1\r\n\t\t\t},\r\n\t\t\tparamPlace : 3,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//player.vimeo.com/video/$2'\r\n\t\t},\r\n\r\n\t\tmetacafe : {\r\n\t\t\tmatcher : /metacafe.com\\/watch\\/(\\d+)\\/(.*)?/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.metacafe.com/embed/$1/?ap=1'\r\n\t\t},\r\n\r\n\t\tdailymotion : {\r\n\t\t\tmatcher : /dailymotion.com\\/video\\/(.*)\\/?(.*)/,\r\n\t\t\tparams : {\r\n\t\t\t\tadditionalInfos : 0,\r\n\t\t\t\tautoStart : 1\r\n\t\t\t},\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//www.dailymotion.com/embed/video/$1'\r\n\t\t},\r\n\r\n\t\tvine : {\r\n\t\t\tmatcher : /vine.co\\/v\\/([a-zA-Z0-9\\?\\=\\-]+)/,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : '//vine.co/v/$1/embed/simple'\r\n\t\t},\r\n\r\n\t\tinstagram : {\r\n\t\t\tmatcher : /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n\t\t\ttype : 'image',\r\n\t\t\turl : '//$1/p/$2/media/?size=l'\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n\t\t// https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n\t\t// https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n\t\tgmap_place : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\\//, \"&\") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Examples:\r\n\t\t// https://www.google.com/maps/search/Empire+State+Building/\r\n\t\t// https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n\t\t// https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n\t\tgmap_search : {\r\n\t\t\tmatcher : /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n\t\t\ttype : 'iframe',\r\n\t\t\turl : function (rez) {\r\n\t\t\t\treturn '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed';\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$(document).on('objectNeedsType.fb', function (e, instance, item) {\r\n\r\n\t\tvar url\t = item.src || '',\r\n\t\t\ttype = false,\r\n\t\t\tmedia,\r\n\t\t\tthumb,\r\n\t\t\trez,\r\n\t\t\tparams,\r\n\t\t\turlParams,\r\n\t\t\tparamObj,\r\n\t\t\tprovider;\r\n\r\n\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\r\n\r\n\t\t// Look for any matching media type\r\n\t\t$.each(media, function ( providerName, providerOpts ) {\r\n\t\t\trez = url.match( providerOpts.matcher );\r\n\r\n\t\t\tif ( !rez ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\ttype = providerOpts.type;\r\n\t\t\tparamObj = {};\r\n\r\n\t\t\tif ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) {\r\n\t\t\t\turlParams = rez[ providerOpts.paramPlace ];\r\n\r\n\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\r\n\t\t\t\t\turlParams = urlParams.substring(1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\turlParams = urlParams.split('&');\r\n\r\n\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\r\n\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\r\n\r\n\t\t\t\t\tif ( p.length == 2 ) {\r\n\t\t\t\t\t\tparamObj[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tparams = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj );\r\n\r\n\t\t\turl = $.type( providerOpts.url ) === \"function\" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params );\r\n\t\t\tthumb = $.type( providerOpts.thumb ) === \"function\" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez );\r\n\r\n\t\t\tif ( providerName === 'vimeo' ) {\r\n\t\t\t\turl = url.replace('&%23', '#');\r\n\t\t\t}\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\t// If it is found, then change content type and update the url\r\n\r\n\t\tif ( type ) {\r\n\t\t\titem.src = url;\r\n\t\t\titem.type = type;\r\n\r\n\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\r\n\t\t\t\titem.opts.thumb = thumb;\r\n\t\t\t}\r\n\r\n\t\t\tif ( type === 'iframe' ) {\r\n\t\t\t\t$.extend(true, item.opts, {\r\n\t\t\t\t\tiframe : {\r\n\t\t\t\t\t\tpreload : false,\r\n\t\t\t\t\t\tattr : {\r\n\t\t\t\t\t\t\tscrolling : \"no\"\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.contentProvider = provider;\r\n\r\n\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' );\r\n\t\t\t}\r\n\r\n\t\t} else if ( url ) {\r\n\t\t\titem.type = item.opts.defaultType;\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n;(function (window, document, $) {\r\n\t'use strict';\r\n\r\n\tvar requestAFrame = (function () {\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\t// if all else fails, use setTimeout\r\n\t\t\tfunction (callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar cancelAFrame = (function () {\r\n\t\treturn window.cancelAnimationFrame ||\r\n\t\t\twindow.webkitCancelAnimationFrame ||\r\n\t\t\twindow.mozCancelAnimationFrame ||\r\n\t\t\twindow.oCancelAnimationFrame ||\r\n\t\t\tfunction (id) {\r\n\t\t\t\twindow.clearTimeout(id);\r\n\t\t\t};\r\n\t})();\r\n\r\n\tvar pointers = function( e ) {\r\n\t\tvar result = [];\r\n\r\n\t\te = e.originalEvent || e || window.e;\r\n\t\te = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] );\r\n\r\n\t\tfor ( var key in e ) {\r\n\r\n\t\t\tif ( e[ key ].pageX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].pageX, y : e[ key ].pageY } );\r\n\r\n\t\t\t} else if ( e[ key ].clientX ) {\r\n\t\t\t\tresult.push( { x : e[ key ].clientX, y : e[ key ].clientY } );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t};\r\n\r\n\tvar distance = function( point2, point1, what ) {\r\n\t\tif ( !point1 || !point2 ) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tif ( what === 'x' ) {\r\n\t\t\treturn point2.x - point1.x;\r\n\r\n\t\t} else if ( what === 'y' ) {\r\n\t\t\treturn point2.y - point1.y;\r\n\t\t}\r\n\r\n\t\treturn Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) );\r\n\t};\r\n\r\n\tvar isClickable = function( $el ) {\r\n\t\tif ( $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t// Check for attributes like data-fancybox-next or data-fancybox-close\r\n\t\tfor ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) {\r\n\t\t\tif ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t \treturn false;\r\n\t};\r\n\r\n\tvar hasScrollbars = function( el ) {\r\n\t\tvar overflowY = window.getComputedStyle( el )['overflow-y'];\r\n\t\tvar overflowX = window.getComputedStyle( el )['overflow-x'];\r\n\r\n\t\tvar vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight;\r\n\t\tvar horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth;\r\n\r\n\t\treturn vertical || horizontal;\r\n\t};\r\n\r\n\tvar isScrollable = function ( $el ) {\r\n\t\tvar rez = false;\r\n\r\n\t\twhile ( true ) {\r\n\t\t\trez\t= hasScrollbars( $el.get(0) );\r\n\r\n\t\t\tif ( rez ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t$el = $el.parent();\r\n\r\n\t\t\tif ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rez;\r\n\t};\r\n\r\n\r\n\tvar Guestures = function ( instance ) {\r\n\t\tvar self = this;\r\n\r\n\t\tself.instance = instance;\r\n\r\n\t\tself.$bg = instance.$refs.bg;\r\n\t\tself.$stage = instance.$refs.stage;\r\n\t\tself.$container = instance.$refs.container;\r\n\r\n\t\tself.destroy();\r\n\r\n\t\tself.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') );\r\n\t};\r\n\r\n\tGuestures.prototype.destroy = function() {\r\n\t\tthis.$container.off( '.fb.touch' );\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchstart = function( e ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar $target = $( e.target );\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\t\tvar $content = current.$content;\r\n\r\n\t\tvar isTouchDevice = ( e.type == 'touchstart' );\r\n\r\n\t\t// Do not respond to both (touch and mouse) events\r\n\t\tif ( isTouchDevice ) {\r\n\t\t\tself.$container.off( 'mousedown.fb.touch' );\r\n\t\t}\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore taping on links, buttons, input elements\r\n\t\tif ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks on the scrollbar\r\n\t\tif ( !$target.is('img') && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Ignore clicks while zooming or closing\r\n\t\tif ( !current || self.instance.isAnimating || self.instance.isClosing ) {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.realPoints = self.startPoints = pointers( e );\r\n\r\n\t\tif ( !self.startPoints ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tself.startEvent = e;\r\n\r\n\t\tself.canTap = true;\r\n\t\tself.$target = $target;\r\n\t\tself.$content = $content;\r\n\t\tself.opts = current.opts.touch;\r\n\r\n\t\tself.isPanning = false;\r\n\t\tself.isSwiping = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 };\r\n\t\tself.contentStartPos = $.fancybox.getTranslate( self.$content );\r\n\t\tself.contentLastPos = null;\r\n\r\n\t\tself.startTime = new Date().getTime();\r\n\t\tself.distanceX = self.distanceY = self.distance = 0;\r\n\r\n\t\tself.canvasWidth = Math.round( current.$slide[0].clientWidth );\r\n\t\tself.canvasHeight = Math.round( current.$slide[0].clientHeight );\r\n\r\n\t\t$(document)\r\n\t\t\t.off( '.fb.touch' )\r\n\t\t\t.on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"))\r\n\t\t\t.on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\r\n\r\n\t\tif ( $.fancybox.isMobile ) {\r\n\t\t\tdocument.addEventListener('scroll', self.onscroll, true);\r\n\t\t}\r\n\r\n\t\tif ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\r\n\t\t\t// Prevent image ghosting while dragging\r\n\t\t\tif ( $target.is('img') ) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !( $.fancybox.isMobile && ( isScrollable( $target ) || isScrollable( $target.parent() ) ) ) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 1 ) {\r\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\r\n\t\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\t\tself.isPanning = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.isSwiping = true;\r\n\t\t\t}\r\n\r\n\t\t\tself.$container.addClass( 'fancybox-controls--isGrabbing' );\r\n\t\t}\r\n\r\n\t\tif ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\t\t\tself.canTap = false;\r\n\t\t\tself.isSwiping = false;\r\n\t\t\tself.isPanning = false;\r\n\r\n\t\t\tself.isZooming = true;\r\n\r\n\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\tself.$content.css( 'transition-duration', '' );\r\n\r\n\t\t\tself.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft();\r\n\t\t\tself.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop();\r\n\r\n\t\t\tself.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width;\r\n\t\t\tself.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height;\r\n\r\n\t\t\tself.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onscroll = function(e) {\r\n\t\tself.isScrolling = true;\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchmove = function( e ) {\r\n\t\tvar self = this,\r\n\t\t\t$target = $(e.target);\r\n\r\n\t\tif ( self.isScrolling || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\t\t\tself.canTap = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.newPoints = pointers( e );\r\n\r\n\t\tif ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !(self.isSwiping && self.isSwiping === true) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\tself.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' );\r\n\t\tself.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' );\r\n\r\n\t\tself.distance = distance( self.newPoints[0], self.startPoints[0] )\r\n\r\n\t\t// Skip false ontouchmove events (Chrome)\r\n\t\tif ( self.distance > 0 ) {\r\n\t\t\tif ( self.isSwiping ) {\r\n\t\t\t\tself.onSwipe(e);\r\n\r\n\t\t\t} else if ( self.isPanning ) {\r\n\t\t\t\tself.onPan();\r\n\r\n\t\t\t} else if ( self.isZooming ) {\r\n\t\t\t\tself.onZoom();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onSwipe = function(e) {\r\n\t\tvar self = this,\r\n\t\t\tswiping = self.isSwiping,\r\n\t\t\tleft = self.sliderStartPos.left || 0,\r\n\t\t\tangle;\r\n\r\n\t\t// If direction is not yet determined\r\n\t\tif ( swiping === true ) {\r\n\r\n\t\t\t// We need at least 10px distance to correctly calculate an angle\r\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\tif ( self.instance.group.length < 2 && self.opts.vertical ) {\r\n\t\t\t\t\tself.isSwiping = 'y';\r\n\r\n\t\t\t\t} else if ( self.instance.isDragging || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) {\r\n\t\t\t\t\tself.isSwiping = 'x';\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tangle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI );\r\n\r\n\t\t\t\t\tself.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\t if ( self.isSwiping === 'y' && $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\r\n\t\t\t\t\t self.isScrolling = true;\r\n\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\tself.instance.isDragging = self.isSwiping;\r\n\r\n\t\t\t\t// Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n\t\t\t\tself.startPoints = self.newPoints;\r\n\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\t$.fancybox.stop( slide.$slide );\r\n\r\n\t\t\t\t\tslide.$slide.css( 'transition-duration', '' );\r\n\r\n\t\t\t\t\tslide.inTransition = false;\r\n\r\n\t\t\t\t\tif ( slide.pos === self.instance.current.pos ) {\r\n\t\t\t\t\t\tself.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Stop slideshow\r\n\t\t\t\tif ( self.instance.SlideShow && self.instance.SlideShow.isActive ) {\r\n\t\t\t\t\tself.instance.SlideShow.stop();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Sticky edges\r\n\t\tif ( swiping == 'x' ) {\r\n\t\t\tif ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left + Math.pow( self.distanceX, 0.8 );\r\n\r\n\t\t\t} else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) {\r\n\t\t\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\r\n\r\n\t\t\t} else {\r\n\t\t\t\tleft = left + self.distanceX;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.sliderLastPos = {\r\n\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\r\n\t\t\tleft : left\r\n\t\t};\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\r\n\t\t\tif ( self.sliderLastPos ) {\r\n\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\r\n\r\n\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\r\n\t\t\t\t\t\ttop : self.sliderLastPos.top,\r\n\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onPan = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Sometimes, when tapping causally, image can move a bit and that breaks double tapping\r\n\t\tif ( distance( self.newPoints[0], self.realPoints[0] ) < ($.fancybox.isMobile ? 10 : 5) ) {\r\n\t\t\tself.startPoints = self.newPoints;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.contentLastPos = self.limitMovement();\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\t};\r\n\r\n\t// Make panning sticky to the edges\r\n\tGuestures.prototype.limitMovement = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tvar distanceX = self.distanceX;\r\n\t\tvar distanceY = self.distanceY;\r\n\r\n\t\tvar contentStartPos = self.contentStartPos;\r\n\r\n\t\tvar currentOffsetX = contentStartPos.left;\r\n\t\tvar currentOffsetY = contentStartPos.top;\r\n\r\n\t\tvar currentWidth = contentStartPos.width;\r\n\t\tvar currentHeight = contentStartPos.height;\r\n\r\n\t\tvar minTranslateX, minTranslateY,\r\n\t\t\tmaxTranslateX, maxTranslateY,\r\n\t\t\tnewOffsetX, newOffsetY;\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = currentOffsetX + distanceX;\r\n\r\n\t\t} else {\r\n\t\t\tnewOffsetX = currentOffsetX;\r\n\t\t}\r\n\r\n\t\tnewOffsetY = currentOffsetY + distanceY;\r\n\r\n\t\t// Slow down proportionally to traveled distance\r\n\t\tminTranslateX = Math.max( 0, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tminTranslateY = Math.max( 0, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tmaxTranslateX = Math.min( canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5 );\r\n\t\tmaxTranslateY = Math.min( canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5 );\r\n\r\n\t\tif ( currentWidth > canvasWidth ) {\r\n\r\n\t\t\t// ->\r\n\t\t\tif ( distanceX > 0 && newOffsetX > minTranslateX ) {\r\n\t\t\t\tnewOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// <-\r\n\t\t\tif ( distanceX < 0 && newOffsetX < maxTranslateX ) {\r\n\t\t\t\tnewOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif ( currentHeight > canvasHeight ) {\r\n\r\n\t\t\t// \\/\r\n\t\t\tif ( distanceY > 0 && newOffsetY > minTranslateY ) {\r\n\t\t\t\tnewOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t\t// /\\\r\n\t\t\tif ( distanceY < 0 && newOffsetY < maxTranslateY ) {\r\n\t\t\t\tnewOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : contentStartPos.scaleX,\r\n\t\t\tscaleY : contentStartPos.scaleY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\t\tvar self = this;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tif ( newWidth > canvasWidth ) {\r\n\t\t\tnewOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n\t\t\tnewOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center horizontally\r\n\t\t\tnewOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 );\r\n\r\n\t\t}\r\n\r\n\t\tif ( newHeight > canvasHeight ) {\r\n\t\t\tnewOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n\t\t\tnewOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Center vertically\r\n\t\t\tnewOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 );\r\n\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX\r\n\t\t};\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onZoom = function() {\r\n\t\tvar self = this;\r\n\r\n\t\t// Calculate current distance between points to get pinch ratio and new width and height\r\n\r\n\t\tvar currentWidth = self.contentStartPos.width;\r\n\t\tvar currentHeight = self.contentStartPos.height;\r\n\r\n\t\tvar currentOffsetX = self.contentStartPos.left;\r\n\t\tvar currentOffsetY = self.contentStartPos.top;\r\n\r\n\t\tvar endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] );\r\n\r\n\t\tvar pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n\t\tvar newWidth = Math.floor( currentWidth * pinchRatio );\r\n\t\tvar newHeight = Math.floor( currentHeight * pinchRatio );\r\n\r\n\t\t// This is the translation due to pinch-zooming\r\n\t\tvar translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n\t\tvar translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n\t\t//Point between the two touches\r\n\r\n\t\tvar centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft();\r\n\t\tvar centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop();\r\n\r\n\t\t// And this is the translation due to translation of the centerpoint\r\n\t\t// between the two fingers\r\n\r\n\t\tvar translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n\t\tvar translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n\t\t// The new offset is the old/current one plus the total translation\r\n\r\n\t\tvar newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX );\r\n\t\tvar newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY );\r\n\r\n\t\tvar newPos = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\tscaleX : self.contentStartPos.scaleX * pinchRatio,\r\n\t\t\tscaleY : self.contentStartPos.scaleY * pinchRatio\r\n\t\t};\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tself.newWidth = newWidth;\r\n\t\tself.newHeight = newHeight;\r\n\r\n\t\tself.contentLastPos = newPos;\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.requestId = requestAFrame(function() {\r\n\t\t\t$.fancybox.setTranslate( self.$content, self.contentLastPos );\r\n\t\t});\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.ontouchend = function( e ) {\r\n\t\tvar self = this;\r\n\t\tvar dMs = Math.max( (new Date().getTime() ) - self.startTime, 1);\r\n\r\n\t\tvar swiping = self.isSwiping;\r\n\t\tvar panning = self.isPanning;\r\n\t\tvar zooming = self.isZooming;\r\n\t\tvar scrolling = self.isScrolling;\r\n\r\n\t\tself.endPoints = pointers( e );\r\n\r\n\t\tself.$container.removeClass( 'fancybox-controls--isGrabbing' );\r\n\r\n\t\t$(document).off( '.fb.touch' );\r\n\r\n\t\tdocument.removeEventListener('scroll', self.onscroll, true);\r\n\r\n\t\tif ( self.requestId ) {\r\n\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\tself.requestId = null;\r\n\t\t}\r\n\r\n\t\tself.isSwiping = false;\r\n\t\tself.isPanning = false;\r\n\t\tself.isZooming = false;\r\n\t\tself.isScrolling = false;\r\n\r\n\t\tself.instance.isDragging = false;\r\n\r\n\t\tif ( self.canTap ) {\r\n\t\t\treturn self.onTap( e );\r\n\t\t}\r\n\r\n\t\tself.speed = 366;\r\n\r\n\t\t// Speed in px/ms\r\n\t\tself.velocityX = self.distanceX / dMs * 0.5;\r\n\t\tself.velocityY = self.distanceY / dMs * 0.5;\r\n\r\n\t\tself.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) );\r\n\r\n\t\tif ( panning ) {\r\n\t\t\tself.endPanning();\r\n\r\n\t\t} else if ( zooming ) {\r\n\t\t\tself.endZooming();\r\n\r\n\t\t} else {\r\n\t\t\tself.endSwiping( swiping, scrolling );\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t};\r\n\r\n\tGuestures.prototype.endSwiping = function( swiping, scrolling ) {\r\n\t\tvar self = this,\r\n\t\t\tret = false,\r\n\t\t\tlen = self.instance.group.length;\r\n\r\n\t\tself.sliderLastPos = null;\r\n\r\n\t\t// Close if swiped vertically / navigate if horizontally\r\n\t\tif ( swiping == 'y' && !scrolling && Math.abs( self.distanceY ) > 50 ) {\r\n\r\n\t\t\t// Continue vertical movement\r\n\t\t\t$.fancybox.animate( self.instance.current.$slide, {\r\n\t\t\t\ttop : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ),\r\n\t\t\t\topacity : 0\r\n\t\t\t}, 150 );\r\n\r\n\t\t\tret = self.instance.close( true, 300 );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX > 50 && len > 1 ) {\r\n\t\t\tret = self.instance.previous( self.speedX );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && len > 1 ) {\r\n\t\t\tret = self.instance.next( self.speedX );\r\n\t\t}\r\n\r\n\t\tif ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) {\r\n\t\t\tif ( scrolling || len < 2 ) {\r\n\t\t\t\tself.instance.centerSlide( self.instance.current, 150 );\r\n\t\t\t} else {\r\n\t\t\t\tself.instance.jumpTo( self.instance.current.index );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.$container.removeClass( 'fancybox-is-sliding' );\r\n\r\n\t};\r\n\r\n\t// Limit panning from edges\r\n\t// ========================\r\n\r\n\tGuestures.prototype.endPanning = function() {\r\n\r\n\t\tvar self = this;\r\n\t\tvar newOffsetX, newOffsetY, newPos;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( self.opts.momentum === false ) {\r\n\t\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Continue movement\r\n\t\t\tnewOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed );\r\n\t\t\tnewOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed );\r\n\t\t}\r\n\r\n\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\r\n\r\n\t\t newPos.width = self.contentStartPos.width;\r\n\t\t newPos.height = self.contentStartPos.height;\r\n\r\n\t\t$.fancybox.animate( self.$content, newPos, 330 );\r\n\t};\r\n\r\n\r\n\tGuestures.prototype.endZooming = function() {\r\n\t\tvar self = this;\r\n\r\n\t\tvar current = self.instance.current;\r\n\r\n\t\tvar newOffsetX, newOffsetY, newPos, reset;\r\n\r\n\t\tvar newWidth = self.newWidth;\r\n\t\tvar newHeight = self.newHeight;\r\n\r\n\t\tif ( !self.contentLastPos ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tnewOffsetX = self.contentLastPos.left;\r\n\t\tnewOffsetY = self.contentLastPos.top;\r\n\r\n\t\treset = {\r\n\t\t\ttop : newOffsetY,\r\n\t\t\tleft : newOffsetX,\r\n\t\t\twidth : newWidth,\r\n\t\t\theight : newHeight,\r\n\t\t\tscaleX : 1,\r\n\t\t\tscaleY : 1\r\n\t\t};\r\n\r\n\t\t// Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n\t\t$.fancybox.setTranslate( self.$content, reset );\r\n\r\n\t\tif ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) {\r\n\t\t\tself.instance.scaleToFit( 150 );\r\n\r\n\t\t} else if ( newWidth > current.width || newHeight > current.height ) {\r\n\t\t\tself.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnewPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight );\r\n\r\n\t\t\t// Switch from scale() to width/height or animation will not work correctly\r\n\t\t\t$.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) );\r\n\r\n\t\t\t$.fancybox.animate( self.$content, newPos, 150 );\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onTap = function(e) {\r\n\t\tvar self = this;\r\n\t\tvar $target = $( e.target );\r\n\r\n\t\tvar instance = self.instance;\r\n\t\tvar current = instance.current;\r\n\r\n\t\tvar endPoints = ( e && pointers( e ) ) || self.startPoints;\r\n\r\n\t\tvar tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0;\r\n\t\tvar tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0;\r\n\r\n\t\tvar where;\r\n\r\n\t\tvar process = function ( prefix ) {\r\n\r\n\t\t\tvar action = current.opts[ prefix ];\r\n\r\n\t\t\tif ( $.isFunction( action ) ) {\r\n\t\t\t\taction = action.apply( instance, [ current, e ] );\r\n\t\t\t}\r\n\r\n\t\t\tif ( !action) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch ( action ) {\r\n\r\n\t\t\t\tcase \"close\" :\r\n\r\n\t\t\t\t\tinstance.close( self.startEvent );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"toggleControls\" :\r\n\r\n\t\t\t\t\tinstance.toggleControls( true );\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"next\" :\r\n\r\n\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"nextOrClose\" :\r\n\r\n\t\t\t\t\tif ( instance.group.length > 1 ) {\r\n\t\t\t\t\t\tinstance.next();\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"zoom\" :\r\n\r\n\t\t\t\t\tif ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) {\r\n\r\n\t\t\t\t\t\tif ( instance.canPan() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToFit();\r\n\r\n\t\t\t\t\t\t} else if ( instance.isScaledDown() ) {\r\n\t\t\t\t\t\t\tinstance.scaleToActual( tapX, tapY );\r\n\r\n\t\t\t\t\t\t} else if ( instance.group.length < 2 ) {\r\n\t\t\t\t\t\t\tinstance.close( self.startEvent );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t};\r\n\r\n\t\t// Ignore right click\r\n\t\tif ( e.originalEvent && e.originalEvent.button == 2 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Skip if clicked on the scrollbar\r\n\t\tif ( !$target.is('img') && tapX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check where is clicked\r\n\t\tif ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) {\r\n\t\t\twhere = 'Outside';\r\n\r\n\t\t} else if ( $target.is( '.fancybox-slide' ) ) {\r\n\t\t\twhere = 'Slide';\r\n\r\n\t\t} else if ( instance.current.$content && instance.current.$content.find( $target ).addBack().filter( $target ).length ) {\r\n\t\t \twhere = 'Content';\r\n\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if this is a double tap\r\n\t\tif ( self.tapped ) {\r\n\r\n\t\t\t// Stop previously created single tap\r\n\t\t\tclearTimeout( self.tapped );\r\n\t\t\tself.tapped = null;\r\n\r\n\t\t\t// Skip if distance between taps is too big\r\n\t\t\tif ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 ) {\r\n\t\t\t\treturn this;\r\n\t\t\t}\r\n\r\n\t\t\t// OK, now we assume that this is a double-tap\r\n\t\t\tprocess( 'dblclick' + where );\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Single tap will be processed if user has not clicked second time within 300ms\r\n\t\t\t// or there is no need to wait for double-tap\r\n\t\t\tself.tapX = tapX;\r\n\t\t\tself.tapY = tapY;\r\n\r\n\t\t\tif ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) {\r\n\r\n\t\t\t\tself.tapped = setTimeout(function() {\r\n\t\t\t\t\tself.tapped = null;\r\n\r\n\t\t\t\t\tprocess( 'click' + where );\r\n\r\n\t\t\t\t}, 500);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tprocess( 'click' + where );\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t};\r\n\r\n\t$(document).on('onActivate.fb', function (e, instance) {\r\n\t\tif ( instance && !instance.Guestures ) {\r\n\t\t\tinstance.Guestures = new Guestures( instance );\r\n\t\t}\r\n\t});\r\n\r\n}( window, document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tslideShow :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tslideShow : {\r\n\t\t\tautoStart : false,\r\n speed : 3000\r\n\t\t}\r\n\t});\r\n\r\n\tvar SlideShow = function( instance ) {\r\n\t\tthis.instance = instance;\r\n\t\tthis.init();\r\n\t};\r\n\r\n\t$.extend( SlideShow.prototype, {\r\n\t\ttimer : null,\r\n\t\tisActive : false,\r\n\t\t$button : null,\r\n\r\n\t\tinit : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() {\r\n\t\t\t\tself.toggle();\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tset : function( force ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\t// Check if reached last element\r\n\t\t\tif ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) {\r\n\t\t\t\tself.timer = setTimeout(function() {\r\n\t\t\t\t\tif ( self.isActive ) {\r\n\t\t\t\t\t\tself.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}, self.instance.current.opts.slideShow.speed);\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.stop();\r\n\t\t\t\tself.instance.idleSecondsCounter = 0;\r\n\t\t\t\tself.instance.showControls();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclear : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tclearTimeout( self.timer );\r\n\r\n\t\t\tself.timer = null;\r\n\t\t},\r\n\r\n\t\tstart : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tif ( current ) {\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t\tself.$button\r\n\t\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP )\r\n\t\t\t\t\t.removeClass( 'fancybox-button--play' )\r\n\t\t\t\t\t.addClass( 'fancybox-button--pause' );\r\n\r\n\t\t\t\t\tself.set( true );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tstop : function() {\r\n\t\t\tvar self = this;\r\n\t\t\tvar current = self.instance.current;\r\n\r\n\t\t\tself.clear();\r\n\r\n\t\t\tself.$button\r\n\t\t\t\t.attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START )\r\n\t\t\t\t.removeClass( 'fancybox-button--pause' )\r\n\t\t\t\t.addClass( 'fancybox-button--play' );\r\n\r\n\t\t\tself.isActive = false;\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tif ( self.isActive ) {\r\n\t\t\t\tself.stop();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.start();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tif ( instance && !instance.SlideShow ) {\r\n\t\t\t\tinstance.SlideShow = new SlideShow( instance );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, current, firstRun) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( firstRun ) {\r\n\r\n\t\t\t\tif ( SlideShow && current.opts.slideShow.autoStart ) {\r\n\t\t\t\t\tSlideShow.start();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.clear();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterShow.fb' : function(e, instance, current) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tSlideShow.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb onDeactivate.fb' : function(e, instance) {\r\n\t\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\t\tif ( SlideShow ) {\r\n\t\t\t\tSlideShow.stop();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t// Page Visibility API to pause slideshow when window is not active\r\n\t$(document).on(\"visibilitychange\", function() {\r\n\t\tvar instance = $.fancybox.getInstance();\r\n\t\tvar SlideShow = instance && instance.SlideShow;\r\n\r\n\t\tif ( SlideShow && SlideShow.isActive ) {\r\n\t\t\tif ( document.hidden ) {\r\n\t\t\t\tSlideShow.clear();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tSlideShow.set();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Collection of methods supported by user browser\r\n\tvar fn = (function () {\r\n\r\n\t\tvar fnMap = [\r\n\t\t\t[\r\n\t\t\t\t'requestFullscreen',\r\n\t\t\t\t'exitFullscreen',\r\n\t\t\t\t'fullscreenElement',\r\n\t\t\t\t'fullscreenEnabled',\r\n\t\t\t\t'fullscreenchange',\r\n\t\t\t\t'fullscreenerror'\r\n\t\t\t],\r\n\t\t\t// new WebKit\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullscreen',\r\n\t\t\t\t'webkitExitFullscreen',\r\n\t\t\t\t'webkitFullscreenElement',\r\n\t\t\t\t'webkitFullscreenEnabled',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t// old WebKit (Safari 5.1)\r\n\t\t\t[\r\n\t\t\t\t'webkitRequestFullScreen',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitCurrentFullScreenElement',\r\n\t\t\t\t'webkitCancelFullScreen',\r\n\t\t\t\t'webkitfullscreenchange',\r\n\t\t\t\t'webkitfullscreenerror'\r\n\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'mozRequestFullScreen',\r\n\t\t\t\t'mozCancelFullScreen',\r\n\t\t\t\t'mozFullScreenElement',\r\n\t\t\t\t'mozFullScreenEnabled',\r\n\t\t\t\t'mozfullscreenchange',\r\n\t\t\t\t'mozfullscreenerror'\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\t'msRequestFullscreen',\r\n\t\t\t\t'msExitFullscreen',\r\n\t\t\t\t'msFullscreenElement',\r\n\t\t\t\t'msFullscreenEnabled',\r\n\t\t\t\t'MSFullscreenChange',\r\n\t\t\t\t'MSFullscreenError'\r\n\t\t\t]\r\n\t\t];\r\n\r\n\t\tvar val;\r\n\t\tvar ret = {};\r\n\t\tvar i, j;\r\n\r\n\t\tfor ( i = 0; i < fnMap.length; i++ ) {\r\n\t\t\tval = fnMap[ i ];\r\n\r\n\t\t\tif ( val && val[ 1 ] in document ) {\r\n\t\t\t\tfor ( j = 0; j < val.length; j++ ) {\r\n\t\t\t\t\tret[ fnMap[ 0 ][ j ] ] = val[ j ];\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t})();\r\n\r\n\t// If browser does not have Full Screen API, then simply unset default button template and stop\r\n\tif ( !fn ) {\r\n\r\n\t\tif ( $ && $.fancybox ) {\r\n\t\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar FullScreen = {\r\n\r\n\t\trequest : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\telem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT );\r\n\r\n\t\t},\r\n\t\texit : function () {\r\n\r\n\t\t\tdocument[ fn.exitFullscreen ]();\r\n\r\n\t\t},\r\n\t\ttoggle : function ( elem ) {\r\n\r\n\t\t\telem = elem || document.documentElement;\r\n\r\n\t\t\tif ( this.isFullscreen() ) {\r\n\t\t\t\tthis.exit();\r\n\r\n\t\t\t} else {\r\n\t\t\t\tthis.request( elem );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\t\tisFullscreen : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenElement ] );\r\n\r\n\t\t},\r\n\t\tenabled : function() {\r\n\r\n\t\t\treturn Boolean( document[ fn.fullscreenEnabled ] );\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tfullScreen :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tfullScreen : {\r\n\t\t\tautoStart : false\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar $container;\r\n\r\n\t\t\tif ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) {\r\n\t\t\t\t$container = instance.$refs.container;\r\n\r\n\t\t\t\t$container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) {\r\n\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tFullScreen.toggle( $container[ 0 ] );\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) {\r\n\t\t\t\t\tFullScreen.request( $container[ 0 ] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Expose API\r\n\t\t\t\tinstance.FullScreen = FullScreen;\r\n\r\n\t\t\t} else if ( instance ) {\r\n\t\t\t\tinstance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\r\n\t\t\t// \"P\" or Spacebar\r\n\t\t\tif ( instance && instance.FullScreen && keycode === 70 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tinstance.FullScreen.toggle( instance.$refs.container[ 0 ] );\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( instance ) {\r\n\t\t\tif ( instance && instance.FullScreen ) {\r\n\t\t\t\tFullScreen.exit();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on(fn.fullscreenchange, function() {\r\n\t\tvar isFullscreen = FullScreen.isFullscreen(),\r\n\t\t\tinstance = $.fancybox.getInstance();\r\n\r\n\t\tif ( instance ) {\r\n\r\n\t\t\t// If image is zooming, then force to stop and reposition properly\r\n\t\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\r\n\t\t\t\tinstance.current.$content.css( 'transition', 'none' );\r\n\r\n\t\t\t\tinstance.isAnimating = false;\r\n\r\n\t\t\t\tinstance.update( true, true, 0 );\r\n\t\t\t}\r\n\r\n\t\t\tinstance.trigger( 'onFullscreenChange', isFullscreen );\r\n\r\n\t\t\tinstance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen );\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t// Make sure there are default values\r\n\t$.fancybox.defaults = $.extend(true, {\r\n\t\tbtnTpl : {\r\n\t\t\tthumbs :\r\n\t\t\t''\r\n\t\t},\r\n\t\tthumbs : {\r\n\t\t\tautoStart : false, // Display thumbnails on opening\r\n\t\t\thideOnClose : true, // Hide thumbnail grid when closing animation starts\r\n\t\t\tparentEl : '.fancybox-container', // Container is injected into this element\r\n\t\t\taxis : 'y' // Vertical (y) or horizontal (x) scrolling\r\n\t\t}\r\n\t}, $.fancybox.defaults);\r\n\r\n\tvar FancyThumbs = function( instance ) {\r\n\t\tthis.init( instance );\r\n\t};\r\n\r\n\t$.extend( FancyThumbs.prototype, {\r\n\r\n\t\t$button\t\t: null,\r\n\t\t$grid\t\t: null,\r\n\t\t$list\t\t: null,\r\n\t\tisVisible\t: false,\r\n\t\tisActive\t: false,\r\n\r\n\t\tinit : function( instance ) {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tself.instance = instance;\r\n\r\n\t\t\tinstance.Thumbs = self;\r\n\r\n\t\t\t// Enable thumbs if at least two group items have thumbnails\r\n\t\t\tvar first = instance.group[0],\r\n\t\t\t\tsecond = instance.group[1];\r\n\r\n\t\t\tself.opts = instance.group[ instance.currIndex ].opts.thumbs;\r\n\r\n\t\t\tself.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\r\n\r\n\t\t\tif ( self.opts && first && second && (\r\n\t\t \t\t( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) &&\r\n\t\t \t\t( second.type == 'image' || second.opts.thumb || second.opts.$thumb )\r\n\t\t\t)) {\r\n\r\n\t\t\t\tself.$button.show().on('click', function() {\r\n\t\t\t\t\tself.toggle();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tself.isActive = true;\r\n\r\n\t\t\t} else {\r\n\t\t\t\tself.$button.hide();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcreate : function() {\r\n\t\t\tvar self = this,\r\n\t\t\t\tinstance = self.instance,\r\n\t\t\t\tparentEl = self.opts.parentEl,\r\n\t\t\t\tlist,\r\n\t\t\t\tsrc;\r\n\r\n\t\t\tself.$grid = $('
').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) );\r\n\r\n\t\t\t// Build list HTML\r\n\t\t\tlist = '
    ';\r\n\r\n\t\t\t$.each(instance.group, function( i, item ) {\r\n\t\t\t\tsrc = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null );\r\n\r\n\t\t\t\tif ( !src && item.type === 'image' ) {\r\n\t\t\t\t\tsrc = item.src;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( src && src.length ) {\r\n\t\t\t\t\tlist += '
  • ';\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlist += '
';\r\n\r\n\t\t\tself.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() {\r\n\t\t\t\tinstance.jumpTo( $(this).data('index') );\r\n\t\t\t});\r\n\r\n\t\t\tself.$list.find( 'img' ).hide().one('load', function() {\r\n\t\t\t\tvar $parent\t\t= $(this).parent().removeClass( 'fancybox-thumbs-loading' ),\r\n\t\t\t\t\tthumbWidth\t= $parent.outerWidth(),\r\n\t\t\t\t\tthumbHeight\t= $parent.outerHeight(),\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidthRatio,\r\n\t\t\t\t\theightRatio;\r\n\r\n\t\t\t\twidth = this.naturalWidth\t|| this.width;\r\n\t\t\t\theight = this.naturalHeight\t|| this.height;\r\n\r\n\t\t\t\t// Calculate thumbnail dimensions; center vertically and horizontally\r\n\t\t\t\twidthRatio = width / thumbWidth;\r\n\t\t\t\theightRatio = height / thumbHeight;\r\n\r\n\t\t\t\tif (widthRatio >= 1 && heightRatio >= 1) {\r\n\t\t\t\t\tif (widthRatio > heightRatio) {\r\n\t\t\t\t\t\twidth = width / heightRatio;\r\n\t\t\t\t\t\theight = thumbHeight;\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidth = thumbWidth;\r\n\t\t\t\t\t\theight = height / widthRatio;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(this).css({\r\n\t\t\t\t\twidth : Math.floor(width),\r\n\t\t\t\t\theight : Math.floor(height),\r\n\t\t\t\t\t'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ),\r\n\t\t\t\t\t'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 )\r\n\t\t\t\t}).show();\r\n\r\n\t\t\t})\r\n\t\t\t.each(function() {\r\n\t\t\t\tthis.src = $( this ).data( 'src' );\r\n\t\t\t});\r\n\r\n\t\t\tif ( self.opts.axis === 'x' ) {\r\n\t\t\t\tself.$list.width( parseInt( self.$grid.css(\"padding-right\") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tfocus : function( duration ) {\r\n\t\t\tvar self = this,\r\n\t\t\t\t$list = self.$list,\r\n\t\t\t\tthumb,\r\n\t\t\t\tthumbPos;\r\n\r\n\t\t\tif ( self.instance.current ) {\r\n\t\t\t\tthumb = $list.children()\r\n\t\t\t\t\t.removeClass( 'fancybox-thumbs-active' )\r\n\t\t\t\t\t.filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n\t\t\t\t\t.addClass('fancybox-thumbs-active');\r\n\r\n\t\t\t\tthumbPos = thumb.position();\r\n\r\n\t\t\t\t// Check if need to scroll to make current thumb visible\r\n\t\t\t\tif ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) {\r\n\t\t\t\t\t$list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration);\r\n\r\n\t\t\t\t} else if ( self.opts.axis === 'x' && (\r\n\t\t\t\t\t\tthumbPos.left < $list.parent().scrollLeft() ||\r\n\t\t\t\t\t\tthumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) )\r\n\t\t\t\t\t)\r\n\t\t\t\t) {\r\n\t\t\t\t\t$list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tupdate : function() {\r\n\t\t\tthis.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible );\r\n\r\n\t\t\tif ( this.isVisible ) {\r\n\t\t\t\tif ( !this.$grid ) {\r\n\t\t\t\t\tthis.create();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.instance.trigger( 'onThumbsShow' );\r\n\r\n\t\t\t\tthis.focus( 0 );\r\n\r\n\t\t\t} else if ( this.$grid ) {\r\n\t\t\t\tthis.instance.trigger( 'onThumbsHide' );\r\n\t\t\t}\r\n\r\n\t\t\t// Update content position\r\n\t\t\tthis.instance.update();\r\n\t\t},\r\n\r\n\t\thide : function() {\r\n\t\t\tthis.isVisible = false;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\tshow : function() {\r\n\t\t\tthis.isVisible = true;\r\n\t\t\tthis.update();\r\n\t\t},\r\n\r\n\t\ttoggle : function() {\r\n\t\t\tthis.isVisible = !this.isVisible;\r\n\t\t\tthis.update();\r\n\t\t}\r\n\t});\r\n\r\n\t$(document).on({\r\n\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar Thumbs;\r\n\r\n\t\t\tif ( instance && !instance.Thumbs ) {\r\n\t\t\t\tThumbs = new FancyThumbs( instance );\r\n\r\n\t\t\t\tif ( Thumbs.isActive && Thumbs.opts.autoStart === true ) {\r\n\t\t\t\t\tThumbs.show();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeShow.fb' : function(e, instance, item, firstRun) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible ) {\r\n\t\t\t\tThumbs.focus( firstRun ? 0 : 250 );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'afterKeydown.fb' : function(e, instance, current, keypress, keycode) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\t// \"G\"\r\n\t\t\tif ( Thumbs && Thumbs.isActive && keycode === 71 ) {\r\n\t\t\t\tkeypress.preventDefault();\r\n\r\n\t\t\t\tThumbs.toggle();\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t'beforeClose.fb' : function( e, instance ) {\r\n\t\t\tvar Thumbs = instance && instance.Thumbs;\r\n\r\n\t\t\tif ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) {\r\n\t\t\t\tThumbs.$grid.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t});\r\n\r\n}(document, window.jQuery));\r\n\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\t$.extend(true, $.fancybox.defaults, {\r\n\t\tbtnTpl : {\r\n\t\t\tshare :\r\n\t\t\t\t''\r\n\t\t},\r\n\t\tshare : {\r\n\t\t\ttpl :\r\n\t\t\t\t'
' +\r\n\t\t\t\t\t'

{{SHARE}}

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Facebook' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Pinterest' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t'Twitter' +\r\n\t\t\t\t\t\t'' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t\t'

' +\r\n\t\t\t\t'
'\r\n\t\t}\r\n\t});\r\n\r\n\tfunction escapeHtml(string) {\r\n\t\tvar entityMap = {\r\n\t\t '&': '&',\r\n\t\t '<': '<',\r\n\t\t '>': '>',\r\n\t\t '\"': '"',\r\n\t\t \"'\": ''',\r\n\t\t '/': '/',\r\n\t\t '`': '`',\r\n\t\t '=': '='\r\n\t\t};\r\n\r\n\t\treturn String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\treturn entityMap[s];\r\n\t\t});\r\n\t}\r\n\r\n\t$(document).on('click', '[data-fancybox-share]', function() {\r\n\t\tvar f = $.fancybox.getInstance(),\r\n\t\t\turl,\r\n\t\t\ttpl;\r\n\r\n\t\tif ( f ) {\r\n\t\t\turl = f.current.opts.hash === false ? f.current.src : window.location;\r\n\t\t\ttpl = f.current.opts.share.tpl\r\n\t\t\t\t\t.replace( /\\{\\{media\\}\\}/g, f.current.type === 'image' ? encodeURIComponent( f.current.src ) : '' )\r\n\t\t\t\t\t.replace( /\\{\\{url\\}\\}/g, encodeURIComponent( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{url_raw\\}\\}/g, escapeHtml( url ) )\r\n\t\t\t\t\t.replace( /\\{\\{descr\\}\\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' );\r\n\r\n\t\t\t$.fancybox.open({\r\n\t\t\t\tsrc : f.translate( f, tpl ),\r\n\t\t\t\ttype : 'html',\r\n\t\t\t\topts : {\r\n\t\t\t\t\tanimationEffect : \"fade\",\r\n\t\t\t\t\tanimationDuration : 250,\r\n\t\t\t\t\tafterLoad : function(instance, current) {\r\n\t\t\t\t\t\t// Opening links in a popup window\r\n\t\t\t\t\t\tcurrent.$content.find('.fancybox-share__links a').click(function() {\r\n\t\t\t\t\t window.open(this.href, \"Share\", \"width=550, height=450\");\r\n\t\t\t\t\t return false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t});\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n;(function (document, window, $) {\r\n\t'use strict';\r\n\r\n\t// Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n\tif ( !$.escapeSelector ) {\r\n\t\t$.escapeSelector = function( sel ) {\r\n\t\t\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n\t\t\tvar fcssescape = function( ch, asCodePoint ) {\r\n\t\t\t\tif ( asCodePoint ) {\r\n\t\t\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n\t\t\t\t\tif ( ch === \"\\0\" ) {\r\n\t\t\t\t\t\treturn \"\\uFFFD\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\r\n\t\t\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Other potentially-special ASCII characters get backslash-escaped\r\n\t\t\t\treturn \"\\\\\" + ch;\r\n\t\t\t};\r\n\r\n\t\t\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\r\n\t\t};\r\n\t}\r\n\r\n\t// Create new history entry only once\r\n\tvar shouldCreateHistory = true;\r\n\r\n\t// Variable containing last hash value set by fancyBox\r\n\t// It will be used to determine if fancyBox needs to close after hash change is detected\r\n var currentHash = null;\r\n\r\n\t// Throttling the history change\r\n\tvar timerID = null;\r\n\r\n\t// Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr( 1 );\r\n var rez = hash.split( '-' );\r\n var index = rez.length > 1 && /^\\+?\\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1;\r\n var gallery = rez.join( '-' );\r\n\r\n\t\t// Index is starting from 1\r\n\t\tif ( index < 1 ) {\r\n\t\t\tindex = 1;\r\n\t\t}\r\n\r\n return {\r\n hash : hash,\r\n index : index,\r\n gallery : gallery\r\n };\r\n }\r\n\r\n\t// Trigger click evnt on links to open new fancyBox instance\r\n\tfunction triggerFromUrl( url ) {\r\n\t\tvar $el;\r\n\r\n if ( url.gallery !== '' ) {\r\n\r\n\t\t\t// If we can find element matching 'data-fancybox' atribute, then trigger click event for that ..\r\n\t\t\t$el = $( \"[data-fancybox='\" + $.escapeSelector( url.gallery ) + \"']\" ).eq( url.index - 1 );\r\n\r\n if ( !$el.length ) {\r\n\t\t\t\t// .. if not, try finding element by ID\r\n\t\t\t\t$el = $( \"#\" + $.escapeSelector( url.gallery ) + \"\" );\r\n\t\t\t}\r\n\r\n\t\t\tif ( $el.length ) {\r\n\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t$el.trigger( 'click' );\r\n\t\t\t}\r\n\r\n }\r\n\t}\r\n\r\n\t// Get gallery name from current instance\r\n\tfunction getGalleryID( instance ) {\r\n\t\tvar opts;\r\n\r\n\t\tif ( !instance ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\topts = instance.current ? instance.current.opts : instance.opts;\r\n\r\n\t\treturn opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' );\r\n\t}\r\n\r\n\t// Start when DOM becomes ready\r\n $(function() {\r\n\r\n\t\t// Check if user has disabled this module\r\n\t\tif ( $.fancybox.defaults.hash === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Update hash when opening/closing fancyBox\r\n\t $(document).on({\r\n\t\t\t'onInit.fb' : function( e, instance ) {\r\n\t\t\t\tvar url, gallery;\r\n\r\n\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\turl = parseUrl();\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\r\n\t\t\t\t// Make sure gallery start index matches index from hash\r\n\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\r\n\t\t\t\t\tinstance.currIndex = url.index - 1;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t'beforeShow.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery;\r\n\r\n\t\t\t\tif ( !current || current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t gallery = getGalleryID( instance );\r\n\r\n\t // Update window hash\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\r\n\t\t instance.opts.origHash = window.location.hash;\r\n\t\t }\r\n\r\n\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\r\n\r\n\t\t\t\t\tif ( 'replaceState' in window.history ) {\r\n\t\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttimerID = setTimeout(function() {\r\n\t\t\t\t\t\t\twindow.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\r\n\r\n\t\t\t\t\t\t\ttimerID = null;\r\n\r\n\t\t\t\t\t\t\tshouldCreateHistory = false;\r\n\r\n\t\t\t\t\t\t}, 300);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twindow.location.hash = currentHash;\r\n\t\t\t\t\t}\r\n\r\n\t }\r\n\r\n\t },\r\n\r\n\t\t\t'beforeClose.fb' : function( e, instance, current ) {\r\n\t\t\t\tvar gallery, origHash;\r\n\r\n\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tgallery = getGalleryID( instance );\r\n\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\r\n\r\n\t // Remove hash from location bar\r\n\t if ( gallery && gallery !== '' ) {\r\n\r\n\t if ( 'replaceState' in history ) {\r\n\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\r\n\r\n\t } else {\r\n\t\t\t\t\t\twindow.location.hash = origHash;\r\n\r\n\t\t\t\t\t\t// Keep original scroll position\r\n\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\r\n\t }\r\n\t }\r\n\r\n\t\t\t\tcurrentHash = null;\r\n\t }\r\n\t });\r\n\r\n\t\t// Check if need to close after url has changed\r\n\t\t$(window).on('hashchange.fb', function() {\r\n\t\t\tvar url = parseUrl();\r\n\r\n\t\t\tif ( $.fancybox.getInstance() ) {\r\n\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\r\n\t\t\t\t\tcurrentHash = null;\r\n\r\n\t\t\t\t\t$.fancybox.close();\r\n\t\t\t\t}\r\n\r\n\t\t\t} else if ( url.gallery !== '' ) {\r\n\t\t\t\ttriggerFromUrl( url );\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n\t\tsetTimeout(function() {\r\n\t\t\ttriggerFromUrl( parseUrl() );\r\n\t\t}, 50);\r\n });\r\n\r\n}( document, window, window.jQuery || jQuery ));\r\n\r\n;(function (document, $) {\r\n\t'use strict';\r\n\r\n\tvar prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n 'onInit.fb' : function( e, instance, current ) {\r\n\t\t\tinstance.$refs.stage.on('mousewheel DOMMouseScroll wheel MozMousePixelScroll', function(e) {\r\n\t\t\t\tvar current = instance.current,\r\n\t\t\t\t\tcurrTime = new Date().getTime();\r\n\r\n\t\t\t\tif ( instance.group.length < 1 || current.opts.wheel === false || ( current.opts.wheel === 'auto' && current.type !== 'image' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\r\n\t\t\t\tif ( current.$slide.hasClass( 'fancybox-animated' ) ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\te = e.originalEvent || e;\r\n\r\n\t\t\t\tif ( currTime - prevTime < 250 ) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tprevTime = currTime;\r\n\r\n\t\t\t\tinstance[ ( -e.deltaY || -e.deltaX || e.wheelDelta || -e.detail ) < 0 ? 'next' : 'previous' ]();\r\n\r\n\t\t\t});\r\n\t\t}\r\n });\r\n\r\n}( document, window.jQuery || jQuery ));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js\n// module id = GfF8\n// module chunks = 0 7 13 22","import $ from 'jquery';\r\nimport {ensureLoggedIn, UserInfo} from \"core/auth\";\r\nimport {Notifier} from \"core/widgets/notifier\";\r\nimport {siteUrl} from \"core/utils/url\";\r\nimport * as langUtils from \"../../../../core/utils/lang\";\r\n\r\nexport const TYPE_REVIEW_LIKE = 'review_like';\r\nexport const TYPE_COMMENT_LIKE = 'comment_like';\r\nexport const TYPE_SALE_LIKE = 'sale_like';\r\n\r\nexport class Likers {\r\n\r\n\tvisible = ko.observable(false);\r\n\tloading = ko.observable(false);\r\n\tlikers = ko.observableArray([]);\r\n\tlikesCount = ko.observable(0);\r\n\tmyLike = ko.observable(false);\r\n\ttype = null;\r\n\r\n\tconstructor(reviewId, likesCount, myLike, type = TYPE_REVIEW_LIKE) {\r\n\t\tthis.reviewId = reviewId;\r\n\t\tthis.likesCount(+likesCount);\r\n\t\tthis.myLike(!!myLike);\r\n\r\n\t\tthis.likesCountUsersText = ko.pureComputed(() => {\r\n\t\t\treturn langUtils.pluralize(this.likesCount(), '{n} пользователю|{n} пользователям|{n} пользователям', 'n');\r\n\t\t});\r\n\r\n\t\tswitch(type) {\r\n\t\t\tcase TYPE_REVIEW_LIKE:\r\n\t\t\t\tthis._saveUrl = '/reviews/save_like';\r\n\t\t\t\tthis._getLikersUrl = '/reviews/get_likers_ajax';\r\n\t\t\t\tbreak;\r\n\t\t\tcase TYPE_COMMENT_LIKE:\r\n this._saveUrl = '/reviews/save_comment_like';\r\n this._getLikersUrl = '/reviews/get_comment_likers_ajax';\r\n\t\t\t\tbreak;\r\n\t\t\tcase TYPE_SALE_LIKE:\r\n\t\t\t\tthis._saveUrl = '/blog/likes_save';\r\n\t\t\t\tthis._getLikersUrl = '/blog/get_likers';\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tshow() {\r\n\t\tthis._load().done(() => {\r\n\t\t\tthis.visible(this.likesCount() > 0)\r\n\t\t});\r\n\t}\r\n\r\n\thide() {\r\n\t\tthis.visible(false);\r\n\t}\r\n\r\n\ttoggleMyLike(data, e) {\r\n\t\te.stopPropagation();\r\n\t\tensureLoggedIn(() => {\r\n\t\t\t$.post(siteUrl(this._saveUrl), {id: this.reviewId}, null, 'json')\r\n\t\t\t\t.fail(Notifier.errorXHR)\r\n\t\t\t\t.done(response => {\r\n\t\t\t\t\tif (response && response.success) {\r\n\t\t\t\t\t\tthis.likesCount(+response.likes);\r\n\t\t\t\t\t\tthis.myLike((response.myAction && response.myAction == 'up')\r\n\t\t\t\t\t\t\t|| (response.action && response.action == 'up'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tNotifier.error();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t_load() {\r\n\t\tthis.loading(true);\r\n\t\treturn $.get(siteUrl(this._getLikersUrl), {id: this.reviewId}, null, 'json')\r\n\t\t\t.done(response => {\r\n\t\t\t\tthis.likesCount(+response.total);\r\n\t\t\t\tthis.likers(response.likers);\r\n\t\t\t\tthis.loading(false);\r\n\t\t\t});\r\n\t}\r\n}\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/likers.js","'use strict';\n(function (root, factory) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = factory(typeof global === 'undefined' ? root : global);\n } else if (typeof define === 'function' && define.amd) {\n define([], function () { return factory(root); });\n } else {\n root.framebus = factory(root);\n }\n})(this, function (root) { // eslint-disable-line no-invalid-this\n var win, framebus;\n var popups = [];\n var subscribers = {};\n var prefix = '/*framebus*/';\n\n function include(popup) {\n if (popup == null) { return false; }\n if (popup.Window == null) { return false; }\n if (popup.constructor !== popup.Window) { return false; }\n\n popups.push(popup);\n return true;\n }\n\n function target(origin) {\n var key;\n var targetedFramebus = {};\n\n for (key in framebus) {\n if (!framebus.hasOwnProperty(key)) { continue; }\n\n targetedFramebus[key] = framebus[key];\n }\n\n targetedFramebus._origin = origin || '*';\n\n return targetedFramebus;\n }\n\n function publish(event) {\n var payload, args;\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_isntString(event)) { return false; }\n if (_isntString(origin)) { return false; }\n\n args = Array.prototype.slice.call(arguments, 1);\n\n payload = _packagePayload(event, args, origin);\n if (payload === false) { return false; }\n\n _broadcast(win.top || win.self, payload, origin);\n\n return true;\n }\n\n function subscribe(event, fn) {\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_subscriptionArgsInvalid(event, fn, origin)) { return false; }\n\n subscribers[origin] = subscribers[origin] || {};\n subscribers[origin][event] = subscribers[origin][event] || [];\n subscribers[origin][event].push(fn);\n\n return true;\n }\n\n function unsubscribe(event, fn) {\n var i, subscriberList;\n var origin = _getOrigin(this); // eslint-disable-line no-invalid-this\n\n if (_subscriptionArgsInvalid(event, fn, origin)) { return false; }\n\n subscriberList = subscribers[origin] && subscribers[origin][event];\n if (!subscriberList) { return false; }\n\n for (i = 0; i < subscriberList.length; i++) {\n if (subscriberList[i] === fn) {\n subscriberList.splice(i, 1);\n return true;\n }\n }\n\n return false;\n }\n\n function _getOrigin(scope) {\n return scope && scope._origin || '*';\n }\n\n function _isntString(string) {\n return typeof string !== 'string';\n }\n\n function _packagePayload(event, args, origin) {\n var packaged = false;\n var payload = {\n event: event,\n origin: origin\n };\n var reply = args[args.length - 1];\n\n if (typeof reply === 'function') {\n payload.reply = _subscribeReplier(reply, origin);\n args = args.slice(0, -1);\n }\n\n payload.args = args;\n\n try {\n packaged = prefix + JSON.stringify(payload);\n } catch (e) {\n throw new Error('Could not stringify event: ' + e.message);\n }\n return packaged;\n }\n\n function _unpackPayload(e) {\n var payload, replyOrigin, replySource, replyEvent;\n\n if (e.data.slice(0, prefix.length) !== prefix) { return false; }\n\n try {\n payload = JSON.parse(e.data.slice(prefix.length));\n } catch (err) {\n return false;\n }\n\n if (payload.reply != null) {\n replyOrigin = e.origin;\n replySource = e.source;\n replyEvent = payload.reply;\n\n payload.reply = function reply(data) { // eslint-disable-line consistent-return\n var replyPayload = _packagePayload(replyEvent, [data], replyOrigin);\n\n if (replyPayload === false) { return false; }\n\n replySource.postMessage(replyPayload, replyOrigin);\n };\n\n payload.args.push(payload.reply);\n }\n\n return payload;\n }\n\n function _attach(w) {\n if (win) { return; }\n win = w || root;\n\n if (win.addEventListener) {\n win.addEventListener('message', _onmessage, false);\n } else if (win.attachEvent) {\n win.attachEvent('onmessage', _onmessage);\n } else if (win.onmessage === null) {\n win.onmessage = _onmessage;\n } else {\n win = null;\n }\n }\n\n function _uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n return v.toString(16);\n });\n }\n\n function _onmessage(e) {\n var payload;\n\n if (_isntString(e.data)) { return; }\n\n payload = _unpackPayload(e);\n if (!payload) { return; }\n\n _dispatch('*', payload.event, payload.args, e);\n _dispatch(e.origin, payload.event, payload.args, e);\n _broadcastPopups(e.data, payload.origin, e.source);\n }\n\n function _dispatch(origin, event, args, e) {\n var i;\n\n if (!subscribers[origin]) { return; }\n if (!subscribers[origin][event]) { return; }\n\n for (i = 0; i < subscribers[origin][event].length; i++) {\n subscribers[origin][event][i].apply(e, args);\n }\n }\n\n function _hasOpener(frame) {\n if (frame.top !== frame) { return false; }\n if (frame.opener == null) { return false; }\n if (frame.opener === frame) { return false; }\n if (frame.opener.closed === true) { return false; }\n\n return true;\n }\n\n function _broadcast(frame, payload, origin) {\n var i;\n\n try {\n frame.postMessage(payload, origin);\n\n if (_hasOpener(frame)) {\n _broadcast(frame.opener.top, payload, origin);\n }\n\n for (i = 0; i < frame.frames.length; i++) {\n _broadcast(frame.frames[i], payload, origin);\n }\n } catch (_) { /* ignored */ }\n }\n\n function _broadcastPopups(payload, origin, source) {\n var i, popup;\n\n for (i = popups.length - 1; i >= 0; i--) {\n popup = popups[i];\n\n if (popup.closed === true) {\n popups = popups.slice(i, 1);\n } else if (source !== popup) {\n _broadcast(popup.top, payload, origin);\n }\n }\n }\n\n function _subscribeReplier(fn, origin) {\n var uuid = _uuid();\n\n function replier(d, o) {\n fn(d, o);\n framebus.target(origin).unsubscribe(uuid, replier);\n }\n\n framebus.target(origin).subscribe(uuid, replier);\n return uuid;\n }\n\n function _subscriptionArgsInvalid(event, fn, origin) {\n if (_isntString(event)) { return true; }\n if (typeof fn !== 'function') { return true; }\n if (_isntString(origin)) { return true; }\n\n return false;\n }\n\n _attach();\n\n framebus = {\n target: target,\n include: include,\n publish: publish,\n pub: publish,\n trigger: publish,\n emit: publish,\n subscribe: subscribe,\n sub: subscribe,\n on: subscribe,\n unsubscribe: unsubscribe,\n unsub: unsubscribe,\n off: unsubscribe\n };\n\n return framebus;\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/framebus/dist/framebus.js\n// module id = Oe2b\n// module chunks = 2 3 4 5 10 12 13","module.exports = \"
\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t
\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t
\\n\\t\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\t
\\n\\t\\n
\\n\\n\\n
\\n\\t\\n
\\n\\n\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t:\\n\\t\\t\\t\\n\\t\\t
\\n\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tЗа \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tиз \\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\n\\n
\\n\\t
\\n\\t\\tOn sale\\n\\t\\t\\n\\t\\t\\tТовар был приобретен через наш сайт и выставлен покупателем на продажу.\\n\\t\\t\\tДанный функционал не предусматривает коммерческой выгоды,\\n\\t\\t\\tа лишь дает возможность перепродать не подошедший товар (например по размеру) по закупочной цене.\\n\\t\\t\\n\\t
\\n\\tТовар выставлен на продажу\\n
\\n\\n
\\n\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t... Читать далее\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tПонравилось\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tНет лайков\\n\\t\\t\\t\\t\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n
\\n\\n\\n\\n
\\n\\t\\n\\t
\\n\\t\\t\\n\\t\\t\\n\\t
\\n\\t\\n
\\n\\n\\n')}\\\">\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/reviews/common/templates/review-item.html\n// module id = QQLA\n// module chunks = 10 12 13","import {Likers, TYPE_COMMENT_LIKE} from \"./likers\";\nimport {UserInfo} from \"../../../../core/auth\";\nimport {MODAL_REVIEW_COMMENT_EDIT} from \"../../../../core/modals\";\nimport {highlightUrls} from \"core/utils/url\";\nimport {siteUrl} from \"core/utils/url\";\nimport {Notifier} from \"core/widgets/notifier\";\n\nexport class ReviewComment {\n /** @var {ReviewItem} */\n _parent = null;\n\n\tconstructor(data) {\n\t\tthis._data = data;\n\t\tthis._parent = data.parent;\n\t\tthis._author = (data.author instanceof UserInfo) ? data.author : new UserInfo(data.author);\n\n\t\tthis._data.best = ko.observable(this._data.best);\n\t\tthis._data.text = ko.observable(this._data.text);\n\t\tthis._data.date_human = ko.observable(this._data.date_human);\n this._likers = new Likers(this.id, data.likes, data.my_like, TYPE_COMMENT_LIKE);\n\n this.collapsed = ko.observable(true);\n\t\tthis.displayHtml = ko.pureComputed(() => highlightUrls(this._data.text()));\n\t}\n\n\t/** @return {int} */\n\tget id() {\n\t\treturn this._data.id;\n\t}\n\n\t/** @return {UserInfo} */\n\tget author() {\n\t\treturn this._author;\n\t}\n\n\t/** @return {string} Date in format Y-m-d H:i:s */\n\tget date() {\n\t\treturn this._data.date;\n\t}\n\n /** @return {bool} Relative date */\n get best() {\n return this._data.best;\n }\n\n\t/** @return {string} Relative date */\n\tget date_human() {\n\t\treturn this._data.date_human;\n\t}\n\n\t/** @return {bool} */\n\tget is_editable() {\n\t\treturn this._data.is_editable;\n\t}\n\n /** @return {Likers} */\n get likers() {\n return this._likers;\n }\n\n expand() {\n this.collapsed(false);\n }\n\n\tremove() {\n\t\tif(confirm('Вы действительно хотите удалить комментарий?')) {\n\t\t\tthis._parent.deleteComment(this);\n\t\t}\n\t}\n\n\tedit() {\n MODAL_REVIEW_COMMENT_EDIT.show(this.id, response => {\n \tif(response && response.success) {\n this._data.text(response.text);\n if(response.date) {\n this._data.date = response.date;\n this._data.date_human(response.date_human);\n }\n\t\t\t}\n\t\t});\n\t}\n\n\tmarkAsBest() {\n \t$.post(siteUrl('reviews/mark_comment_as_best'), {id: this.id}, null, 'json')\n\t\t\t.done(response => {\n\t\t\t\tif(response.success) {\n\t\t\t\t\tthis._parent.comments.forEach(comment => comment.best(false));\n\t\t\t\t\tthis.best(true);\n\t\t\t\t\tNotifier.success('Ответ отмечен как лучший');\n\t\t\t\t} else {\n\t\t\t\t\tNotifier.error();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.fail(Notifier.errorXHR);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/reviewcomment.js","import ko from \"lib/knockout\";\nimport Smart from \"smart-plurals\";\nimport {phrases} from './globals';\n\n/**\n * Renders phrase\n * @param {string} lang Phrase name\n * @param {object|null} [data]\n * @param {boolean} [asHtml] Whether to render variables decorated with span tag. Default is FALSE\n * @returns {string} Rendered phrase\n */\nexport function lang(lang, data = null, asHtml = false) {\n\tconst phrase = phrases()[lang];\n\tif (!phrase) return lang;\n\treturn tmpl(phrase, data, asHtml);\n}\n\n/**\n *\n * @param {string} template\n * @param {object|null} [data]\n * @param {boolean} [asHtml] Whether to render variables decorated with span tag. Default is TRUE\n * @returns {string}\n */\nexport function tmpl(template, data = null, asHtml = false) {\n\tif (!data) return template;\n\ttemplate = '' + template;\n\n\tlet result = template;\n\tfor (let key in data) {\n\t\tif (!data.hasOwnProperty(key)) continue;\n\t\tlet val = data[key];\n\n\t\t// unwrap value\n\t\tif (typeof val === 'function') {\n\t\t\tval = val();\n\t\t}\n\n\t\tconst keyParam = escapeRegExp(key);\n\t\tconst pluralRegex = new RegExp(`\\\\[([^\\\\]]+{${keyParam}}[^\\\\]]+)\\\\]`);\n\t\tconst m = pluralRegex.exec(template);\n\t\tif (m) {\n\t\t\tresult = result.replace(pluralRegex, pluralize(val, m[1], key));\n\t\t}\n\n\t\tconst replacement = asHtml ? '' + val + '' : val;\n\t\tresult = result.split('{' + key + '}').join(replacement);\n\t}\n\treturn result;\n}\n\n/**\n *\n * @param {number} count\n * @param {string} text\n * @param {string} varName\n * @param {string|number|null} varValue\n */\nexport function pluralize(count, text, varName = 'n', varValue = null) {\n\tconst parts = text.split('|');\n\tconst pluralRule = Smart.Plurals.getRule(LANG);\n\tlet part = pluralRule(count, parts);\n\tif (part === undefined) {\n\t\tpart = parts[0];\n\t}\n\tconst replacement = varValue !== undefined && varValue !== null ? varValue : count;\n\treturn part.split('{' + varName + '}').join(replacement);\n}\n\nfunction escapeRegExp(string) {\n\treturn string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n}\n\nko.bindingHandlers['lang'] = {\n\tinit: function() {\n\t\treturn {'controlsDescendantBindings': true};\n\t},\n\tupdate: function(element, valueAccessor) {\n\t\tconst params = ko.unwrap(valueAccessor());\n\t\tconst o = {\n\t\t\tname: '',\n\t\t\tdata: undefined,\n\t\t\thtml: undefined\n\t\t};\n\t\tif (!$.isPlainObject(params)) {\n\t\t\to.name = params;\n\t\t} else {\n\t\t\t$.extend(o, params);\n\t\t}\n\t\tconst args = [o.name, o.data, o.html];\n\t\tconst val = lang.apply(this, args);\n\t\tko.utils.setHtml(element, val);\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/lang.js","import {element} from \"./var\";\n\nconst _globals = {};\nconst _phrases = {};\n\n/**\n * Returns Globals object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object|*} Globals object if no key is provided, otherwise associated value\n */\nexport function globals(key = null, defaultValue = null) {\n\tconst g = window.globals || _globals;\n\treturn key !== null ? element(g, key, defaultValue) : g;\n}\n\n/**\n * Returns global Phrases object\n * @param {string|null} key Optional key to return\n * @param {*} defaultValue Default value for key\n * @return {object} Phrases object if no key is provided, otherwise associated value\n */\nexport function phrases(key = null, defaultValue = null) {\n\tconst g = globals('phrases') || _phrases;\n\treturn key !== null ? element(g, key, defaultValue) : g;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/globals.js","import {MODAL_LOGIN} from \"./modals\";\nimport {globals} from \"./utils/globals\";\nimport {GlobalEvents} from \"./events\";\n\nexport class UserInfo {\n\tconstructor(data) {\n\t\tthis._data = {...data};\n\t}\n\n\tget id() {\n\t\treturn +this._data['id'];\n\t}\n\n\tget roleId() {\n\t\treturn +this._data['role_id'];\n\t}\n\n\tget isCustomer() {\n\t\treturn !!this._data['is_customer'];\n\t}\n\n\tget url() {\n\t\treturn this._data['url'];\n\t}\n\n\tget shortName() {\n\t\treturn this._data['short_name'];\n\t}\n\n\tget fullName() {\n\t\treturn this._data['full_name'];\n\t}\n\n\tget blogName() {\n\t\treturn this._data['blog_name'];\n\t}\n\n\tget avatar() {\n\t\treturn this._data['avatar'];\n\t}\n\n\tget avatarFull() {\n\t\treturn this._data['avatar_full'];\n\t}\n\n\tget avatarExists() {\n\t\treturn !!this._data['avatar_exists'];\n\t}\n\n\tget level() {\n\t\treturn +this._data['level'];\n\t}\n}\n\nconst data = globals('userInfo');\n\n/**\n * Currently logged in user.\n * NULL means guest user.\n * @type {UserInfo}\n */\nexport let currentUser = data ? new UserInfo(data) : null;\n\n/**\n * Executes given callback with logged in user.\n * If user is logged in - callback will be called immediately.\n * If not logged in - modal window will be shown and callback will be called only if user logged in.\n * @param callback Accepts {@link UserInfo} instance\n */\nexport function ensureLoggedIn(callback) {\n\tif (window.IS_LOGGED_IN) {\n\t\tcallback(currentUser);\n\t}\n\telse {\n\t\tMODAL_LOGIN.show(result => {\n\t\t\tif (result) {\n\t\t\t\t// currentUser has been already updated in event handler below\n\t\t\t\tcallback(currentUser);\n\t\t\t}\n\t\t});\n\t}\n}\n\n// catch global event and update user info\nGlobalEvents.USER_LOGGED_IN.on((user) => {\n\tcurrentUser = new UserInfo(user);\n\tconsole.log('user logged in', currentUser);\n\n\t// update currentUser variable\n\t// (do it explicitly because the first line of current function does not update the global object)\n\twindow.zde.currentUser = currentUser;\n\n\t// update legacy variables\n\twindow.IS_LOGGED_IN = true;\n\twindow.USER_ID = currentUser.id;\n\twindow.USER_NAME = currentUser.fullName;\n\twindow.USER_BLOG_NAME = currentUser.blogName;\n\twindow.IS_CUSTOMER = currentUser.isCustomer;\n});\n\n\n\n// WEBPACK FOOTER //\n// ./core/auth.js","module.exports = \"\\n\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\t\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t\\t\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t
Извините :(
\\n\\t\\t\\t\\t
В данном разделе отзывов пока нет
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\n\\t\\n\\n\\n\\t\\n\\t
\\n\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\t\\n\\t\\t\\n\\t\\t\\t
\\n\\t\\t\\t\\t
Извините :(
\\n\\t\\t\\t\\t
В данном разделе отзывов пока нет
\\n\\t\\t\\t\\t
\\n\\t\\t\\t\\t\\t
\\n\\t\\t\\t\\t
\\n\\t\\t\\t
\\n\\t\\t\\n\\t\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/reviews/common/templates/review-list.html\n// module id = Vmcm\n// module chunks = 10 12 13","module.exports = _;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"_\"\n// module id = X0GP\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 28","/**\r\n * This script adds some additional methods to window.location\r\n * buildQuery Helper method for constricting query strings\r\n * query location.query manipulator\r\n * hashQuery location.hash manipulator\r\n */\r\n\r\nconst location = window.location;\r\n\r\nexport function buildUrl(pathname, queryString) {\r\n\tif (!queryString) {\r\n\t\treturn pathname;\r\n\t}\r\n\tqueryString = '' + queryString;\r\n\tif (!queryString.startsWith('?')) {\r\n\t\tqueryString = '?' + queryString;\r\n\t}\r\n\treturn pathname + queryString;\r\n}\r\n\r\n/**\r\n * Builds query string from given object\r\n * @param {object} queryData\r\n * @param {boolean} [numeric_prefix]\r\n * @return {string}\r\n */\r\nexport function buildQuery(queryData, numeric_prefix) {\r\n\tlet value, key, tmp = [];\r\n\tconst arg_separator = \"&\";\r\n\r\n\tfor (key in queryData) {\r\n\t\tif (!queryData.hasOwnProperty(key)) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvalue = queryData[key];\r\n\t\tif (numeric_prefix && !isNaN(key)) {\r\n\t\t\tkey = String(numeric_prefix) + key;\r\n\t\t}\r\n\t\tconst query = http_build_query_helper(urlencode(key), value, arg_separator);\r\n\t\tif (query !== '') {\r\n\t\t\ttmp.push(query);\r\n\t\t}\r\n\t}\r\n\r\n\treturn tmp.join(arg_separator);\r\n}\r\n\r\n/**\r\n * Appends given query data to given URL\r\n * @param {string} url\r\n * @param {object} queryData\r\n * @return {string} New url\r\n */\r\nexport function addQuery(url, queryData) {\r\n\tconst q = buildQuery(queryData);\r\n\turl = '' + url;\r\n\tconst m = /^([^?#]*)(\\?[^#]+)?(#.+)?$/.exec(url);\r\n\tif (!m) {\r\n\t\treturn url + '?' + q;\r\n\t}\r\n\treturn (m[1] || '') + (m[2] ? m[2] + '&' + q : '?' + q) + (m[3] || '');\r\n}\r\n\r\n/**\r\n * Appends given query data to given query string\r\n * @param {string} queryString\r\n * @param {object} queryData\r\n * @return {string} New query string\r\n */\r\nexport function appendQuery(queryString, queryData) {\r\n\tconst q = buildQuery(queryData);\r\n\tif (!q) {\r\n\t\treturn queryString;\r\n\t}\r\n\tconst str = '' + queryString;\r\n\treturn str.length > 0 ? str + '&' + q : q;\r\n}\r\n\r\n/**\r\n * Manipulates location.search as an object.
\r\n * With no arguments - returns the whole location.search object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.search with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.search object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\r\nexport function query(key, value, extend) {\r\n\treturn processQuery('search', key, value, extend);\r\n}\r\n\r\n/**\r\n * Manipulates location.hash as an object.
\r\n * With no arguments - returns the whole location.hash object.
\r\n * With only key argument - returns value for this key.
\r\n * With key and value arguments (or only key as object) - updates location.hash with new value\r\n * @param [key] The key to set. Can be an object, so the value is not needed\r\n * @param [value] The value to set\r\n * @param [extend] TRUE to extend current location.hash object, or FALSE to replace it. Default is TRUE\r\n * @returns {Object|String}\r\n */\r\nexport function hashQuery(key, value, extend) {\r\n\treturn processQuery('hash', key, value, extend);\r\n}\r\n\r\nfunction processQuery(type, key, value, extend) {\r\n\tlet queryData = decodeQueryString(location[type].substring(1));\r\n\tif (key !== undefined) {\r\n\t\tconst isObj = typeof key === 'object';\r\n\r\n\t\tif (value === undefined && !isObj) {\r\n\t\t\t// return value\r\n\t\t\treturn queryData[key] === undefined ? null : queryData[key];\r\n\t\t} else if (!isObj) {\r\n\t\t\tif (extend === undefined) extend = true;\r\n\r\n\t\t\t// set value to key\r\n\t\t\tconst k = key.toString();\r\n\t\t\tkey = {};\r\n\t\t\tkey[k] = value;\r\n\t\t}\r\n\r\n\t\tif (extend) {\r\n\t\t\t$.extend(queryData, key);\r\n\t\t} else {\r\n\t\t\tqueryData = key;\r\n\t\t}\r\n\r\n\t\t// clear data\r\n\t\tconst newData = {};\r\n\t\t$.each(queryData, function (key, value) {\r\n\t\t\tif (value) newData[key] = value;\r\n\t\t});\r\n\t\tqueryData = newData;\r\n\r\n\t\tlocation[type] = buildQuery(queryData);\r\n\t}\r\n\treturn queryData;\r\n}\r\n\r\n/**\r\n * Decodes query string like 'a=one&b=two&c[]=three' and returns an object\r\n * @param string\r\n * @return {Object}\r\n */\r\nexport function decodeQueryString(string) {\r\n\tlet glue1 = '=',\r\n\t\tglue2 = '&',\r\n\t\tarray = {}, // holds result\r\n\t\tarray2 = String(string).replace(/^&?([\\s\\S]*?)&?$/, '$1').split(glue2),\r\n\t\ti, j, chr, tmp, key, value, bracket, keys, evalStr,\r\n\t\tfixStr = function (str) {\r\n\t\t\treturn decodeURIComponent(str).replace(/([\\\\\"'])/g, '\\\\$1').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\+/g, ' ');\r\n\t\t};\r\n\r\n\tfor (i = 0; i < array2.length; i++) {\r\n\t\ttmp = array2[i].split(glue1);\r\n\t\tif (tmp.length < 2) {\r\n\t\t\ttmp = [tmp, ''];\r\n\t\t}\r\n\t\tkey = fixStr(tmp[0]);\r\n\t\tvalue = fixStr(tmp[1]);\r\n\t\twhile (key.charAt(0) === ' ') {\r\n\t\t\tkey = key.substr(1);\r\n\t\t}\r\n\t\tif (key.indexOf('\\0') !== -1) {\r\n\t\t\tkey = key.substr(0, key.indexOf('\\0'));\r\n\t\t}\r\n\t\tif (key && key.charAt(0) !== '[') {\r\n\t\t\tkeys = [];\r\n\t\t\tbracket = 0;\r\n\t\t\tfor (j = 0; j < key.length; j++) {\r\n\t\t\t\tif (key.charAt(j) === '[' && !bracket) {\r\n\t\t\t\t\tbracket = j + 1;\r\n\t\t\t\t} else if (key.charAt(j) === ']') {\r\n\t\t\t\t\tif (bracket) {\r\n\t\t\t\t\t\tif (!keys.length) {\r\n\t\t\t\t\t\t\tkeys.push(key.substr(0, bracket - 1));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tkeys.push(key.substr(bracket, j - bracket));\r\n\t\t\t\t\t\tbracket = 0;\r\n\t\t\t\t\t\tif (key.charAt(j + 1) !== '[') {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!keys.length) {\r\n\t\t\t\tkeys = [key];\r\n\t\t\t}\r\n\t\t\tfor (j = 0; j < keys[0].length; j++) {\r\n\t\t\t\tchr = keys[0].charAt(j);\r\n\t\t\t\tif (chr === ' ' || chr === '.' || chr === '[') {\r\n\t\t\t\t\tkeys[0] = keys[0].substr(0, j) + '_' + keys[0].substr(j + 1);\r\n\t\t\t\t}\r\n\t\t\t\tif (chr === '[') {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevalStr = 'array';\r\n\t\t\tfor (j = 0; j < keys.length; j++) {\r\n\t\t\t\tkey = keys[j];\r\n\t\t\t\tif ((key !== '' && key !== ' ') || j === 0) {\r\n\t\t\t\t\tkey = \"'\" + key + \"'\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tkey = eval(evalStr + '.push([]);') - 1;\r\n\t\t\t\t}\r\n\t\t\t\tevalStr += '[' + key + ']';\r\n\t\t\t\tif (j !== keys.length - 1 && eval('typeof ' + evalStr) === 'undefined') {\r\n\t\t\t\t\teval(evalStr + ' = [];');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tevalStr += \" = '\" + value + \"';\\n\";\r\n\t\t\teval(evalStr);\r\n\t\t}\r\n\t}\r\n\r\n\treturn array;\r\n}\r\n\r\nfunction urlencode(str) {\r\n\tstr = (str + '').toString();\r\n\treturn encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/\\*/g, '%2A').replace(/%20/g, '+');\r\n}\r\n\r\nfunction http_build_query_helper(key, val, arg_separator) {\r\n\tlet k, tmp = [];\r\n\tif (val === true) {\r\n\t\tval = \"1\";\r\n\t} else if (val === false) {\r\n\t\tval = \"0\";\r\n\t}\r\n\tif (val !== null && val !== undefined && val !== '') {\r\n\t\tif (typeof(val) === \"object\") {\r\n\t\t\tlet start = 0;\r\n\t\t\tfor (k in val) {\r\n\t\t\t\tif (!val.hasOwnProperty(k)) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (val[k] !== null) {\r\n\t\t\t\t\tlet sk, num = Number(k);\r\n\t\t\t\t\tif (!isNaN(num) && num - start === 0) {\r\n\t\t\t\t\t\tif (typeof(val[k]) === \"object\") {\r\n\t\t\t\t\t\t\tsk = num;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tsk = '';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tstart++;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsk = urlencode(k);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst part = http_build_query_helper(key + \"[\" + sk + \"]\", val[k], arg_separator);\r\n\t\t\t\t\tif (part) {\r\n\t\t\t\t\t\ttmp.push(part);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn tmp.join(arg_separator);\r\n\t\t} else if (typeof(val) !== \"function\") {\r\n\t\t\treturn key + \"=\" + urlencode(val);\r\n\t\t} else {\r\n\t\t\tthrow new Error('There was an error processing for http_build_query().');\r\n\t\t}\r\n\t} else {\r\n\t\treturn '';\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/location.js","/*\nThis file contains shortcuts for different kinds of modals\n */\n\nimport {showModalIframe} from \"./utils/modal\";\n\nexport const MODAL_LOGIN = {\n\t/**\n\t * @param {Function} onClose Callback accepts one parameter of type {object} - dialog's result\n\t * @return {ZDialog}\n\t */\n\tshow: function(onClose = null) {\n\t\treturn showModalIframe('login', null, {onClose});\n\t}\n};\n\nexport const MODAL_ASK_REDIRECT = {\n\t/**\n\t * @param {object} data\n\t * @return {ZDialog}\n\t */\n\tshow: function(data = null) {\n\t\treturn showModalIframe('ask_redirect', data, {\n\t\t\tmodal: true\n\t\t});\n\t}\n};\n\nexport const MODAL_CRITICAL_NEWS = {\n\t/**\n\t * @param {number} id News ID\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(id, onClose = null) {\n\t\treturn showModalIframe('critical_news', {id}, {\n\t\t\tmodal: true,\n\t\t\tonClose\n\t\t});\n\t}\n};\n\nexport const MODAL_REVIEW = {\n\t/**\n\t * @param {number} id\n\t * @param {number} index\n\t * @param {*} filter\n\t * @return {ZDialog}\n\t */\n\tshow: function(id, index = null, filter = null) {\n\t\treturn showModalIframe('review', {id, index, filter}, {fullscreen: true});\n\t}\n};\n\nexport const MODAL_REVIEW_EDIT = {\n /**\n * @param {number} id\n * @param {number} packageId\n * @param {Object} initialValues\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n */\n\tshow: function(id, packageId = null, initialValues = {}, onClose = null) {\n\t\tlet data = {\n\t\t\tid,\n\t\t\tpackage_id: packageId,\n\t\t\t...initialValues\n\t\t};\n\n\t\treturn showModalIframe('review_edit', data, {onClose});\n\t}\n};\n\nexport const MODAL_QUESTION_EDIT = {\n /**\n * @param {number} id\n * @param {Function} onClose\n * @return {ZDialog}\n */\n show: function(id, onClose = null) {\n return showModalIframe('question_edit', {id}, {onClose});\n }\n};\n\nexport const MODAL_REVIEW_COMMENT_EDIT = {\n /**\n * @param {number} id\n * @param {Function} onClose\n * @return {ZDialog}\n */\n show: function(id, onClose = null) {\n return showModalIframe('review_comment_edit', {id}, {width: 650, onClose});\n }\n};\n\nexport const MODAL_CREATE_COMPUTER_ORDER = {\n /**\n * @param {Function} onClose\n * @return {ZDialog}\n */\n\tshow: function(onClose = null) {\n return showModalIframe('create_computer_order', {}, {width: 780, onClose});\n }\n};\n\nexport const MODAL_FILIALIST_ORDER_PAGE = {\n\t/**\n\t * @param {number} id Package ID\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(id, onClose = null) {\n\t\treturn showModalIframe('filialist_order_page', {id}, {type: 'window', onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_EXCLUDE_FROM_PARCEL = {\n\t/**\n\t * @param {number} id Package ID\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(id, onClose = null) {\n\t\treturn showModalIframe('filialist_exclude_from_parcel', {id}, {width: 470, onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_FREE_ORDERS_EDIT = {\n /**\n * @param {number} customerId\n * @param {Function} onClose\n * @return {ZDialog}\n */\n show: function(customerId, onClose = null) {\n return showModalIframe(\n \t'filialist_free_orders_edit',\n\t\t\t{ customer_id: customerId },\n\t\t\t{ width: 1300, onClose }\n\t\t);\n }\n};\n\nexport const MODAL_FILIALIST_CREATE_TODO = {\n /**\n * @param {number} id\n * @param {string} type\n * @param {Function} onClose\n\t * @return {ZDialog}\n */\n\tshow: function(id, type, onClose = null) {\n\t\treturn showModalIframe('filialist_create_todo', {id, type}, {width: 600, onClose});\n }\n};\n\nexport const MODAL_FILIALIIST_REASSIGN_PACKAGES_TO_CUSTOMERS = {\n\t/**\n\t * @param {number[]} ids\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(ids, onClose = null) {\n\t\treturn showModalIframe('filialist_reassign_packages_to_customers', {ids},\n\t\t\t{width: 1800, onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_CHANGE_ASSIGNMENT_CUSTOMER = {\n\t/**\n\t * @param {Function} onClose\n\t * @returns {ZDialog}\n\t */\n\tshow: function(onClose = null) {\n\t\treturn showModalIframe('filialist_change_assignment_customer', null,\n\t\t\t{width: 900, onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_EDIT_ASSIGNMENT = {\n\t/**\n\t * @param {number} id\n\t * @param {Function} onClose\n\t * @returns {ZDialog}\n\t */\n\tshow: function (id, onClose = null) {\n\t\treturn showModalIframe('filialist_edit_assignment', {id}, {width: 500, onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_GET_ASSIGNMENT_MEEST_DATA = {\n\t/**\n\t * @param {string} id\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function (id, onClose = null) {\n\t\treturn showModalIframe(\n\t\t\t'filialist_get_assignment_meest_data',\n\t\t\t{ id },\n\t\t\t{ width: 450, onClose }\n\t\t);\n\t}\n};\n\nexport const MODAL_FILIALIST_BATCH_PAYMENT = {\n /**\n * @param {array} ids\n\t * $param {string} account\n * @param {number} rate\n * @param {Function} onClose\n * @return {ZDialog}\n */\n show: function(ids, account, rate, onClose = null) {\n return showModalIframe('filialist_batch_payment', {ids, account, rate}, {width: 400, onClose});\n }\n};\n\nexport const MODAL_FILIALIST_SET_PACKAGE_KINDS = {\n\t/**\n\t * @param {number[]} ids\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(ids, onClose = null) {\n\t\treturn showModalIframe('filialist_set_package_kinds', {ids},\n\t\t\t{width: 900, onClose});\n\t}\n};\n\nexport const MODAL_FILIALIST_SET_MEEST_ADDRESS_ALIASES = {\n\t/**\n\t * @param {string[]} cities\n\t * @param {Object[]} streets\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function (cities, streets, onClose = null) {\n\t\tconst data = encodeURIComponent(JSON.stringify({ cities, streets }));\n\t\treturn showModalIframe('filialist_set_meest_address_aliases', { data }, { onClose });\n\t}\n};\n\nexport const MODAL_ADMIN_REPLENISH_BALANCE = {\n\t/**\n\t * @param {number} pendingReplenihmentId\n\t * @param {number} boundBankTransactionId\n\t * @param {number} suggestionBondId\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow(pendingReplenihmentId, boundBankTransactionId = null, suggestionBondId = null, onClose = null) {\n\t\tshowModalIframe('admin_replenish_balance', {\n\t\t\tpending_replenihment_id: pendingReplenihmentId,\n\t\t\tbound_bank_transaction_id: boundBankTransactionId,\n\t\t\tsuggestion_bond_id: suggestionBondId\n\t\t}, {onClose});\n\t}\n};\n\nexport const MODAL_ADMIN_BATCH_PAYMENT = {\n\t/**\n\t * @param {string} accountSource\n\t * @param {string} accountTarget\n\t * @param {number} amount\n\t * @param {number} rate\n\t * @param {number[]} groupIds\n\t * @param {number[]} boundBankTransactionIds\n\t * @param {number} suggestionBondId\n\t * @param {Function} onClose\n\t */\n\tshow(accountSource, accountTarget, amount, rate, groupIds,\n\t\t boundBankTransactionIds, suggestionBondId = null, onClose = null) {\n\t\tshowModalIframe(\n\t\t\t'admin_batch_payment',\n\t\t\t{\n\t\t\t\taccount_source: accountSource,\n\t\t\t\taccount_target: accountTarget,\n\t\t\t\tamount,\n\t\t\t\trate,\n\t\t\t\tgroup_ids: groupIds,\n\t\t\t\tbound_bank_transaction_ids: boundBankTransactionIds,\n\t\t\t\tsuggestion_bond_id: suggestionBondId\n\t\t\t},\n\t\t\t{width: 500, onClose});\n\t}\n};\n\nexport const MODAL_ADMIN_IMPORT_BANK_STATEMENT = {\n\t/**\n\t * @param {Function} onClose\n\t * @returns {ZDialog}\n\t */\n\tshow(onClose = null) {\n\t\treturn showModalIframe('admin_import_bank_statement', {}, {width: 800, onClose})\n\t}\n};\n\nexport const MODAL_ADMIN_VALIDATE_INVOICE_CSV = {\n\t/**\n\t * @param {string | null} name\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow(name = null, onClose = null) {\n\t\treturn showModalIframe(\n\t\t\t'admin_validate_invoice_csv',\n\t\t\t{ name },\n\t\t\t{ width: 500, onClose }\n\t\t);\n\t}\n};\n\nexport const MODAL_ADMIN_SHOP_BANK_STATEMENT_KEYWORDS = {\n\t/**\n\t * @returns {ZDialog}\n\t */\n\tshow() {\n\t\treturn showModalIframe('admin_shop_bank_statement_keywords', {}, {width: 1200});\n\t}\n};\n\nexport const MODAL_PACKAGE_INFO = {\n\t/**\n\t * @param {number} id Package ID\n\t * @param {Function} onClose\n\t * @return {ZDialog}\n\t */\n\tshow: function(id, onClose = null) {\n\t\treturn showModalIframe('package_info', {id}, {onClose});\n\t}\n};\n\nexport const MODAL_SELECT_SHOP_CATEGORY = {\n\tshow: function(onClose) {\n\t\treturn showModalIframe('select_shop_category', {}, {width: 550, onClose});\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./core/modals.js","/**\n * @return {boolean} TRUE if current window is an iframe window\n */\nexport function checkIsIframe() {\n\treturn window !== window.top;\n}\n\nconst _isMobile = ('orientation' in window) || (navigator.userAgent.indexOf('IEMobile') !== -1);\nconst _isTouchScreen = ('ontouchstart' in window || navigator.msMaxTouchPoints);\n\nexport function isMobile() {\n\treturn _isMobile;\n}\n\nexport function isTouchScreen() {\n\treturn _isTouchScreen;\n}\n\nexport const WEBP_FEATURES = {\n\tLOSSY: 'lossy',\n\tLOSSLESS: 'lossless',\n\tALPHA: 'alpha',\n\tANIMATION: 'animation'\n};\n\nexport function isWebpFeatureSupported(feature) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!Object.values(WEBP_FEATURES).includes(feature)) {\n\t\t\treject('Invalid feature name');\n\t\t\treturn;\n\t\t}\n\n\t\tconst kTestImages = {\n\t\t\tlossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\n\t\t\tlossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\n\t\t\talpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\n\t\t\tanimation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\n\t\t};\n\t\tconst img = new Image();\n\t\timg.onload = () => {\n\t\t\tconst result = (img.width > 0) && (img.height > 0);\n\t\t\tresolve(result);\n\t\t};\n\t\timg.onerror = function () {\n\t\t\tresolve(false);\n\t\t};\n\t\timg.src = \"data:image/webp;base64,\" + kTestImages[feature];\n\t});\n}\n\n/*export class MobileDetect {\n\tstatic Android = navigator.userAgent.match(/Android/i);\n\tstatic BlackBerry = navigator.userAgent.match(/BlackBerry/i);\n\tstatic iOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);\n\tstatic Opera = navigator.userAgent.match(/Opera Mini/i);\n\tstatic Windows = navigator.userAgent.match(/IEMobile/i);\n\tstatic Any = MobileDetect.Android || MobileDetect.BlackBerry || MobileDetect.iOS || MobileDetect.Opera || MobileDetect.Windows;\n}*/\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/utils.js","import {ReviewList} from \"./reviewlist\";\nimport {ReviewItemMobile} from \"./reviewitemmobile\";\n\nexport class ReviewListMobile extends ReviewList{\n\t/**\n * @param {array} items\n\t * @return {array}\n * @private\n */\n _prepareItems(items) {\n \treturn items.map(r => {\n r.parent = this;\n return new ReviewItemMobile(r);\n });\n\t}\n\n /**\n * @param {ReviewItem} item\n * @private\n */\n _handleItemClick(item) {\n if(!this.isDetails) {\n window.open(item.data().url, '_blank');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/reviewlistmobile.js","import _ from \"lib/underscore\";\n\n/**\n * Is a given variable defined and has value?\n * @param {*} val\n * @return {boolean} false if given value is undefined or null, otherwise true\n */\nexport function isset(val) {\n\treturn !_.isUndefined(val) && !_.isNull(val);\n}\n\n/**\n * Returns object's property or array's index if exists and default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function element(object, key, defaultValue = null) {\n\treturn _.has(object, key) ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or default value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function elementOrDefault(object, key, defaultValue = null) {\n\treturn _.has(object, key) && object[key] !== null ? object[key] : defaultValue;\n}\n\n/**\n * Returns object's property or array's index if exists and is not null or \"—\" value otherwise\n * @param {object|array} object Inspected object or array\n * @param {string|number} key Property name for objects, numeric index for arrays\n * @param {*} defaultValue\n * @return {*}\n */\nexport function elementOrDash(object, key) {\n\treturn elementOrDefault(object, key, '—');\n}\n\n/**\n * Returns value if it's not undefined or null, otherwise defaultValue\n * @param {*} value\n * @param {*} defaultValue\n * @return {*}\n */\nexport function orDefault(value, defaultValue = null) {\n\treturn isset(value) ? value : defaultValue;\n}\n\n/**\n * Converts given value to number using standard javascript converter: +value\n * @param {*} value Input value\n * @param {number} defaultValue\n * @return {number} Either converted value if it's not NaN and default value otherwise\n */\nexport function asNumber(value, defaultValue = 0) {\n\tvalue = +value;\n\treturn !isNaN(value) ? value : 0;\n}\n\n/**\n * Converts given value to boolean using such algo:\n * - string \"0\" results in false;\n * - string \"false\" results in false;\n * - string \"null\" results in false;\n * - empty object results in false;\n * - empty array results in false;\n * - other values go through standard javascript converter: !!value\n * @param {*} value Input value\n * @return {boolean} Converted value\n */\nexport function asBoolean(value) {\n\tif (_.isBoolean(value)) return value;\n\tif (value === '0') return false;\n\tif (value === 'false') return false;\n\tif (value === 'null') return false;\n\tif (_.isObject(value) && _.isEmpty(value)) return false;\n\tif (_.isArray(value) && _.isEmpty(value)) return false;\n\treturn !!value;\n}\n\n/**\n * Converts given value to string using standard javascript converter: ''+value\n * except that null and undefined values will be converted to empty string.\n * @param {*} value Input value\n * @return {string} Converted value\n */\nexport function asString(value) {\n\tif (value === null || _.isUndefined(value)) return '';\n\treturn '' + value;\n}\n\n/**\n * Converts given value to string using {@link asString()} and trims whitespace characters.\n * @param {string|*} value\n * @return {string} Converted and trimmed value\n */\nexport function trim(value) {\n\treturn asString(value).trim();\n}\n\n/**\n * If input value is an array - it will be returned as is.\n * In other cases input value will be converted to string and either split with given delimiter\n * or just returned as a single array element.\n * @param {array|string} value\n * @param {string} delimiter\n * @return {array}\n */\nexport function asArray(value, delimiter = '') {\n\tif (!value) return [];\n\tif (_.isArray(value)) return value;\n\tvalue = asString(value);\n\treturn delimiter ? value.split(delimiter) : [value];\n}\n\n\n// WEBPACK FOOTER //\n// ./core/utils/var.js","import './dialog.less'\nimport _ from \"lib/underscore\";\nimport ko from \"lib/knockout\";\nimport {newLogger} from \"../utils/logger\";\nimport {checkIsIframe, isMobile} from \"../utils/utils\";\nimport {asString} from \"../utils/var\";\n\nconst logger = newLogger('ZDialog');\n\n/**\n * Creates new dialog with IFrame with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nexport function createIframeDialog(url, options = null) {\n\treturn newDialog({content: url, type: 'iframe', __width: 800, ...options});\n}\n\n/**\n * Creates new dialog instance.\n * autoOpen option is false by default, so you should either call open() method\n * or override autoOpen option\n * @param {*} content HTML content. Can be either valid HTML string, or DOM node, or jQuery object\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog} Dialog instance\n */\nexport function createHtmlDialog(content, options = null) {\n\treturn newDialog({content, type: 'html', showCloseButton: true, ...options});\n}\n\n/**\n * The same as {@link createHtmlDialog()} but with autoOpen enabled\n * @param {*} content HTML content\n * @param {object} options ZDialog options\n * @return {ZDialog} Dialog instance\n */\nexport function openHtmlDialog(content, options = null) {\n\treturn createHtmlDialog(content, {autoOpen: true, ...options});\n}\n\n/**\n * Creates new dialog as new window with given url\n * @param {string} url IFrame url\n * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n * @return {ZDialog}\n */\nexport function createWindowDialog(url, options = null) {\n\treturn newDialog({content: url, type: 'window', ...options});\n}\n\n// add some helper functions to jQuery\n$.extend($.fn, {\n\t/**\n\t * Calls {@link openHtmlDialog()} with source element as content\n\t * @param {object} options ZDialog Options. See {@link ZDialog.defaults}\n\t */\n\tzdialog: function (options = null) {\n\t\tconst $el = $(this);\n\t\tconst $placeholder = $('
').insertAfter($el);\n\t\tconst isInDom = $el.closest(document.documentElement);\n\t\tconst isVisible = $el.css('display') != 'none';\n\t\tif (isInDom) {\n\t\t\t$el.detach();\n\t\t}\n\t\tif (!isVisible) {\n\t\t\t$el.show();\n\t\t}\n\t\tconst dialog = createHtmlDialog($el, options);\n\t\tdialog.onBeforeClose(() => {\n\t\t\t$el.detach();\n\t\t});\n\t\tdialog.onClose(() => {\n\t\t\tif (isInDom) {\n\t\t\t\t$el.insertAfter($placeholder);\n\t\t\t}\n\t\t\tif (!isVisible) {\n\t\t\t\t$el.hide();\n\t\t\t}\n\t\t\t$placeholder.remove();\n\t\t});\n\t\tdialog.open();\n\t\t$el.data('zdialogInstance', dialog);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Returns ZDialog instance for given element (if the dialog was created with {@link jQuery.fn.zdialog} function)\n\t * @return {ZDialog}\n\t */\n\tzdialogInstance: function () {\n\t\treturn this.data('zdialogInstance');\n\t}\n});\n\n// FOR TESTING\n/*import {MODAL_ASK_REDIRECT, MODAL_CRITICAL_NEWS, MODAL_LOGIN, MODAL_PACKAGE_INFO, MODAL_REVIEW} from \"../modals\";\n$('.logo').click(function(e) {\n\te.preventDefault();\n\tconst queue = [];\n\tconst showNext = () => {\n\t\tif (queue.length > 0) {\n\t\t\tqueue.shift()();\n\t\t}\n\t};\n\tconst onOpen = () => {};\n\t// queue.push(() => MODAL_REVIEW.show(104625).onOpen(showNext));\n\t// queue.push(() => MODAL_LOGIN.show().onOpen(showNext));\n\t// queue.push(() => MODAL_PACKAGE_INFO.show(1803110691).onOpen(showNext));\n\t// queue.push(() => MODAL_ASK_REDIRECT.show().onOpen(showNext));\n\t// queue.push(() => MODAL_CRITICAL_NEWS.show(312).onOpen(showNext));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
').onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tqueue.push(() => openHtmlDialog('
', {fullscreen: true}).onOpen(onOpen));\n\tshowNext();\n\n\t$(document).on('click', '.zdialog-html > div', showNext);\n});*/\n\n/**\n * @param {object} options\n * @return {ZDialog}\n */\nlet newDialog = function (options) {\n\treturn new ZDialog(options);\n};\n\n// force use newDialog function from top window\nconst key = '__zdialog_newDialog';\nif (checkIsIframe()) {\n\tnewDialog = window.top[key];\n} else {\n\twindow.top[key] = newDialog;\n}\n\n/**\n * Dialog class\n */\nclass ZDialog {\n\tstatic defaults = {\n\t\tname: '',\n\t\ttype: 'iframe', // iframe, html\n\t\tcontent: '',\n\t\ttitle: '',\n\t\tbuttons: [],\n\t\tmodal: false,\n\t\tautoOpen: false,\n\t\tshowCloseButton: false,\n\n\t\twidth: '',\n\t\theight: '',\n\t\tfullscreen: false,\n\t\tcssClass: '',\n\n\t\tcustom: null,\n\n\t\t//events\n\t\tonOpen: null,\n\t\tonClose: null\n\t};\n\n\t// options\n\t_width = ko.observable();\n\t_height = ko.observable();\n\t_isModal = ko.observable(false);\n\t_isCloseBtnVisible = ko.observable(false);\n\n\t_$el;\n\t_$iframe;\n\t_wnd;\n\t_isLoading = ko.observable(false);\n\t_isOpened = ko.observable(false);\n\t_isClosed = ko.observable(false);\n\t_isHidden = ko.observable(false);\n\t_contentHeight = ko.observable(0);\n\t_iframeHeight = ko.observable(0);\n\t/** @type {HeightWatcher} */\n\t_heightWatcher;\n\t_opened = false;\n\t/** @type {JQuery.Callbacks} */\n\t_onOpen = $.Callbacks();\n\t/** @type {JQuery.Callbacks} */\n\t_onClose = $.Callbacks();\n\t/** @type {JQuery.Callbacks} */\n\t_onBeforeClose = $.Callbacks();\n\t_result = null;\n\n\tconstructor(options) {\n\t\tconst o = {\n\t\t\t...ZDialog.defaults,\n\t\t\t...options\n\t\t};\n\n\t\tthis._name = o.name;\n\t\tthis._o = o;\n\t\tthis._isModal(!!o.modal);\n\t\tthis._isCloseBtnVisible(!!o.showCloseButton);\n\t\tthis._width(o.width);\n\t\tthis._height(o.height);\n\n\t\tif (o.onOpen) {\n\t\t\tthis._onOpen.add(o.onOpen);\n\t\t}\n\t\tif (o.onClose) {\n\t\t\tthis._onClose.add(o.onClose);\n\t\t}\n\n\t\tif (o.autoOpen) {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\topen() {\n\t\tif (this.isOpened) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isClosed(false);\n\t\tthis._isHidden(false);\n\t\tthis._result = null;\n\t\tif (this.type === 'window') {\n\t\t\tthis._wnd = window.open(this.content);\n\t\t\tthis._wnd.addEventListener('DOMContentLoaded', () => this._handleWindowReady());\n\t\t\tthis._wnd.onbeforeunload = () => {\n\t\t\t\tif (!this.isClosed) {\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis._isLoading(true);\n\t\t} else if (!dialogManager.isRegistered(this)) {\n\t\t\tif (this.isFullScreen) {\n\t\t\t\tthis._width('');\n\t\t\t\tthis._height('');\n\t\t\t\tthis._contentHeight('');\n\t\t\t\tthis._iframeHeight('');\n\t\t\t}\n\t\t\tif (this.type === 'iframe') {\n\t\t\t\tthis._isLoading(true);\n\t\t\t\tif (!this.isAutoHeight) {\n\t\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\t\tthis._iframeHeight(this.height);\n\t\t\t\t} else {\n\t\t\t\t\tthis._contentHeight('');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis._contentHeight(this.height);\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t\t}\n\t\t\tdialogManager.register(this);\n\t\t} else if (this._isHidden()) {\n\t\t\tdialogManager.show(this);\n\t\t}\n\t}\n\n\tclose() {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._onBeforeClose.fireWith(this, [this._result]);\n\t\tthis._isOpened(false);\n\t\tthis._isHidden(false);\n\t\tthis._isClosed(true);\n\t\tif (this.type === 'window') {\n\t\t\tif (this._wnd) {\n\t\t\t\tthis._wnd.close();\n\t\t\t\twindow.top.focus();\n\t\t\t\tthis._wnd = null;\n\t\t\t\tsetTimeout(() => this._onClose.fireWith(this, [this._result]), 0);\n\t\t\t}\n\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\tif (this._heightWatcher) {\n\t\t\t\tthis._heightWatcher.off();\n\t\t\t}\n\t\t\tdialogManager.unregister(this);\n\t\t\tsetTimeout(() => this._onClose.fireWith(this, [this._result]), 0);\n\t\t}\n\t}\n\n\thide() {\n\t\tif (this.type === 'window') {\n\t\t\tlogger.error('Method is not supported for current dialog type');\n\t\t} else if (dialogManager.isRegistered(this)) {\n\t\t\tthis._isOpened(false);\n\t\t\tthis._isHidden(true);\n\t\t\tdialogManager.hide(this);\n\t\t}\n\t}\n\n\tcloseWithResult(result) {\n\t\tthis.result = result;\n\t\tthis.close();\n\t}\n\n\tupdatePosition() {\n\t\tif (this.type === 'iframe') {\n\t\t\tthis._contentHeight(this.iframeHeight);\n\t\t}\n\t}\n\n\t/** @return {string} */\n\tget name() {\n\t\treturn this._name;\n\t}\n\n\t/** @return {string} */\n\tget type() {\n\t\treturn this._o.type;\n\t}\n\n\t/** @return {string} */\n\tget content() {\n\t\treturn this._o.content;\n\t}\n\n\t/** @return {string} */\n\tget title() {\n\t\treturn this._o.title;\n\t}\n\n\t/** @return {number} */\n\tget width() {\n\t\treturn this._width();\n\t}\n\n\t/** @return {number|string} */\n\tget height() {\n\t\treturn this._height();\n\t}\n\n\t/** @return {number|string} */\n\tget minWidth() {\n\t\treturn this._o.minWidth;\n\t}\n\n\t/** @return {number|string} */\n\tget maxWidth() {\n\t\treturn this._o.maxWidth;\n\t}\n\n\t/** @return {number|string} */\n\tget contentWidth() {\n\t\treturn this._width();\n\t}\n\n\t/** @return {number|string} */\n\tget contentHeight() {\n\t\treturn this._contentHeight();\n\t}\n\n\t/** @return {number} */\n\tget iframeHeight() {\n\t\treturn this._iframeHeight();\n\t}\n\n\t/** @return {boolean} */\n\tget isLoading() {\n\t\treturn this._isLoading();\n\t}\n\n\t/** @return {boolean} */\n\tget isOpened() {\n\t\treturn this._isOpened();\n\t}\n\n\t/** @return {boolean} */\n\tget isClosed() {\n\t\treturn this._isClosed();\n\t}\n\n\t/** @return {boolean} */\n\tget isHidden() {\n\t\treturn this._isHidden();\n\t}\n\n\t/** @return {boolean} */\n\tget isModal() {\n\t\treturn this._isModal();\n\t}\n\n\t/** @return {boolean} */\n\tget isCloseBtnVisible() {\n\t\treturn this._isCloseBtnVisible();\n\t}\n\n\t/** @type {boolean} */\n\tget isFullScreen() {\n\t\treturn this._o.fullscreen;\n\t}\n\n\t/** @type {boolean} */\n\tget isAutoHeight() {\n\t\treturn asString(this.height) === '' || this.height === 'auto';\n\t}\n\n\t/** @return {*} */\n\tget result() {\n\t\treturn this._result;\n\t}\n\n\t/**\n\t * @param {*} value\n\t */\n\tset result(value) {\n\t\tthis._result = value;\n\t}\n\n\t/**\n\t * @return {*}\n\t */\n\tget customData() {\n\t\treturn this._o.custom;\n\t}\n\n\t/**\n\t * @return {string}\n\t */\n\tget cssClass() {\n\t\treturn asString(this._o.cssClass);\n\t}\n\n\thandleIframeLoad(item, e) {\n\t\tlogger.log('loaded', e);\n\t\tthis._isLoading(false);\n\n\t\tif (!this.isFullScreen && this.isAutoHeight) {\n\t\t\tthis._heightWatcher = new HeightWatcher(e.target, (newHeight) => {\n\t\t\t\tlogger.log(`new height = ${newHeight}`);\n\t\t\t\tthis._iframeHeight(newHeight);\n\t\t\t\tif (!this.contentHeight) {\n\t\t\t\t\tthis._contentHeight(newHeight);\n\t\t\t\t}\n\t\t\t\tthis._isOpened(true);\n\t\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tthis._isOpened(true);\n\t\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t\t}\n\n\t\t// inject this instance to iframe\n\t\te.target.contentWindow.dialogInstance = this;\n\n\t\t// apply special classes\n\t\t$(e.target.contentWindow.document.body)\n\t\t\t.toggleClass('zdialog-layout-modal', this.isModal)\n\t\t\t.toggleClass('zdialog-layout-autoheight', this.isAutoHeight)\n\t\t\t.toggleClass('zdialog-layout-fullscreen', this.isFullScreen);\n\n\t\t// triger event inside iframe\n e.target.contentWindow.$(e.target.contentWindow.document).trigger('zdialog-shown');\n\t}\n\n\t_handleWindowReady(e) {\n\t\tlogger.log('loaded', e);\n\t\tthis._isLoading(false);\n\t\tthis._isOpened(true);\n\n\t\t// inject this instance to iframe\n\t\tthis._wnd.dialogInstance = this;\n\t\t$(this._wnd.document.body).addClass('zdialog-layout-window');\n\n\t\tsetTimeout(() => this._onOpen.fireWith(this), 0);\n\t}\n\n\thandleCloseClick(item, e) {\n\t\tconst $target = $(e.target);\n\t\tif ($target.is('[data-dialog-result]')) {\n\t\t\tthis.result = $target.data('dialogResult');\n\t\t}\n\t\tthis.close();\n\t}\n\n\thandleBackdropClick() {\n\t\tif (dialogManager.isTopmost(this) && !this.isModal) {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tonOpen(callback) {\n\t\tthis._onOpen.add(callback);\n\t}\n\n\toffOpen(callback) {\n\t\tthis._onOpen.remove(callback);\n\t}\n\n\tonClose(callback) {\n\t\tthis._onClose.add(callback);\n\t}\n\n\toffClose(callback) {\n\t\tthis._onClose.remove(callback);\n\t}\n\n\tonBeforeClose(callback) {\n\t\tthis._onBeforeClose.add(callback);\n\t}\n\n\toffBeforeClose(callback) {\n\t\tthis._onBeforeClose.remove(callback);\n\t}\n}\n\nclass DialogManager {\n\t_counter = 0;\n\t/** @type {KnockoutObservableArray} */\n\t_dialogs = ko.observableArray([]);\n\t_$el;\n\t_isClosing = ko.observable(false);\n\t_initialized = false;\n\t_timeout;\n\n\t_wrapper = new WindowWrapper();\n\n\tconstructor() {\n\t\tthis._$html = $('html');\n\t\tthis._$body = $('body');\n\n\t\tthis._isLoading = ko.pureComputed(() => {\n\t\t return _.any(this.dialogs, d => d.isLoading);\n\t\t});\n\n\t\tthis._visibleDialogs = ko.pureComputed(() => {\n\t\t return this.dialogs.filter(d => !d.isHidden);\n\t\t});\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tregister(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dialogs.push(dialog);\n\t\tthis._checkMarkupAfterOpen();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tunregister(dialog) {\n\t\tif (this._dialogs.remove(dialog).length === 0) {\n\t\t\t// nothing has been removed\n\t\t\treturn;\n\t\t}\n\t\tthis._checkMarkupAfterClose();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\thide(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\tthis._checkMarkupAfterClose();\n\t\t}\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tshow(dialog) {\n\t\tif (this.isRegistered(dialog)) {\n\t\t\tthis._checkMarkupAfterOpen();\n\t\t}\n\t}\n\n\t_checkMarkupAfterOpen() {\n\t\tif (this._isClosing()) {\n\t\t\tclearTimeout(this._timeout);\n\t\t\tthis._timeout = null;\n\t\t\tthis._isClosing(false);\n\t\t} else if (this.visibleDialogs.length === 1 && !this._initialized) {\n\t\t\tthis._wrapper.on();\n\n\t\t\tif (!this._$el) {\n\t\t\t\tthis._$el = $(`
`);\n\t\t\t\tko.applyBindings(this, this._$el[0]);\n\t\t\t\tthis._$el.appendTo('body');\n\t\t\t} else {\n\t\t\t\tthis._$el.show();\n\t\t\t}\n\t\t\tthis._initialized = true;\n\t\t}\n\t}\n\n\t_checkMarkupAfterClose() {\n\t\tif (!this._isClosing() && this.visibleDialogs.length === 0 && this._initialized) {\n\t\t\t// no dialogs left\n\t\t\tthis._isClosing(true);\n\t\t\tthis._timeout = setTimeout(() => {\n\t\t\t\tthis._wrapper.off();\n\t\t\t\t// logger.log('remove container');\n\t\t\t\tthis._$el.remove();\n\t\t\t\tko.cleanNode(this._$el[0]);\n this._$el = null;\n\t\t\t\tthis._initialized = false;\n\t\t\t\tthis._isClosing(false);\n\t\t\t}, 300);\n\t\t}\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t * @return {boolean}\n\t */\n\tisRegistered(dialog) {\n\t\treturn _.contains(this.dialogs, dialog);\n\t}\n\n\thandleBeforeRemove(node) {\n\t\tconst $node = $(node);\n\t\t$node.remove();\n\t\t/*if (node.nodeType === 3) {\n\t\t\t$node.remove();\n\t\t\treturn;\n\t\t}\n\t\t$node.addClass('zdialog-closing');\n\t\tsetTimeout(() => $node.remove(), 300);*/\n\t}\n\n\t/** @return {ZDialog[]} */\n\tget dialogs() {\n\t\treturn this._dialogs();\n\t}\n\n\t/** @return {ZDialog[]} */\n\tget visibleDialogs() {\n\t\treturn this._visibleDialogs();\n\t}\n\n\t/** @return {boolean} */\n\tget isLoading() {\n\t\treturn this._isLoading();\n\t}\n\n\t/** @return {boolean} */\n\tget isClosing() {\n\t\treturn this._isClosing();\n\t}\n\n\tgetTopmostDialog() {\n\t\treturn _.last(this.visibleDialogs.filter(d => !d.isLoading));\n\t}\n\n\tisTopmost(dialog) {\n\t\treturn dialog === this.getTopmostDialog();\n\t}\n\n\t/**\n\t * @param {ZDialog} dialog\n\t */\n\tgetDialogClass(dialog) {\n\t\tconst css = [];\n\t\tif (dialog.isModal) {\n\t\t\tcss.push('zdialog-modal');\n\t\t}\n\t\tif (dialog.isFullScreen) {\n\t\t\tcss.push('zdialog-fullscreen');\n\t\t}\n\t\tif (this.isTopmost(dialog)) {\n\t\t\tcss.push('zdialog-topmost');\n\t\t} else if (this.visibleDialogs.length > 1) {\n\t\t\tcss.push('zdialog-overlapped');\n\t\t}\n\t\tif (dialog.isLoading) {\n\t\t\tcss.push('zdialog-loading');\n\t\t}\n\t\tif (dialog.isOpened) {\n\t\t\tcss.push('zdialog-opened');\n\t\t}\n\t\tif (dialog.isHidden) {\n\t\t\tcss.push('zdialog-hidden');\n\t\t}\n\t\tif (dialog.name) {\n\t\t\tcss.push('zdialog-instance-' + dialog.name);\n\t\t}\n\t\tif (dialog.cssClass) {\n\t\t\tcss.push(dialog.cssClass);\n\t\t}\n\t\treturn css.join(' ');\n\t}\n}\n\nclass HeightWatcher {\n\t_currHeight = 0;\n\t_event = $.Callbacks();\n\n\tconstructor($iframe, callback) {\n\t\tthis._event.add(callback);\n\t\tthis._ibody = $($iframe)[0].contentWindow.document.body;\n // this.updateHeight();\n\t\tsetTimeout(() => {\n\t\t\tthis.updateHeight();\n\t\t\tthis._interval = setInterval(() => this.updateHeight(), 50);\n\t\t}, 0);\n\t}\n\n\tupdateHeight() {\n\t\t// const newHeight = this._ibody.offsetHeight;\n\t\tconst newHeight = this.getHeight();\n\t\tif (newHeight !== this._currHeight) {\n\t\t\tthis._currHeight = newHeight;\n\t\t\tthis._event.fire(newHeight);\n\t\t}\n\t}\n\n\tgetHeight() {\n\t\tlet height = this._ibody.scrollHeight;\n\t\t$(this._ibody).find('iframe:visible').filter(function () {\n\t\t\treturn $(this).css('visibility') !== 'hidden';\n\t\t}).each(function() {\n\t\t\tlet iHeight = $(this).height();\n\t\t\tif (iHeight > height) {\n\t\t\t\theight = iHeight;\n\t\t\t}\n\t\t});\n\t\treturn height;\n\t}\n\n\toff() {\n\t\tclearInterval(this._interval);\n\t\tthis._event.empty();\n\t}\n}\n\nclass WindowWrapper {\n\t_$wnd = $(window);\n\t_$html = $('html');\n\t_$head = $('head');\n\t_scrollTop = 0;\n\t_scrollLeft = 0;\n\n\tconstructor() {\n\t\tthis._$scrollBarStyle = $(``).appendTo(this._$head);\n\t\tthis._$positionStyle = $(``).appendTo(this._$head);\n\t\t// this._useFixedLayout = /(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t\tthis._useFixedLayout = isMobile();///(iPod|iPhone|iPad)/.test(navigator.userAgent);\n\t}\n\n\ton() {\n\t\tif (this._useFixedLayout) {\n\t\t\tthis._scrollTop = this._$wnd.scrollTop();\n\t\t\tthis._scrollLeft = this._$wnd.scrollLeft();\n\t\t\tthis._applyPositionStyle();\n\t\t\tthis._$wnd.scrollTop(0).scrollLeft(0);\n\t\t}\n\t\tthis._applyScrollbarStyle();\n\n\t\tthis._$html\n\t\t\t.toggleClass('zdialog-scrollbar-fix', this._hasScrollBar())\n\t\t\t.toggleClass('zdialog-position-fix', this._useFixedLayout)\n\t\t\t.addClass('zdialog-open');\n\t}\n\n\toff() {\n\t\tthis._$html\n\t\t\t.removeClass('zdialog-scrollbar-fix')\n\t\t\t.removeClass('zdialog-position-fix')\n\t\t\t.removeClass('zdialog-open');\n\t\tif (this._useFixedLayout) {\n\t\t\tthis._$wnd.scrollTop(this._scrollTop).scrollLeft(this._scrollLeft);\n\t\t}\n\t}\n\n\t_applyScrollbarStyle() {\n\t\tconst scrollBarWidth = getScrollBarWidth();\n\t\t// language=CSS\n\t\tthis._$scrollBarStyle.html(`\n.zdialog-scrollbar-fix {\n\tpadding-right: ${scrollBarWidth}px;\n}\n`);\n\t}\n\n\t_applyPositionStyle() {\n\t\t// language=CSS\n\t\tthis._$positionStyle.html(`\n.zdialog-position-fix {\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\ttop: -${this._scrollTop}px;\n\tleft: -${this._scrollLeft}px;\n}\n`);\n\t}\n\n\t_hasScrollBar() {\n\t\treturn hasScrollBar(this._$html);\n\t}\n}\n\nfunction getScrollBarWidth() {\n\tconst $outer = $('
').css({visibility: 'hidden', width: 100, overflow: 'scroll'}).appendTo('body'),\n\t\twidthWithScroll = $('
').css({width: '100%'}).appendTo($outer).outerWidth();\n\t$outer.remove();\n\treturn 100 - widthWithScroll;\n}\n\nfunction hasScrollBar(el) {\n\tconst $el = $(el);\n\treturn $el.length > 0 ? $el[0].scrollHeight > $(window).height() : false;\n}\n\nexport const dialogManager = new DialogManager();\n\nko.components.register('zdialog-wrapper', {\n\ttemplate: `\n
\n
\n
\n\t
\n\t\t
\n\t
\n
\n`.trim()\n});\nko.components.register('zdialog', {\n\ttemplate: `\n
\n
\n`.trim()\n});\nko.components.register('zdialog-content-iframe', {\n\ttemplate: `\n
\n\n`.trim()\n});\nko.components.register('zdialog-content-html', {\n\ttemplate: `\n\n

\n\t\n\t
\n

\n\n\n
\n\n
\n`.trim()\n});\n\n\n\n// WEBPACK FOOTER //\n// ./core/widgets/dialog.js","import {GlobalEvent} from \"./utils/event\";\n\n/**\n * This class contains different system-wide events as static properties\n */\nexport class GlobalEvents {\n\t/** @type {GlobalEvent} */\n\tstatic USER_LOGGED_IN = new GlobalEvent('USER_LOGGED_IN');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/events.js","module.exports = toastr;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"toastr\"\n// module id = og09\n// module chunks = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 23 28","import $ from \"jquery\";\nimport ko from \"lib/knockout\";\nimport {ReviewItem} from \"./reviewitem\";\nimport {MODAL_REVIEW} from \"core/modals\";\nimport {siteUrl} from \"core/utils/url\";\nimport {Notifier} from \"../../../../core/widgets/notifier\";\nimport {InfiniteScroll} from \"lib/zinfinitescroll\";\n\nexport class ReviewList {\n\treviews = ko.observableArray([]);\n\tusers = ko.observableArray([]);\n\n\treviewCols = ko.observableArray([]);\n\tcolIndex = 0;\n\n\t_filters = null;\n\n\t/** @type {InfiniteScroll} */\n\t_infScroll = null;\n\t_page = 0;\n\t_loading = ko.observable(false);\n\t_xhr = null;\n\t_onLoad = $.Callbacks();\n\t_totalCount = null;\n\t_averageRating = null;\n\n\tconstructor(data) {\n\t\tconst o = this._o = {\n\t\t\t/**\n\t\t\t * Wrapper element to enable infinite scroll plugin\n\t\t\t */\n\t\t\tinfScrollWrapper: null,\n /**\n * Infinite scroll plugin distance parameter\n */\n infScrollDistance: 2000,\n\t\t\t/**\n\t\t\t * Render in columns or linear\n\t\t\t */\n\t\t\tcolumns: true,\n\t\t\tcolumnsCount: 5,\n /**\n\t\t\t * Calculate average rating on server\n */\n calculateAverageRating: false,\n /**\n * Show images\n */\n showImages: true,\n\t\t\t/**\n\t\t\t * Show videos\n\t\t\t */\n\t\t\tshowVideos: false,\n /**\n\t\t\t * Single review/question details\n */\n isDetails: false,\n\t\t\t/**\n\t\t\t * Include sales into list\n\t\t\t */\n\t\t\tincludeSales: false,\n\n\t\t\t...data\n\t\t};\n\n\t\tfor(let i = 0; i < o.columnsCount; i++) {\n\t\t\tthis.reviewCols.push(ko.observableArray([]));\n\t\t}\n\n\t\tif(o.infScrollWrapper) {\n \tthis._initInfScroll();\n\t\t}\n\n\t\tthis._handleItemClick = this._handleItemClick.bind(this);\n\t}\n\n\t/**\n\t * Render as columns\n\t * @return {boolean}\n\t */\n\tget columns() {\n\t\treturn this._o.columns;\n\t}\n\n\t/**\n\t * Number of columns\n\t * @return {int}\n\t */\n\tget columnsCount() {\n\t\treturn this._o.columnsCount;\n\t}\n\n\t/**\n\t * Is loading at the moment\n\t * @return {boolean}\n\t */\n\tget isLoading() {\n\t\treturn this._loading();\n\t}\n\n /**\n * Total reviews count\n * @return {int}\n */\n get totalCount() {\n return this._totalCount;\n }\n\n /**\n * Average reviews rating\n * @return {int}\n */\n get averageRating() {\n return this._averageRating;\n }\n\n /**\n * Are images visible\n * @return {boolean}\n */\n get showImages() {\n return this._o.showImages;\n }\n\n\t/**\n\t * Are videos visible\n\t * @return {boolean}\n\t */\n\tget showVideos() {\n \treturn this._o.showVideos;\n\t}\n\n /**\n * Are images visible\n * @return {boolean}\n */\n get isDetails() {\n return this._o.isDetails;\n }\n\n\t/**\n\t * Loads reviews from server with given filters\n\t * @param {object} filters\n\t * @return {JQuery.jqXHR}\n\t */\n\tload(filters) {\n\t\tthis.clear();\n\t\tthis._filters = filters;\n\t\treturn this._loadReviews().done(response => {\n\t\t\tthis._totalCount = response.totalCount;\n\t\t\tif(response.averageRating !== undefined) {\n this._averageRating = response.averageRating;\n }\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (this._infScroll) {\n\t\t\t\t\tthis._infScroll.on();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n /**\n\t * Sets reviews from array\n * @param {array} reviews\n\t * @param {number} totalCount\n */\n\tloadFromArray(reviews, totalCount = null, filters = null) {\n\t\tthis.clear();\n this._page = 1;\n\n\t\t// Model updates data internally so deep copy of data is created\n\t\tconst reviewsCopy = [];\n\t\treviews.forEach(review => reviewsCopy.push($.extend(true, {}, review)));\n\n const reviewItems = this._addItems(reviewsCopy);\n\n let hasMore = false;\n if(totalCount !== null) {\n \tthis._totalCount = totalCount;\n \tif(totalCount > reviewItems.length) {\n \t\thasMore = true;\n\t\t\t}\n\t\t}\n\n\t\tif(filters !== null) {\n \tthis._filters = filters;\n\t\t}\n\n setTimeout(() => this._onLoad.fireWith(this, [reviewItems]));\n\n if(hasMore && this._infScroll) {\n setTimeout(() => this._infScroll.on());\n\t\t}\n\n\t}\n\n\t/**\n\t * Clears everything\n\t */\n\tclear() {\n\t\tthis.reviews().forEach(item => item.offClick(this._handleItemClick));\n\t\tthis.reviews([]);\n\t\tthis.reviewCols().forEach(col => col([]));\n\t\tif (this._infScroll) {\n\t\t\tthis._infScroll.off();\n\t\t}\n\t\tthis.colIndex = 0;\n\t\tthis._page = 0;\n\t\tthis._filters = null;\n\t\tthis._loading(false);\n\t\tif (this._xhr) {\n\t\t\tthis._xhr.abort();\n\t\t}\n\t}\n\n\tenableSizWatcher() {\n $(window).on('resize', () => {\n ReviewList._reviewSizeSpot(true);\n });\n\t\tthis.onLoad(ReviewList._reviewSizeSpot);\n\t}\n\n\tonLoad(handler) {\n\t\tthis._onLoad.add(handler);\n\t}\n\n\toffLoad(handler) {\n\t\tthis._onLoad.remove(handler);\n\t}\n\n /**\n\t * @param {ReviewItem} item\n */\n\tdeleteItem(item) {\n $.post(siteUrl('reviews/delete_review'),\n {id: item.id},\n response => {\n if(response.success) {\n if(this.container !== null) {\n if(this._o.columns) {\n for(let i = 0; i < this.reviewCols().length; i++) {\n this.reviewCols()[i].remove(item);\n }\n }\n this.reviews.remove(item);\n }\n } else {\n \tNotifier.error('Ошибка');\n\t\t\t\t}\n },\n 'json'\n );\n\t}\n\n /**\n * @param {object} data\n * @return {ReviewItem}\n */\n\tprependDataItem(data) {\n\t\tconst item = this._prepareItems([data])[0];\n\n if(this.container !== null) {\n if(this._o.columns) {\n this.reviewCols()[0]().unshift(item);\n }\n this.reviews.unshift(item);\n }\n\t\tthis._totalCount++;\n\n\t\treturn item;\n\t}\n\n\t_initInfScroll() {\n\t\tthis._infScroll = new InfiniteScroll(this._o.infScrollWrapper, {\n\t\t\tdistance: this._o.infScrollDistance,\n onNeedMore: callback => {\n if (!this._loading()) {\n this._loadReviews(callback);\n }\n }\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * @return {JQuery.jqXHR}\n\t * @private\n\t */\n\t_loadReviews(callback = null) {\n\t\tthis._loading(true);\n\t\treturn this._xhr = $.get(\n\t\t\tsiteUrl('reviews/get_ajax'),\n\t\t\t{\n\t\t\t\t...this._filters,\n\t\t\t\tpage: ++this._page,\n\t\t\t\tcalculate_average_rating: this._o.calculateAverageRating ? 1 : 0,\n\t\t\t\tinclude_sales: this._o.includeSales ? 1 : 0\n\t\t\t},\n\t\t\tnull,\n\t\t\t'json'\n\t\t)\n\t\t\t.always(() => {\n\t\t\t\tthis._loading(false);\n\t\t\t\tthis._xhr = null;\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.done(response => {\n\t\t\t\tconst reviewItems = this._addItems(response.reviews);\n\t\t\t\tsetTimeout(() => this._onLoad.fireWith(this, [reviewItems]));\n\t\t\t\tif(!response.hasMore && this._infScroll) {\n this._infScroll.off();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n /**\n * @param {array} items\n\t * @return {array}\n * @private\n */\n _prepareItems(items) {\n \treturn items.map(r => {\n \t\tr.parent = this;\n return new ReviewItem(r);\n });\n\t}\n\n\t/**\n\t * @param {array} items\n\t * @private\n\t */\n\t_addItems(items) {\n\t\tconst reviewItems = this._prepareItems(items);\n\t\treviewItems.forEach(reviewItem => {\n\t\t\treviewItem.onClick(this._handleItemClick);\n\t\t});\n\n\t\tthis.reviews.pushAll(reviewItems);\n\n\t\tif (this._o.columns) {\n\t\t\tconst reviewCols = [];\n\t\t\tfor (let i = 0; i < this._o.columnsCount; ++i){\n\t\t\t\treviewCols.push([]);\n\t\t\t}\n\n\t\t\treviewItems.forEach(reviewItem => {\n\t\t\t\tif (this.colIndex >= this._o.columnsCount) {\n\t\t\t\t\tthis.colIndex = 0;\n\t\t\t\t}\n\t\t\t\treviewCols[this.colIndex++].push(reviewItem);\n\t\t\t});\n\n\t\t\treviewCols.forEach((col, index) => {\n\t\t\t\tif (col.length) {\n\t\t\t\t\tthis.reviewCols()[index].pushAll(col);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn reviewItems;\n\t}\n\n\t/**\n\t * @param {ReviewItem} item\n\t * @private\n\t */\n\t_handleItemClick(item) {\n\t\tif(!this.isDetails) {\n if(item.data().is_question) {\n window.location = item.data().url;\n } else {\n const index = this.reviews().indexOf(item);\n MODAL_REVIEW.show(item.id, index, this._filters);\n }\n }\n\t}\n\n /**\n\t *\n * @param {boolean} reinit\n * @private\n */\n static _reviewSizeSpot(reinit = false){\n let $items = $('.reviews-wrapper .review-item');\n if (!reinit) {\n $items = $items.not('[size]');\n }\n const width = $items.innerWidth();\n\n if(width > 240){\n $items.attr('size', 'large');\n } else if(width <= 240 && width >= 223){\n $items.attr('size', 'medium');\n } else if(width < 223){\n $items.attr('size', 'small');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./modules/reviews/common/model/reviewlist.js","module.exports = \"\\n
\\n\\t
\\n\\t
\\n
\\n\\n\\n\\t\\n\\t
\\n\\t\\t
Извините :(
\\n\\t\\t
На этот магазин отзывов нет
\\n\\t\\t
\\n\\t\\t\\t
\\n\\t\\t
\\n\\t
\\n\\t\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./modules/reviews/common/templates/review-list-mobile.html\n// module id = qQ5b\n// module chunks = 10 12 13","import $ from 'jquery';\nimport {siteUrl} from \"./url\";\nimport {createHtmlDialog, createIframeDialog} from \"../widgets/dialog\";\n\n/**\n * Shows iframe-based modal window\n * @param {string} name Modal name\n * @param {object} data Custom data to passed as GET parameters\n * @param {object} dialogOptions Options for {@link ZDialog} instance\n * @return {ZDialog}\n */\nexport function showModalIframe(name, data = null, dialogOptions = null) {\n\tdata = {...data};\n\tfor(let key in data) if(data[key] === null) delete data[key];\n\n\tconst query = $.param({...data});\n\tconst url = siteUrl('modals/' + name + (query ? '?' + query : ''));\n\treturn createIframeDialog(url, {name, ...dialogOptions, autoOpen: true});\n}\n\n\n\n// WEBPACK FOOTER //\n// ./core/utils/modal.js","var Smart = {};\r\n\r\n// Embed the Smart.Plurals source: \r\n\r\n\r\n// Create namespace:\r\nif (typeof Smart !== 'object')\r\n\tSmart = {};\r\n\r\n(function() {\r\n\r\n\tvar rules = {} // Map of language codes to rules\r\n\t\t, defaultCode = null\r\n\t\t, defaultRule = null;\r\n\r\n\tSmart.Plurals = {\r\n\t\t/**\r\n\t\t * Retrieves a plural rule, based on the supplied language code.\r\n\t\t * If no languageCode is specified, the default rule will be returned.\r\n\t\t *\r\n\t\t * A plural rule is a function that takes in a value\r\n\t\t * and determines whether it should be singular form, plural form,\r\n\t\t * or even other forms, depending on the number of choices.\r\n\t\t *\r\n\t\t * @param {String} [languageCode] - Optional - a 2-letter or 4-letter language code, or the full ruleName.\r\n\t\t * @returns {function({Number} value, {Number|Array} choices)}\r\n\t\t */\r\n\t\tgetRule: function(languageCode) {\r\n\t\t\t// Calling this with no parameters will return the default:\r\n\t\t\tif (!languageCode) {\r\n\t\t\t\treturn defaultRule || (defaultRule = this.getRule(defaultCode));\r\n\t\t\t}\r\n\r\n\t\t\t// Normalize:\r\n\t\t\tlanguageCode = ',' + languageCode.toLowerCase() + ',';\r\n\r\n\t\t\t// Search for an \"exact match\":\r\n\t\t\tfor (var languageCodes in rules) {\r\n\t\t\t\tif (!rules.hasOwnProperty(languageCodes)) continue;\r\n\r\n\t\t\t\tvar isExactMatch = (languageCodes.indexOf(languageCode) !== -1);\r\n\t\t\t\tif (isExactMatch) {\r\n\t\t\t\t\treturn rules[languageCodes];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// If we've got a 4-letter code, search for a \"generic match\" (2-letter code):\r\n\t\t\tvar dash = languageCode.indexOf('-');\r\n\t\t\tif (dash !== -1) {\r\n\t\t\t\tvar twoLetterCode = languageCode.substring(1, dash);\r\n\t\t\t\treturn this.getRule(twoLetterCode);\r\n\t\t\t}\r\n\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t,\r\n\t\t/**\r\n\t\t * Sets the default language rule.\r\n\t\t *\r\n\t\t * @param {String} languageCode - 2-letter or 4-letter language code\r\n\t\t */\r\n\t\tsetDefaultRule: function(languageCode) {\r\n\t\t\tdefaultCode = languageCode.toLowerCase();\r\n\t\t\tdefaultRule = null; // it's lazy loaded\r\n\t\t}\r\n\t\t,\r\n\t\t/**\r\n\t\t * Defines a language rule.\r\n\t\t *\r\n\t\t * @param {String} languageCodes - A comma-separated list of 2-letter or 4-letter language codes\r\n\t\t * @param {function({Number} value, {Number} choices)|String} pluralRule - The rule; see getRule for a description.\r\n\t\t */\r\n\t\tdefineRule: function(languageCodes, pluralRule) {\r\n\t\t\t// Normalize:\r\n\t\t\tlanguageCodes = ',' + languageCodes.toLowerCase() + ',';\r\n\r\n\t\t\tvar normalizedRule;\r\n\t\t\tif (typeof pluralRule === 'string') {\r\n\t\t\t\t// Allows for aliases\r\n\t\t\t\tnormalizedRule = this.getRule(pluralRule);\r\n\t\t\t} else {\r\n\t\t\t\tnormalizedRule = function (value, choices) {\r\n\t\t\t\t\tif (typeof choices === 'number') {\r\n\t\t\t\t\t\treturn pluralRule(value, choices);\r\n\t\t\t\t\t} else if (typeof choices.length === 'number') {\r\n\t\t\t\t\t\treturn choices[pluralRule(value, choices.length)];\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\trules[languageCodes] = normalizedRule;\r\n\r\n\t\t\tif (!defaultCode) {\r\n\t\t\t\tthis.setDefaultRule(languageCodes.split(',')[1]);\r\n\t\t\t}\r\n\r\n\t\t\treturn normalizedRule;\r\n\t\t}\r\n\t};\r\n\r\n})();\r\n\r\n/**\r\n * Germanic family\r\n * English, German, Dutch, Swedish, Danish, Norwegian, Faroese\r\n * Romanic family\r\n * Spanish, Portuguese, Italian, Bulgarian\r\n * Latin/Greek family\r\n * Greek\r\n * Finno-Ugric family\r\n * Finnish, Estonian\r\n * Semitic family\r\n * Hebrew\r\n * Artificial\r\n * Esperanto\r\n * Finno-Ugric family\r\n * Hungarian\r\n * Turkic/Altaic family\r\n * Turkish\r\n */\r\nSmart.Plurals.defineRule('english,en,de,nl,sv,da,no,nn,nb,fo,es,pt,it,bg,el,fi,et,he,eo,hu,tr',\r\n\tfunction pluralRule_english(value, choices) {\r\n\t\t// singular used for 1\r\n\t\t// special cases for 0 and negative\r\n\t\tvar singular = (value === 1);\r\n\t\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\t\tvar zero = (value === 0);\r\n\t\tif (choices === 3) return (zero ? 0 : singular ? 1 : 2);\r\n\r\n\t\tvar negative = (value < 0);\r\n\t\treturn (negative ? 0 : zero ? 1 : singular ? 2 : 3);\r\n\t}\r\n);\r\n\r\n/**\r\n * Slavic family\r\n * Czech, Slovak\r\n */\r\nSmart.Plurals.defineRule('czech,cs,sk', function pluralRule_czech(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 2-4\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value >= 2 && value <= 4);\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Romanic family\r\n * French, Brazilian Portuguese\r\n */\r\nSmart.Plurals.defineRule('french,fr,pt-br', function pluralRule_french(value, choices) {\r\n\t// singular used for 0 and 1\r\n\tvar singular = (value === 0 || value === 1);\r\n\treturn (singular ? 0 : 1);\r\n});\r\n\r\n/**\r\n * Celtic\r\n * Gaeilge (Irish)\r\n */\r\nSmart.Plurals.defineRule('irish,ga', function pluralRule_irish(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 2\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar two = (value === 2);\r\n\treturn (singular ? 0 : two ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Baltic family\r\n * Latvian\r\n */\r\nSmart.Plurals.defineRule('latvian,lv', function pluralRule_latvian(value, choices) {\r\n\t// singular used for 1, 21, 31, 41... -- but not 11, 111, 211, 311, 411...\r\n\t// special case for 0\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar zero = (value === 0);\r\n\treturn (zero ? 0 : singular ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Baltic family\r\n * Lithuanian\r\n */\r\nSmart.Plurals.defineRule('lithuanian,lt', function pluralRule_lithuanian(value, choices) {\r\n\t// singular used for numbers ending in 1 (1, 21, 31, 41...)\r\n\t// special case for numbers ending in 12-19 (12-19, 112-119, 212-219...)\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 100 >= 12 && value % 100 <= 19);\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Polish\r\n */\r\nSmart.Plurals.defineRule('polish,pl', function pluralRule_polish(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for numbers ending in 2-4, except for 12-14 (2-4, 22-24, 32-34...)\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 10 >= 2 && value % 10 <= 4 && (value % 100 < 10 || value % 100 >= 20));\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Romanic family\r\n * Romanian\r\n */\r\nSmart.Plurals.defineRule('romanian,ro', function pluralRule_romanian(value, choices) {\r\n\t// singular used for 1\r\n\t// special case for 0 and numbers ending in 01-19 (0, 2-19, 101-119, 201-219...)\r\n\tvar singular = (value === 1);\r\n\tif (choices === 2) return (singular ? 0 : 1);\r\n\r\n\tvar few = (value === 0 || (value % 100 >= 1 && value % 100 <= 19));\r\n\treturn (singular ? 0 : few ? 1 : 2);\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Russian, Ukrainian, Serbian, Croatian\r\n */\r\nSmart.Plurals.defineRule('russian,ru,uk,sr,hr', function pluralRule_russian(value, choices) {\r\n\t// singular used for numbers ending in 1, except 11 (1, 21, 31...)\r\n\t// special case for numbers ending in 2-4, except 12-14 (2-4, 22-24, 32-34...)\r\n\t// numbers ending in 11-14 use plural (11-14, 111-114, 211-214...)\r\n\tvar singular = (value % 10 === 1 && value % 100 != 11);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar few = (value % 10 >= 2 && value % 10 <= 4 && (value % 100 < 10 || value % 100 >= 20));\r\n\treturn singular ? 0 : few ? 1 : 2;\r\n});\r\n\r\n/**\r\n * Slavic family\r\n * Slovenian\r\n */\r\nSmart.Plurals.defineRule('slovenian,sl', function pluralRule_slovenian(value, choices) {\r\n\t// singular used for numbers ending in 01 (1, 101, 201...)\r\n\t// special case for numbers ending in 02 (2, 102, 202...)\r\n\t// special case for numbers ending in 03-04 (3-4, 103-104, 203-204...)\r\n\tvar singular = (value % 100 === 1);\r\n\tif (choices === 2) return singular ? 0 : 1;\r\n\r\n\tvar two = (value % 100 === 2);\r\n\tif (choices === 3) return singular ? 0 : two ? 1 : 2;\r\n\r\n\tvar few = (value % 100 === 3 || value % 100 === 4);\r\n\treturn singular ? 0 : two ? 1 : few ? 2 : 3;\r\n});\r\n\r\n\r\nmodule.exports = Smart;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/smart-plurals/dist/Smart.Plurals.node/Smart.Plurals.node-all.js\n// module id = tXil\n// module chunks = 2 3 4 5 6 8 9 10 11 12 13 14 16 20 21 26","import '@fancyapps/fancybox';\nimport '@fancyapps/fancybox/dist/jquery.fancybox.css';\n\n$.fancybox.defaults.i18n.ru = {\n\tCLOSE: 'Закрыть',\n\tNEXT: 'Следующий',\n\tPREV: 'Предыдущий',\n\tERROR: 'Не удалось загрузить содержимое
Пожалуйста, попробуйте позже.',\n\tPLAY_START: 'Начать слайдшоу',\n\tPLAY_STOP: 'Остановить слайдшоу',\n\tFULL_SCREEN: 'На весь экран',\n\tTHUMBS: 'Предпросмотр'\n};\n\n$.fancybox.defaults.lang = LANG;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/fancybox/index.js","/* Copy-paste of Vadim's extension*/\n\nimport $ from 'jquery';\n\n/**\n * This is simple plugin that checks when window is scrolled\n * to the bottom of the element and fires event in this case\n */\nexport class InfiniteScroll {\n\t_$el;\n\t_$window;\n\t_eventHandler;\n\t_needMore;\n\n\t_clNeedMore = $.Callbacks();\n\n\tconstructor(element, options) {\n\t\tthis._$el = $(element);\n\t\tthis._$window = $(window);\n\t\tthis._o = {\n\t\t\t/**\n\t\t\t * If distance in pixels between bottom of the window and bottom of the element\n\t\t\t * becomes less than this value - event is fired\n\t\t\t */\n\t\t\tdistance: 500,\n\t\t\t/**\n\t\t\t * Event handler\n\t\t\t */\n\t\t\tonNeedMore: null,\n\n\t\t\t...options\n\t\t};\n\t\tif(this._o.onNeedMore) {\n\t\t\tthis._clNeedMore.add(this._o.onNeedMore);\n\t\t}\n\t}\n\n\t/**\n\t * Subscribe to needed events and start monitoring\n\t */\n\ton() {\n\t\tif (this._eventHandler) {\n\t\t\treturn;\n\t\t}\n\t\tthis._eventHandler = this.update.bind(this);\n\t\tthis._$window.on('scroll resize', this._eventHandler);\n\t\tthis.update();\n\t}\n\n\t/**\n\t * Unsubscribe from all events and stop monitoring\n\t */\n\toff() {\n\t\tif (!this._eventHandler) {\n\t\t\treturn;\n\t\t}\n\t\tthis._$window.off('scroll resize', this._eventHandler);\n\t\tthis._eventHandler = null;\n\t}\n\n\t/**\n\t * Manual update. Event will be fired immediately if needed.\n\t */\n\tupdate(checkVisible = true) {\n\t\tif(checkVisible && !this._$el.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\t\tconst blockEnd = this._$el.offset().top + this._$el.outerHeight();\n\t\tconst windowHeight = this._$window.height();\n\t\tconst windowScrollTop = this._$window.scrollTop();\n\t\tlet isNearBottom = blockEnd < windowScrollTop + windowHeight + this._o.distance;\n\n\t\tif(isNearBottom != this._needMore) {\n\t\t\tthis._needMore = isNearBottom;\n\n\t\t\tif(isNearBottom) {\n\t\t\t\tthis._clNeedMore.fireWith(this._$el[0], [this._loadedMoreCallback.bind(this)]);\n\t\t\t}\n\t\t}\n\t}\n\n /**\n\t * Change internal state in response to loaded more event\n */\n _loadedMoreCallback() {\n \tthis._needMore = false;\n\t}\n\n\t/**\n\t * Add event handler\n\t * @param callback\n\t */\n\tonNeedMore(callback) {\n\t\tthis._clNeedMore.add(callback);\n\t}\n\n\t/**\n\t * Remove event handler\n\t * @param callback\n\t */\n\toffNeedMore(callback) {\n\t\tthis._clNeedMore.remove(callback);\n\t}\n}\n\n$.fn.zInfiniteScroll = function (options) {\n\tlet o = $.extend({\n\t\tfetch: null,\n\t\tclear: null,\n\t\tshow: null,\n\t\tenabled: null,\n\t\tfinished: null,\n getCurrentCount: null,\n countPerPage: null,\n totalCount: Number.MAX_VALUE,\n\t\tselector: '*',\n\t\tbtnShowMore: null,\n\t\tloading: null,\n\t\tmaxAutoloadPages: null,\n\t\tcheckViewport: true,\n\t\tautoStart: true\n\t}, options);\n\n\tlet $wrapper = $(this);\n\tlet $window = $(window);\n\tlet $btnShowMore = $(o.btnShowMore);\n\tlet $loading = $(o.loading);\n\tlet getCurrentCount = $.isFunction(o.getCurrentCount)\n\t\t? o.getCurrentCount : () => $wrapper.children(o.selector).length;\n let currentPage = (o.countPerPage === null) ? 1 : () => { return getCurrentCount() / o.countPerPage; };\n\tlet inProgress = false;\n\tlet isReloading = false;\n\tlet finished = false;\n\tlet t = new Throttler(50);\n\n\t$btnShowMore.click(function () {\n\t\t$btnShowMore.hide();\n\t\tloadMore(function (hasMore) {\n\t\t\tif (hasMore) {\n\t\t\t\t$btnShowMore.show();\n\t\t\t}\n\t\t});\n\t});\n\n\to.totalCount = +o.totalCount;\n\to.maxAutoloadPages = +o.maxAutoloadPages;\n\n\tif (o.autoStart) {\n\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\tstart();\n\t\t} else {\n\t\t\tfinished = true;\n\t\t\tif ($.isFunction(o.finished)) {\n\t\t\t\to.finished();\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ton: function () {\n\t\t\tfinished = false;\n\t\t\tif (getCurrentCount() < o.totalCount) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tfinished = true;\n\t\t\t\tif ($.isFunction(o.finished)) {\n\t\t\t\t\to.finished();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\toff: function () {\n\t\t\tstop();\n\t\t\tfinished = true;\n\t\t},\n\t\treload: function () {\n finished = false;\n if(!$.isFunction(currentPage)) {\n currentPage = 0;\n }\n o.totalCount = Number.MAX_VALUE;\n\n if($.isFunction(o.clear)) {\n \to.clear();\n\t\t\t} else {\n $wrapper.children(o.selector).remove();\n\t\t\t}\n\n\t\t\tif(inProgress) {\n \tisReloading = true;\n\t\t\t} else {\n\t\t\t\tloadRoutine();\n\t\t\t}\n }\n\t};\n\n\tfunction start() {\n\t\tif (!finished) {\n\t\t\t$window.on('scroll', onScroll);\n\t\t}\n\t}\n\n\tfunction stop() {\n\t\t$window.off('scroll', onScroll);\n\t}\n\n\tfunction onScroll() {\n\t\tif ((unwrap(o.enabled) === false) || inProgress || !t.ready() || !$wrapper.is(':visible')) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet blockEnd = $wrapper.offset().top + $wrapper.height();\n\t\tlet windowHeight = $window.height();\n\t\tlet windowScrollTop = $window.scrollTop();\n\t\tlet isNearBottom = blockEnd < windowScrollTop + windowHeight + 500;\n\t\tlet isInViewport = !o.checkViewport || blockEnd > windowScrollTop + 50;\n\t\tlet ready = isNearBottom && isInViewport;\n\n\t\tif (ready) {\n loadRoutine();\n\t\t}\n\t}\n\n\tfunction loadRoutine() {\n stop();\n loadMore(function () {\n let needMore = getCurrentCount() < o.totalCount;\n if (needMore) {\n if (!o.maxAutoloadPages || unwrap(currentPage) < o.maxAutoloadPages) {\n t.reset();\n start();\n } else {\n $btnShowMore.show();\n }\n } else {\n \tfinished = true;\n \tif ($.isFunction(o.finished)) {\n \to.finished();\n \t}\n }\n });\n }\n\n\tfunction loadMore(callback) {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\t\tinProgress = true;\n\t\t$loading.show();\n\n\t\to.fetch(unwrap(currentPage) + 1, function ($blocks) {\n\t\t\tif(isReloading) {\n isReloading = false;\n inProgress = false;\n\n loadRoutine();\n return;\n\t\t\t}\n\t\t\tlet count = 0;\n\t\t\tif ($.isFunction(o.show)) {\n\t\t\t\tcount = o.show($blocks);\n\t\t\t} else {\n\t\t\t\t$blocks.addClass('fadein');\n\t\t\t\t$wrapper.append($blocks);\n\t\t\t\tcount = $blocks.length;\n\t\t\t}\n\n if(!$.isFunction(currentPage)) {\n currentPage++;\n }\n\t\t\tinProgress = false;\n\t\t\t$loading.hide();\n\n\t\t\tif ((count === 0) || (o.countPerPage !== null && count < o.countPerPage)) {\n\t\t\t\t// force stop because no more data on server\n\t\t\t\to.totalCount = getCurrentCount();\n\t\t\t}\n\n\t\t\tcallback();\n\t\t});\n\t}\n};\n\nfunction unwrap(value) {\n\treturn $.isFunction(value) ? value() : value;\n}\n\nclass Throttler {\n\tconstructor(period) {\n\t\tthis.period = +period;\n\t\tthis.start = +new Date();\n\t}\n\n\tready() {\n\t\tlet ready = (+new Date()) - this.start >= this.period;\n\t\tif (ready) {\n\t\t\tthis.reset();\n\t\t}\n\t\treturn ready;\n\t};\n\n\treset() {\n\t\tthis.start = +new Date();\n\t};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/zinfinitescroll/index.js","/*!\n\tautosize 4.0.1\n\tlicense: MIT\n\thttp://www.jacklmoore.com/autosize\n*/\n(function (global, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(['module', 'exports'], factory);\n\t} else if (typeof exports !== \"undefined\") {\n\t\tfactory(module, exports);\n\t} else {\n\t\tvar mod = {\n\t\t\texports: {}\n\t\t};\n\t\tfactory(mod, mod.exports);\n\t\tglobal.autosize = mod.exports;\n\t}\n})(this, function (module, exports) {\n\t'use strict';\n\n\tvar map = typeof Map === \"function\" ? new Map() : function () {\n\t\tvar keys = [];\n\t\tvar values = [];\n\n\t\treturn {\n\t\t\thas: function has(key) {\n\t\t\t\treturn keys.indexOf(key) > -1;\n\t\t\t},\n\t\t\tget: function get(key) {\n\t\t\t\treturn values[keys.indexOf(key)];\n\t\t\t},\n\t\t\tset: function set(key, value) {\n\t\t\t\tif (keys.indexOf(key) === -1) {\n\t\t\t\t\tkeys.push(key);\n\t\t\t\t\tvalues.push(value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelete: function _delete(key) {\n\t\t\t\tvar index = keys.indexOf(key);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tkeys.splice(index, 1);\n\t\t\t\t\tvalues.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}();\n\n\tvar createEvent = function createEvent(name) {\n\t\treturn new Event(name, { bubbles: true });\n\t};\n\ttry {\n\t\tnew Event('test');\n\t} catch (e) {\n\t\t// IE does not support `new Event()`\n\t\tcreateEvent = function createEvent(name) {\n\t\t\tvar evt = document.createEvent('Event');\n\t\t\tevt.initEvent(name, true, false);\n\t\t\treturn evt;\n\t\t};\n\t}\n\n\tfunction assign(ta) {\n\t\tif (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;\n\n\t\tvar heightOffset = null;\n\t\tvar clientWidth = null;\n\t\tvar cachedHeight = null;\n\n\t\tfunction init() {\n\t\t\tvar style = window.getComputedStyle(ta, null);\n\n\t\t\tif (style.resize === 'vertical') {\n\t\t\t\tta.style.resize = 'none';\n\t\t\t} else if (style.resize === 'both') {\n\t\t\t\tta.style.resize = 'horizontal';\n\t\t\t}\n\n\t\t\tif (style.boxSizing === 'content-box') {\n\t\t\t\theightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));\n\t\t\t} else {\n\t\t\t\theightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n\t\t\t}\n\t\t\t// Fix when a textarea is not on document body and heightOffset is Not a Number\n\t\t\tif (isNaN(heightOffset)) {\n\t\t\t\theightOffset = 0;\n\t\t\t}\n\n\t\t\tupdate();\n\t\t}\n\n\t\tfunction changeOverflow(value) {\n\t\t\t{\n\t\t\t\t// Chrome/Safari-specific fix:\n\t\t\t\t// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space\n\t\t\t\t// made available by removing the scrollbar. The following forces the necessary text reflow.\n\t\t\t\tvar width = ta.style.width;\n\t\t\t\tta.style.width = '0px';\n\t\t\t\t// Force reflow:\n\t\t\t\t/* jshint ignore:start */\n\t\t\t\tta.offsetWidth;\n\t\t\t\t/* jshint ignore:end */\n\t\t\t\tta.style.width = width;\n\t\t\t}\n\n\t\t\tta.style.overflowY = value;\n\t\t}\n\n\t\tfunction getParentOverflows(el) {\n\t\t\tvar arr = [];\n\n\t\t\twhile (el && el.parentNode && el.parentNode instanceof Element) {\n\t\t\t\tif (el.parentNode.scrollTop) {\n\t\t\t\t\tarr.push({\n\t\t\t\t\t\tnode: el.parentNode,\n\t\t\t\t\t\tscrollTop: el.parentNode.scrollTop\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tel = el.parentNode;\n\t\t\t}\n\n\t\t\treturn arr;\n\t\t}\n\n\t\tfunction resize() {\n\t\t\tif (ta.scrollHeight === 0) {\n\t\t\t\t// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar overflows = getParentOverflows(ta);\n\t\t\tvar docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)\n\n\t\t\tta.style.height = '';\n\t\t\tta.style.height = ta.scrollHeight + heightOffset + 'px';\n\n\t\t\t// used to check if an update is actually necessary on window.resize\n\t\t\tclientWidth = ta.clientWidth;\n\n\t\t\t// prevents scroll-position jumping\n\t\t\toverflows.forEach(function (el) {\n\t\t\t\tel.node.scrollTop = el.scrollTop;\n\t\t\t});\n\n\t\t\tif (docTop) {\n\t\t\t\tdocument.documentElement.scrollTop = docTop;\n\t\t\t}\n\t\t}\n\n\t\tfunction update() {\n\t\t\tresize();\n\n\t\t\tvar styleHeight = Math.round(parseFloat(ta.style.height));\n\t\t\tvar computed = window.getComputedStyle(ta, null);\n\n\t\t\t// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box\n\t\t\tvar actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;\n\n\t\t\t// The actual height not matching the style height (set via the resize method) indicates that \n\t\t\t// the max-height has been exceeded, in which case the overflow should be allowed.\n\t\t\tif (actualHeight !== styleHeight) {\n\t\t\t\tif (computed.overflowY === 'hidden') {\n\t\t\t\t\tchangeOverflow('scroll');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.\n\t\t\t\tif (computed.overflowY !== 'hidden') {\n\t\t\t\t\tchangeOverflow('hidden');\n\t\t\t\t\tresize();\n\t\t\t\t\tactualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedHeight !== actualHeight) {\n\t\t\t\tcachedHeight = actualHeight;\n\t\t\t\tvar evt = createEvent('autosize:resized');\n\t\t\t\ttry {\n\t\t\t\t\tta.dispatchEvent(evt);\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Firefox will throw an error on dispatchEvent for a detached element\n\t\t\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=889376\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar pageResize = function pageResize() {\n\t\t\tif (ta.clientWidth !== clientWidth) {\n\t\t\t\tupdate();\n\t\t\t}\n\t\t};\n\n\t\tvar destroy = function (style) {\n\t\t\twindow.removeEventListener('resize', pageResize, false);\n\t\t\tta.removeEventListener('input', update, false);\n\t\t\tta.removeEventListener('keyup', update, false);\n\t\t\tta.removeEventListener('autosize:destroy', destroy, false);\n\t\t\tta.removeEventListener('autosize:update', update, false);\n\n\t\t\tObject.keys(style).forEach(function (key) {\n\t\t\t\tta.style[key] = style[key];\n\t\t\t});\n\n\t\t\tmap.delete(ta);\n\t\t}.bind(ta, {\n\t\t\theight: ta.style.height,\n\t\t\tresize: ta.style.resize,\n\t\t\toverflowY: ta.style.overflowY,\n\t\t\toverflowX: ta.style.overflowX,\n\t\t\twordWrap: ta.style.wordWrap\n\t\t});\n\n\t\tta.addEventListener('autosize:destroy', destroy, false);\n\n\t\t// IE9 does not fire onpropertychange or oninput for deletions,\n\t\t// so binding to onkeyup to catch most of those events.\n\t\t// There is no way that I know of to detect something like 'cut' in IE9.\n\t\tif ('onpropertychange' in ta && 'oninput' in ta) {\n\t\t\tta.addEventListener('keyup', update, false);\n\t\t}\n\n\t\twindow.addEventListener('resize', pageResize, false);\n\t\tta.addEventListener('input', update, false);\n\t\tta.addEventListener('autosize:update', update, false);\n\t\tta.style.overflowX = 'hidden';\n\t\tta.style.wordWrap = 'break-word';\n\n\t\tmap.set(ta, {\n\t\t\tdestroy: destroy,\n\t\t\tupdate: update\n\t\t});\n\n\t\tinit();\n\t}\n\n\tfunction destroy(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.destroy();\n\t\t}\n\t}\n\n\tfunction update(ta) {\n\t\tvar methods = map.get(ta);\n\t\tif (methods) {\n\t\t\tmethods.update();\n\t\t}\n\t}\n\n\tvar autosize = null;\n\n\t// Do nothing in Node.js environment and IE8 (or lower)\n\tif (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {\n\t\tautosize = function autosize(el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\treturn el;\n\t\t};\n\t} else {\n\t\tautosize = function autosize(el, options) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], function (x) {\n\t\t\t\t\treturn assign(x, options);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.destroy = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], destroy);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t\tautosize.update = function (el) {\n\t\t\tif (el) {\n\t\t\t\tArray.prototype.forEach.call(el.length ? el : [el], update);\n\t\t\t}\n\t\t\treturn el;\n\t\t};\n\t}\n\n\texports.default = autosize;\n\tmodule.exports = exports['default'];\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// C:/Vadim/Projects/Php/zakupki/node_modules/autosize/dist/autosize.js\n// module id = xOlZ\n// module chunks = 2 10 12 13"],"sourceRoot":""}