{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/js/scripts.js","webpack:///./assets/js/global/base.js","webpack:///./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js","webpack:///./assets/js/global/navigation.js","webpack:///./assets/js/modules/filter-grid.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","$","jQuery","on","e","preventDefault","target","this","hash","$target","stop","animate","scrollTop","offset","top","window","location","find","wrap","fancybox","focus","onUpdate","instance","current","width","height","video","$content","hide","$slide","css","show","format","defaults","document","undefined","fn","error","div","loop","margin","gutter","keyboard","arrows","infobar","toolbar","buttons","idleTime","smallBtn","protect","modal","image","preload","ajax","settings","data","iframe","tpl","attr","scrolling","animationEffect","animationDuration","zoomOpacity","transitionEffect","transitionDuration","slideClass","baseClass","baseTpl","spinnerTpl","errorTpl","btnTpl","slideShow","fullScreen","thumbs","close","parentEl","autoFocus","backFocus","trapFocus","autoStart","touch","vertical","momentum","media","speed","hideOnClose","onInit","noop","beforeLoad","afterLoad","beforeShow","afterShow","beforeClose","afterClose","onActivate","onDeactivate","clickContent","event","type","clickSlide","clickOutside","dblclickContent","dblclickSlide","dblclickOutside","mobile","lang","i18n","en","CLOSE","NEXT","PREV","ERROR","PLAY_START","PLAY_STOP","FULL_SCREEN","THUMBS","de","$W","$D","called","requestAFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","setTimeout","transitionEnd","el","createElement","transitions","transition","OTransition","MozTransition","WebkitTransition","style","forceRedraw","$el","length","offsetHeight","FancyBox","content","opts","index","extend","isArray","id","group","currIndex","parseInt","prevIndex","prevPos","currPos","firstRun","createGroup","$lastFocus","activeElement","blur","slides","init","testWidth","$container","buttonStr","self","firstItemOpts","scrollLeft","getInstance","isMobile","addClass","append","each","translate","replace","prependTo","$refs","container","forEach","item","remove","trigger","activate","jumpTo","obj","str","arr","match","items","makeArray","$item","src","srcParts","isPlainObject","options","srcset","$orig","charAt","$thumb","caption","apply","split","shift","filter","inArray","push","addEvents","removeEvents","stopPropagation","previous","next","originalEvent","update","stage","isClosing","hasClass","is","has","keycode","keyCode","which","idleSecondsCounter","isIdle","showControls","idleInterval","setInterval","hideControls","off","clearInterval","duration","pos","slide","canvasWidth","currentPos","transitionProps","groupLen","isSliding","isAnimating","createSlide","updateControls","getTranslate","isMoved","left","forcedDuration","isNumeric","removeClass","loadSlide","Math","round","removeAttr","complete","children","isLoaded","revealContent","isComplete","appendTo","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","nextWidth","nextHeight","isZoomable","isScaledDown","fitPos","isFunction","rez","canPan","abs","ajaxLoad","isLoading","setImage","setIframe","setContent","setError","showLoading","url","success","textStatus","jqXHR","one","abort","found","temp","pxRatio","windowWidth","devicePixelRatio","innerWidth","map","ret","trim","substring","postfix","sort","a","b","j","thumb","$ghost","setBigImage","$img","$image","clearTimeout","timouts","naturalWidth","naturalHeight","hideLoading","max","$iframe","Date","getTime","isReady","$body","scrollWidth","frameWidth","frameHeight","$wrap","contents","ignore","contentWindow","documentElement","ceil","outerWidth","outerHeight","innerHeight","prepend","empty","parent","$placeholder","insertAfter","nodeType","html","after","$smallBtn","$spinner","button","effect","effectClassName","opacity","start","getThumbPos","slidePos","thumbPos","ownerDocument","element","elementRect","getBoundingClientRect","parentRects","parentElement","every","parentRect","visiblePixelX","right","visiblePixelY","bottom","isElementVisible","parseFloat","siblings","unbind","prev","uid","body","done","cleanUp","focusBack","args","Array","slice","arguments","unshift","force","$caption","isHiddenControls","prop","toggleClass","toggleControls","version","command","open","all","destroy","createTouch","test","navigator","userAgent","use3d","getComputedStyle","getPropertyValue","documentMode","matrix","eq","indexOf","transRez","exec","props","position","transform","to","leaveAnimationName","propertyName","selector","_run","currentTarget","params","param","youtube","matcher","autoplay","autohide","fs","rel","hd","wmode","enablejsapi","html5","paramPlace","vimeo","show_title","show_byline","show_portrait","fullscreen","api","metacafe","dailymotion","additionalInfos","vine","instagram","google_maps","urlParams","provider","decodeURIComponent","contentProvider","cancelAFrame","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","pointers","result","touches","changedTouches","pageX","pageY","clientX","clientY","distance","point2","point1","what","sqrt","pow","isClickable","onclick","atts","attributes","nodeName","substr","isScrollable","overflowY","overflowX","horizontal","scrollHeight","clientHeight","clientWidth","Guestures","$bg","bg","$stage","proxy","ontouchstart","isTouchDevice","startPoints","canTap","startTime","distanceX","distanceY","isPanning","isSwiping","isZooming","sliderStartPos","sliderLastPos","contentStartPos","contentLastPos","centerPointStartX","centerPointStartY","percentageOfImageAtPinchPointX","percentageOfImageAtPinchPointY","startDistanceBetweenFingers","ontouchmove","newPoints","onSwipe","onPan","onZoom","angle","swiping","atan2","PI","inTransition","requestId","newOffsetX","newOffsetY","newPos","limitMovement","newWidth","newHeight","minTranslateX","minTranslateY","maxTranslateX","maxTranslateY","currentOffsetX","currentOffsetY","limitPosition","currentWidth","currentHeight","pinchRatio","translateFromZoomingX","translateFromZoomingY","centerPointEndX","centerPointEndY","translateFromTranslatingX","ontouchend","dMs","panning","zooming","endPoints","onTap","velocityX","velocityY","speedX","endPanning","endZooming","endSwiping","reset","where","tapX","tapY","process","prefix","action","startEvent","tapped","timer","$button","toggle","set","clear","onInit.fb","beforeShow.fb","afterShow.fb","afterKeydown.fb","keypress","beforeClose.fb onDeactivate.fb","hidden","val","fnMap","FullScreen","request","elem","requestFullscreen","ALLOW_KEYBOARD_INPUT","exit","exitFullscreen","isFullscreen","Boolean","fullscreenElement","enabled","fullscreenEnabled","beforeClose.fb","fullscreenchange","FancyThumbs","$grid","$list","isVisible","first","second","list","widthRatio","heightRatio","$parent","thumbWidth","thumbHeight","margin-top","margin-left","Thumbs","escapeSelector","sel","ch","asCodePoint","charCodeAt","toString","currentHash","timerID","parseUrl","pop","gallery","join","triggerFromUrl","getGallery","origHash","history","title","pathname","search","replaceState","nav","overlay","navToggle","toggleNav","querySelector","getAttribute","setAttribute","visibility","classList","add","addEventListener","filterToggle","filterClose","filterOverlay","closeFilters"],"mappings":"aACA,IAAAA,EAAA,GAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAC,QAGA,IAAAC,EAAAJ,EAAAE,GAAA,CACAG,EAAAH,EACAI,GAAA,EACAH,QAAA,IAUA,OANAI,EAAAL,GAAAM,KAAAJ,EAAAD,QAAAC,IAAAD,QAAAF,GAGAG,EAAAE,GAAA,EAGAF,EAAAD,QAKAF,EAAAQ,EAAAF,EAGAN,EAAAS,EAAAV,EAGAC,EAAAU,EAAA,SAAAR,EAAAS,EAAAC,GACAZ,EAAAa,EAAAX,EAAAS,IACAG,OAAAC,eAAAb,EAAAS,EAAA,CAA0CK,YAAA,EAAAC,IAAAL,KAK1CZ,EAAAkB,EAAA,SAAAhB,GACA,oBAAAiB,eAAAC,aACAN,OAAAC,eAAAb,EAAAiB,OAAAC,YAAA,CAAwDC,MAAA,WAExDP,OAAAC,eAAAb,EAAA,cAAiDmB,OAAA,KAQjDrB,EAAAsB,EAAA,SAAAD,EAAAE,GAEA,GADA,EAAAA,IAAAF,EAAArB,EAAAqB,IACA,EAAAE,EAAA,OAAAF,EACA,KAAAE,GAAA,iBAAAF,QAAAG,WAAA,OAAAH,EACA,IAAAI,EAAAX,OAAAY,OAAA,MAGA,GAFA1B,EAAAkB,EAAAO,GACAX,OAAAC,eAAAU,EAAA,WAAyCT,YAAA,EAAAK,UACzC,EAAAE,GAAA,iBAAAF,EAAA,QAAAM,KAAAN,EAAArB,EAAAU,EAAAe,EAAAE,EAAA,SAAAA,GAAgH,OAAAN,EAAAM,IAAqBC,KAAA,KAAAD,IACrI,OAAAF,GAIAzB,EAAA6B,EAAA,SAAA1B,GACA,IAAAS,EAAAT,KAAAqB,WACA,WAA2B,OAAArB,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAH,EAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAiB,EAAAC,GAAsD,OAAAjB,OAAAkB,UAAAC,eAAA1B,KAAAuB,EAAAC,IAGtD/B,EAAAkC,EAAA,GAIAlC,IAAAmC,EAAA,mCClEAnC,EAAA,GACAA,EAAA,GACAA,EAAA,iCCXA,IAAYoC,EAPZpC,EAAA,IAOYoC,EAeNC,QAZF,gBAAiBC,GAAI,QAAQ,SAAWC,GAC1CA,EAAEC,iBAEF,IAAIC,EAASC,KAAKC,KACdC,EAAUR,EAAGK,GAEjBL,EAAG,cAAeS,OAAOC,QAAS,CACjCC,UAAaH,EAAQI,SAASC,KAC5B,IAAK,QAAS,WAChBC,OAAOC,SAASR,KAAOF,MAUpBJ,OAFF,gBAAiBe,KAAM,UAAWC,KAAM,wCAqCtChB,OA9BF,mBAAoBiB,SAAU,CAChCC,OAAO,EAEPC,SAAW,SAAUC,EAAUC,GAC9B,IAAIC,EACHC,EAEAC,EAAQH,EAAQI,SAEZD,IACJA,EAAME,OAENJ,EAASD,EAAQM,OAAOL,SACxBC,EAASF,EAAQM,OAAOJ,SAAW,MAP3B,GAAK,GASSD,EACrBC,EAASD,GAVF,GAAK,GAYZA,EAAQC,GAZD,GAAK,GAebC,EAAMI,IAAK,CACVN,MAASA,EACTC,OAASA,IACNM,yCCs2FN,IAAU9B,EAMP+B,EAwBAC,GAp7FH,SAAUlB,EAAQmB,EAAUjC,EAAGkC,GAM7B,GAAMlC,EAON,GAAKA,EAAEmC,GAAGjB,SAENlB,EAAEoC,MAAM,oCAFZ,CAUA,IA4nFYC,EA5nFRL,EAAW,CAGXM,MAAO,EAGPC,OAAS,CAAC,GAAI,GAGdC,OAAS,GAGTC,UAAW,EAGXC,QAAS,EAGTC,SAAU,EAGVC,SAAU,EAKVC,QAAU,CACN,YACA,aACA,SACA,SAIJC,SAAW,EAKXC,SAAW,OAGXC,SAAU,EAGVC,OAAQ,EAERC,MAAQ,CAKJC,QAAU,QAIdC,KAAO,CAGHC,SAAW,CAIPC,KAAO,CACHpC,UAAW,KAMvBqC,OAAS,CAGLC,IAAM,+NAKNL,SAAU,EAIVtB,IAAM,GAGN4B,KAAO,CACHC,UAAY,SAYpBC,gBAAkB,OAGlBC,kBAAoB,IAIpBC,YAAc,OAadC,iBAAmB,OAGnBC,mBAAqB,IAGrBC,WAAa,GAGbC,UAAY,GAGZC,QACI,o2BAyBJC,WAAa,uCAGbC,SAAW,oDAEXC,OAAS,CACLC,UAAa,4GACbC,WAAa,yHACbC,OAAa,4GACbC,MAAa,yGAIb1B,SAAa,wFAIjB2B,SAAW,OAOXC,WAAY,EAGZC,WAAY,EAGZC,WAAY,EAMZN,WAAa,CACTO,WAAY,GAGhBC,MAAQ,CACJC,UAAW,EACXC,UAAW,GAKf1E,KAAO,KAaP2E,MAAQ,GAERZ,UAAY,CACRQ,WAAY,EACZK,MAAY,KAGhBX,OAAS,CACLM,WAAc,EACdM,aAAc,GAelBC,OAAerF,EAAEsF,KAEjBC,WAAevF,EAAEsF,KACjBE,UAAexF,EAAEsF,KAEjBG,WAAezF,EAAEsF,KACjBI,UAAe1F,EAAEsF,KAEjBK,YAAe3F,EAAEsF,KACjBM,WAAe5F,EAAEsF,KAEjBO,WAAe7F,EAAEsF,KACjBQ,aAAe9F,EAAEsF,KAkBjBS,aAAe,SAAUzE,EAAS0E,GAC9B,MAAwB,UAAjB1E,EAAQ2E,MAAmB,QAItCC,WAAa,QAGbC,aAAe,QAGfC,iBAAkB,EAClBC,eAAkB,EAClBC,iBAAkB,EAMlBC,OAAS,CACLR,aAAe,SAAUzE,EAAS0E,GAC9B,MAAwB,UAAjB1E,EAAQ2E,MAAmB,kBAEtCC,WAAa,SAAU5E,EAAS0E,GAC5B,MAAwB,UAAjB1E,EAAQ2E,KAAmB,iBAAmB,SAEzDG,gBAAkB,SAAU9E,EAAS0E,GACjC,MAAwB,UAAjB1E,EAAQ2E,MAAmB,QAEtCI,cAAgB,SAAU/E,EAAS0E,GAC/B,MAAwB,UAAjB1E,EAAQ2E,MAAmB,SAQ1CO,KAAO,KACPC,KAAO,CACHC,GAAO,CACHC,MAAc,QACdC,KAAc,OACdC,KAAc,WACdC,MAAc,wEACdC,WAAc,kBACdC,UAAc,kBACdC,YAAc,cACdC,OAAc,cAElBC,GAAO,CACHR,MAAc,aACdC,KAAc,SACdC,KAAc,SACdC,MAAc,qGACdC,WAAc,mBACdC,UAAc,mBACdC,YAAc,WACdC,OAAc,oBAStBE,EAAKpH,EAAEc,GACPuG,EAAKrH,EAAEiC,GAEPqF,EAAS,EAcTC,EACOzG,EAAO0G,uBACN1G,EAAO2G,6BACP3G,EAAO4G,0BACP5G,EAAO6G,wBAEP,SAAUC,GACN,OAAO9G,EAAO+G,WAAWD,EAAU,IAAO,KAQtDE,EAAiB,WACjB,IAAI5I,EAAG6I,EAAK9F,EAAS+F,cAAc,eAE/BC,EAAc,CACdC,WAAoB,gBACpBC,YAAoB,iBACpBC,cAAoB,gBACpBC,iBAAoB,uBAGxB,IAAKnJ,KAAK+I,EACN,QAnZV,IAmZcF,EAAGO,MAAMpJ,GACT,OAAO+I,EAAY/I,GAZV,GAsBjBqJ,EAAc,SAAUC,GACxB,OAASA,GAAOA,EAAIC,QAAUD,EAAI,GAAGE,cAOrCC,EAAW,SAAUC,EAASC,EAAMC,GACzBxI,KAENuI,KAAQ7I,EAAE+I,QAAQ,EAAM,CAAED,MAAQA,GAAS9G,EAAU6G,GAAQ,IAG7DA,GAAQ7I,EAAEgJ,QAASH,EAAKhG,WALlBvC,KAMFuI,KAAKhG,QAAUgG,EAAKhG,SANlBvC,KASN2I,GATM3I,KASOuI,KAAKI,MAAQ3B,EATpBhH,KAUN4I,MAAQ,GAVF5I,KAYN6I,UAAYC,SAZN9I,KAYqBuI,KAAKC,MAAO,KAAQ,EAZzCxI,KAaN+I,UAAY,KAbN/I,KAeNgJ,QAAU,KAfJhJ,KAgBNiJ,QAAU,EAhBJjJ,KAkBNkJ,SAAW,KAlBLlJ,KAqBNmJ,YAAab,GArBPtI,KAuBA4I,MAAMT,SAvBNnI,KA4BNoJ,WAAa1J,EAAEiC,EAAS0H,eAAeC,OA5BjCtJ,KA+BNuJ,OAAS,GA/BHvJ,KAiCNwJ,KAAMlB,KAIf5I,EAAE+I,OAAOJ,EAAS/I,UAAW,CAKzBkK,KAAO,WACH,IAEIC,EAAWC,EAAYC,EAFvBC,EAAO5J,KAIP6J,EAAgBD,EAAKhB,MAAOgB,EAAKf,WAAYN,KAEjDqB,EAAKvJ,UAAa0G,EAAG1G,YACrBuJ,EAAKE,WAAa/C,EAAG+C,aAMfpK,EAAEkB,SAASmJ,eAAkBrK,EAAEkB,SAASoJ,UAA4C,WAAhCtK,EAAG,QAAS6B,IAAI,cACtEkI,EAAY/J,EAAG,QAASuB,QAExBvB,EAAG,QAASuK,SAAU,qBAGtBR,EAAY/J,EAAG,QAASuB,QAAUwI,GAGjB,GACb/J,EAAG,QAASwK,OAAQ,yHAA2HT,EAAY,kBASnKE,EAAY,GAEZjK,EAAEyK,KAAMN,EAActH,QAAS,SAAUiG,EAAO7J,GAC5CgL,GAAeE,EAAc9F,OAAQpF,IAAW,KAKpD+K,EAAahK,EAAGkK,EAAKQ,UAAWR,EAAMC,EAAcjG,QAAQyG,QAAS,cAAmBV,KACnFM,SAAU,sBACV9G,KAAK,KAAM,sBAAwByG,EAAKjB,IACxCsB,SAAUJ,EAAclG,WACxBX,KAAM,WAAY4G,GAClBU,UAAWT,EAAczF,UAG9BwF,EAAKW,MAAQ,CACTC,UAAYd,GAGhB,CAAE,KAAM,QAAS,UAAW,UAAW,QAAS,WAAYe,QAAQ,SAASC,GACzEd,EAAKW,MAAOG,GAAShB,EAAWhJ,KAAM,aAAegK,OAInDb,EAAczH,QAAUwH,EAAKhB,MAAMT,OAAS,IAC9CuB,EAAWhJ,KAAK,wBAAwBiK,SAGtCd,EAAcxH,SAChBuH,EAAKW,MAAMlI,QAAQsI,SAGjBd,EAAcvH,SAChBsH,EAAKW,MAAMjI,QAAQqI,SAGvBf,EAAKgB,QAAS,UAGdhB,EAAKiB,WAGLjB,EAAKkB,OAAQlB,EAAKf,YAQtBuB,UAAY,SAAUW,EAAKC,GACvB,IAAIC,EAAMF,EAAIxC,KAAKpC,KAAM4E,EAAIxC,KAAKrC,MAElC,OAAO8E,EAAIX,QAAQ,iBAAkB,SAASa,EAAO/L,GACjD,IAAIR,EAAQsM,EAAI9L,GAEhB,YA3iBd,IA2iBmBR,EACMuM,EAGJvM,KAQfwK,YAAc,SAAWb,GACrB,IAAIsB,EAAQ5J,KACRmL,EAAQzL,EAAE0L,UAAW9C,GAEzB5I,EAAEyK,KAAKgB,EAAO,SAAUzN,EAAGgN,GACvB,IAGIW,EACA1F,EACA2F,EACAC,EANAR,EAAO,GACPxC,EAAO,GACPvF,EAAO,GASNtD,EAAE8L,cAAed,IAKlBK,EAAOL,EACPnC,EAAOmC,EAAKnC,MAAQmC,GAEO,WAAnBhL,EAAEiG,KAAM+E,IAAuBhL,EAAGgL,GAAOvC,QAIjDkD,EAAQ3L,EAAGgL,GACX1H,EAAQqI,EAAMrI,OAEduF,EAAO,YAAavF,EAAOA,EAAKyI,QAAU,GAC1ClD,EAA0B,WAAnB7I,EAAEiG,KAAM4C,GAAsBA,EAAO,GAE5CwC,EAAIO,IAAO,QAAStI,EAAOA,EAAKsI,IAAQ/C,EAAK+C,KAAOD,EAAMlI,KAAM,QAEhE,CAAE,QAAS,SAAU,QAAS,OAAQ,UAAWsH,QAAQ,SAASC,GACzDA,KAAQ1H,IACTuF,EAAMmC,GAAS1H,EAAM0H,MAIxB,WAAY1H,IACbuF,EAAK3F,MAAQ,CAAE8I,OAAS1I,EAAK0I,SAGjCnD,EAAKoD,MAAQN,EAEPN,EAAIpF,MAASoF,EAAIO,MACnBP,EAAIpF,KAAO,SACXoF,EAAIO,IAAOZ,IAQfK,EAAM,CACFpF,KAAO,OACP2F,IAAOZ,EAAO,IAMtBK,EAAIxC,KAAO7I,EAAE+I,QAAQ,EAAM,GAAImB,EAAKrB,KAAMA,GAErC7I,EAAEkB,SAASoJ,WACZe,EAAIxC,KAAO7I,EAAE+I,QAAQ,EAAM,GAAIsC,EAAIxC,KAAMwC,EAAIxC,KAAKtC,SAOtDN,EAAOoF,EAAIpF,MAAQoF,EAAIxC,KAAK5C,KAC5B2F,EAAOP,EAAIO,KAAO,IAEZ3F,GAAQ2F,IACLA,EAAIJ,MAAM,wFACXvF,EAAO,QAEC2F,EAAIJ,MAAM,wBAClBvF,EAAO,MAEmB,MAAlB2F,EAAIM,OAAO,KACnBjG,EAAO,WAIfoF,EAAIpF,KAAOA,EAMXoF,EAAIvC,MAAQoB,EAAKhB,MAAMT,OAGlB4C,EAAIxC,KAAKoD,QAAUZ,EAAIxC,KAAKoD,MAAMxD,eAC5B4C,EAAIxC,KAAKoD,OAGdZ,EAAIxC,KAAKsD,QAAUd,EAAIxC,KAAKoD,QAC9BZ,EAAIxC,KAAKsD,OAASd,EAAIxC,KAAKoD,MAAMjL,KAAM,cAGtCqK,EAAIxC,KAAKsD,SAAWd,EAAIxC,KAAKsD,OAAO1D,eAC9B4C,EAAIxC,KAAKsD,OAIgB,aAA/BnM,EAAEiG,KAAMoF,EAAIxC,KAAKuD,SAClBf,EAAIxC,KAAKuD,QAAUf,EAAIxC,KAAKuD,QAAQC,MAAOrB,EAAM,CAAEd,EAAMmB,IAEjD,YAAa/H,IACrB+H,EAAIxC,KAAKuD,QAAU9I,EAAK8I,SAI5Bf,EAAIxC,KAAKuD,aAhrBvB,IAgrBiCf,EAAIxC,KAAKuD,QAAwB,GAAKf,EAAIxC,KAAKuD,QAAU,GAI9D,SAATnG,IACD4F,EAAWD,EAAIU,MAAM,MAAO,IAEd7D,OAAS,IACnB4C,EAAIO,IAAMC,EAASU,QAEnBlB,EAAIxC,KAAK2D,OAASX,EAASU,SAIT,QAArBlB,EAAIxC,KAAK9F,WAEL/C,EAAEyM,QAASxG,EAAM,CAAC,OAAQ,SAAU,UAAa,GAClDoF,EAAIxC,KAAKjG,SAAW,EACpByI,EAAIxC,KAAK9F,UAAW,GAGpBsI,EAAIxC,KAAK9F,UAAW,GAMd,QAATkD,IACDoF,EAAIpF,KAAO,SAEXoF,EAAIxC,KAAKtF,OAAOJ,SAAU,GAIzBkI,EAAIxC,KAAK5F,QAEVoI,EAAIxC,KAAO7I,EAAE+I,QAAO,EAAMsC,EAAIxC,KAAM,CAEhClG,QAAU,EACVC,QAAU,EAEVG,SAAW,EAGXN,SAAW,EAGX6B,UAAa,EACbC,WAAa,EACbC,OAAa,EACbO,MAAa,EAGbgB,cAAkB,EAClBG,YAAkB,EAClBC,cAAkB,EAClBC,iBAAkB,EAClBC,eAAkB,EAClBC,iBAAkB,KAQ1B4D,EAAKhB,MAAMwD,KAAMrB,MAezBsB,UAAY,WACR,IAAIzC,EAAO5J,KAEX4J,EAAK0C,eAGL1C,EAAKW,MAAMC,UAAU5K,GAAG,iBAAkB,wBAAyB,SAASC,GACxEA,EAAE0M,kBACF1M,EAAEC,iBAEF8J,EAAKzF,MAAOtE,KAEbD,GAAI,iCAAkC,uBAAwB,SAASC,GACtEA,EAAE0M,kBACF1M,EAAEC,iBAEF8J,EAAK4C,aAEN5M,GAAI,iCAAkC,uBAAwB,SAASC,GACtEA,EAAE0M,kBACF1M,EAAEC,iBAEF8J,EAAK6C,SAMT3F,EAAGlH,GAAG,iCAAkC,SAASC,GAExCA,GAAKA,EAAE6M,eAA0C,WAAzB7M,EAAE6M,cAAc/G,KAEzCsB,EAAc,WACV2C,EAAK+C,YAKT/C,EAAKW,MAAMqC,MAAMvL,OAEjBkG,WAAW,WACPqC,EAAKW,MAAMqC,MAAMpL,OAEjBoI,EAAK+C,UACN,QAQX5F,EAAGnH,GAAG,aAAc,SAASC,GACzB,IAAIkB,EAAWrB,EAAEkB,SAAWlB,EAAEkB,SAASmJ,cAAgB,KAElDhJ,EAAS8L,YAAc9L,EAASC,UAAYD,EAASC,QAAQuH,KAAKhE,WAAa7E,EAAGG,EAAEE,QAAS+M,SAAU,uBAA0BpN,EAAGG,EAAEE,QAASgN,GAAIpL,IAInJZ,GAAgD,UAApCrB,EAAGG,EAAEE,QAASwB,IAAK,cAA6BR,EAASwJ,MAAMC,UAAUwC,IAAKnN,EAAEE,QAASoI,SACtGtI,EAAE0M,kBAEFxL,EAASF,QAGTiG,EAAGzG,UAAWuJ,EAAKvJ,WAAYyJ,WAAYF,EAAKE,eAMxD/C,EAAGnH,GAAG,aAAc,SAAUC,GAC1B,IAAImB,EAAU4I,EAAK5I,QACfiM,EAAUpN,EAAEqN,SAAWrN,EAAEsN,MAE7B,GAAMnM,GAAYA,EAAQuH,KAAKpG,WAI1BzC,EAAEG,EAAEE,QAAQgN,GAAG,WAAYrN,EAAEG,EAAEE,QAAQgN,GAAG,YAK/C,OAAiB,IAAZE,GAA6B,KAAZA,GAClBpN,EAAEC,sBAEF8J,EAAKzF,MAAOtE,IAMC,KAAZoN,GAA8B,KAAZA,GACnBpN,EAAEC,sBAEF8J,EAAK4C,YAMQ,KAAZS,GAA8B,KAAZA,GACnBpN,EAAEC,sBAEF8J,EAAK6C,aAKT7C,EAAKgB,QAAQ,eAAgB/K,EAAGoN,KAK/BrD,EAAKhB,MAAOgB,EAAKf,WAAYN,KAAK/F,WACnCoH,EAAKwD,mBAAqB,EAE1BrG,EAAGnH,GAAG,gJAAiJ,WACnJgK,EAAKwD,mBAAqB,EAErBxD,EAAKyD,QACNzD,EAAK0D,eAGT1D,EAAKyD,QAAS,IAGlBzD,EAAK2D,aAAe/M,EAAOgN,YAAY,WAEnC5D,EAAKwD,qBAEAxD,EAAKwD,oBAAsBxD,EAAKhB,MAAOgB,EAAKf,WAAYN,KAAK/F,WAC9DoH,EAAKyD,QAAS,EACdzD,EAAKwD,mBAAqB,EAE1BxD,EAAK6D,iBAGV,OASXnB,aAAe,WAGXxF,EAAG4G,IAAK,kCACR3G,EAAG2G,IAAK,kCAER1N,KAAKuK,MAAMC,UAAUkD,IAAK,+BALf1N,KAODuN,eACN/M,EAAOmN,cARA3N,KAQoBuN,cARpBvN,KAUFuN,aAAe,OAQ5Bf,SAAW,SAAUoB,GACjB,OAAO5N,KAAK8K,OAAQ9K,KAAKiJ,QAAU,EAAG2E,IAO1CnB,KAAO,SAAUmB,GACb,OAAO5N,KAAK8K,OAAQ9K,KAAKiJ,QAAU,EAAG2E,IAO1C9C,OAAS,SAAW+C,EAAKD,EAAUE,GAC/B,IACI5E,EACAlH,EACAhB,EACAwL,EACAuB,EACAC,EACAC,EAPArE,EAAO5J,KASPkO,EAAWtE,EAAKhB,MAAMT,OAE1B,KAAKyB,EAAKuE,WAAavE,EAAKiD,WAAejD,EAAKwE,aAAexE,EAAKV,UAApE,CAOA,GAHA2E,EAAO/E,SAAU+E,EAAK,MACtB7L,EAAO4H,EAAK5I,QAAU4I,EAAK5I,QAAQuH,KAAKvG,KAAO4H,EAAKrB,KAAKvG,QAEzC6L,EAAM,GAAKA,GAAOK,GAC9B,OAAO,EAKX,GAFAhF,EAAWU,EAAKV,SAA+B,OAAlBU,EAAKV,WAE7BgF,EAAW,IAAMhF,GAAcU,EAAKuE,WAAzC,CA4CA,GAxCA3B,EAAW5C,EAAK5I,QAEhB4I,EAAKb,UAAYa,EAAKf,UACtBe,EAAKZ,QAAYY,EAAKX,QAGtBjI,EAAU4I,EAAKyE,YAAaR,GAEvBK,EAAW,KACPlM,GAAQhB,EAAQwH,MAAQ,IACzBoB,EAAKyE,YAAaR,EAAM,IAGvB7L,GAAQhB,EAAQwH,MAAQ0F,EAAW,IACpCtE,EAAKyE,YAAaR,EAAM,IAIhCjE,EAAK5I,QAAYA,EACjB4I,EAAKf,UAAY7H,EAAQwH,MACzBoB,EAAKX,QAAYjI,EAAQ6M,IAEzBjE,EAAKgB,QAAS,aAAc1B,GAE5BU,EAAK0E,iBAELN,EAAatO,EAAEkB,SAAS2N,aAAcvN,EAAQM,QAE9CN,EAAQwN,SAAuC,IAApBR,EAAWS,MAAiC,IAAnBT,EAAWzN,OAAgBS,EAAQM,OAAOwL,SAAU,qBACxG9L,EAAQ0N,oBAl/BlB,EAo/BehP,EAAEiP,UAAWf,GACd5M,EAAQ0N,eAAiBd,EAEzBA,EAAW5M,EAAQuH,KAAMW,EAAW,oBAAsB,sBAG9D0E,EAAW9E,SAAU8E,EAAU,IAG1B1E,EAmBD,OAjBKlI,EAAQuH,KAAKlF,iBAAmBuK,GACjChE,EAAKW,MAAMC,UAAUjJ,IAAK,sBAAuBqM,EAAW,MAGhEhE,EAAKW,MAAMC,UAAUoE,YAAa,sBAElC3G,EAAa2B,EAAKW,MAAMC,WAExBZ,EAAKW,MAAMC,UAAUP,SAAU,oBAG/BjJ,EAAQM,OAAO2I,SAAU,2BAEzBL,EAAKiF,UAAW7N,QAEhB4I,EAAK/G,UAMTnD,EAAEyK,KAAKP,EAAKL,OAAQ,SAAUf,EAAOsF,GACjCpO,EAAEkB,SAAST,KAAM2N,EAAMxM,UAI3BN,EAAQM,OAAOsN,YAAa,iDAAkD3E,SAAU,2BAGnFjJ,EAAQwN,SACTT,EAAce,KAAKC,MAAO/N,EAAQM,OAAOL,SAEzCvB,EAAEyK,KAAKP,EAAKL,OAAQ,SAAUf,EAAOsF,GACjC,IAAID,EAAMC,EAAMD,IAAM7M,EAAQ6M,IAE9BnO,EAAEkB,SAASR,QAAS0N,EAAMxM,OAAQ,CAC9Bf,IAAO,EACPkO,KAASZ,EAAME,EAAkBF,EAAMC,EAAMvF,KAAKrG,QACnD0L,EAAU,WAETE,EAAMxM,OAAO0N,WAAW,SAASJ,YAAa,iDAEzCd,EAAMD,MAAQjE,EAAKX,UACpBjI,EAAQwN,SAAU,EAElB5E,EAAKqF,iBAMjBrF,EAAKW,MAAMqC,MAAMsC,WAAWF,WAAY,SAMvChO,EAAQmO,SACTvF,EAAKwF,cAAepO,GAGpB4I,EAAKiF,UAAW7N,GAGpB4I,EAAK/G,UAEA2J,EAASqB,MAAQ7M,EAAQ6M,MAO9BI,EAAkB,oBAAuBzB,EAASqB,IAAM7M,EAAQ6M,IAAM,OAAS,YAE/ErB,EAASlL,OAAOsN,YAAa,kGAE7BpC,EAAS6C,YAAa,EAEhBzB,IAAe5M,EAAQwN,SAAYxN,EAAQuH,KAAK/E,oBAIjDxC,EAAQwN,QACThC,EAASlL,OAAO2I,SAAUgE,IAI1BA,EAAkB,qBAAuBA,EAAkB,gBAAkBjN,EAAQuH,KAAK/E,iBAE1F9D,EAAEkB,SAASR,QAASoM,EAASlL,OAAQ2M,EAAiBL,EAAU,WAC5DpB,EAASlL,OAAOsN,YAAaX,GAAkBe,WAAY,iBAYvEX,YAAc,SAAUR,GAEpB,IACIvM,EACAkH,EAiBJ,OAdAA,GADAA,EAAQqF,EAJG7N,KAIQ4I,MAAMT,QACT,EALLnI,KAKc4I,MAAMT,OAASK,EAAQA,GALrCxI,KAOAuJ,OAAQsE,IAPR7N,KAOsB4I,MAAOJ,KACpClH,EAAS5B,EAAE,sCAAsC4P,SAR1CtP,KAQyDuK,MAAMqC,OAR/D5M,KAUFuJ,OAAQsE,GAAQnO,EAAE+I,QAAQ,EAAM,GAV9BzI,KAUuC4I,MAAOJ,GAAS,CAC1DqF,IAAWA,EACXvM,OAAWA,EACX6N,UAAW,IAbRnP,KAgBFuP,YAhBEvP,KAgBgBuJ,OAAQsE,KAhBxB7N,KAmBCuJ,OAAQsE,IAOxB2B,cAAgB,SAAUC,EAAGC,EAAG9B,GAE5B,IAKI+B,EAAQC,EAAMC,EAAMC,EAAQC,EAL5BnG,EAAO5J,KAEPgB,EAAU4I,EAAK5I,QACfgP,EAAUhP,EAAQI,SAIlB2M,EAAejF,SAAU9H,EAAQM,OAAOL,QAAS,IACjDgP,EAAenH,SAAU9H,EAAQM,OAAOJ,SAAU,IAElDgP,EAAelP,EAAQC,MACvBkP,EAAenP,EAAQE,OAEH,SAAhBF,EAAQ2E,MAAoB3E,EAAQoP,WAAcJ,GAASpG,EAAKwE,cAIxE1O,EAAEkB,SAAST,KAAM6P,GAEjBpG,EAAKwE,aAAc,EAEnBqB,OAzpCV,IAypCcA,EAAiC,GAAf1B,EAAsB0B,EAC5CC,OA1pCV,IA0pCcA,EAAiC,GAAfO,EAAsBP,EAI5CI,EAAUI,GAFVP,EAASjQ,EAAEkB,SAAS2N,aAAcyB,IAEF/O,MAChC8O,EAAUI,EAAeR,EAAOzO,OAGhC0O,EAAuB,GAAd7B,EAAmC,GAAdmC,EAC9BL,EAAwB,GAAfI,EAAoC,GAAfE,EAGzBD,EAAcnC,KACf6B,EAAOD,EAAOlB,KAAOqB,GAAaL,EAAIK,EAAWL,IAErC,IACRG,EAAO,GAGNA,EAAQ7B,EAAcmC,IACvBN,EAAO7B,EAAcmC,IAIxBC,EAAeF,KAChBJ,EAAOF,EAAOpP,IAAOwP,GAAaL,EAAIK,EAAWL,IAErC,IACRG,EAAO,GAGNA,EAAQI,EAAeE,IACxBN,EAAOI,EAAeE,IAI9BvG,EAAKyG,aAAcH,EAAaC,GAEhCzQ,EAAEkB,SAASR,QAAS4P,EAAO,CACvBzP,IAASsP,EACTpB,KAASmB,EACTE,OAASA,EACTC,OAASA,GACVnC,GAAY,IAAK,WAChBhE,EAAKwE,aAAc,IAIlBxE,EAAK0G,WAAa1G,EAAK0G,UAAUC,UAClC3G,EAAK0G,UAAUnQ,SAQvBqQ,WAAa,SAAU5C,GAEnB,IAII6C,EAJA7G,EAAO5J,KAEPgB,EAAU4I,EAAK5I,QACfgP,EAAUhP,EAAQI,SAGE,SAAhBJ,EAAQ2E,MAAoB3E,EAAQoP,WAAcJ,GAASpG,EAAKwE,cAIxE1O,EAAEkB,SAAST,KAAM6P,GAEjBpG,EAAKwE,aAAc,EAEnBqC,EAAM7G,EAAK8G,UAAW1P,GAEtB4I,EAAKyG,aAAcI,EAAIxP,MAAOwP,EAAIvP,QAElCxB,EAAEkB,SAASR,QAAS4P,EAAO,CACvBzP,IAASkQ,EAAIlQ,IACbkO,KAASgC,EAAIhC,KACbqB,OAASW,EAAIxP,MAAS+O,EAAM/O,QAC5B8O,OAASU,EAAIvP,OAAS8O,EAAM9O,UAC7B0M,GAAY,IAAK,WAChBhE,EAAKwE,aAAc,MAQ3BsC,UAAY,SAAU5C,GAClB,IAQIC,EAAakC,EAAcU,EAAU1P,EAAOC,EAP5C8O,EAAQlC,EAAM1M,SAEdwP,EAAY9C,EAAM7M,MAClB4P,EAAY/C,EAAM5M,OAElBe,EAAS6L,EAAMvF,KAAKtG,OAIxB,SAAM+N,IAAUA,EAAM7H,SAAayI,IAAaC,KAKtB,WAArBnR,EAAEiG,KAAM1D,KACTA,EAAS,CAAEA,EAAQA,IAGD,GAAjBA,EAAOkG,SACRlG,EAAS,CAAEA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAGlD6E,EAAG7F,QAAU,MACdgB,EAAS,CAAE,EAAG,EAAG,EAAG,IAIxB8L,EAAejF,SA5BH9I,KA4BkBuK,MAAMqC,MAAM3L,QAAS,KAAUgB,EAAQ,GAAMA,EAAQ,IACnFgO,EAAenH,SA7BH9I,KA6BkBuK,MAAMqC,MAAM1L,SAAU,KAASe,EAAQ,GAAMA,EAAQ,IAEnF0O,EAAW7B,KAAKgC,IAAI,EAAG/C,EAAc6C,EAAUX,EAAeY,GAE9D5P,EAAS6N,KAAKiC,MAAOJ,EAAWC,GAChC1P,EAAS4N,KAAKiC,MAAOJ,EAAWE,GAGzB,CACHtQ,IAASuO,KAAKiC,MAAmC,IAA1Bd,EAAe/O,IAAmBe,EAAQ,GACjEwM,KAASK,KAAKiC,MAAmC,IAA1BhD,EAAe9M,IAAmBgB,EAAQ,GACjEhB,MAASA,EACTC,OAASA,KASjByL,OAAS,WAEL,IAAI/C,EAAO5J,KAEXN,EAAEyK,KAAMP,EAAKL,OAAQ,SAAUtK,EAAK6O,GAChClE,EAAK2F,YAAazB,MAS1ByB,YAAc,SAAUzB,GAEpB,IACIkC,EAAQlC,EAAM1M,SAEb4O,IAAWlC,EAAM7M,OAAS6M,EAAM5M,UACjCxB,EAAEkB,SAAST,KAAM6P,GAEjBtQ,EAAEkB,SAASoQ,aAAchB,EANjBhQ,KAM6B0Q,UAAW5C,IAE3CA,EAAMD,MARH7N,KAQgBiJ,SARhBjJ,KASCqQ,gBAIbvC,EAAMxM,OAAOsJ,QAAS,WAbV5K,KAeP4K,QAAS,WAAYkD,IAO9BuC,aAAe,SAAUY,EAAWC,GAEhC,IAGIxH,EAHO1J,KAGWuK,MAAMC,UAAUoE,YAAY,mFAHvC5O,KAKAgB,UALAhB,KAKgB6M,YALhB7M,KASDmR,cAENzH,EAAWO,SAAU,8BA31CnC,IA61CmBgH,QA71CnB,IA61C8CC,EACbD,EAdZjR,KAc6BgB,QAAQC,OAASiQ,EAd9ClR,KAcgEgB,QAAQE,OAdxElB,KAiBiBoR,gBAMpB1H,EAAWO,SAAS,uBAvBjBjK,KA2BOgB,QAAQuH,KAAK9D,MAInBiF,EAAWO,SAAS,qBAGpBP,EAAWO,SAAS,yBAlCrBjK,KAuCMgB,QAAQuH,KAAK9D,OAC1BiF,EAAWO,SAAS,uBAS5BkH,WAAa,WAET,IAGIE,EADArQ,EAFOhB,KAEQgB,QAGnB,GAAMA,IALKhB,KAKW6M,UAQtB,SAAsB,UAAjB7L,EAAQ2E,MAAoB3E,EAAQmO,WAAanO,EAAQoP,WAC1B,SAA9BpP,EAAQuH,KAAK9C,cAA6B/F,EAAE4R,WAAYtQ,EAAQuH,KAAK9C,eAA4D,SAA1CzE,EAAQuH,KAAK9C,aAAczE,MAGpHqQ,EAjBOrR,KAiBO0Q,UAAW1P,GAEpBA,EAAQC,MAAQoQ,EAAOpQ,OAASD,EAAQE,OAASmQ,EAAOnQ,UAcrEkQ,aAAe,WAEX,IAEIpQ,EAFOhB,KAEQgB,QACfgP,EAAUhP,EAAQI,SAElBmQ,GAAM,EAOV,OALKvB,IAEDuB,GADAA,EAAM7R,EAAEkB,SAAS2N,aAAcyB,IACrB/O,MAAQD,EAAQC,OAASsQ,EAAIrQ,OAASF,EAAQE,QAGrDqQ,GAQXC,OAAS,WAEL,IAEIxQ,EAFOhB,KAEQgB,QACfgP,EAAUhP,EAAQI,SAElBmQ,GAAM,EAQV,OANKvB,IACDuB,EAROvR,KAQI0Q,UAAW1P,GACtBuQ,EAAMzC,KAAK2C,IAAKzB,EAAM/O,QAAUsQ,EAAItQ,OAAU,GAAM6N,KAAK2C,IAAKzB,EAAM9O,SAAWqQ,EAAIrQ,QAAW,GAI3FqQ,GAQX1C,UAAY,SAAUf,GAElB,IAAiBnI,EAAMrE,EACnBoQ,EADA9H,EAAO5J,KAGX,IAAK8N,EAAM6D,YAIN7D,EAAMqB,SAAX,CAmBA,OAfArB,EAAM6D,WAAY,EAElB/H,EAAKgB,QAAS,aAAckD,GAE5BnI,EAASmI,EAAMnI,MACfrE,EAASwM,EAAMxM,QAGVoM,IAAK,WACL9C,QAAS,WACTX,SAAU,oBAAuBtE,GAAQ,YACzCsE,SAAU6D,EAAMvF,KAAK7E,YAIjBiC,GAEL,IAAK,QAEDiE,EAAKgI,SAAU9D,GAEnB,MAEA,IAAK,SAEDlE,EAAKiI,UAAW/D,GAEpB,MAEA,IAAK,OAEDlE,EAAKkI,WAAYhE,EAAOA,EAAMxC,KAAOwC,EAAMxF,SAE/C,MAEA,IAAK,SAEI5I,EAAGoO,EAAMxC,KAAMnD,OAChByB,EAAKkI,WAAYhE,EAAOpO,EAAGoO,EAAMxC,MAGjC1B,EAAKmI,SAAUjE,GAGvB,MAEA,IAAK,OAEDlE,EAAKoI,YAAalE,GAElB4D,EAAWhS,EAAEoD,KAAMpD,EAAE+I,OAAQ,GAAIqF,EAAMvF,KAAKzF,KAAKC,SAAU,CACvDkP,IAAMnE,EAAMxC,IACZ4G,QAAU,SAAWlP,EAAMmP,GAEH,YAAfA,GACDvI,EAAKkI,WAAYhE,EAAO9K,IAIhClB,MAAQ,SAAWsQ,EAAOD,GAEjBC,GAAwB,UAAfD,GACVvI,EAAKmI,SAAUjE,OAM3BxM,EAAO+Q,IAAK,UAAW,WACnBX,EAASY,UAGjB,MAEA,QAEI1I,EAAKmI,SAAUjE,GAMvB,OAAO,IAQX8D,SAAW,SAAU9D,GAEjB,IAGIyE,EAAOC,EAAMC,EAASC,EAHtB9I,EAAS5J,KACT0L,EAASoC,EAAMvF,KAAK3F,MAAM8I,OAO9B,GAAKA,EAAS,CACV+G,EAAcjS,EAAOmS,kBAAoB,EACzCD,EAAclS,EAAOoS,WAAcH,GAEnCD,EAAO9G,EAAOM,MAAM,KAAK6G,IAAI,SAAWpL,GAC1C,IAAIqL,EAAM,GAgBV,OAdArL,EAAGsL,OAAO/G,MAAM,OAAOvB,QAAQ,SAAWhD,EAAI/J,GACpC,IAAIiB,EAAQmK,SAAUrB,EAAGuL,UAAU,EAAGvL,EAAGU,OAAS,GAAI,IAE/D,GAAW,IAANzK,EACJ,OAASoV,EAAIb,IAAMxK,EAGN9I,IACDmU,EAAInU,MAAUA,EACdmU,EAAIG,QAAUxL,EAAIA,EAAGU,OAAS,MAKrC2K,KAIAI,KAAK,SAAUC,EAAGC,GACrB,OAAOD,EAAExU,MAAQyU,EAAEzU,QAIrB,IAAM,IAAI0U,EAAI,EAAGA,EAAIb,EAAKrK,OAAQkL,IAAM,CACpC,IAAI5L,EAAK+K,EAAMa,GAEf,GAAsB,MAAf5L,EAAGwL,SAAmBxL,EAAG9I,OAAS+T,GAAkC,MAAfjL,EAAGwL,SAAmBxL,EAAG9I,OAAS8T,EAAY,CACtGF,EAAQ9K,EACR,QAKF8K,GAASC,EAAKrK,SAChBoK,EAAQC,EAAMA,EAAKrK,OAAS,IAG3BoK,IACDzE,EAAMxC,IAAMiH,EAAMN,IAGbnE,EAAM7M,OAAS6M,EAAM5M,QAA2B,KAAjBqR,EAAMU,UACtCnF,EAAM5M,OAAW4M,EAAM7M,MAAQ6M,EAAM5M,OAAWqR,EAAM5T,MACtDmP,EAAM7M,MAASsR,EAAM5T,QAMjCmP,EAAM1M,SAAW1B,EAAE,2CACduK,SAAU,sBACVqF,SAAUxB,EAAMxM,SAKO,IAAvBwM,EAAMvF,KAAK1F,SAAqBiL,EAAMvF,KAAKtH,OAAS6M,EAAMvF,KAAKrH,SAAY4M,EAAMvF,KAAK+K,OAASxF,EAAMvF,KAAKsD,SAE3GiC,EAAM7M,MAAS6M,EAAMvF,KAAKtH,MAC1B6M,EAAM5M,OAAS4M,EAAMvF,KAAKrH,OAE1B4M,EAAMyF,OAAS7T,EAAE,WACZ2S,IAAI,QAAS,WAEV3S,EAAEM,MAAM2K,SAERmD,EAAMyF,OAAS,KAEf3J,EAAK4J,YAAa1F,KAGrBuE,IAAI,OAAQ,WAETzI,EAAK1E,UAAW4I,GAEhBlE,EAAK4J,YAAa1F,KAGrB7D,SAAU,kBACVqF,SAAUxB,EAAM1M,UAChB+B,KAAM,MAAO2K,EAAMvF,KAAK+K,OAASxF,EAAMvF,KAAKsD,OAAO1I,KAAM,SAI9DyG,EAAK4J,YAAa1F,IAU1B0F,YAAc,SAAW1F,GACrB,IAAIlE,EAAO5J,KACPyT,EAAO/T,EAAE,WAEboO,EAAM4F,OAASD,EACVpB,IAAI,QAAS,WAEVzI,EAAKmI,SAAUjE,KAGlBuE,IAAI,OAAQ,WAGTsB,aAAc7F,EAAM8F,SAEpB9F,EAAM8F,QAAU,KAEXhK,EAAKiD,YAIViB,EAAM7M,MAASjB,KAAK6T,aACpB/F,EAAM5M,OAASlB,KAAK8T,cAEfhG,EAAMvF,KAAK3F,MAAM8I,QAClB+H,EAAKtQ,KAAM,QAAS,SAAUA,KAAM,SAAU2K,EAAMvF,KAAK3F,MAAM8I,QAGnE9B,EAAKmK,YAAajG,GAEbA,EAAMyF,OAEPzF,EAAM8F,QAAUrM,WAAW,WACvBuG,EAAM8F,QAAU,KAEhB9F,EAAMyF,OAAOlS,QAEdyN,KAAKgC,IAAK,IAAKhC,KAAKkF,IAAK,IAAMlG,EAAM5M,OAAS,QAGjD0I,EAAK1E,UAAW4I,MAIvB7D,SAAU,kBACV9G,KAAK,MAAO2K,EAAMxC,KAClBgE,SAAUxB,EAAM1M,UAEhBqS,EAAK,GAAGxE,SACPwE,EAAK7I,QAAS,QAET6I,EAAK,GAAG3R,MACd2R,EAAK7I,QAAS,SAIfkD,EAAM8F,QAAUrM,WAAW,WACjBkM,EAAK,GAAGxE,UAAanB,EAAMsC,UAC7BxG,EAAKoI,YAAalE,IAGvB,MAUX+D,UAAY,SAAU/D,GAClB,IAGImG,EAHArK,EAAO5J,KACPuI,EAAUuF,EAAMvF,KAAKtF,OACrB3B,EAASwM,EAAMxM,OAGnBwM,EAAM1M,SAAW1B,EAAE,gCAAmC6I,EAAK1F,QAAU,sBAAwB,IAAO,YAC/FtB,IAAKgH,EAAKhH,KACV+N,SAAUhO,GAEf2S,EAAUvU,EAAG6I,EAAKrF,IAAImH,QAAQ,YAAY,IAAI6J,MAAOC,YAChDhR,KAAMoF,EAAKpF,MACXmM,SAAUxB,EAAM1M,UAEhBmH,EAAK1F,SAEN+G,EAAKoI,YAAalE,GAKlBmG,EAAQrU,GAAG,mBAAoB,SAASC,GACpCG,KAAKoU,QAAU,EAEftG,EAAMxM,OAAOsJ,QAAS,WAEtBhB,EAAK1E,UAAW4I,KAMpBxM,EAAO1B,GAAG,aAAc,WACpB,IAEIyU,EACAC,EACAC,EACAC,EALAC,EAAQ3G,EAAM1M,SAOlB,GAA4B,IAAvB6S,EAAQ,GAAGG,QAAhB,CAOA,IAEIC,EADYJ,EAAQS,WACEhU,KAAK,QAE7B,MAAOiU,IAGJN,GAASA,EAAMlM,cApyDtC,IAoyDmDI,EAAKhH,IAAIN,YApyD5D,IAoyDmFsH,EAAKhH,IAAIL,UAEtEoT,EAAcL,EAAQ,GAAGW,cAAcjT,SAASkT,gBAAgBP,YAEhEC,EAAazF,KAAKgG,KAAMT,EAAMU,YAAW,IAAUN,EAAMxT,QAAUqT,IACnEE,EAAc1F,KAAKgG,KAAMT,EAAMW,aAAY,IAG3CP,EAAMlT,IAAI,CACNN,WA7yD1B,IA6yDqCsH,EAAKhH,IAAIN,MAAuBsT,GAAgBE,EAAMM,aAAgBN,EAAM7B,cAAkBrK,EAAKhH,IAAIN,MAClHC,YA9yD1B,IA8yDqCqH,EAAKhH,IAAIL,OAAuBsT,GAAgBC,EAAMO,cAAgBP,EAAMQ,eAAkB1M,EAAKhH,IAAIL,UAK1HuT,EAAM7F,YAAa,0BAMvB5O,KAAKkF,UAAW4I,GAIpBmG,EAAQ9Q,KAAM,MAAO2K,EAAMxC,MAEE,IAAxBwC,EAAMvF,KAAK9F,UACZqL,EAAM1M,SAAS8T,QAAStL,EAAKQ,UAAW0D,EAAOA,EAAMvF,KAAKxE,OAAOtB,WAIrEnB,EAAO+Q,IAAK,UAAW,WAGnB,IAEI3S,EAAGM,MAAOU,KAAM,UAAWW,OAAO8B,KAAM,MAAO,iBAEjD,MAAQwR,IAEVjV,EAAGM,MAAOmV,QAEVrH,EAAMqB,UAAW,KAUzB2C,WAAa,SAAWhE,EAAOxF,GAE3B,IA1+CiByC,EA0+CN/K,KAED6M,YAFC7M,KAMN+T,YAAajG,GAElBA,EAAMxM,OAAO6T,SAl/CIpK,EAo/CHzC,IAn/CJyC,EAAIxL,gBAAkBwL,aAAerL,GAm/CpB4I,EAAQ8M,SAASjN,QAQxCG,EAAQ8M,OAAQ,2BAA4BxK,QAAS,WAGrDkD,EAAMuH,aAAe3V,EAAG,eAAgB2B,OAAOiU,YAAahN,GAG5DA,EAAQ/G,IAAI,UAAW,iBAEduM,EAAMsC,WAGY,WAAtB1Q,EAAEiG,KAAM2C,IAIoB,KAH7BA,EAAU5I,EAAE,SAASwK,OAAQxK,EAAEqT,KAAMzK,IAAYoM,YAGpC,GAAGa,WACZjN,EAAU5I,EAAE,SAAS8V,KAAMlN,IAK9BwF,EAAMvF,KAAK2D,SACZ5D,EAAU5I,EAAE,SAAS8V,KAAMlN,GAAU5H,KAAMoN,EAAMvF,KAAK2D,UAK9D4B,EAAMxM,OAAO+Q,IAAI,UAAW,WAGnBvE,EAAMuH,eACPvH,EAAMuH,aAAaI,MAAOnN,EAAQjH,QAASsJ,SAE3CmD,EAAMuH,aAAe,MAIpBvH,EAAM4H,YACP5H,EAAM4H,UAAU/K,SAEhBmD,EAAM4H,UAAY,MAIhB5H,EAAMsC,WACR1Q,EAAEM,MAAMmV,QAERrH,EAAMqB,UAAW,KAKzBrB,EAAM1M,SAAW1B,EAAG4I,GAAUgH,SAAUxB,EAAMxM,QAEzCwM,EAAMvF,KAAK9F,WAAaqL,EAAM4H,YAC/B5H,EAAM4H,UAAYhW,EAzEXM,KAyEmBoK,UAAW0D,EAAOA,EAAMvF,KAAKxE,OAAOtB,WAAa6M,SAAUxB,EAAM1M,WAG/FpB,KAAKkF,UAAW4I,KAMpBiE,SAAW,SAAWjE,GAElBA,EAAMsC,UAAW,EAEjBtC,EAAMxM,OAAOsN,YAAa,mBAAqBd,EAAMnI,MAErD3F,KAAK8R,WAAYhE,EAAO9N,KAAKoK,UAAW0D,EAAOA,EAAMvF,KAAKzE,YAQ9DkO,YAAc,SAAUlE,IAIpBA,EAAQA,GAFG9N,KAEWgB,WAEP8M,EAAM6H,WACjB7H,EAAM6H,SAAWjW,EALVM,KAKkBuI,KAAK1E,YAAayL,SAAUxB,EAAMxM,UAQnEyS,YAAc,SAAUjG,IAIpBA,EAAQA,GAFG9N,KAEWgB,UAER8M,EAAM6H,WAChB7H,EAAM6H,SAAShL,gBAERmD,EAAM6H,WASrBzQ,UAAY,SAAU4I,GAEP9N,KAED6M,YAIViB,EAAM6D,WAAY,EAClB7D,EAAMqB,UAAY,EAPPnP,KASN4K,QAAS,YAAakD,GAThB9N,KAWN+T,YAAajG,GAEbA,EAAMvF,KAAK7F,SAAWoL,EAAM1M,WAAa0M,EAAMsC,WAGhDtC,EAAM1M,SAASxB,GAAI,iBAAkB,SAAUC,GAK3C,OAJkB,GAAZA,EAAE+V,QACH/V,EAAEC,kBAGA,IAKS,UAAfgO,EAAMnI,MACPjG,EAAG,0CAA2C4P,SAAUxB,EAAM1M,WA3B3DpB,KAgCNoP,cAAetB,KAUxBsB,cAAgB,SAAUtB,GAEtB,IAGI+H,EAAQC,EAAiBlI,EAAUmI,EAAStF,EAH5C7G,EAAS5J,KACTsB,EAASwM,EAAMxM,OAEkC0U,GAAQ,EAoB7D,OAlBAH,EAAW/H,EAAMvF,KAAMqB,EAAKV,SAAW,kBAAsB,oBAC7D0E,EAAWE,EAAMvF,KAAMqB,EAAKV,SAAW,oBAAsB,sBAE7D0E,EAAW9E,cAlhErB,IAkhE+BgF,EAAMY,eAA+Bd,EAAWE,EAAMY,eAAgB,KAEtFZ,EAAMU,SAAWV,EAAMD,MAAQjE,EAAKX,SAAY2E,IACjDiI,GAAS,GAIG,SAAXA,GAAwB/H,EAAMD,MAAQjE,EAAKX,SAAW2E,GAA2B,UAAfE,EAAMnI,OAAqBmI,EAAMsC,WAAc4F,EAAQpM,EAAKqM,YAAanI,MAC5I+H,EAAS,QAOG,SAAXA,IACDpF,EAAM7G,EAAK8G,UAAW5C,IAElBgC,OAAShB,KAAKC,MAAQ0B,EAAIxP,MAAS+U,EAAM/U,MAAU,KAAQ,IAC/DwP,EAAIV,OAASjB,KAAKC,MAAQ0B,EAAIvP,OAAS8U,EAAM9U,OAAU,KAAQ,WAExDuP,EAAIxP,aACJwP,EAAIvP,OAKK,SAFhB6U,EAAUjI,EAAMvF,KAAKhF,eAGjBwS,EAAUjH,KAAK2C,IAAK3D,EAAM7M,MAAQ6M,EAAM5M,OAAS8U,EAAM/U,MAAQ+U,EAAM9U,QAAW,IAG/E6U,IACDC,EAAMD,QAAU,GAChBtF,EAAIsF,QAAY,GAIpBrW,EAAEkB,SAASoQ,aAAclD,EAAM1M,SAASwN,YAAa,sBAAwBoH,GAE7E/N,EAAa6F,EAAM1M,eAGnB1B,EAAEkB,SAASR,QAAS0N,EAAM1M,SAAUqP,EAAK7C,EAAU,WAC/ChE,EAAKqF,eAObrF,EAAK2F,YAAazB,GAMZ+H,GAYNnW,EAAEkB,SAAST,KAAMmB,GAEjBwU,EAAkB,sCAAyChI,EAAMD,IAAMjE,EAAKZ,QAAU,OAAS,YAAe,gBAAkB6M,EAEhIvU,EAAO0N,WAAY,SAAUJ,YAAa,yEAA0E3E,SAAU6L,GAE9HhI,EAAM1M,SAASwN,YAAa,sBAG5B3G,EAAa3G,QAEb5B,EAAEkB,SAASR,QAASkB,EAAQ,0BAA2BsM,EAAU,SAAS/N,GACtEyB,EAAOsN,YAAakH,GAAkB9G,WAAY,SAE7ClB,EAAMD,MAAQjE,EAAKX,SACpBW,EAAKqF,aAGV,KA7BChH,EAAa3G,GAEbwM,EAAM1M,SAASwN,YAAa,2BAEvBd,EAAMD,MAAQjE,EAAKX,SACpBW,EAAKqF,eAgCjBgH,YAAc,SAAUnI,GAEpB,IAkCIoI,EAjCA3E,GAAO,EA+BP1F,EAAWiC,EAAMvF,KAAKsD,OACtBsK,EAAWtK,EAASA,EAAOvL,SAAW,EAgB1C,OAbK6V,GAAYtK,EAAO,GAAGuK,gBAAkBzU,GAhCtB,SAAUuG,GAQ7B,IAPA,IAAImO,EAAUnO,EAAI,GAEdoO,EAAcD,EAAQE,wBACtBC,EAAc,GAIgB,OAA1BH,EAAQI,eACsC,WAA7C/W,EAAE2W,EAAQI,eAAelV,IAAI,aAA0E,SAA7C7B,EAAE2W,EAAQI,eAAelV,IAAI,aACxFiV,EAAYpK,KAAKiK,EAAQI,cAAcF,yBAG3CF,EAAUA,EAAQI,cAUtB,OAPsBD,EAAYE,MAAM,SAASC,GAC7C,IAAIC,EAAgB9H,KAAKgC,IAAIwF,EAAYO,MAAOF,EAAWE,OAAS/H,KAAKkF,IAAIsC,EAAY7H,KAAMkI,EAAWlI,MACtGqI,EAAgBhI,KAAKgC,IAAIwF,EAAYS,OAAQJ,EAAWI,QAAUjI,KAAKkF,IAAIsC,EAAY/V,IAAKoW,EAAWpW,KAE3G,OAAOqW,EAAgB,GAAKE,EAAgB,KAI5CR,EAAYS,OAAS,GAAKT,EAAYO,MAAQ,GAC9CP,EAAY7H,KAAO/O,EAAEc,GAAQS,SAAWqV,EAAY/V,IAAMb,EAAEc,GAAQU,SAOnB8V,CAAkBnL,KACvEqK,EArCOlW,KAqCSuK,MAAMqC,MAAMtM,SAE5BiR,EAAM,CACFhR,IAAS4V,EAAS5V,IAAO2V,EAAS3V,IAAO0W,WAAYpL,EAAOtK,IAAK,qBAAwB,GACzFkN,KAAS0H,EAAS1H,KAAOyH,EAASzH,KAAOwI,WAAYpL,EAAOtK,IAAK,sBAAyB,GAC1FN,MAAS4K,EAAO5K,QAChBC,OAAS2K,EAAO3K,SAChB4O,OAAS,EACTC,OAAS,IAIVwB,GAQXtC,SAAW,WAEP,IAAIrF,EAAO5J,KAEPgB,EAAU4I,EAAK5I,QACfuI,EAAU,GAETvI,EAAQwN,UAAYxN,EAAQmO,UAAYnO,EAAQqO,aAIrDrO,EAAQqO,YAAa,EAErBrO,EAAQM,OAAO4V,WAAWtM,QAAS,WAGnC3C,EAAajH,EAAQM,QAErBN,EAAQM,OAAO2I,SAAU,4BAGzBvK,EAAEyK,KAAMP,EAAKL,OAAQ,SAAUtK,EAAK6O,GAC3BA,EAAMD,KAAOjE,EAAKX,QAAU,GAAK6E,EAAMD,KAAOjE,EAAKX,QAAU,EAC9DM,EAAQuE,EAAMD,KAAQC,EAEdA,IAERpO,EAAEkB,SAAST,KAAM2N,EAAMxM,QAEvBwM,EAAMxM,OAAO6V,SAASxM,YAI9Bf,EAAKL,OAASA,EAEdK,EAAKyG,eAELzG,EAAKgB,QAAS,cAGTlL,EAAGiC,EAAS0H,eAAgB0D,GAAI,eAAoB/L,EAAQuH,KAAKlE,WAAgC,SAAhBrD,EAAQ2E,MAAoC,WAAjB3E,EAAQ2E,OACrHiE,EAAK/I,UASbgC,QAAU,WACN,IACI4J,EAAM2K,EADCpX,KAGD4I,MAAMT,OAAS,IAIzBsE,EAPWzM,KAOEuJ,OAPFvJ,KAOeiJ,QAAU,GACpCmO,EARWpX,KAQEuJ,OARFvJ,KAQeiJ,QAAU,GAE/BwD,GAAsB,UAAdA,EAAK9G,MAVP3F,KAWF6O,UAAWpC,GAGf2K,GAAsB,UAAdA,EAAKzR,MAdP3F,KAeF6O,UAAWuI,KASxBvW,MAAQ,WACJ,IACIqH,EADAlH,EAAUhB,KAAKgB,QAGdhB,KAAK6M,YAMV3E,GADAA,EAAMlH,GAAWA,EAAQqO,WAAarO,EAAQM,OAAOZ,KAAK,8BAA8BwL,OAAO,kCAAoC,OACtHhE,EAAIC,OAASD,EAAMlI,KAAKuK,MAAMC,WAEvC3J,SAQRgK,SAAW,WACP,IAAIjB,EAAO5J,KAGXN,EAAG,uBAAwByK,KAAK,WAC5B,IAAIpJ,EAAWrB,EAAEM,MAAMgD,KAAM,YAGzBjC,GAAYA,EAASsW,MAAQzN,EAAKyN,MAAQtW,EAAS8L,WACnD9L,EAAS6J,QAAS,kBAKrBhB,EAAK5I,UACD4I,EAAKW,MAAMC,UAAUhC,QAAU,GAChCoB,EAAKW,MAAMC,UAAUF,UAAW3I,EAAS2V,MAG7C1N,EAAK0E,kBAGT1E,EAAKgB,QAAS,cAEdhB,EAAKyC,aASTlI,MAAQ,SAAUtE,EAAG7B,GAEjB,IAGI6X,EAAQjI,EACRoC,EAAO+F,EAASC,EAAOvF,EAJvB7G,EAAU5J,KACVgB,EAAU4I,EAAK5I,QAKfuW,EAAO,WACP3N,EAAK4N,QAAS3X,IAGlB,OAAK+J,EAAKiD,YAIVjD,EAAKiD,WAAY,GAGyB,IAArCjD,EAAKgB,QAAS,cAAe/K,IAC9B+J,EAAKiD,WAAY,EAEjB5F,EAAc,WACV2C,EAAK+C,YAGF,IAKX/C,EAAK0C,eAEAtL,EAAQ4S,SACTD,aAAc3S,EAAQ4S,SAG1B5D,EAAWhP,EAAQI,SACnByU,EAAW7U,EAAQuH,KAAKlF,gBACxBuK,EAAWlO,EAAEiP,UAAW3Q,GAAMA,EAAM6X,EAAS7U,EAAQuH,KAAKjF,kBAAoB,EAG9EtC,EAAQM,OAAOoM,IAAKlG,GAAgBoH,YAAa,4FAEjD5N,EAAQM,OAAO4V,WAAWtM,QAAS,WAAYD,SAG1CiD,GACDhE,EAAKW,MAAMC,UAAUoE,YAAa,oBAAqB3E,SAAU,uBAIrEL,EAAKmK,YAAa/S,GAElB4I,EAAK6D,eAEL7D,EAAKyG,eAGW,SAAXwF,IAA8B,IAANhW,GAAcmQ,GAASpC,GAA6B,UAAjB5M,EAAQ2E,OAAqB3E,EAAQoP,WAAcK,EAAM7G,EAAKqM,YAAajV,MACvI6U,EAAS,QAGG,SAAXA,GACDnW,EAAEkB,SAAST,KAAM6P,IAEjBgG,EAAQtW,EAAEkB,SAAS2N,aAAcyB,IAE3B/O,MAAS+U,EAAM/U,MAAS+U,EAAMlG,OACpCkG,EAAM9U,OAAS8U,EAAM9U,OAAS8U,EAAMjG,OAKpB,SAFhBgG,EAAU/U,EAAQuH,KAAKhF,eAGnBwS,EAAUjH,KAAK2C,IAAKzQ,EAAQC,MAAQD,EAAQE,OAASuP,EAAIxP,MAAQwP,EAAIvP,QAAW,IAG/E6U,IACDtF,EAAIsF,QAAU,GAGlBC,EAAMlG,OAASkG,EAAM/U,MAASwP,EAAIxP,MAClC+U,EAAMjG,OAASiG,EAAM9U,OAASuP,EAAIvP,OAElC8U,EAAM/U,MAASwP,EAAIxP,MACnB+U,EAAM9U,OAASuP,EAAIvP,OAEnBxB,EAAEkB,SAASoQ,aAAchQ,EAAQI,SAAU4U,GAE3CtW,EAAEkB,SAASR,QAASY,EAAQI,SAAUqP,EAAK7C,EAAU2J,IAE9C,IAGN1B,GAAUjI,GAGA,IAAN/N,EACD0H,WAAYgQ,EAAM3J,GAGlBlO,EAAEkB,SAASR,QAASY,EAAQM,OAAOsN,YAAa,2BAA6B,0DAA4DiH,EAAQjI,EAAU2J,GAI/JA,KAGG,MAOXC,QAAU,SAAU3X,GAChB,IACIkB,EADOf,KAGNgB,QAAQM,OAAOsJ,QAAS,WAHlB5K,KAKNuK,MAAMC,UAAU2K,QAAQxK,SALlB3K,KAON4K,QAAS,aAAc/K,GAPjBG,KAUDoJ,aAVCpJ,KAUqBgB,QAAQyW,WAV7BzX,KAWFoJ,WAAWvI,QAXTb,KAcNgB,QAAU,MAGfD,EAAWrB,EAAEkB,SAASmJ,eAGlBhJ,EAAS8J,YAIT/D,EAAGzG,UAxBIL,KAwBYK,WAAYyJ,WAxBxB9J,KAwByC8J,YAEhDpK,EAAG,QAASkP,YAAa,oBAEzBlP,EAAG,4BAA6BiL,WASxCC,QAAU,SAAU3M,EAAM6P,GACtB,IAGIyD,EAHAmG,EAAQC,MAAMrY,UAAUsY,MAAM/Z,KAAKga,UAAW,GAE9C9M,EAAQ+C,GAASA,EAAMvF,KAAOuF,EADtB9N,KACmCgB,QAgB/C,GAbK+J,EACD2M,EAAKI,QAAS/M,GAGdA,EARQ/K,KAWZ0X,EAAKI,QAXO9X,MAaPN,EAAE4R,WAAYvG,EAAIxC,KAAMtK,MACzBsT,EAAMxG,EAAIxC,KAAMtK,GAAO8N,MAAOhB,EAAK2M,KAG1B,IAARnG,EACD,OAAOA,EAGG,eAATtT,EACD8I,EAAG6D,QAAS3M,EAAO,MAAOyZ,GAtBlB1X,KAyBHuK,MAAMC,UAAUI,QAAS3M,EAAO,MAAOyZ,IASpDpJ,eAAiB,SAAWyJ,GAExB,IAEI/W,EAFOhB,KAESgB,QAChBwH,EAAWxH,EAAQwH,MACnBD,EAAWvH,EAAQuH,KACnBuD,EAAWvD,EAAKuD,QAChBkM,EANOhY,KAMSuK,MAAMuB,QAG1B9K,EAAQM,OAAOsJ,QAAS,WATb5K,KAWNgY,SAAWlM,GAAWA,EAAQ3D,OAAS6P,EAASxC,KAAM1J,GAAY,KAX5D9L,KAaAiY,kBAbAjY,KAcFsN,eAIT5N,EAAE,yBAAyB8V,KAlBhBxV,KAkB2B4I,MAAMT,QAC5CzI,EAAE,yBAAyB8V,KAAMhN,EAAQ,GAEzC9I,EAAE,wBAAwBwY,KAAK,YAAe3P,EAAKvG,MAAQwG,GAAS,GACpE9I,EAAE,wBAAwBwY,KAAK,YAAe3P,EAAKvG,MAAQwG,GAtBhDxI,KAsB8D4I,MAAMT,OAAS,IAO5FsF,aAAe,WAEXzN,KAAKiY,kBAAmB,EAExBjY,KAAKuK,MAAMC,UAAUoE,YAAY,wFAIrCtB,aAAe,WAEX,IACI/E,EADOvI,KACKgB,QADLhB,KACoBgB,QAAQuH,KAD5BvI,KACwCuI,KAC/CmB,EAFO1J,KAEWuK,MAAMC,UAFjBxK,KAINiY,kBAAqB,EAJfjY,KAKNoN,mBAAqB,EAE1B1D,EACKyO,YAAY,2BAA6B5P,EAAKjG,UAAWiG,EAAKhG,UAC9D4V,YAAY,2BAA6B5P,EAAKlG,SATxCrC,KASwD4I,MAAMT,OAAS,IAC7EgQ,YAAY,uBAA6B5P,EAAKnG,QAVxCpC,KAUuD4I,MAAMT,OAAS,IAC5EgQ,YAAY,sBAA2B5P,EAAK5F,OAXtC3C,KAaDgY,SACNtO,EAAWO,SAAU,0BAGtBP,EAAWkF,YAAa,0BAShCwJ,eAAiB,WAERpY,KAAKiY,iBACNjY,KAAKsN,eAGLtN,KAAKyN,kBAShB/N,EAAEkB,SAAW,CAETyX,QAAW,SACX3W,SAAWA,EAeXqI,YAAc,SAAWuO,GACrB,IAAIvX,EAAWrB,EAAE,yDAAyDsD,KAAM,YAC5E0U,EAAWC,MAAMrY,UAAUsY,MAAM/Z,KAAKga,UAAW,GAErD,OAAK9W,aAAoBsH,IAEM,WAAtB3I,EAAEiG,KAAM2S,GACTvX,EAAUuX,GAAUvM,MAAOhL,EAAU2W,GAEP,aAAtBhY,EAAEiG,KAAM2S,IAChBA,EAAQvM,MAAOhL,EAAU2W,GAItB3W,IAWfwX,KAAO,SAAWpN,EAAO5C,EAAMC,GAC3B,OAAO,IAAIH,EAAU8C,EAAO5C,EAAMC,IAOtCrE,MAAQ,SAAWqU,GACf,IAAIzX,EAAWf,KAAK+J,cAEfhJ,IACDA,EAASoD,SAII,IAARqU,GACDxY,KAAKmE,UASjBsU,QAAU,WAENzY,KAAKmE,OAAO,GAEZ4C,EAAG2G,IAAK,mBAQZ1D,cA5oFN,IA4oFiBrI,EAAS+W,aAA6B,6CAA6CC,KAAKC,UAAUC,WAM7GC,OACQ/W,EAAMJ,EAAS+F,cAAc,OAE1BlH,EAAOuY,kBAAoBvY,EAAOuY,iBAAkBhX,GAAMiX,iBAAiB,gBAAkBrX,EAASsX,cAAgBtX,EAASsX,aAAe,KAQzJ1K,aAAe,SAAUrG,GACrB,IAAIgR,EAEJ,IAAMhR,IAAQA,EAAIC,OACd,OAAO,EAaX,IALI+Q,GALJA,EAAUhR,EAAIiR,GAAI,GAAI5X,IAAI,gBAEqB,IAAhC2X,EAAOE,QAAS,WAE3BF,GADAA,EAASA,EAAOlN,MAAM,KAAK,IACXA,MAAM,KAAK,IACXA,MAAM,KAEb,IAGD7D,OAUR+Q,GANIA,EADCA,EAAO/Q,OAAS,GACR,CAAE+Q,EAAO,IAAKA,EAAO,IAAKA,EAAO,GAAIA,EAAO,IAG5C,CAAEA,EAAO,GAAIA,EAAO,GAAIA,EAAO,GAAIA,EAAO,KAGvCrG,IAAIoE,gBAEjB,CACHiC,EAAS,CAAE,EAAG,EAAG,EAAG,GAEpB,IACIG,EADa,iCACSC,KAAMpR,EAAIiR,GAAI,GAAIhW,KAAK,UAE5CkW,IACDH,EAAQ,GAAMjC,WAAYoC,EAAS,IACnCH,EAAQ,GAAMjC,WAAYoC,EAAS,KAI3C,MAAO,CACH9Y,IAAU2Y,EAAQ,GAClBzK,KAAUyK,EAAQ,GAClBpJ,OAAUoJ,EAAQ,GAClBnJ,OAAUmJ,EAAQ,GAClBnD,QAAUkB,WAAY/O,EAAI3G,IAAI,YAC9BN,MAAUiH,EAAIjH,QACdC,OAAUgH,EAAIhH,WAUtB8P,aAAe,SAAU9I,EAAKqR,GAC1B,IAAIvO,EAAO,GACPzJ,EAAO,GAEX,GAAM2G,GAAQqR,EAmCd,YA9vFV,IA+tFeA,EAAM9K,WA/tFrB,IA+tF2C8K,EAAMhZ,MACnCyK,QAhuFd,IAguFsBuO,EAAM9K,KAAqBvG,EAAIsR,WAAW/K,KAAO8K,EAAM9K,MAAU,aAhuFvF,IAguFkG8K,EAAMhZ,IAAoB2H,EAAIsR,WAAWjZ,IAAMgZ,EAAMhZ,KAAQ,KAG7IyK,EADChL,KAAK8Y,MACA,eAAiB9N,EAAM,SAGvB,aAAeA,EAAM,UAtuF7C,IA0uFeuO,EAAMzJ,aA1uFrB,IA0uF6CyJ,EAAMxJ,SACrC/E,GAAOA,EAAI7C,OAAS6C,EAAM,IAAM,IAAM,SAAWuO,EAAMzJ,OAAS,KAAOyJ,EAAMxJ,OAAS,KAGrF/E,EAAI7C,SACL5G,EAAIkY,UAAYzO,QA/uF9B,IAkvFeuO,EAAMxD,UACPxU,EAAIwU,QAAUwD,EAAMxD,cAnvFlC,IAsvFewD,EAAMtY,QACPM,EAAIN,MAAQsY,EAAMtY,YAvvFhC,IA0vFesY,EAAMrY,SACPK,EAAIL,OAASqY,EAAMrY,QAGhBgH,EAAI3G,IAAKA,IAOpBnB,QAAU,SAAW8H,EAAKwR,EAAI9L,EAAUtG,EAAUqS,GAC9C,IAAIjU,EAAQ8B,GAAiB,gBAExB9H,EAAE4R,WAAY1D,KACftG,EAAWsG,EACXA,EAAW,MAGTlO,EAAE8L,cAAekO,IACnBxR,EAAI8G,WAAW,SAGnB9G,EAAItI,GAAI8F,EAAO,SAAS7F,KAGfA,IAAKA,EAAE6M,eAAoBxE,EAAI6E,GAAIlN,EAAE6M,cAAc3M,SAA4C,WAAhCF,EAAE6M,cAAckN,gBAIpF1R,EAAIwF,IAAKhI,GAEJhG,EAAE8L,cAAekO,QA1xFpC,IA4xFuBA,EAAG5J,aA5xF1B,IA4xFkD4J,EAAG3J,SAC/B7H,EAAI3G,IAAK,sBAAuB,OAEhCmY,EAAGzY,MAASiH,EAAIjH,QAAWyY,EAAG5J,OAC9B4J,EAAGxY,OAASgH,EAAIhH,SAAWwY,EAAG3J,OAE9B2J,EAAG5J,OAAS,EACZ4J,EAAG3J,OAAS,EAEZrQ,EAAEkB,SAASoQ,aAAc9I,EAAKwR,KAGH,IAAvBC,GACRzR,EAAI0G,YAAa8K,GAGhBha,EAAE4R,WAAYhK,IACfA,EAAUzH,MAKbH,EAAEiP,UAAWf,IACd1F,EAAI3G,IAAK,sBAAuBqM,EAAW,MAG1ClO,EAAE8L,cAAekO,GAClBha,EAAEkB,SAASoQ,aAAc9I,EAAKwR,GAG9BxR,EAAI+B,SAAUyP,GAGlBxR,EAAIlF,KAAK,QAASuE,WAAW,WACzBW,EAAI0C,QAAS,kBACdgD,EAAW,MAIlBzN,KAAO,SAAU+H,GACbyL,aAAczL,EAAIlF,KAAK,UAEvBkF,EAAIwF,IAAKlG,KAyCjB9H,EAAEmC,GAAGjB,SAAW,SAAU6K,GACtB,IAAIoO,EAqBJ,OAlBAA,GADApO,EAAWA,GAAW,IACHoO,WAAY,GAI3Bna,EAAG,QAASgO,IAAK,iBAAkBmM,GAAWja,GAAI,iBAAkBia,EAAU,CAC1E1O,MAAUzL,EAAGma,GACbpO,QAAUA,GACXqO,GAIH9Z,KAAK0N,IAAK,kBAAmB9N,GAAI,iBAAkB,CAC/CuL,MAAUnL,KACVyL,QAAUA,GACXqO,GAIA9Z,MAOX+G,EAAGnH,GAAI,iBAAkB,kBAAmBka,GA7D5C,SAASA,EAAMja,GACX,IAAIE,EAASF,EAAEka,cACXxR,EAAO1I,EAAEmD,KAAOnD,EAAEmD,KAAKyI,QAAU,GACjCN,EAAQtL,EAAEmD,KAAOnD,EAAEmD,KAAKmI,MAAQ,GAChCxM,EAAQe,EAAEK,GAAQoD,KAAM,kBAAqB,GAC7CqF,EAAQ,EAEZ3I,EAAEC,iBACFD,EAAE0M,kBAGG5N,GAED6J,GADA2C,EAAQA,EAAMhD,OAASgD,EAAMe,OAAQ,mBAAqBvN,EAAQ,MAASe,EAAG,mBAAqBf,EAAQ,OAC7F6J,MAAOzI,IAIR,IACTyI,EAAQ,GAIZ2C,EAAQ,CAAEpL,GAGdL,EAAEkB,SAAS2X,KAAMpN,EAAO5C,EAAMC,IAx2FpC,CA84FChI,OAAQmB,SAAUnB,OAAOb,QAQhBD,EA4MVc,OAAOb,OAtMJ8B,EAAS,SAAUwQ,EAAKV,EAAKyI,GAChC,GAAM/H,EAkBN,OAdA+H,EAASA,GAAU,GAEK,WAAnBta,EAAEiG,KAAKqU,KACXA,EAASta,EAAEua,MAAMD,GAAQ,IAG1Bta,EAAEyK,KAAKoH,EAAK,SAAUtS,EAAKN,GAC1BsT,EAAMA,EAAI5H,QAAQ,IAAMpL,EAAKN,GAAS,MAGnCqb,EAAO7R,SACV8J,IAAQA,EAAImH,QAAQ,KAAO,EAAI,IAAM,KAAOY,GAGtC/H,GAKJvQ,EAAW,CACdwY,QAAU,CACTC,QAAU,wJACVH,OAAU,CACTI,SAAW,EACXC,SAAW,EACXC,GAAM,EACNC,IAAM,EACNC,GAAM,EACNC,MAAQ,cACRC,YAAc,EACdC,MAAQ,GAETC,WAAa,EACbjV,KAAQ,SACRsM,IAAQ,6BACRqB,MAAQ,yCAGTuH,MAAQ,CACPV,QAAU,oCACVH,OAAU,CACTI,SAAW,EACXI,GAAK,EACLM,WAAgB,EAChBC,YAAgB,EAChBC,cAAgB,EAChBC,WAAgB,EAChBC,IAAM,GAEPN,WAAa,EACbjV,KAAO,SACPsM,IAAM,+BAGPkJ,SAAW,CACVhB,QAAU,oCACVxU,KAAU,SACVsM,IAAU,qCAGXmJ,YAAc,CACbjB,QAAU,sCACVH,OAAS,CACRqB,gBAAkB,EAClB7W,UAAY,GAEbmB,KAAO,SACPsM,IAAO,wCAGRqJ,KAAO,CACNnB,QAAU,mCACVxU,KAAU,SACVsM,IAAU,+BAGXsJ,UAAY,CACXpB,QAAU,yDACVxU,KAAU,QACVsM,IAAU,2BAOXuJ,YAAc,CACbrB,QAAU,4GACVxU,KAAU,SACVsM,IAAU,SAAUV,GACnB,MAAO,iBAAmBA,EAAI,GAAK,SAAYA,EAAI,GAAKA,EAAI,GAAK,MAAQzC,KAAKiC,MAAQQ,EAAI,MAAWA,EAAI,IAAMA,EAAI,IAAIlH,QAAQ,MAAO,KAAO,IAAQkH,EAAI,KAAQ,YAAeA,EAAI,KAAOA,EAAI,IAAI6H,QAAQ,WAAa,EAAI,UAAY,YAK3O1Z,EAAEiC,UAAU/B,GAAG,YAAa,SAAUC,EAAGkB,GAExCrB,EAAEyK,KAAKpJ,EAAS6H,MAAO,SAAUlL,EAAGgN,GAEnC,IAEC9F,EACA0O,EACA/B,EACAyI,EACAyB,EACAtd,EACAud,EARGzJ,EAAOvH,EAAKY,KAAO,GACtB3F,GAAO,EAUH+E,EAAK/E,OAIVf,EAAQlF,EAAE+I,QAAQ,EAAM,GAAI/G,EAAUgJ,EAAKnC,KAAK3D,OAGhDlF,EAAEyK,KAAKvF,EAAO,SAAWzF,EAAGsI,GAK3B,GAJA8J,EAAMU,EAAI/G,MAAMzD,EAAG0S,SACnBhc,EAAM,GACNud,EAAWvc,EAENoS,EAAL,CAMA,GAFA5L,EAAO8B,EAAG9B,KAEL8B,EAAGmT,YAAcrJ,EAAK9J,EAAGmT,YAAe,CAGrB,MAFvBa,EAAYlK,EAAK9J,EAAGmT,aAEJ,KACfa,EAAYA,EAAUzI,UAAU,IAGjCyI,EAAYA,EAAUzP,MAAM,KAE5B,IAAM,IAAIlO,EAAI,EAAGA,EAAI2d,EAAUtT,SAAUrK,EAAI,CAC5C,IAAI0B,EAAIic,EAAW3d,GAAIkO,MAAM,IAAK,GAEjB,GAAZxM,EAAE2I,SACNhK,EAAGqB,EAAE,IAAOmc,mBAAoBnc,EAAE,GAAG6K,QAAQ,MAAO,QAcvD,OATA2P,EAASta,EAAE+I,QAAQ,EAAM,GAAIhB,EAAGuS,OAAQtP,EAAKnC,KAAMpJ,GAAKhB,GAExD8T,EAA2B,aAAnBvS,EAAEiG,KAAK8B,EAAGwK,KAAsBxK,EAAGwK,IAAIpU,KAAKmC,KAAMuR,EAAKyI,EAAQtP,GAAQjJ,EAAOgG,EAAGwK,IAAKV,EAAKyI,GACnG1G,EAA6B,aAArB5T,EAAEiG,KAAK8B,EAAG6L,OAAwB7L,EAAG6L,MAAMzV,KAAKmC,KAAMuR,EAAKyI,EAAQtP,GAAQjJ,EAAOgG,EAAG6L,MAAO/B,GAElF,UAAbmK,IACJzJ,EAAMA,EAAI5H,QAAQ,OAAQ,OAGpB,KAKH1E,GACJ+E,EAAKY,IAAO2G,EACZvH,EAAK/E,KAAOA,EAEN+E,EAAKnC,KAAK+K,OAAY5I,EAAKnC,KAAKsD,QAAUnB,EAAKnC,KAAKsD,OAAO1D,SAChEuC,EAAKnC,KAAK+K,MAAQA,GAGL,WAAT3N,IACJjG,EAAE+I,QAAO,EAAMiC,EAAKnC,KAAM,CACzBtF,OAAS,CACRJ,SAAU,EACVM,KAAO,CACNC,UAAY,SAKfsH,EAAKkR,gBAAkBF,EAEvBhR,EAAKnC,KAAK7E,YAAc,qBAAoC,eAAZgY,EAA4B,MAAQ,WAMrFhR,EAAK/E,KAAO,aAed,SAAUnF,EAAQmB,EAAUjC,GAG7B,IAAIuH,EACUzG,EAAO0G,uBACN1G,EAAO2G,6BACP3G,EAAO4G,0BACP5G,EAAO6G,wBAEP,SAAUC,GACN,OAAO9G,EAAO+G,WAAWD,EAAU,IAAO,KAKtDuU,EACOrb,EAAOsb,sBACNtb,EAAOub,4BACPvb,EAAOwb,yBACPxb,EAAOyb,uBACP,SAAUtT,GACNnI,EAAOmT,aAAahL,IAKnCuT,EAAW,SAAUrc,GACxB,IAAIsc,EAAS,GAKb,IAAM,IAAIld,KAFVY,GADAA,EAAIA,EAAE6M,eAAiB7M,GAAKW,EAAOX,GAC7Buc,SAAWvc,EAAEuc,QAAQjU,OAAStI,EAAEuc,QAAYvc,EAAEwc,gBAAkBxc,EAAEwc,eAAelU,OAAStI,EAAEwc,eAAiB,CAAExc,GAI/GA,EAAGZ,GAAMqd,MACbH,EAAO/P,KAAM,CAAEqD,EAAI5P,EAAGZ,GAAMqd,MAAO5M,EAAI7P,EAAGZ,GAAMsd,QAErC1c,EAAGZ,GAAMud,SACpBL,EAAO/P,KAAM,CAAEqD,EAAI5P,EAAGZ,GAAMud,QAAS9M,EAAI7P,EAAGZ,GAAMwd,UAIpD,OAAON,GAGJO,EAAW,SAAUC,EAAQC,EAAQC,GACxC,OAAMD,GAAWD,EAIH,MAATE,EACGF,EAAOlN,EAAImN,EAAOnN,EAEL,MAAToN,EACJF,EAAOjN,EAAIkN,EAAOlN,EAGnBZ,KAAKgO,KAAMhO,KAAKiO,IAAKJ,EAAOlN,EAAImN,EAAOnN,EAAG,GAAMX,KAAKiO,IAAKJ,EAAOjN,EAAIkN,EAAOlN,EAAG,IAV9E,GAaLsN,EAAc,SAAU9U,GAC3B,GAAKA,EAAI6E,GAAG,mCAAqCrN,EAAE4R,WAAYpJ,EAAI3J,IAAI,GAAG0e,SACzE,OAAO,EAIR,IAAM,IAAIvf,EAAI,EAAGwf,EAAOhV,EAAI,GAAGiV,WAAYhe,EAAI+d,EAAK/U,OAAQzK,EAAIyB,EAAGzB,IACzD,GAAwC,mBAAnCwf,EAAKxf,GAAG0f,SAASC,OAAO,EAAG,IAC5B,OAAO,EAIpB,OAAO,GAaLC,EAAe,SAAWpV,GAG7B,IAFA,IAX6BT,EACzB8V,EACAC,EAEA9Y,EACA+Y,EAMAlM,GAAM,EAXmB9J,EAcPS,EAAI3J,IAAI,GAb1Bgf,SACAC,SAEA9Y,SACA+Y,SAJAF,EAAY/c,EAAOuY,iBAAkBtR,GAAK,cAC1C+V,EAAYhd,EAAOuY,iBAAkBtR,GAAK,cAE1C/C,GAA4B,WAAd6Y,GAAwC,SAAdA,IAAyB9V,EAAGiW,aAAejW,EAAGkW,aACtFF,GAA4B,WAAdD,GAAwC,SAAdA,IAAyB/V,EAAG6M,YAAc7M,EAAGmW,cASxFrM,EAPM7M,GAAY+Y,KAalBvV,EAAMA,EAAIkN,UAEAjN,SAAUD,EAAI4E,SAAU,oBAAsB5E,EAAI6E,GAAI,UAKjE,OAAOwE,GAIJsM,EAAY,SAAW9c,GACff,KAENe,SAAWA,EAFLf,KAIN8d,IAAa/c,EAASwJ,MAAMwT,GAJtB/d,KAKNge,OAAajd,EAASwJ,MAAMqC,MALtB5M,KAMN0J,WAAa3I,EAASwJ,MAAMC,UANtBxK,KAQNyY,UARMzY,KAUN0J,WAAW9J,GAAI,yCAA0CF,EAAEue,MAVrDje,KAUiE,kBAG7E6d,EAAUve,UAAUmZ,QAAU,WAC7BzY,KAAK0J,WAAWgE,IAAK,cAGtBmQ,EAAUve,UAAU4e,aAAe,SAAUre,GAC5C,IAEIK,EAAWR,EAAGG,EAAEE,QAChBgB,EAHOf,KAGSe,SAChBC,EAAWD,EAASC,QACpBI,EAAWJ,EAAQI,SAEnB+c,EAA4B,cAAVte,EAAE8F,KAQxB,GALKwY,GAVMne,KAWC0J,WAAWgE,IAAK,uBAItB1M,GAfKhB,KAeWe,SAASqN,aAfpBpO,KAewCe,SAAS8L,UAI3D,OAHAhN,EAAE0M,uBACF1M,EAAEC,iBAMED,EAAE6M,eAA2C,GAA1B7M,EAAE6M,cAAckJ,SAKlC1V,EAAQiI,QAAU6U,EAAa9c,IAAa8c,EAAa9c,EAAQkV,WAKlEvV,EAAE6M,cAAc8P,QAAUtc,EAAQ,GAAG0d,YAAc1d,EAAQI,SAASmO,OAjC9DzO,KAqCNoe,YAAclC,EAAUrc,IArClBG,KAwCAoe,aAxCApe,KAwCsBoe,YAAYjW,OAAS,GAAKpH,EAASoN,YAxCzDnO,KA4CNE,QAAWA,EA5CLF,KA6CNoB,SAAWA,EA7CLpB,KA8CNqe,QAAW,EAEhB3e,EAAEiC,GAAU+L,IAAK,aAEjBhO,EAAEiC,GAAU/B,GAAIue,EAAgB,yCAA2C,uCAAyCze,EAAEue,MAlD3Gje,KAkDuH,eAClIN,EAAEiC,GAAU/B,GAAIue,EAAgB,qBAAuB,qBAAuBze,EAAEue,MAnDrEje,KAmDiF,gBAE5FH,EAAE0M,mBAEKxL,EAASC,QAAQuH,KAAK9D,OAAS1D,EAASyQ,YAAiBtR,EAAQ6M,GAvD7D/M,KAuDsEge,SAvDtEhe,KAuDuFge,OAAOtd,KAAMR,GAAUiI,SAUjHzI,EAAEkB,SAASoJ,WAAcsT,EAjEtBtd,KAiEyCE,UAAaod,EAjEtDtd,KAiEyEE,QAAQkV,YAC3FvV,EAAEC,iBAlEQE,KAqEN+N,YAAee,KAAKC,MAAO/N,EAAQM,OAAO,GAAGsc,aArEvC5d,KAsENiQ,aAAenB,KAAKC,MAAO/N,EAAQM,OAAO,GAAGqc,cAtEvC3d,KAwENse,WAAY,IAAIpK,MAAOC,UAxEjBnU,KAyENue,UAzEMve,KAyEWwe,UAzEXxe,KAyE4B0c,SAAW,EAzEvC1c,KA2ENye,WAAY,EA3ENze,KA4EN0e,WAAY,EA5EN1e,KA6EN2e,WAAY,EA7EN3e,KA+EN4e,eA/EM5e,KA+EiB6e,eAAiB,CAAEte,IAAK,EAAGkO,KAAM,GA/ElDzO,KAgFN8e,gBAAkBpf,EAAEkB,SAAS2N,aAhFvBvO,KAgF0CoB,UAhF1CpB,KAiFN+e,eAAkB,KAEU,IAnFtB/e,KAmFDoe,YAAYjW,QAnFXnI,KAmFiC2e,YAnFjC3e,KAoFLqe,QAAUtd,EAASoN,UAEF,UAAjBnN,EAAQ2E,OAtFH3F,KAsF8B8e,gBAAgB7d,MAtF9CjB,KAsF2D+N,YAAc,GAtFzE/N,KAsFmF8e,gBAAgB5d,OAtFnGlB,KAsFiHiQ,aAAe,IAEzIvQ,EAAEkB,SAAST,KAxFFH,KAwFaoB,UAxFbpB,KA0FJoB,SAASG,IAAK,sBAAuB,OA1FjCvB,KA4FJye,WAAY,GA5FRze,KAgGJ0e,WAAY,EAhGR1e,KAmGL0J,WAAWO,SAAS,kCAGO,IAtGtBjK,KAsGDoe,YAAYjW,QAAiBpH,EAASqN,aAAgBpN,EAAQoP,UAA6B,UAAjBpP,EAAQ2E,OAAsB3E,EAAQmO,WAAYnO,EAAQuS,SAtGnIvT,KAuGL2e,WAAY,EAvGP3e,KAyGL0e,WAAY,EAzGP1e,KA0GLye,WAAY,EAEjB/e,EAAEkB,SAAST,KA5GDH,KA4GYoB,UA5GZpB,KA8GLoB,SAASG,IAAK,sBAAuB,OA9GhCvB,KAgHLgf,kBAA0E,IAhHrEhf,KAgHwBoe,YAAY,GAAG3O,EAhHvCzP,KAgHgDoe,YAAY,GAAG3O,GAAc/P,EAAEc,GAAQsJ,aAhHvF9J,KAiHLif,kBAA0E,IAjHrEjf,KAiHwBoe,YAAY,GAAG1O,EAjHvC1P,KAiHgDoe,YAAY,GAAG1O,GAAchQ,EAAEc,GAAQH,YAjHvFL,KAmHLkf,gCAnHKlf,KAmHmCgf,kBAnHnChf,KAmH4D8e,gBAAgBrQ,MAnH5EzO,KAmH0F8e,gBAAgB7d,MAnH1GjB,KAoHLmf,gCApHKnf,KAoHmCif,kBApHnCjf,KAoH4D8e,gBAAgBve,KApH5EP,KAoH0F8e,gBAAgB5d,OApH1GlB,KAsHLof,4BAA8B1C,EAtHzB1c,KAsHwCoe,YAAY,GAtHpDpe,KAsH6Doe,YAAY,MA5D9Ele,EAAQ6M,GAAG,QACflN,EAAEC,oBAgEL+d,EAAUve,UAAU+f,YAAc,SAAUxf,GAM3C,GAJWG,KAENsf,UAAYpD,EAAUrc,GAEtBH,EAAEkB,SAASoJ,WAAcsT,EAJnBtd,KAIsCE,UAAaod,EAJnDtd,KAIsEE,QAAQkV,WAKxF,OAJAvV,EAAE0M,uBALQvM,KAOLqe,QAAS,GAKf,IAZWre,KAYEe,SAASC,QAAQuH,KAAK9D,OAZxBzE,KAYsCe,SAASyQ,WAZ/CxR,KAYmEsf,WAZnEtf,KAYsFsf,UAAUnX,SAZhGnI,KAgBNue,UAAY7B,EAhBN1c,KAgBqBsf,UAAU,GAhB/Btf,KAgBwCoe,YAAY,GAAI,KAhBxDpe,KAiBNwe,UAAY9B,EAjBN1c,KAiBqBsf,UAAU,GAjB/Btf,KAiBwCoe,YAAY,GAAI,KAjBxDpe,KAmBN0c,SAAWA,EAnBL1c,KAmBoBsf,UAAU,GAnB9Btf,KAmBuCoe,YAAY,IAnBnDpe,KAsBD0c,SAAW,GAAI,CAExB,IAxBU1c,KAwBGE,QAAQ6M,GAxBX/M,KAwBoBge,UAxBpBhe,KAwBqCge,OAAOtd,KAxB5CV,KAwBuDE,SAAUiI,OAC1E,OAGDtI,EAAE0M,kBACF1M,EAAEC,iBA7BQE,KA+BA0e,UA/BA1e,KAgCJuf,UAhCIvf,KAkCOye,UAlCPze,KAmCJwf,QAnCIxf,KAqCO2e,WArCP3e,KAsCJyf,WAOR5B,EAAUve,UAAUigB,QAAU,WAE7B,IAIIG,EAJA9V,EAAO5J,KAEP2f,EAAU/V,EAAK8U,UACfjQ,EAAU7E,EAAKgV,eAAenQ,MAAQ,GAGzB,IAAZkR,EAEC7Q,KAAK2C,IAAK7H,EAAK8S,UAAa,KAEhC9S,EAAKyU,QAAS,EAETzU,EAAK7I,SAAS6H,MAAMT,OAAS,GAAKyB,EAAK7I,SAASwH,KAAK9D,MAAMC,SAC/DkF,EAAK8U,UAAa,IAEP9U,EAAK7I,SAASoN,YAAmD,IAAtCvE,EAAK7I,SAASwH,KAAK9D,MAAMC,UAA8D,SAAtCkF,EAAK7I,SAASwH,KAAK9D,MAAMC,UAAuBhF,EAAGc,GAASS,QAAU,IAC7J2I,EAAK8U,UAAa,KAGlBgB,EAAQ5Q,KAAK2C,IAAoD,IAA/C3C,KAAK8Q,MAAOhW,EAAK4U,UAAW5U,EAAK2U,WAAoBzP,KAAK+Q,IAE5EjW,EAAK8U,UAAcgB,EAAQ,IAAMA,EAAQ,IAAQ,IAAM,KAGxD9V,EAAK7I,SAASoN,UAAYvE,EAAK8U,UAG/B9U,EAAKwU,YAAcxU,EAAK0V,UAExB5f,EAAEyK,KAAKP,EAAK7I,SAASwI,OAAQ,SAAUf,EAAOsF,GAC7CpO,EAAEkB,SAAST,KAAM2N,EAAMxM,QAEvBwM,EAAMxM,OAAOC,IAAK,sBAAuB,OAEzCuM,EAAMgS,cAAe,EAEhBhS,EAAMD,MAAQjE,EAAK7I,SAASC,QAAQ6M,MACxCjE,EAAKgV,eAAenQ,KAAO/O,EAAEkB,SAAS2N,aAAcT,EAAMxM,QAASmN,QAOhE7E,EAAK7I,SAASuP,WAAa1G,EAAK7I,SAASuP,UAAUC,UACvD3G,EAAK7I,SAASuP,UAAUnQ,SAMV,KAAXwf,IAGC/V,EAAK2U,UAAY,IAAO3U,EAAK7I,SAAS6H,MAAMT,OAAS,GAAuC,IAAhCyB,EAAK7I,SAASC,QAAQwH,QAAgBoB,EAAK7I,SAASC,QAAQuH,KAAKvG,MACjIyM,GAAcK,KAAKiO,IAAKnT,EAAK2U,UAAW,IAE7B3U,EAAK2U,UAAY,IAAO3U,EAAK7I,SAAS6H,MAAMT,OAAS,GAAOyB,EAAK7I,SAASC,QAAQwH,QAAUoB,EAAK7I,SAAS6H,MAAMT,OAAS,IAAMyB,EAAK7I,SAASC,QAAQuH,KAAKvG,MACrKyM,GAAcK,KAAKiO,KAAMnT,EAAK2U,UAAW,IAGzC9P,GAAc7E,EAAK2U,WAKrB3U,EAAKiV,cAAgB,CACpBte,IAAkB,KAAXof,EAAiB,EAAI/V,EAAKgV,eAAere,IAAMqJ,EAAK4U,UAC3D/P,KAAOA,GAGH7E,EAAKmW,YACTlE,EAAcjS,EAAKmW,WAEnBnW,EAAKmW,UAAY,MAGlBnW,EAAKmW,UAAY9Y,EAAc,WAEzB2C,EAAKiV,gBACTnf,EAAEyK,KAAKP,EAAK7I,SAASwI,OAAQ,SAAUf,EAAOsF,GAC7C,IAAID,EAAMC,EAAMD,IAAMjE,EAAK7I,SAASkI,QAEpCvJ,EAAEkB,SAASoQ,aAAclD,EAAMxM,OAAQ,CACtCf,IAAOqJ,EAAKiV,cAActe,IAC1BkO,KAAO7E,EAAKiV,cAAcpQ,KAASZ,EAAMjE,EAAKmE,YAAkBF,EAAMC,EAAMvF,KAAKrG,WAInF0H,EAAKF,WAAWO,SAAU,4BAS9B4T,EAAUve,UAAUkgB,MAAQ,WAE3B,IAEIQ,EAAYC,EAAYC,EAFxBtW,EAAO5J,KAIX4J,EAAKyU,QAAS,EAGb2B,EADIpW,EAAKkV,gBAAgB7d,MAAQ2I,EAAKmE,YACzBnE,EAAKkV,gBAAgBrQ,KAAO7E,EAAK2U,UAGjC3U,EAAKkV,gBAAgBrQ,KAGnCwR,EAAarW,EAAKkV,gBAAgBve,IAAMqJ,EAAK4U,WAE7C0B,EAAStW,EAAKuW,cAAeH,EAAYC,EAAYrW,EAAKkV,gBAAgB7d,MAAO2I,EAAKkV,gBAAgB5d,SAE/F4O,OAASlG,EAAKkV,gBAAgBhP,OACrCoQ,EAAOnQ,OAASnG,EAAKkV,gBAAgB/O,OAErCnG,EAAKmV,eAAiBmB,EAEjBtW,EAAKmW,YACTlE,EAAcjS,EAAKmW,WAEnBnW,EAAKmW,UAAY,MAGlBnW,EAAKmW,UAAY9Y,EAAc,WAC9BvH,EAAEkB,SAASoQ,aAAcpH,EAAKxI,SAAUwI,EAAKmV,mBAK/ClB,EAAUve,UAAU6gB,cAAgB,SAAUH,EAAYC,EAAYG,EAAUC,GAE/E,IAEIC,EAAeC,EAAeC,EAAeC,EAE7C1S,EAJO/N,KAIa+N,YACpBkC,EALOjQ,KAKaiQ,aAEpByQ,EAPO1gB,KAOe8e,gBAAgBrQ,KACtCkS,EARO3gB,KAQe8e,gBAAgBve,IAEtCge,EAVOve,KAUUue,UACjBC,EAXOxe,KAWUwe,UAsCrB,OAlCA8B,EAAgBxR,KAAKkF,IAAI,EAAkB,GAAfjG,EAAiC,GAAZqS,GACjDG,EAAgBzR,KAAKkF,IAAI,EAAkB,GAAf/D,EAAiC,GAAZoQ,GAEjDG,EAAgB1R,KAAKgC,IAAK/C,EAAeqS,EAA0B,GAAfrS,EAAiC,GAAZqS,GACzEK,EAAgB3R,KAAKgC,IAAKb,EAAeoQ,EAA0B,GAAfpQ,EAAiC,GAAZoQ,GAEpED,EAAWrS,IAGVwQ,EAAY,GAAKyB,EAAaM,IAClCN,EAAaM,EAAgB,EAAIxR,KAAKiO,KAAMuD,EAAgBI,EAAiBnC,EAAW,KAAS,GAI7FA,EAAa,GAAKyB,EAAaQ,IACnCR,EAAaQ,EAAgB,EAAI1R,KAAKiO,IAAKyD,EAAgBE,EAAiBnC,EAAW,KAAS,IAK7F8B,EAAYpQ,IAGXuO,EAAY,GAAKyB,EAAaM,IAClCN,EAAaM,EAAgB,EAAIzR,KAAKiO,KAAKwD,EAAgBI,EAAiBnC,EAAW,KAAS,GAI5FA,EAAY,GAAKyB,EAAaQ,IAClCR,EAAaQ,EAAgB,EAAI3R,KAAKiO,IAAM0D,EAAgBE,EAAiBnC,EAAW,KAAS,IAK5F,CACNje,IAAO0f,EACPxR,KAAOuR,IAMTnC,EAAUve,UAAUshB,cAAgB,SAAUZ,EAAYC,EAAYG,EAAUC,GAE/E,IAEItS,EAFO/N,KAEa+N,YACpBkC,EAHOjQ,KAGaiQ,aAwBxB,OApBC+P,EAFII,EAAWrS,GACfiS,EAAaA,EAAa,EAAI,EAAIA,GACRjS,EAAcqS,EAAWrS,EAAcqS,EAAWJ,EAK/DlR,KAAKkF,IAAK,EAAGjG,EAAc,EAAIqS,EAAW,GAejD,CACN7f,IAVA0f,EAFII,EAAYpQ,GAChBgQ,EAAaA,EAAa,EAAI,EAAIA,GACRhQ,EAAeoQ,EAAYpQ,EAAeoQ,EAAYJ,EAKnEnR,KAAKkF,IAAK,EAAG/D,EAAe,EAAIoQ,EAAY,GAMzD5R,KAAOuR,IAKTnC,EAAUve,UAAUmgB,OAAS,WAE5B,IAAI7V,EAAO5J,KAIP6gB,EAAgBjX,EAAKkV,gBAAgB7d,MACrC6f,EAAgBlX,EAAKkV,gBAAgB5d,OAErCwf,EAAiB9W,EAAKkV,gBAAgBrQ,KACtCkS,EAAiB/W,EAAKkV,gBAAgBve,IAItCwgB,EAF4BrE,EAAU9S,EAAK0V,UAAU,GAAI1V,EAAK0V,UAAU,IAE/B1V,EAAKwV,4BAE9CgB,EAAYtR,KAAKiC,MAAO8P,EAAgBE,GACxCV,EAAYvR,KAAKiC,MAAO+P,EAAgBC,GAGxCC,GAAyBH,EAAgBT,GAAaxW,EAAKsV,+BAC3D+B,GAAyBH,EAAgBT,GAAazW,EAAKuV,+BAI3D+B,GAAoBtX,EAAK0V,UAAU,GAAG7P,EAAI7F,EAAK0V,UAAU,GAAG7P,GAAK,EAAK/P,EAAEc,GAAQsJ,aAChFqX,GAAoBvX,EAAK0V,UAAU,GAAG5P,EAAI9F,EAAK0V,UAAU,GAAG5P,GAAK,EAAKhQ,EAAEc,GAAQH,YAKhF+gB,EAA4BF,EAAkBtX,EAAKoV,kBAQnDkB,EAAS,CACZ3f,IAHgBogB,GAAmBM,GALJE,EAAkBvX,EAAKqV,oBAStDxQ,KALgBiS,GAAmBM,EAAwBI,GAM3DtR,OAASlG,EAAKkV,gBAAgBhP,OAASiR,EACvChR,OAASnG,EAAKkV,gBAAgB/O,OAASgR,GAGxCnX,EAAKyU,QAAS,EAEdzU,EAAKwW,SAAYA,EACjBxW,EAAKyW,UAAYA,EAEjBzW,EAAKmV,eAAiBmB,EAEjBtW,EAAKmW,YACTlE,EAAcjS,EAAKmW,WAEnBnW,EAAKmW,UAAY,MAGlBnW,EAAKmW,UAAY9Y,EAAc,WAC9BvH,EAAEkB,SAASoQ,aAAcpH,EAAKxI,SAAUwI,EAAKmV,mBAK/ClB,EAAUve,UAAU+hB,WAAa,SAAUxhB,GAE1C,IACIyhB,EAAOxS,KAAKkF,KAAM,IAAIE,MAAOC,UADtBnU,KACyCse,UAAW,GAE3DqB,EAHO3f,KAGQ0e,UACf6C,EAJOvhB,KAIQye,UACf+C,EALOxhB,KAKQ2e,UAkBnB,GAvBW3e,KAONyhB,UAAYvF,EAAUrc,GAPhBG,KASN0J,WAAWkF,YAAa,iCAE7BlP,EAAEiC,GAAU+L,IAAK,aAXN1N,KAaD+f,YACTlE,EAdU7b,KAcS+f,WAdT/f,KAgBL+f,UAAY,MAhBP/f,KAmBN0e,WAAY,EAnBN1e,KAoBNye,WAAY,EApBNze,KAqBN2e,WAAY,EArBN3e,KAuBDqe,OACT,OAxBUre,KAwBE0hB,MAAO7hB,GAxBTG,KA2BN6E,MAAQ,IA3BF7E,KA8BN2hB,UA9BM3hB,KA8BWue,UAAY+C,EAAM,GA9B7BthB,KA+BN4hB,UA/BM5hB,KA+BWwe,UAAY8C,EAAM,GA/B7BthB,KAiCN6hB,OAAS/S,KAAKkF,IAAkB,GAjC1BhU,KAiCkB6E,MAAaiK,KAAKgC,IAAkB,IAjCtD9Q,KAiC8C6E,MAAe,EAAIiK,KAAK2C,IAjCtEzR,KAiCgF2hB,WAjChF3hB,KAiCqG6E,QAE3G0c,EAnCMvhB,KAoCL8hB,aAEMN,EAtCDxhB,KAuCL+hB,aAvCK/hB,KA0CLgiB,WAAYrC,IAMnB9B,EAAUve,UAAU0iB,WAAa,SAAUrC,GAE1C,IACI7M,GAAM,EADC9S,KAGNe,SAASoN,WAAY,EAHfnO,KAIN6e,cAAqB,KAGV,KAAXc,GAAkB7Q,KAAK2C,IAPjBzR,KAO2Bwe,WAAc,IAGnD9e,EAAEkB,SAASR,QAVDJ,KAUee,SAASC,QAAQM,OAAQ,CACjDf,IAXSP,KAWM4e,eAAere,IAXrBP,KAWgCwe,UAA+B,IAX/Dxe,KAWmD4hB,UAC5D7L,QAAU,GACR,KAEHjD,EAfU9S,KAeCe,SAASoD,OAAO,EAAM,MAEX,KAAXwb,GAjBD3f,KAiBwBue,UAAY,IAjBpCve,KAiB+Ce,SAAS6H,MAAMT,OAAS,EACjF2K,EAlBU9S,KAkBCe,SAASyL,SAlBVxM,KAkByB6hB,QAEb,KAAXlC,GApBD3f,KAoBwBue,WAAa,IApBrCve,KAoBiDe,SAAS6H,MAAMT,OAAS,IACnF2K,EArBU9S,KAqBCe,SAAS0L,KArBVzM,KAqBqB6hB,UAGnB,IAAR/O,GAA8B,KAAX6M,GAA6B,KAAXA,GAxB/B3f,KAyBLe,SAAS+J,OAzBJ9K,KAyBiBe,SAASC,QAAQwH,MAAO,KAzBzCxI,KA4BN0J,WAAWkF,YAAa,wBAO9BiP,EAAUve,UAAUwiB,WAAa,WAEhC,IACI9B,EAAYC,EAAYC,EADjBlgB,KAGA+e,kBAIwC,IAPxC/e,KAODe,SAASC,QAAQuH,KAAK9D,MAAME,UACrCqb,EARUhgB,KAQQ+e,eAAetQ,KACjCwR,EATUjgB,KASQ+e,eAAexe,MAKjCyf,EAdUhgB,KAcQ+e,eAAetQ,KAdvBzO,KAcqC2hB,UAdrC3hB,KAcsD6E,MAChEob,EAfUjgB,KAeQ+e,eAAexe,IAfvBP,KAeqC4hB,UAfrC5hB,KAesD6E,QAGjEqb,EAlBWlgB,KAkBG4gB,cAAeZ,EAAYC,EAlB9BjgB,KAkB+C8e,gBAAgB7d,MAlB/DjB,KAkB2E8e,gBAAgB5d,SAE9FD,MApBGjB,KAoBW8e,gBAAgB7d,MACrCif,EAAOhf,OArBGlB,KAqBW8e,gBAAgB5d,OAEtCxB,EAAEkB,SAASR,QAvBAJ,KAuBcoB,SAAU8e,EAAQ,OAI5CrC,EAAUve,UAAUyiB,WAAa,WAEhC,IAII/B,EAAYC,EAAYC,EAAQ+B,EAFhCjhB,EAFOhB,KAEQe,SAASC,QAIxBof,EANOpgB,KAMUogB,SACjBC,EAPOrgB,KAOUqgB,UAPVrgB,KASA+e,iBAIXiB,EAbWhgB,KAaO+e,eAAetQ,KAGjCwT,EAAQ,CACJ1hB,IAHJ0f,EAdWjgB,KAcO+e,eAAexe,IAI7BkO,KAASuR,EACT/e,MAASmf,EACTlf,OAASmf,EACZvQ,OAAS,EACTC,OAAS,GAIRrQ,EAAEkB,SAASoQ,aA1BFhR,KA0BqBoB,SAAU6gB,GAErC7B,EA5BMpgB,KA4BU+N,aAAesS,EA5BzBrgB,KA4B0CiQ,aA5B1CjQ,KA6BLe,SAASyP,WAAY,KAEf4P,EAAWpf,EAAQC,OAASof,EAAYrf,EAAQE,OA/BjDlB,KAgCLe,SAASyO,cAhCJxP,KAgCwBgf,kBAhCxBhf,KAgCgDif,kBAAmB,MAI7EiB,EApCUlgB,KAoCI4gB,cAAeZ,EAAYC,EAAYG,EAAUC,GAG/D3gB,EAAEkB,SAASoQ,aAvCDhR,KAuCoBsI,QAAS5I,EAAEkB,SAAS2N,aAvCxCvO,KAuC2DoB,WAErE1B,EAAEkB,SAASR,QAzCDJ,KAyCeoB,SAAU8e,EAAQ,QAK7CrC,EAAUve,UAAUoiB,MAAQ,SAAS7hB,GACpC,IAWIqiB,EAXAtY,EAAU5J,KACVE,EAAUR,EAAGG,EAAEE,QAEfgB,EAAW6I,EAAK7I,SAChBC,EAAWD,EAASC,QAEpBygB,EAAc5hB,GAAKqc,EAAUrc,IAAS+J,EAAKwU,YAE3C+D,EAAOV,EAAU,GAAKA,EAAU,GAAGhS,EAAI7F,EAAKoU,OAAO1d,SAASmO,KAAO,EACnE2T,EAAOX,EAAU,GAAKA,EAAU,GAAG/R,EAAI9F,EAAKoU,OAAO1d,SAASC,IAAO,EAInE8hB,EAAU,SAAWC,GAExB,IAAIC,EAASvhB,EAAQuH,KAAM+Z,GAM3B,GAJK5iB,EAAE4R,WAAYiR,KAClBA,EAASA,EAAOxW,MAAOhL,EAAU,CAAEC,EAASnB,KAGvC0iB,EAIN,OAASA,GAER,IAAK,QAEJxhB,EAASoD,MAAOyF,EAAK4Y,YAEtB,MAEA,IAAK,iBAEJzhB,EAASqX,gBAAgB,GAE1B,MAEA,IAAK,OAEJrX,EAAS0L,OAEV,MAEA,IAAK,cAEC1L,EAAS6H,MAAMT,OAAS,EAC5BpH,EAAS0L,OAGT1L,EAASoD,MAAOyF,EAAK4Y,YAGvB,MAEA,IAAK,OAEiB,SAAhBxhB,EAAQ2E,OAAqB3E,EAAQmO,UAAYnO,EAAQuS,UAExDxS,EAASyQ,SACbzQ,EAASyP,aAEEzP,EAASqQ,eACpBrQ,EAASyO,cAAe2S,EAAMC,GAEnBrhB,EAAS6H,MAAMT,OAAS,GACnCpH,EAASoD,MAAOyF,EAAK4Y,eAU1B,KAAK3iB,EAAE6M,eAA2C,GAA1B7M,EAAE6M,cAAckJ,QAKnC7U,EAASoN,WAKTgU,EAAOjiB,EAAQ,GAAG0d,YAAc1d,EAAQI,SAASmO,MAAtD,CAKA,GAAKvO,EAAQ6M,GAAI,oEAChBmV,EAAQ,eAEF,GAAKhiB,EAAQ6M,GAAI,mBACvBmV,EAAQ,YAEF,KAAMnhB,EAASC,QAAQI,WAAYL,EAASC,QAAQI,SAAS4L,IAAKnN,EAAEE,QAASoI,OAInF,OAHC+Z,EAAQ,UAOV,GAAKtY,EAAK6Y,OAAS,CAOlB,GAJA9O,aAAc/J,EAAK6Y,QACnB7Y,EAAK6Y,OAAS,KAGT3T,KAAK2C,IAAK0Q,EAAOvY,EAAKuY,MAAS,IAAMrT,KAAK2C,IAAK2Q,EAAOxY,EAAKwY,MAAS,IAAMrhB,EAASoN,UACvF,OAAOnO,KAIRqiB,EAAS,WAAaH,QAMtBtY,EAAKuY,KAAOA,EACZvY,EAAKwY,KAAOA,EAEPphB,EAAQuH,KAAM,WAAa2Z,IAAWlhB,EAAQuH,KAAM,WAAa2Z,KAAYlhB,EAAQuH,KAAM,QAAU2Z,GACzGtY,EAAK6Y,OAASlb,WAAW,WACxBqC,EAAK6Y,OAAS,KAEdJ,EAAS,QAAUH,IAEjB,KAGHG,EAAS,QAAUH,GAKrB,OAAOliB,OAGRN,EAAEiC,GAAU/B,GAAG,gBAAiB,SAAUC,EAAGkB,GACvCA,IAAaA,EAAS8c,YAC1B9c,EAAS8c,UAAY,IAAIA,EAAW9c,MAItCrB,EAAEiC,GAAU/B,GAAG,iBAAkB,SAAUC,EAAGkB,GACxCA,GAAYA,EAAS8c,WACzB9c,EAAS8c,UAAUpF,YA54BpB,CAi5BAjY,OAAQmB,SAAUnB,OAAOb,QAWzB,SAAUgC,EAAUjC,GAGrB,IAAI4Q,EAAY,SAAUvP,GACzBf,KAAKe,SAAWA,EAChBf,KAAKwJ,QAGN9J,EAAE+I,OAAQ6H,EAAUhR,UAAW,CAC9BojB,MAAW,KACXnS,UAAW,EACXoS,QAAW,KACX9d,MAAW,IAEX2E,KAAO,WACN,IAAII,EAAO5J,KAEX4J,EAAK+Y,QAAU/Y,EAAK7I,SAASwJ,MAAMjI,QAAQ5B,KAAK,wBAAwBd,GAAG,QAAS,WACnFgK,EAAKgZ,YAGDhZ,EAAK7I,SAAS6H,MAAMT,OAAS,IAAMyB,EAAK7I,SAAS6H,MAAOgB,EAAK7I,SAAS8H,WAAYN,KAAKvE,YAC3F4F,EAAK+Y,QAAQthB,QAIfwhB,IAAM,WACL,IAAIjZ,EAAO5J,KAGN4J,EAAK7I,UAAY6I,EAAK7I,SAASC,UAAY4I,EAAK7I,SAASC,QAAQuH,KAAKvG,MAAQ4H,EAAK7I,SAAS8H,UAAYe,EAAK7I,SAAS6H,MAAMT,OAAS,GACzIyB,EAAK8Y,MAAQnb,WAAW,WACvBqC,EAAK7I,SAAS0L,QAEZ7C,EAAK7I,SAASC,QAAQuH,KAAKvE,UAAUa,OAAS+E,EAAK/E,QAGtD+E,EAAKzJ,OACLyJ,EAAK7I,SAASqM,mBAAqB,EACnCxD,EAAK7I,SAASuM,iBAKhBwV,MAAQ,WAGPnP,aAFW3T,KAEQ0iB,OAFR1iB,KAIN0iB,MAAQ,MAGd1M,MAAQ,WACP,IACIhV,EADOhB,KACQe,SAASC,QADjBhB,KAGDe,UAAYC,IAAaA,EAAQuH,KAAKvG,MAAQhB,EAAQwH,MAHrDxI,KAGkEe,SAAS6H,MAAMT,OAAS,KAH1FnI,KAKLuQ,UAAW,EALNvQ,KAOL2iB,QACHxf,KAAM,QAASnC,EAAQuH,KAAKpC,KAAMnF,EAAQuH,KAAKrC,MAAOQ,WACtDuD,SAAU,0BAEPjJ,EAAQqO,YAXHrP,KAYJ6iB,QAKR1iB,KAAO,WACN,IACIa,EADOhB,KACQe,SAASC,QADjBhB,KAGN8iB,QAHM9iB,KAKN2iB,QACHxf,KAAM,QAASnC,EAAQuH,KAAKpC,KAAMnF,EAAQuH,KAAKrC,MAAOO,YACtDmI,YAAa,0BAPJ5O,KASNuQ,UAAW,GAGjBqS,OAAS,WACG5iB,KAEDuQ,SAFCvQ,KAGLG,OAHKH,KAMLgW,WAMRtW,EAAEiC,GAAU/B,GAAG,CACdmjB,YAAc,SAASljB,EAAGkB,GACpBA,IAAaA,EAASuP,YAC1BvP,EAASuP,UAAY,IAAIA,EAAWvP,KAItCiiB,gBAAkB,SAASnjB,EAAGkB,EAAUC,EAASkI,GAChD,IAAIoH,EAAYvP,GAAYA,EAASuP,UAEhCpH,EAECoH,GAAatP,EAAQuH,KAAKvE,UAAUQ,WACxC8L,EAAU0F,QAGA1F,GAAaA,EAAUC,UAClCD,EAAUwS,SAIZG,eAAiB,SAASpjB,EAAGkB,EAAUC,GACtC,IAAIsP,EAAYvP,GAAYA,EAASuP,UAEhCA,GAAaA,EAAUC,UAC3BD,EAAUuS,OAIZK,kBAAoB,SAASrjB,EAAGkB,EAAUC,EAASmiB,EAAUlW,GAC5D,IAAIqD,EAAYvP,GAAYA,EAASuP,WAGhCA,IAAatP,EAAQuH,KAAKvE,WAA2B,KAAZiJ,GAA8B,KAAZA,GAAqBvN,EAAEiC,EAAS0H,eAAe0D,GAAI,oBAClHoW,EAASrjB,iBAETwQ,EAAUsS,WAIZQ,iCAAmC,SAASvjB,EAAGkB,GAC9C,IAAIuP,EAAYvP,GAAYA,EAASuP,UAEhCA,GACJA,EAAUnQ,UAMbT,EAAEiC,GAAU/B,GAAG,mBAAoB,WAClC,IAAImB,EAAYrB,EAAEkB,SAASmJ,cACvBuG,EAAYvP,GAAYA,EAASuP,UAEhCA,GAAaA,EAAUC,WACtB5O,EAAS0hB,OACb/S,EAAUwS,QAGVxS,EAAUuS,SA3JZ,CAgKAlhB,SAAUnB,OAAOb,QAQjB,SAAUgC,EAAUjC,GAIrB,IAAImC,EAAM,WAET,IA+CIyhB,EAEA5lB,EAAG2V,EAjDHkQ,EAAQ,CACX,CACC,oBACA,iBACA,oBACA,oBACA,mBACA,mBAGD,CACC,0BACA,uBACA,0BACA,0BACA,yBACA,yBAID,CACC,0BACA,yBACA,iCACA,yBACA,yBACA,yBAGD,CACC,uBACA,sBACA,uBACA,uBACA,sBACA,sBAED,CACC,sBACA,mBACA,sBACA,sBACA,qBACA,sBAKEzQ,EAAM,GAGV,IAAMpV,EAAI,EAAGA,EAAI6lB,EAAMpb,OAAQzK,IAG9B,IAFA4lB,EAAMC,EAAO7lB,KAED4lB,EAAK,KAAO3hB,EAAW,CAClC,IAAM0R,EAAI,EAAGA,EAAIiQ,EAAInb,OAAQkL,IAC5BP,EAAKyQ,EAAO,GAAKlQ,IAAQiQ,EAAKjQ,GAG/B,OAAOP,EAIT,OAAO,EAjEE,GAqEV,GAAMjR,EAAN,CAMA,IAAI2hB,EAAa,CAChBC,QAAU,SAAWC,IAEpBA,EAAOA,GAAQ/hB,EAASkT,iBAElBhT,EAAG8hB,mBAAqBD,EAAKE,uBAGpCC,KAAO,WAENliB,EAAUE,EAAGiiB,mBAGdlB,OAAS,SAAWc,GAEnBA,EAAOA,GAAQ/hB,EAASkT,gBAEnB7U,KAAK+jB,eACT/jB,KAAK6jB,OAGL7jB,KAAKyjB,QAASC,IAIhBK,aAAe,WAEd,OAAOC,QAASriB,EAAUE,EAAGoiB,qBAG9BC,QAAU,WAET,OAAOF,QAASriB,EAAUE,EAAGsiB,sBAK/BzkB,EAAEiC,GAAU/B,GAAG,CACdmjB,YAAc,SAASljB,EAAGkB,GACzB,IAAI2I,EAEAiZ,EAAU5hB,EAASwJ,MAAMjI,QAAQ5B,KAAK,8BAErCK,IAAaA,EAASyiB,YAAcziB,EAAS6H,MAAO7H,EAAS8H,WAAYN,KAAKtE,aAClFyF,EAAa3I,EAASwJ,MAAMC,WAEjB5K,GAAG,sBAAuB,6BAA8B,SAASC,GAE3EA,EAAE0M,kBACF1M,EAAEC,iBAEF0jB,EAAWZ,OAAQlZ,EAAY,MAI3B3I,EAASwH,KAAKtE,aAAqD,IAAvClD,EAASwH,KAAKtE,WAAWO,WACzDgf,EAAWC,QAAS/Z,EAAY,IAIjC3I,EAASyiB,WAAaA,GAGtBb,EAAQthB,QAKV6hB,kBAAoB,SAASrjB,EAAGkB,EAAUC,EAASmiB,EAAUlW,GAGvDlM,GAAYA,EAASyiB,YAA0B,KAAZvW,IACvCkW,EAASrjB,iBAETiB,EAASyiB,WAAWZ,OAAQ7hB,EAASwJ,MAAMC,UAAW,MAKxD4Z,iBAAmB,SAAUrjB,GACvBA,GAAYA,EAASyiB,YACzBA,EAAWK,UAKdnkB,EAAEiC,GAAU/B,GAAGiC,EAAGwiB,iBAAkB,WACnC,IAAItjB,EAAWrB,EAAEkB,SAASmJ,cAGrBhJ,EAASC,SAAqC,UAA1BD,EAASC,QAAQ2E,MAAoB5E,EAASqN,cACtErN,EAASC,QAAQI,SAASG,IAAK,aAAc,QAE7CR,EAASqN,aAAc,EAEvBrN,EAAS4L,QAAQ,GAAM,EAAM,WApG9BjN,EAAEkB,SAASc,SAASqC,OAAOE,YAAa,EA1ExC,CAmLAtC,SAAUnB,OAAOb,QAQjB,SAAUgC,EAAUjC,GAGrB,IAAI4kB,EAAc,SAAUvjB,GAC3Bf,KAAKe,SAAWA,EAChBf,KAAKwJ,QAGN9J,EAAE+I,OAAQ6b,EAAYhlB,UAAW,CAEhCqjB,QAAW,KACX4B,MAAS,KACTC,MAAS,KACTC,WAAY,EAEZjb,KAAO,WACN,IAAII,EAAO5J,KAEP0kB,EAAS9a,EAAK7I,SAAS6H,MAAM,GAChC+b,EAAS/a,EAAK7I,SAAS6H,MAAM,GAE9BgB,EAAK+Y,QAAU/Y,EAAK7I,SAASwJ,MAAMjI,QAAQ5B,KAAM,0BAE5CkJ,EAAK7I,SAAS6H,MAAMT,OAAS,GAAKyB,EAAK7I,SAAS6H,MAAOgB,EAAK7I,SAAS8H,WAAYN,KAAKrE,SACtE,SAAdwgB,EAAM/e,MAAoB+e,EAAMnc,KAAK+K,OAAUoR,EAAMnc,KAAKsD,UAC3C,SAAf8Y,EAAOhf,MAAmBgf,EAAOpc,KAAK+K,OAASqR,EAAOpc,KAAKsD,SAGjEjC,EAAK+Y,QAAQ/iB,GAAG,QAAS,WACxBgK,EAAKgZ,WAGNhZ,EAAK2G,UAAW,IAGhB3G,EAAK+Y,QAAQthB,OAEbuI,EAAK2G,UAAW,IAKlBvR,OAAS,WACR,IACC4lB,EACAtZ,EAFGvK,EAAWf,KAAKe,SAIpBf,KAAKukB,MAAQ7kB,EAAE,uCAAuC4P,SAAUvO,EAASwJ,MAAMC,WAE/Eoa,EAAO,OAEPllB,EAAEyK,KAAKpJ,EAAS6H,MAAO,SAAUlL,EAAGgN,IAEnCY,EAAMZ,EAAKnC,KAAK+K,QAAW5I,EAAKnC,KAAKsD,OAASnB,EAAKnC,KAAKsD,OAAO1I,KAAK,OAAS,QAElD,UAAduH,EAAK/E,OACjB2F,EAAMZ,EAAKY,KAGPA,GAAOA,EAAInD,SACfyc,GAAQ,mBAAqBlnB,EAAI,kEAAoE4N,EAAM,eAK7GsZ,GAAQ,QAER5kB,KAAKwkB,MAAQ9kB,EAAGklB,GAAOtV,SAAUtP,KAAKukB,OAAQ3kB,GAAG,QAAS,KAAM,WAC/DmB,EAAS+J,OAAQpL,EAAEM,MAAMgD,KAAK,YAG/BhD,KAAKwkB,MAAM9jB,KAAK,OAAOW,OAAOgR,IAAI,OAAQ,WAEzC,IAGCpR,EACAC,EACA2jB,EACAC,EANGC,EAAWrlB,EAAEM,MAAMoV,SAASxG,YAAY,2BAC3CoW,EAAaD,EAAQhQ,aACrBkQ,EAAcF,EAAQ/P,cAMvB/T,EAASjB,KAAK6T,cAAgB7T,KAAKiB,MAMnC6jB,GALA5jB,EAASlB,KAAK8T,eAAiB9T,KAAKkB,QAKb+jB,GADvBJ,EAAc5jB,EAAS+jB,IAGL,GAAKF,GAAe,IACjCD,EAAaC,GAChB7jB,GAAiB6jB,EACjB5jB,EAAS+jB,IAGThkB,EAAS+jB,EACT9jB,GAAkB2jB,IAIpBnlB,EAAEM,MAAMuB,IAAI,CACXN,MAAgB6N,KAAKiC,MAAM9P,GAC3BC,OAAgB4N,KAAKiC,MAAM7P,GAC3BgkB,aAAgBpW,KAAKgC,IAAK,EAAGhC,KAAKiC,MAAoB,GAAdkU,EAA6B,GAAT/jB,IAC5DikB,cAAgBrW,KAAKgC,IAAK,EAAGhC,KAAKiC,MAAoB,GAAdiU,EAA6B,GAAT/jB,MAC1DO,SAGH2I,KAAK,WACLnK,KAAKsL,IAAM5L,EAAGM,MAAOgD,KAAM,UAK7BnC,MAAQ,WAEFb,KAAKe,SAASC,SAClBhB,KAAKwkB,MACHtV,WACAN,YAAY,0BACZ1C,OAAO,gBAAkBlM,KAAKe,SAASC,QAAQwH,MAAS,MACxDyB,SAAS,0BACTpJ,SAKJsD,MAAQ,WACPnE,KAAKukB,MAAMljB,QAGZsL,OAAS,WAER3M,KAAKe,SAASwJ,MAAMC,UAAU2N,YAAa,uBAAwBnY,KAAKykB,WAEnEzkB,KAAKykB,WAEHzkB,KAAKukB,OACVvkB,KAAKhB,SAGNgB,KAAKe,SAAS6J,QAAS,gBAEvB5K,KAAKa,SAEMb,KAAKukB,OAChBvkB,KAAKe,SAAS6J,QAAS,gBAIxB5K,KAAKe,SAAS4L,UAIftL,KAAO,WACNrB,KAAKykB,WAAY,EACjBzkB,KAAK2M,UAGNnL,KAAO,WACNxB,KAAKykB,WAAY,EACjBzkB,KAAK2M,UAGNiW,OAAS,WACR5iB,KAAKykB,WAAazkB,KAAKykB,UACvBzkB,KAAK2M,YAKPjN,EAAEiC,GAAU/B,GAAG,CAEdmjB,YAAc,SAASljB,EAAGkB,GACpBA,IAAaA,EAASqkB,SAC1BrkB,EAASqkB,OAAS,IAAId,EAAavjB,KAIrCiiB,gBAAkB,SAASnjB,EAAGkB,EAAU2J,EAAMxB,GAC7C,IAAIkc,EAASrkB,GAAYA,EAASqkB,OAElC,GAAMA,GAAWA,EAAO7U,SAAxB,CAIA,GAAK7F,EAAK/H,MAKT,OAJAyiB,EAAOzC,QAAQthB,YAEf+jB,EAAO/jB,OAKH6H,IAA+C,IAAnCnI,EAASwH,KAAKrE,OAAOM,WACrC4gB,EAAO5jB,OAGH4jB,EAAOX,WACXW,EAAOvkB,UAITqiB,kBAAoB,SAASrjB,EAAGkB,EAAUC,EAASmiB,EAAUlW,GAC5D,IAAImY,EAASrkB,GAAYA,EAASqkB,OAG7BA,GAAUA,EAAO7U,UAAwB,KAAZtD,IACjCkW,EAASrjB,iBAETslB,EAAOxC,WAITwB,iBAAmB,SAAUvkB,EAAGkB,GAC/B,IAAIqkB,EAASrkB,GAAYA,EAASqkB,OAE7BA,GAAUA,EAAOX,YAAkD,IAArC1jB,EAASwH,KAAKrE,OAAOY,aACvDsgB,EAAOjhB,WA1NT,CAgOAxC,SAAUnB,OAAOb,QAQjB,SAAUgC,EAAUnB,EAAQd,GAIvBA,EAAE2lB,iBACP3lB,EAAE2lB,eAAiB,SAAUC,GAiB5B,OAASA,EAAM,IAAKjb,QAhBH,+CACA,SAAUkb,EAAIC,GAC9B,OAAKA,EAEQ,OAAPD,EACG,IAIDA,EAAG3N,MAAO,GAAI,GAAM,KAAO2N,EAAGE,WAAYF,EAAGpd,OAAS,GAAIud,SAAU,IAAO,IAI5E,KAAOH,MASd,IAAII,EAAc,KAGjBC,EAAU,KAGX,SAASC,IACL,IAAI5lB,EAAUO,EAAOC,SAASR,KAAKod,OAAQ,GACvC9L,EAAUtR,EAAK+L,MAAO,KACtBxD,EAAU+I,EAAIpJ,OAAS,GAAK,WAAWwQ,KAAMpH,EAAKA,EAAIpJ,OAAS,KAAQW,SAAUyI,EAAIuU,KAAM,GAAK,KAAY,EAQhH,OAJDtd,EAAQ,IACZA,EAAQ,GAGI,CACHvI,KAAUA,EACVuI,MAAUA,EACVud,QAVUxU,EAAIyU,KAAM,MAe/B,SAASC,EAAgBhU,GACxB,IAAI/J,EAEuB,KAAhB+J,EAAI8T,WAGd7d,EAAMxI,EAAG,mBAAqBA,EAAE2lB,eAAgBpT,EAAI8T,SAAY,MAAO5M,GAAIlH,EAAIzJ,MAAQ,IAErEL,OACjBD,EAAI0C,QAAS,SAKblL,EAAG,IAAMA,EAAE2lB,eAAgBpT,EAAI8T,UAAiBnb,QAAS,UAQ5D,SAASsb,EAAYnlB,GACpB,IAAIwH,EAEJ,QAAMxH,KAINwH,EAAOxH,EAASC,QAAUD,EAASC,QAAQuH,KAAOxH,EAASwH,MAE/CoD,MAAQpD,EAAKoD,MAAM3I,KAAM,YAAiBuF,EAAKtI,MAAQ,IAIjEP,EAAE,WAGJ6H,WAAW,YAGwB,IAA7B7H,EAAEkB,SAASc,SAASzB,OAKtBP,EAAEiC,GAAU/B,GAAG,CACjBmjB,YAAc,SAAUljB,EAAGkB,GAC1B,IAAIkR,EAAK8T,GAE+C,IAAnDhlB,EAAS6H,MAAO7H,EAAS8H,WAAYN,KAAKtI,OAI/CgS,EAAU4T,KACVE,EAAUG,EAAYnlB,KAGNkR,EAAI8T,SAAWA,GAAW9T,EAAI8T,UAC7ChlB,EAAS8H,UAAYoJ,EAAIzJ,MAAQ,KAKnCwa,gBAAkB,SAAUnjB,EAAGkB,EAAUC,EAASkI,GACjD,IAAI6c,GAEuB,IAAtB/kB,EAAQuH,KAAKtI,OAIT8lB,EAAUG,EAAYnlB,KAGM,KAAZglB,IAEnBvlB,EAAOC,SAASR,KAAKmZ,QAAS2M,GAAY,IAClChlB,EAASwH,KAAK4d,SAAW3lB,EAAOC,SAASR,MAGtD0lB,EAAcI,GAAYhlB,EAAS6H,MAAMT,OAAS,EAAI,KAAQnH,EAAQwH,MAAQ,GAAM,IAE/E,iBAAkBhI,EAAO4lB,SACxBR,GACJjS,aAAciS,GAGfA,EAAUre,WAAW,WACpB/G,EAAO4lB,QAASld,EAAW,YAAc,gBAAkB,GAAKvH,EAAS0kB,MAAO7lB,EAAOC,SAAS6lB,SAAW9lB,EAAOC,SAAS8lB,OAAS,IAAOZ,GAE3IC,EAAU,MAER,MAGHplB,EAAOC,SAASR,KAAO0lB,IAO1BvB,iBAAmB,SAAUvkB,EAAGkB,EAAUC,GACzC,IAAI+kB,EAASI,EAERP,GACJjS,aAAciS,IAGY,IAAtB5kB,EAAQuH,KAAKtI,OAIlB8lB,EAAWG,EAAYnlB,GACvBolB,EAAWplB,GAAYA,EAASwH,KAAK4d,SAAWplB,EAASwH,KAAK4d,SAAW,GAG3DJ,GAAuB,KAAZA,IAEP,iBAAkBK,QAClC5lB,EAAO4lB,QAAQI,aAAc,GAAK7kB,EAAS0kB,MAAO7lB,EAAOC,SAAS6lB,SAAW9lB,EAAOC,SAAS8lB,OAASJ,IAGtG3lB,EAAOC,SAASR,KAAOkmB,EAGvBzmB,EAAGc,GAASH,UAAWU,EAASV,WAAYyJ,WAAY/I,EAAS+I,cAInE6b,EAAc,SAKhBjmB,EAAEc,GAAQZ,GAAG,gBAAiB,WAC7B,IAAIqS,EAAM4T,IAELnmB,EAAEkB,SAASmJ,eACV4b,GAAeA,IAAgB1T,EAAI8T,QAAU,IAAM9T,EAAIzJ,OAA0B,IAAdyJ,EAAIzJ,OAAemd,GAAe1T,EAAI8T,UAC7GJ,EAAc,KAEdjmB,EAAEkB,SAASuD,SAGe,KAAhB8N,EAAI8T,SACfE,EAAgBhU,KAKlBvS,EAAEc,GAAQ6R,IAAI,wBAAyB,WACtC3S,EAAEkB,SAASmJ,YAAa,SAAS,EAAM,KAIxCkc,EAAgBJ,OAEd,MAnNH,CAwNAlkB,SAAUnB,OAAQA,OAAOb,sCC7yJ3B,IAGO6V,EACLiR,EACAC,EACAC,EAMKC,EATApR,EAAO7T,SAASklB,cAAe,QACpCJ,EAAM9kB,SAASklB,cAAe,qBAC9BH,EAAU/kB,SAASklB,cAAe,iBAClCF,EAAYhlB,SAASklB,cAAe,4BAM/BD,EAAY,WAGb,UAAYD,EAAUG,aAAc,kBAEvCH,EAAUI,aAAc,gBAAiB,QACzCN,EAAIze,MAAMgf,WAAa,UACvBP,EAAIM,aAAc,gBAAiB,QACnCvR,EAAKyR,UAAUC,IAAK,cAIpBP,EAAUI,aAAc,gBAAiB,SACzCN,EAAIM,aAAc,gBAAiB,SACnCvR,EAAKyR,UAAUtc,OAAQ,cAMzBgc,EAAUQ,iBAAkB,QAASP,GACrCF,EAAQS,iBAAkB,QAASP,iCCjCpC,IAGOpR,EACA4R,EACAC,EACAC,EAYAC,EAfA/R,EAAW7T,SAASklB,cAAe,QACnCO,EAAiBzlB,SAASklB,cAAe,0BACzCQ,EAAgB1lB,SAASklB,cAAe,wBACxCS,EAAiB3lB,SAASklB,cAAe,mBAYzCU,EAAe,WACpB/R,EAAKyR,UAAUtc,OAAQ,gBAGpB,MAAQyc,IACXA,EAAaD,iBAAkB,QAZV,WACrB3R,EAAKyR,UAAUrE,OAAQ,iBAYvByE,EAAYF,iBAAkB,QAASI,GACvCD,EAAcH,iBAAkB,QAASI","file":"scripts.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/**\r\n *\r\n * Vendor Scripts included via NPM\r\n *\r\n * Usage:\r\n * 1) npm install vendor_package --save-dev\r\n * 2) Import path to unminified JS file in node_modules\r\n * **Remember import path starts from assets/js directory\r\n *\r\n */\r\n\r\n/**\r\n *\r\n * Import theme JS components here\r\n *\r\n */\r\nimport './global/base';\r\nimport './global/navigation';\r\nimport './modules/filter-grid';\r\n","import 'fancybox';\r\n/**\r\n *\r\n * Base\r\n *\r\n */\r\n\r\n( function( $ ) {\r\n\t'use strict';\r\n\r\n\t$( 'a[href^=\"#\"]' ).on( 'click',function ( e ) {\r\n\t\te.preventDefault();\r\n\r\n\t\tvar target = this.hash;\r\n\t\tvar $target = $( target );\r\n\r\n\t\t$( 'html, body' ).stop().animate( {\r\n\t\t\t'scrollTop': $target.offset().top\r\n\t\t}, 900, 'swing', function () {\r\n\t\t\twindow.location.hash = target;\r\n\t\t} );\r\n\t} );\r\n} ) ( jQuery );\r\n\r\n( function( $ ) {\r\n\t'use strict';\r\n\r\n\t$( '.single-blog' ).find( 'iframe' ).wrap( '
' );\r\n\r\n} ) ( jQuery );\r\n\r\n( function( $ ) {\r\n\t'use strict';\r\n\r\n\t$( '[data-fancybox]' ).fancybox( {\r\n\t\tfocus: false,\r\n\t\t/** video aspect ratio **/\r\n\t\tonUpdate : function( instance, current ) {\r\n\t\t\tvar width,\r\n\t\t\t\theight,\r\n\t\t\t\tratio = 16 / 9,\r\n\t\t\t\tvideo = current.$content;\r\n\r\n\t\t\tif ( video ) {\r\n\t\t\t\tvideo.hide();\r\n\r\n\t\t\t\twidth = current.$slide.width();\r\n\t\t\t\theight = current.$slide.height() - 100;\r\n\r\n\t\t\t\tif ( height * ratio > width ) {\r\n\t\t\t\t\theight = width / ratio;\r\n\t\t\t\t} else {\r\n\t\t\t\t\twidth = height * ratio;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvideo.css( {\r\n\t\t\t\t\twidth : width,\r\n\t\t\t\t\theight : height\r\n\t\t\t\t} ).show();\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t} );\r\n\r\n} ) ( jQuery );\r\n","// ==================================================\r\n// fancyBox v3.1.20\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 $.error('fancyBox already initialized');\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 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 : false,\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 'close'\r\n ],\r\n\r\n // Detect \"idle\" time in seconds\r\n idleTime : 4,\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 // 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 : 366,\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 ' / ' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n '{{BUTTONS}}' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\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 slideShow : '',\r\n fullScreen : '',\r\n thumbs : '',\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\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 : true,\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 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 autoStart : false, // Display thumbnails on opening\r\n hideOnClose : true // Hide thumbnail grid when closing animation starts\r\n },\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 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 },\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 }\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\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 }, defaults, opts || {} );\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( content );\r\n\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\r\n var testWidth, $container, buttonStr;\r\n\r\n var firstItemOpts = self.group[ self.currIndex ].opts;\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() && !$.fancybox.isMobile && $( 'body' ).css('overflow') !== 'hidden' ) {\r\n testWidth = $( 'body' ).width();\r\n\r\n $( 'html' ).addClass( 'fancybox-enabled' );\r\n\r\n // Compare body width after applying \"overflow: hidden\"\r\n testWidth = $( 'body' ).width() - testWidth;\r\n\r\n // If width has changed - compensate missing scrollbars by adding right margin\r\n if ( testWidth > 1 ) {\r\n $( 'head' ).append( '' );\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 = $( self.translate( self, firstItemOpts.baseTpl.replace( '\\{\\{BUTTONS\\}\\}', buttonStr ) ) )\r\n .addClass( 'fancybox-is-hidden' )\r\n .attr('id', 'fancybox-container-' + self.id)\r\n .addClass( firstItemOpts.baseClass )\r\n .data( 'FancyBox', self )\r\n .prependTo( 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' ].forEach(function(item) {\r\n self.$refs[ item ] = $container.find( '.fancybox-' + item );\r\n });\r\n\r\n // Check for redundant elements\r\n if ( !firstItemOpts.arrows || self.group.length < 2 ) {\r\n $container.find('.fancybox-navigation').remove();\r\n }\r\n\r\n if ( !firstItemOpts.infobar ) {\r\n self.$refs.infobar.remove();\r\n }\r\n\r\n if ( !firstItemOpts.toolbar ) {\r\n self.$refs.toolbar.remove();\r\n }\r\n\r\n self.trigger( 'onInit' );\r\n\r\n // Bring to front and enable events\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 data = [],\r\n $item,\r\n type,\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 propbably have jQuery collection returned by some selector\r\n\r\n $item = $( item );\r\n data = $item.data();\r\n\r\n opts = 'options' in data ? data.options : {};\r\n opts = $.type( opts ) === 'object' ? opts : {};\r\n\r\n obj.src = 'src' in data ? data.src : ( opts.src || $item.attr( 'href' ) );\r\n\r\n [ 'width', 'height', 'thumb', 'type', 'filter' ].forEach(function(item) {\r\n if ( item in data ) {\r\n opts[ item ] = data[ item ];\r\n }\r\n });\r\n\r\n if ( 'srcset' in data ) {\r\n opts.image = { srcset : data.srcset };\r\n }\r\n\r\n opts.$orig = $item;\r\n\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 if ( $.fancybox.isMobile ) {\r\n obj.opts = $.extend( true, {}, obj.opts, obj.opts.mobile );\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 ( src.charAt(0) === '#' ) {\r\n type = 'inline';\r\n }\r\n }\r\n\r\n obj.type = type;\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 passed as a method\r\n if ( $.type( obj.opts.caption ) === 'function' ) {\r\n obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] );\r\n\r\n } else if ( 'caption' in data ) {\r\n obj.opts.caption = data.caption;\r\n }\r\n\r\n // Make sure we have caption as a string\r\n obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + '';\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 });\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 }, 500);\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 mouseenter.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function() {\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\r\n self.idleSecondsCounter++;\r\n\r\n if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime ) {\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.isSliding || 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.isSliding ) {\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();\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();\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 if ( $W.width() < 800 ) {\r\n margin = [ 0, 0, 0, 0 ];\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 position and content of all slides\r\n // =========================================\r\n\r\n update : function() {\r\n\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\r\n // Update slide position and scale content to fit\r\n // ==============================================\r\n\r\n updateSlide : function( slide ) {\r\n\r\n var self = this;\r\n var $what = slide.$content;\r\n\r\n if ( $what && ( slide.width || slide.height ) ) {\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 // 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\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 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.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 = this.naturalWidth;\r\n slide.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 ) {\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 $contents,\r\n $body,\r\n scrollWidth,\r\n frameWidth,\r\n frameHeight;\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 && !( opts.css.width !== undefined && opts.css.height !== undefined ) ) {\r\n\r\n scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth;\r\n\r\n frameWidth\t= Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) );\r\n frameHeight\t= Math.ceil( $body.outerHeight(true) );\r\n\r\n // Resize wrapper to fit iframe content\r\n $wrap.css({\r\n 'width' : opts.css.width === undefined ? frameWidth + ( $wrap.outerWidth() - $wrap.innerWidth() ) : opts.css.width,\r\n 'height' : opts.css.height === undefined ? frameHeight + ( $wrap.outerHeight() - $wrap.innerHeight() ) : opts.css.height\r\n });\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 // 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 if ( slide.opts.smallBtn && !slide.$smallBtn ) {\r\n slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content );\r\n }\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.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\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 = Math.round( (end.width / start.width) * 100 ) / 100;\r\n end.scaleY = Math.round( (end.height / start.height) * 100 ) / 100;\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\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\r\n var self = this;\r\n\r\n var current = self.current;\r\n var slides = {};\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 // 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\r\n $.fancybox.stop( slide.$slide );\r\n\r\n slide.$slide.unbind().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 // 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() {\r\n var self = this;\r\n var next, prev;\r\n\r\n if ( self.group.length < 2 ) {\r\n return;\r\n }\r\n\r\n next = self.slides[ self.currPos + 1 ];\r\n prev = self.slides[ self.currPos - 1 ];\r\n\r\n if ( next && next.type === 'image' ) {\r\n self.loadSlide( next );\r\n }\r\n\r\n if ( prev && prev.type === 'image' ) {\r\n self.loadSlide( prev );\r\n }\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 // Skip for images and iframes\r\n $el = current && current.isComplete ? current.$slide.find('button,:input,[tabindex],a').filter(':not([disabled]):visible:first') : null;\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.uid !== self.uid && !instance.isClosing) {\r\n instance.trigger( 'onDeactivate' );\r\n }\r\n\r\n });\r\n\r\n if ( self.current ) {\r\n if ( self.$refs.container.index() > 0 ) {\r\n self.$refs.container.prependTo( document.body );\r\n }\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\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 $.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 instance;\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.focusBack ) {\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 $( 'html' ).removeClass( 'fancybox-enabled' );\r\n\r\n $( '#fancybox-style-noscroll' ).remove();\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' ) {\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 var index = current.index;\r\n var opts = current.opts;\r\n var caption = opts.caption;\r\n var $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 ) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $('[data-fancybox-count]').html( self.group.length );\r\n $('[data-fancybox-index]').html( index + 1 );\r\n\r\n $('[data-fancybox-prev]').prop('disabled', ( !opts.loop && index <= 0 ) );\r\n $('[data-fancybox-next]').prop('disabled', ( !opts.loop && index >= self.group.length - 1 ) );\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\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\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.1.20\",\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\"):first').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\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/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\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 var event = transitionEnd || 'transitionend';\r\n\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( event, 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 $el.off( event );\r\n\r\n if ( $.isPlainObject( to ) ) {\r\n\r\n if ( to.scaleX !== undefined && to.scaleY !== undefined ) {\r\n $el.css( 'transition-duration', '0ms' );\r\n\r\n to.width = $el.width() * to.scaleX;\r\n to.height = $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 } 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 $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 );\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 items\t= e.data ? e.data.items : [],\r\n value\t= $(target).attr( 'data-fancybox' ) || '',\r\n index\t= 0;\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n // Get all related items and find index for clicked one\r\n if ( value ) {\r\n items = items.length ? items.filter( '[data-fancybox=\"' + value + '\"]' ) : $( '[data-fancybox=\"' + value + '\"]' );\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 items : $( 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 ));\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// 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.lv/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n\t\tgoogle_maps : {\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\t};\r\n\r\n\t$(document).on('onInit.fb', function (e, instance) {\r\n\r\n\t\t$.each(instance.group, function( i, item ) {\r\n\r\n\t\t\tvar url\t = item.src || '',\r\n\t\t\t\ttype = false,\r\n\t\t\t\tmedia,\r\n\t\t\t\tthumb,\r\n\t\t\t\trez,\r\n\t\t\t\tparams,\r\n\t\t\t\turlParams,\r\n\t\t\t\to,\r\n\t\t\t\tprovider;\r\n\r\n\t\t\t// Skip items that already have content type\r\n\t\t\tif ( item.type ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tmedia = $.extend( true, {}, defaults, item.opts.media );\r\n\r\n\t\t\t// Look for any matching media type\r\n\t\t\t$.each(media, function ( n, el ) {\r\n\t\t\t\trez = url.match(el.matcher);\r\n\t\t\t\to = {};\r\n\t\t\t\tprovider = n;\r\n\r\n\t\t\t\tif (!rez) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttype = el.type;\r\n\r\n\t\t\t\tif ( el.paramPlace && rez[ el.paramPlace ] ) {\r\n\t\t\t\t\turlParams = rez[ el.paramPlace ];\r\n\r\n\t\t\t\t\tif ( urlParams[ 0 ] == '?' ) {\r\n\t\t\t\t\t\turlParams = urlParams.substring(1);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\turlParams = urlParams.split('&');\r\n\r\n\t\t\t\t\tfor ( var m = 0; m < urlParams.length; ++m ) {\r\n\t\t\t\t\t\tvar p = urlParams[ m ].split('=', 2);\r\n\r\n\t\t\t\t\t\tif ( p.length == 2 ) {\r\n\t\t\t\t\t\t\to[ p[0] ] = decodeURIComponent( p[1].replace(/\\+/g, \" \") );\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\tparams = $.extend( true, {}, el.params, item.opts[ n ], o );\r\n\r\n\t\t\t\turl = $.type(el.url) === \"function\" ? el.url.call(this, rez, params, item) : format(el.url, rez, params);\r\n\t\t\t\tthumb = $.type(el.thumb) === \"function\" ? el.thumb.call(this, rez, params, item) : format(el.thumb, rez);\r\n\r\n\t\t\t\tif ( provider === 'vimeo' ) {\r\n\t\t\t\t\turl = url.replace('&%23', '#');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\r\n\t\t\t// If it is found, then change content type and update the url\r\n\r\n\t\t\tif ( type ) {\r\n\t\t\t\titem.src = url;\r\n\t\t\t\titem.type = type;\r\n\r\n\t\t\t\tif ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) {\r\n\t\t\t\t\titem.opts.thumb = thumb;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( type === 'iframe' ) {\r\n\t\t\t\t\t$.extend(true, item.opts, {\r\n\t\t\t\t\t\tiframe : {\r\n\t\t\t\t\t\t\tpreload : false,\r\n\t\t\t\t\t\t\tattr : {\r\n\t\t\t\t\t\t\t\tscrolling : \"no\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\titem.contentProvider = provider;\r\n\r\n\t\t\t\t\titem.opts.slideClass += ' fancybox-slide--' + ( provider == 'google_maps' ? 'map' : 'video' );\r\n\t\t\t\t}\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// If no content type is found, then set it to `image` as fallback\r\n\t\t\t\titem.type = 'image';\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t});\r\n\r\n}(window.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 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 var cancelAFrame = (function () {\r\n return window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n };\r\n })();\r\n\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,button,input,select,textarea') || $.isFunction( $el.get(0).onclick ) ) {\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 if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) {\r\n return true;\r\n }\r\n }\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 events\r\n\t\tif ( isTouchDevice ) {\r\n\t self.$container.off( 'mousedown.fb.touch' );\r\n\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\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 ( e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.startPoints = pointers( e );\r\n\r\n\t\t// Prevent zooming if already swiping\r\n\t\tif ( !self.startPoints || ( self.startPoints.length > 1 && instance.isSliding ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tself.$target = $target;\r\n\t\tself.$content = $content;\r\n\t\tself.canTap = true;\r\n\r\n\t\t$(document).off( '.fb.touch' );\r\n\r\n\t\t$(document).on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, \"ontouchend\"));\r\n\t\t$(document).on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, \"ontouchmove\"));\r\n\r\n\t\te.stopPropagation();\r\n\r\n\t\tif ( !(instance.current.opts.touch || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) {\r\n\r\n\t\t\t// Prevent ghosting\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( self.$target ) || isScrollable( self.$target.parent() ) ) ) ) {\r\n\t\t\te.preventDefault();\r\n\t\t}\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\tself.startTime = new Date().getTime();\r\n\t\tself.distanceX = self.distanceY = self.distance = 0;\r\n\r\n\t\tself.isPanning = false;\r\n\t\tself.isSwiping = false;\r\n\t\tself.isZooming = 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\tif ( self.startPoints.length === 1 && !self.isZooming ) {\r\n\t\t\tself.canTap = !instance.isSliding;\r\n\r\n\t\t\tif ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) {\r\n\r\n\t\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\t\tself.$content.css( 'transition-duration', '0ms' );\r\n\r\n\t\t\t\tself.isPanning = true;\r\n\r\n\t\t\t} else {\r\n\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.isZooming = true;\r\n\r\n\t\t\tself.isSwiping = false;\r\n\t\t\tself.isPanning = false;\r\n\r\n\t\t\t$.fancybox.stop( self.$content );\r\n\r\n\t\t\tself.$content.css( 'transition-duration', '0ms' );\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.ontouchmove = function( e ) {\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tself.newPoints = pointers( e );\r\n\r\n\t\tif ( $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) {\r\n\t\t\te.stopPropagation();\r\n\r\n\t\t\tself.canTap = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( !( self.instance.current.opts.touch || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) {\r\n\t\t\treturn;\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\r\n\t\t\tif ( !( self.$target.is( self.$stage ) || self.$stage.find( self.$target ).length ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\tif ( self.isSwiping ) {\r\n\t\t\t\tself.onSwipe();\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\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tGuestures.prototype.onSwipe = function() {\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar swiping = self.isSwiping;\r\n\t\tvar left = self.sliderStartPos.left || 0;\r\n\t\tvar angle;\r\n\r\n\t\tif ( swiping === true ) {\r\n\r\n\t\t\tif ( Math.abs( self.distance ) > 10 ) {\r\n\r\n\t\t\t\tself.canTap = false;\r\n\r\n\t\t\t\tif ( self.instance.group.length < 2 && self.instance.opts.touch.vertical ) {\r\n\t\t\t\t\tself.isSwiping = 'y';\r\n\r\n\t\t\t\t} else if ( self.instance.isSliding || self.instance.opts.touch.vertical === false || ( self.instance.opts.touch.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.instance.isSliding = 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', '0ms' );\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//self.instance.current.isMoved = true;\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} else {\r\n\r\n\t\t\tif ( swiping == 'x' ) {\r\n\r\n\t\t\t\t// Sticky edges\r\n\t\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\t\tleft = left + Math.pow( self.distanceX, 0.8 );\r\n\r\n\t\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\t\tleft = left - Math.pow( -self.distanceX, 0.8 );\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tleft = left + self.distanceX;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\tself.sliderLastPos = {\r\n\t\t\t\ttop : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY,\r\n\t\t\t\tleft : left\r\n\t\t\t};\r\n\r\n\t\t\tif ( self.requestId ) {\r\n\t\t\t\tcancelAFrame( self.requestId );\r\n\r\n\t\t\t\tself.requestId = null;\r\n\t\t\t}\r\n\r\n\t\t\tself.requestId = requestAFrame(function() {\r\n\r\n\t\t\t\tif ( self.sliderLastPos ) {\r\n\t\t\t\t\t$.each(self.instance.slides, function( index, slide ) {\r\n\t\t\t\t\t\tvar pos = slide.pos - self.instance.currPos;\r\n\r\n\t\t\t\t\t\t$.fancybox.setTranslate( slide.$slide, {\r\n\t\t\t\t\t\t\ttop : self.sliderLastPos.top,\r\n\t\t\t\t\t\t\tleft : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter )\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tself.$container.addClass( 'fancybox-is-sliding' );\r\n\t\t\t\t}\r\n\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\r\n\t\tvar self = this;\r\n\r\n\t\tvar newOffsetX, newOffsetY, newPos;\r\n\r\n\t\tself.canTap = false;\r\n\r\n\t\tif ( self.contentStartPos.width > self.canvasWidth ) {\r\n\t\t\tnewOffsetX = self.contentStartPos.left + self.distanceX;\r\n\r\n\t\t} else {\r\n\t\t\tnewOffsetX = self.contentStartPos.left;\r\n\t\t}\r\n\r\n\t\tnewOffsetY = self.contentStartPos.top + self.distanceY;\r\n\r\n\t\tnewPos = self.limitMovement( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height );\r\n\r\n\t\tnewPos.scaleX = self.contentStartPos.scaleX;\r\n\t\tnewPos.scaleY = self.contentStartPos.scaleY;\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\t};\r\n\r\n\t// Make panning sticky to the edges\r\n\tGuestures.prototype.limitMovement = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\r\n\t\tvar self = this;\r\n\r\n\t\tvar minTranslateX, minTranslateY, maxTranslateX, maxTranslateY;\r\n\r\n\t\tvar canvasWidth = self.canvasWidth;\r\n\t\tvar canvasHeight = self.canvasHeight;\r\n\r\n\t\tvar currentOffsetX = self.contentStartPos.left;\r\n\t\tvar currentOffsetY = self.contentStartPos.top;\r\n\r\n\t\tvar distanceX = self.distanceX;\r\n\t\tvar distanceY = self.distanceY;\r\n\r\n\t\t// Slow down proportionally to traveled distance\r\n\r\n\t\tminTranslateX = Math.max(0, canvasWidth * 0.5 - newWidth * 0.5 );\r\n\t\tminTranslateY = Math.max(0, canvasHeight * 0.5 - newHeight * 0.5 );\r\n\r\n\t\tmaxTranslateX = Math.min( canvasWidth - newWidth, canvasWidth * 0.5 - newWidth * 0.5 );\r\n\t\tmaxTranslateY = Math.min( canvasHeight - newHeight, canvasHeight * 0.5 - newHeight * 0.5 );\r\n\r\n\t\tif ( newWidth > 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 ( newHeight > 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};\r\n\r\n\t};\r\n\r\n\r\n\tGuestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) {\r\n\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\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\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\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\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\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 );\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t};\r\n\r\n\tGuestures.prototype.endSwiping = function( swiping ) {\r\n\r\n\t\tvar self = this;\r\n\t\tvar ret = false;\r\n\r\n\t\tself.instance.isSliding = false;\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' && 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 && self.instance.group.length > 1 ) {\r\n\t\t\tret = self.instance.previous( self.speedX );\r\n\r\n\t\t} else if ( swiping == 'x' && self.distanceX < -50 && self.instance.group.length > 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\tself.instance.jumpTo( self.instance.current.index, 150 );\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.instance.current.opts.touch.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\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 };\r\n\r\n\t // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n\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 current slide is not in the center\r\n\t\tif ( instance.isSliding ) {\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 ( 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.has( e.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 || instance.isSliding ) {\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\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}, 300);\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\t$(document).on('beforeClose.fb', function (e, instance) {\r\n\t\tif ( instance && instance.Guestures ) {\r\n\t\t\tinstance.Guestures.destroy();\r\n\t\t}\r\n\t});\r\n\r\n\r\n}(window, document, window.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\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\t\tspeed : 3000,\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() {\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 && (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\tself.instance.next();\r\n\r\n\t\t\t\t}, self.instance.current.opts.slideShow.speed || self.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\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 ( self.instance && current && ( current.opts.loop || current.index < self.instance.group.length - 1 )) {\r\n\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.addClass( 'fancybox-button--pause' );\r\n\r\n\t\t\t\tif ( current.isComplete ) {\r\n\t\t\t\t\tself.set();\r\n\t\t\t\t}\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\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));\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\t\t$.fancybox.defaults.btnTpl.fullScreen = false;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar FullScreen = {\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$(document).on({\r\n\t\t'onInit.fb' : function(e, instance) {\r\n\t\t\tvar $container;\r\n\r\n\t\t\tvar $button = instance.$refs.toolbar.find('[data-fancybox-fullscreen]');\r\n\r\n\t\t\tif ( instance && !instance.FullScreen && 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 {\r\n\t\t\t\t$button.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 instance = $.fancybox.getInstance();\r\n\r\n\t\t// If image is zooming, then force to stop and reposition properly\r\n\t\tif ( instance.current && instance.current.type === 'image' && instance.isAnimating ) {\r\n\t\t\tinstance.current.$content.css( 'transition', 'none' );\r\n\r\n\t\t\tinstance.isAnimating = false;\r\n\r\n\t\t\tinstance.update( true, true, 0 );\r\n\t\t}\r\n\r\n\t});\r\n\r\n}(document, window.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\tvar FancyThumbs = function( instance ) {\r\n\t\tthis.instance = instance;\r\n\t\tthis.init();\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\r\n\t\tinit : function() {\r\n\t\t\tvar self = this;\r\n\r\n\t\t\tvar first = self.instance.group[0],\r\n\t\t\t\tsecond = self.instance.group[1];\r\n\r\n\t\t\tself.$button = self.instance.$refs.toolbar.find( '[data-fancybox-thumbs]' );\r\n\r\n\t\t\tif ( self.instance.group.length > 1 && self.instance.group[ self.instance.currIndex ].opts.thumbs && (\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.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\r\n\t\t\t\tself.isActive = false;\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tcreate : function() {\r\n\t\t\tvar instance = this.instance,\r\n\t\t\t\tlist,\r\n\t\t\t\tsrc;\r\n\r\n\t\t\tthis.$grid = $('
').appendTo( instance.$refs.container );\r\n\r\n\t\t\tlist = '
    ';\r\n\r\n\t\t\t$.each(instance.group, function( i, item ) {\r\n\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\r\n\t\t\t});\r\n\r\n\t\t\tlist += '
';\r\n\r\n\t\t\tthis.$list = $( list ).appendTo( this.$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\tthis.$list.find('img').hide().one('load', function() {\r\n\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 width/height and center it\r\n\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' : Math.min( 0, Math.floor(thumbHeight * 0.3 - height * 0.3 ) ),\r\n\t\t\t\t\t'margin-left' : Math.min( 0, 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},\r\n\r\n\t\tfocus : function() {\r\n\r\n\t\t\tif ( this.instance.current ) {\r\n\t\t\t\tthis.$list\r\n\t\t\t\t\t.children()\r\n\t\t\t\t\t.removeClass('fancybox-thumbs-active')\r\n\t\t\t\t\t.filter('[data-index=\"' + this.instance.current.index + '\"]')\r\n\t\t\t\t\t.addClass('fancybox-thumbs-active')\r\n\t\t\t\t\t.focus();\r\n\t\t\t}\r\n\r\n\t\t},\r\n\r\n\t\tclose : function() {\r\n\t\t\tthis.$grid.hide();\r\n\t\t},\r\n\r\n\t\tupdate : function() {\r\n\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\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();\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\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\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\tif ( instance && !instance.Thumbs ) {\r\n\t\t\t\tinstance.Thumbs = new FancyThumbs( instance );\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.isActive ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( item.modal ) {\r\n\t\t\t\tThumbs.$button.hide();\r\n\r\n\t\t\t\tThumbs.hide();\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif ( firstRun && instance.opts.thumbs.autoStart === true ) {\r\n\t\t\t\tThumbs.show();\r\n\t\t\t}\r\n\r\n\t\t\tif ( Thumbs.isVisible ) {\r\n\t\t\t\tThumbs.focus();\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 && instance.opts.thumbs.hideOnClose !== false ) {\r\n\t\t\t\tThumbs.close();\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// 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// 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// Throtlling 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$el.trigger( 'click' );\r\n\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// .. if not, try finding element by ID\r\n\t\t\t\t$( \"#\" + $.escapeSelector( url.gallery ) + \"\" ).trigger( 'click' );\r\n\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 getGallery( 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.$orig ? opts.$orig.data( 'fancybox' ) : ( opts.hash || '' );\r\n\t}\r\n\r\n\t// Star when DOM becomes ready\r\n $(function() {\r\n\r\n\t\t// Small delay is used to allow other scripts to process \"dom ready\" event\r\n\t\tsetTimeout(function() {\r\n\r\n\t\t\t// Check if this module is not disabled\r\n\t\t\tif ( $.fancybox.defaults.hash === false ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Update hash when opening/closing fancyBox\r\n\t\t $(document).on({\r\n\t\t\t\t'onInit.fb' : function( e, instance ) {\r\n\t\t\t\t\tvar url, gallery;\r\n\r\n\t\t\t\t\tif ( instance.group[ instance.currIndex ].opts.hash === false ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\turl = parseUrl();\r\n\t\t\t\t\tgallery = getGallery( instance );\r\n\r\n\t\t\t\t\t// Make sure gallery start index matches index from hash\r\n\t\t\t\t\tif ( gallery && url.gallery && gallery == url.gallery ) {\r\n\t\t\t\t\t\tinstance.currIndex = url.index - 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\r\n\t\t\t\t'beforeShow.fb' : function( e, instance, current, firstRun ) {\r\n\t\t\t\t\tvar gallery;\r\n\r\n\t\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t gallery = getGallery( instance );\r\n\r\n\t\t // Update window hash\r\n\t\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t\t\t\t\tif ( window.location.hash.indexOf( gallery ) < 0 ) {\r\n\t\t\t instance.opts.origHash = window.location.hash;\r\n\t\t\t }\r\n\r\n\t\t\t\t\t\tcurrentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' );\r\n\r\n\t\t\t\t\t\tif ( 'replaceState' in window.history ) {\r\n\t\t\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttimerID = setTimeout(function() {\r\n\t\t\t\t\t\t\t\twindow.history[ firstRun ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash );\r\n\r\n\t\t\t\t\t\t\t\ttimerID = null;\r\n\r\n\t\t\t\t\t\t\t}, 300);\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\twindow.location.hash = currentHash;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t }\r\n\r\n\t\t },\r\n\r\n\t\t\t\t'beforeClose.fb' : function( e, instance, current ) {\r\n\t\t\t\t\tvar gallery, origHash;\r\n\r\n\t\t\t\t\tif ( timerID ) {\r\n\t\t\t\t\t\tclearTimeout( timerID );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif ( current.opts.hash === false ) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tgallery = getGallery( instance );\r\n\t\t\t\t\torigHash = instance && instance.opts.origHash ? instance.opts.origHash : '';\r\n\r\n\t\t // Remove hash from location bar\r\n\t\t if ( gallery && gallery !== '' ) {\r\n\r\n\t\t if ( 'replaceState' in history ) {\r\n\t\t\t\t\t\t\twindow.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash );\r\n\r\n\t\t } else {\r\n\t\t\t\t\t\t\twindow.location.hash = origHash;\r\n\r\n\t\t\t\t\t\t\t// Keep original scroll position\r\n\t\t\t\t\t\t\t$( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft );\r\n\t\t }\r\n\t\t }\r\n\r\n\t\t\t\t\tcurrentHash = null;\r\n\t\t }\r\n\t\t });\r\n\r\n\t\t\t// Check if need to close after url has changed\r\n\t\t\t$(window).on('hashchange.fb', function() {\r\n\t\t\t\tvar url = parseUrl();\r\n\r\n\t\t\t\tif ( $.fancybox.getInstance() ) {\r\n\t\t\t\t\tif ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) {\r\n\t\t\t\t\t\tcurrentHash = null;\r\n\r\n\t\t\t\t\t\t$.fancybox.close();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if ( url.gallery !== '' ) {\r\n\t\t\t\t\ttriggerFromUrl( url );\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If navigating away from current page\r\n\t\t\t$(window).one('unload.fb popstate.fb', function() {\r\n\t\t\t\t$.fancybox.getInstance( 'close', true, 0 );\r\n\t\t\t});\r\n\r\n\t\t\t// Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n\t\t\ttriggerFromUrl( parseUrl() );\r\n\r\n\t\t}, 50);\r\n\r\n });\r\n\r\n\r\n}(document, window, window.jQuery));\r\n","/**\r\n *\r\n * Accessible Main Navigation\r\n *\r\n */\r\n\r\n( function () {\r\n\t'use strict';\r\n\r\n\tconst html = document.querySelector( 'html' ),\r\n\t\tnav = document.querySelector( '.site-header__nav' ),\r\n\t\toverlay = document.querySelector( '.menu-overlay' ),\r\n\t\tnavToggle = document.querySelector( '.site-header__nav-toggle' );\r\n\r\n\t/**\r\n\t * Toggle Mobile Nav\r\n\t * This can be triggered by click of toggle or overlay\r\n\t */\r\n\tconst toggleNav = () => {\r\n\r\n\t\t/* Open or close mobile nav and set correct aria attributes */\r\n\t\tif( 'false' === navToggle.getAttribute( 'aria-expanded' ) ) {\r\n\r\n\t\t\tnavToggle.setAttribute( 'aria-expanded', 'true' );\r\n\t\t\tnav.style.visibility = 'visible';\r\n\t\t\tnav.setAttribute( 'aria-expanded', 'true' );\r\n\t\t\thtml.classList.add( 'nav-open' );\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnavToggle.setAttribute( 'aria-expanded', 'false' );\r\n\t\t\tnav.setAttribute( 'aria-expanded', 'false' );\r\n\t\t\thtml.classList.remove( 'nav-open' );\r\n\r\n\t\t}\r\n\t};\r\n\r\n\t/* Event Listeners - Mobile */\r\n\tnavToggle.addEventListener( 'click', toggleNav );\r\n\toverlay.addEventListener( 'click', toggleNav );\r\n\r\n} )();\r\n","/**\r\n *\r\n * Filter Grid\r\n *\r\n */\r\n\r\n( function () {\r\n\t'use strict';\r\n\r\n\tconst html \t\t\t\t= document.querySelector( 'html' );\r\n\tconst filterToggle \t\t= document.querySelector( '.filter-toggle__button' );\r\n\tconst filterClose \t\t= document.querySelector( '.close-filter-button' );\r\n\tconst filterOverlay \t= document.querySelector( '.filter-overlay' );\r\n\r\n\t/**\r\n\t * Toggle Filter Menu\r\n\t */\r\n\tconst toggleFilters = () => {\r\n\t\thtml.classList.toggle( 'filter-open' );\r\n\t};\r\n\r\n\t/**\r\n\t * Close Filter Menu\r\n\t */\r\n\tconst closeFilters = () => {\r\n\t\thtml.classList.remove( 'filter-open' );\r\n\t};\r\n\r\n\tif( null != filterToggle ) {\r\n\t\tfilterToggle.addEventListener( 'click', toggleFilters );\r\n\t\tfilterClose.addEventListener( 'click', closeFilters );\r\n\t\tfilterOverlay.addEventListener( 'click', closeFilters );\r\n\t}\r\n\r\n} )();\r\n"],"sourceRoot":""}