Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

angular-responsive-carousel

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-responsive-carousel - npm Package Compare versions

Comparing version 1.3.11 to 1.4.11

2

angular-responsive-carousel.metadata.json

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"Images":{"__symbolic":"interface"},"Image":{"__symbolic":"interface"},"IvyCarouselModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"CarouselComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":9,"character":8}],"exports":[{"__symbolic":"reference","name":"CarouselComponent"}],"providers":[],"bootstrap":[],"entryComponents":[{"__symbolic":"reference","name":"CarouselComponent"}]}]}],"members":{}},"CarouselComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"carousel, [carousel]","exportAs":"carousel","template":"<div class=\"carousel-counter\" *ngIf=\"isCounter\">{{counter}}</div>\n\n<div class=\"carousel-container\" [class.carousel-moving]=\"isMoving\">\n\t<div class=\"carousel-cells\" #cells (transitionend)=\"handleTransitionendCellContainer($event)\">\n\t\t<ng-content></ng-content>\n\n\t\t<ng-template ngFor let-image [ngForOf]=\"images\" let-i=\"index\">\n\t\t\t<div class=\"carousel-cell\" \n\t\t\t\t*ngIf=\"i < cellLimit\" \n\t\t\t\t[style.width]=\"getCellWidth()+'px'\"\n\t\t\t\t[style.border-radius]=\"borderRadius+'px'\">\n\n\t\t\t\t<!-- Image -->\n\t\t\t\t<img \n\t\t\t\t\t*ngIf=\"getFile(i) && getFile(i)['image']\" \n\t\t\t\t\t[src]=\"getFile(i)['image']['path']\"\n\t\t\t\t\t[style.object-fit]=\"objectFit\"\n\t\t\t\t\tdraggable=\"false\" />\n\n\t\t\t\t<!-- Video -->\n\t\t\t\t<ng-template [ngIf]=\"getFile(i) && getFile(i)['type'] === 'video'\">\n\t\t\t\t\t<div class=\"carousel-play\" (click)=\"toggleVideo(video)\"></div>\n\n\t\t\t\t\t<video #video\n\t\t\t\t\t\t[loop]=\"videoProperties.loop\"\n\t\t\t\t\t\t[muted]=\"videoProperties.muted\"\n\t\t\t\t\t\t[controls]=\"isSafari\"\n\t\t\t\t\t\t[style.object-fit]=\"objectFit\"\n\t\t\t\t\t\t[style.border-radius]=\"borderRadius+'px'\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<source [src]=\"getFile(i)['path']\" type=\"video/mp4\">\n\t\t\t\t\t</video>\n\t\t\t\t</ng-template>\n\t\t\t</div>\n\t\t</ng-template>\n\t</div>\n\n\t<div class=\"carousel-dots\" *ngIf=\"dots\">\n\t\t<div class=\"carousel-dot\" [class.carousel-dot-active]=\"i === activeDotIndex\" *ngFor=\"let dot of dotsArr; index as i\"></div>\n\t</div>\n</div>\n\n<div class=\"carousel-arrows\" \n\t[class.carousel-arrows-outside]=\"arrowsOutside\" \n\t[class.carousel-dark-arrows]=\"arrowsTheme === 'dark'\"\n\t*ngIf=\"arrows\">\n\t\n\t<div class=\"carousel-arrow carousel-arrow-prev\" [class.carousel-arrow-disabled]=\"isPrevArrowDisabled()\" (click)=\"prev()\"></div>\n\t<div class=\"carousel-arrow carousel-arrow-next\" [class.carousel-arrow-disabled]=\"isNextArrowDisabled()\" (click)=\"next()\"></div>\n</div>","styles":[":host{-moz-user-select:none;-webkit-user-select:none;box-sizing:border-box;display:block;height:100%;left:0;position:relative;top:0;transform-origin:top left;user-select:none;width:100%;z-index:10000}:host .carousel-container{cursor:grab;height:100%;overflow:hidden;width:100%}:host .carousel-container.carousel-moving{cursor:grabbing}:host .carousel-counter{background-color:rgba(23,37,68,.3);border-radius:13px;color:#fff;font-size:11px;line-height:normal;padding:5px 7px;position:absolute;right:24px;text-align:right;top:8px;transition:opacity .2s;z-index:30}:host ::ng-deep .carousel-cells{display:block;height:100%;transition:transform .2s;width:100%}:host ::ng-deep .carousel-cells .carousel-cell.swiper-prev-image{transform:translate3d(-100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell.swiper-next-image{transform:translate3d(100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell{height:100%;overflow:hidden;position:absolute;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img,:host ::ng-deep .carousel-cells .carousel-cell video{height:100%;object-fit:contain;position:relative;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img.swiper-hide{display:none}:host ::ng-deep .carousel-cells .carousel-cell .carousel-play{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}:host .carousel-arrow{background-color:#fff;background-position:50%;background-repeat:no-repeat;background-size:31px;border-radius:100px;box-shadow:0 0 5px rgba(0,0,0,.15);cursor:pointer;height:40px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:10}:host .carousel-arrow-prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMTUuNDEgMTYuNTlMMTAuODMgMTJsNC41OC00LjU5TDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);left:10px}:host .carousel-arrow-next{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNOC41OSAxNi41OUwxMy4xNyAxMiA4LjU5IDcuNDEgMTAgNmw2IDYtNiA2LTEuNDEtMS40MXoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);right:10px}:host .carousel-arrows-outside .carousel-arrow-prev{left:-60px}:host .carousel-arrows-outside .carousel-arrow-next{right:-60px}:host .carousel-dark-arrows .carousel-arrow{filter:invert(1)}:host .carousel-arrow-disabled{cursor:default;opacity:.5}:host .carousel-dots{bottom:0;left:0;position:absolute;right:0;text-align:center;z-index:10}:host .carousel-dots .carousel-dot{border:2px solid #fff;border-radius:100px;display:inline-block;height:8px;margin:4px;width:8px}:host .carousel-dots .carousel-dot-active{background-color:#fff}"]}]}],"members":{"lineUpCells":[{"__symbolic":"method"}],"quicklyPositionContainer":[{"__symbolic":"method"}],"images":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":5}}]}],"events":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":5}}]}],"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":5}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":5}}]}],"loop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":5}}]}],"autoplay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":5}}]}],"autoplayInterval":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":5}}]}],"pauseOnHover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":5}}]}],"dots":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":5}}]}],"borderRadius":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":5}}]}],"margin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":5}}]}],"objectFit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":5}}]}],"minSwipeDistance":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":5}}]}],"transitionDuration":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":100,"character":5}}]}],"transitionTimingFunction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":5}}]}],"videoProperties":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":5}}]}],"counterSeparator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":5}}]}],"overflowCellsLimit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":5}}]}],"listeners":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":5}}]}],"cellWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":107,"character":5},"arguments":["cellWidth"]}]}],"isCounter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":5},"arguments":["counter"]}]}],"arrows":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":126,"character":5}}]}],"arrowsOutside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":127,"character":5}}]}],"arrowsTheme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":5}}]}],"hostClassCarousel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":136,"character":5},"arguments":["class.carousel"]}]}],"hostStyleHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":137,"character":5},"arguments":["style.height"]}]}],"hostStyleWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":138,"character":5},"arguments":["style.width"]}]}],"onWindowResize":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":140,"character":5},"arguments":["window:resize",["$event"]]}]}],"onMousemove":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":149,"character":5},"arguments":["mousemove",["$event"]]}]}],"onMouseleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":156,"character":5},"arguments":["mouseleave",["$event"]]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":164,"character":28},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":165,"character":21}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"initCarousel":[{"__symbolic":"method"}],"detectDomChanges":[{"__symbolic":"method"}],"onDomChanges":[{"__symbolic":"method"}],"setDimensions":[{"__symbolic":"method"}],"getFile":[{"__symbolic":"method"}],"handleTransitionendCellContainer":[{"__symbolic":"method"}],"toggleVideo":[{"__symbolic":"method"}],"getCurrentIndex":[{"__symbolic":"method"}],"getCellWidth":[{"__symbolic":"method"}],"next":[{"__symbolic":"method"}],"prev":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"isNextArrowDisabled":[{"__symbolic":"method"}],"isPrevArrowDisabled":[{"__symbolic":"method"}],"getCellLength":[{"__symbolic":"method"}]}}},"origins":{"Images":"./lib/interfaces","Image":"./lib/interfaces","IvyCarouselModule":"./lib/carousel.module","CarouselComponent":"./lib/carousel.component"},"importAs":"angular-responsive-carousel"}
{"__symbolic":"module","version":4,"metadata":{"Images":{"__symbolic":"interface"},"Image":{"__symbolic":"interface"},"IvyCarouselModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"CarouselComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":9,"character":8}],"exports":[{"__symbolic":"reference","name":"CarouselComponent"}],"providers":[],"bootstrap":[],"entryComponents":[{"__symbolic":"reference","name":"CarouselComponent"}]}]}],"members":{}},"CarouselComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":7,"character":1},"arguments":[{"selector":"carousel, [carousel]","exportAs":"carousel","template":"<div class=\"carousel-counter\" *ngIf=\"isCounter\">{{counter}}</div>\n\n<div class=\"carousel-container\" [class.carousel-moving]=\"isMoving\">\n\t<div class=\"carousel-cells\" #cells (transitionend)=\"handleTransitionendCellContainer($event)\">\n\t\t<ng-content></ng-content>\n\n\t\t<ng-template ngFor let-image [ngForOf]=\"images\" let-i=\"index\">\n\t\t\t<div class=\"carousel-cell\" \n\t\t\t\t*ngIf=\"i < cellLimit\" \n\t\t\t\t[style.width]=\"getCellWidth()+'px'\"\n\t\t\t\t[style.border-radius]=\"borderRadius+'px'\">\n\n\t\t\t\t<!-- Image -->\n\t\t\t\t<img \n\t\t\t\t\t*ngIf=\"getFile(i) && getFile(i)['image']\" \n\t\t\t\t\t[src]=\"getFile(i)['image']['path']\"\n\t\t\t\t\t[style.object-fit]=\"objectFit\"\n\t\t\t\t\tdraggable=\"false\" />\n\n\t\t\t\t<!-- Video -->\n\t\t\t\t<ng-template [ngIf]=\"getFile(i) && getFile(i)['type'] === 'video'\">\n\t\t\t\t\t<div class=\"carousel-play\" (click)=\"toggleVideo(video)\"></div>\n\n\t\t\t\t\t<video #video\n\t\t\t\t\t\t[loop]=\"videoProperties.loop\"\n\t\t\t\t\t\t[muted]=\"videoProperties.muted\"\n\t\t\t\t\t\t[controls]=\"isSafari\"\n\t\t\t\t\t\t[style.object-fit]=\"objectFit\"\n\t\t\t\t\t\t[style.border-radius]=\"borderRadius+'px'\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<source [src]=\"getFile(i)['path']\" type=\"video/mp4\">\n\t\t\t\t\t</video>\n\t\t\t\t</ng-template>\n\t\t\t</div>\n\t\t</ng-template>\n\t</div>\n\n\t<div class=\"carousel-dots\" *ngIf=\"dots\">\n\t\t<div class=\"carousel-dot\" [class.carousel-dot-active]=\"i === activeDotIndex\" *ngFor=\"let dot of dotsArr; index as i\"></div>\n\t</div>\n</div>\n\n<div class=\"carousel-arrows\" \n\t[class.carousel-arrows-outside]=\"arrowsOutside\" \n\t[class.carousel-dark-arrows]=\"arrowsTheme === 'dark'\"\n\t*ngIf=\"arrows\">\n\t\n\t<div class=\"carousel-arrow carousel-arrow-prev\" [class.carousel-arrow-disabled]=\"isPrevArrowDisabled()\" (click)=\"prev()\"></div>\n\t<div class=\"carousel-arrow carousel-arrow-next\" [class.carousel-arrow-disabled]=\"isNextArrowDisabled()\" (click)=\"next()\"></div>\n</div>","styles":[":host{-moz-user-select:none;-webkit-user-select:none;box-sizing:border-box;display:block;height:100%;left:0;position:relative;top:0;transform-origin:top left;user-select:none;width:100%;z-index:10000}:host .carousel-container{cursor:grab;height:100%;overflow:hidden;width:100%}:host .carousel-container.carousel-moving{cursor:grabbing}:host .carousel-counter{background-color:rgba(23,37,68,.3);border-radius:13px;color:#fff;font-size:11px;line-height:normal;padding:5px 7px;position:absolute;right:24px;text-align:right;top:8px;transition:opacity .2s;z-index:30}:host ::ng-deep .carousel-cells{display:block;height:100%;transition:transform .2s;width:100%}:host ::ng-deep .carousel-cells .carousel-cell.swiper-prev-image{transform:translate3d(-100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell.swiper-next-image{transform:translate3d(100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell{height:100%;overflow:hidden;position:absolute;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img,:host ::ng-deep .carousel-cells .carousel-cell video{height:100%;object-fit:contain;position:relative;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img.swiper-hide{display:none}:host ::ng-deep .carousel-cells .carousel-cell .carousel-play{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}:host .carousel-arrow{background-color:#fff;background-position:50%;background-repeat:no-repeat;background-size:31px;border-radius:100px;box-shadow:0 0 5px rgba(0,0,0,.15);cursor:pointer;height:40px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:10}:host .carousel-arrow-prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMTUuNDEgMTYuNTlMMTAuODMgMTJsNC41OC00LjU5TDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);left:10px}:host .carousel-arrow-next{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNOC41OSAxNi41OUwxMy4xNyAxMiA4LjU5IDcuNDEgMTAgNmw2IDYtNiA2LTEuNDEtMS40MXoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);right:10px}:host .carousel-arrows-outside .carousel-arrow-prev{left:-60px}:host .carousel-arrows-outside .carousel-arrow-next{right:-60px}:host .carousel-dark-arrows .carousel-arrow{filter:invert(1)}:host .carousel-arrow-disabled{cursor:default;opacity:.5}:host .carousel-dots{bottom:0;left:0;position:absolute;right:0;text-align:center;z-index:10}:host .carousel-dots .carousel-dot{border:2px solid #fff;border-radius:100px;display:inline-block;height:8px;margin:4px;width:8px}:host .carousel-dots .carousel-dot-active{background-color:#fff}"]}]}],"members":{"lineUpCells":[{"__symbolic":"method"}],"quicklyPositionContainer":[{"__symbolic":"method"}],"images":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":5}}]}],"events":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":87,"character":5}}]}],"height":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":5}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":5}}]}],"loop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":5}}]}],"autoplay":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":5}}]}],"autoplayInterval":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":5}}]}],"pauseOnHover":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":5}}]}],"dots":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":5}}]}],"borderRadius":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":5}}]}],"margin":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":5}}]}],"objectFit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":5}}]}],"minSwipeDistance":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":5}}]}],"transitionDuration":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":100,"character":5}}]}],"transitionTimingFunction":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":5}}]}],"videoProperties":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":5}}]}],"counterSeparator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":5}}]}],"overflowCellsLimit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":5}}]}],"listeners":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":5}}]}],"cellsToShow":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":106,"character":5}}]}],"cellsToScroll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":107,"character":5}}]}],"cellWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":5},"arguments":["cellWidth"]}]}],"isCounter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":5},"arguments":["counter"]}]}],"arrows":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":5}}]}],"arrowsOutside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":129,"character":5}}]}],"arrowsTheme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":130,"character":5}}]}],"hostClassCarousel":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":138,"character":5},"arguments":["class.carousel"]}]}],"hostStyleHeight":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":139,"character":5},"arguments":["style.height"]}]}],"hostStyleWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostBinding","line":140,"character":5},"arguments":["style.width"]}]}],"onWindowResize":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":142,"character":5},"arguments":["window:resize",["$event"]]}]}],"onMousemove":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":151,"character":5},"arguments":["mousemove",["$event"]]}]}],"onMouseleave":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":158,"character":5},"arguments":["mouseleave",["$event"]]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":166,"character":28},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":167,"character":21}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"initCarousel":[{"__symbolic":"method"}],"detectDomChanges":[{"__symbolic":"method"}],"onDomChanges":[{"__symbolic":"method"}],"setDimensions":[{"__symbolic":"method"}],"getFile":[{"__symbolic":"method"}],"handleTransitionendCellContainer":[{"__symbolic":"method"}],"toggleVideo":[{"__symbolic":"method"}],"getCurrentIndex":[{"__symbolic":"method"}],"getCellWidth":[{"__symbolic":"method"}],"next":[{"__symbolic":"method"}],"prev":[{"__symbolic":"method"}],"select":[{"__symbolic":"method"}],"isNextArrowDisabled":[{"__symbolic":"method"}],"isPrevArrowDisabled":[{"__symbolic":"method"}],"getCellLength":[{"__symbolic":"method"}]}}},"origins":{"Images":"./lib/interfaces","Image":"./lib/interfaces","IvyCarouselModule":"./lib/carousel.module","CarouselComponent":"./lib/carousel.component"},"importAs":"angular-responsive-carousel"}

@@ -20,3 +20,3 @@ (function (global, factory) {

this.isMousedown = false;
this.touchListeners = {
this._touchListeners = {
"touchstart": "handleTouchstart",

@@ -26,3 +26,3 @@ "touchmove": "handleTouchmove",

};
this.mouseListeners = {
this._mouseListeners = {
"mousedown": "handleMousedown",

@@ -33,3 +33,3 @@ "mousemove": "handleMousemove",

};
this.otherListeners = {
this._otherListeners = {
"resize": "handleResize"

@@ -152,2 +152,23 @@ };

}
Object.defineProperty(Touches.prototype, "touchListeners", {
get: function () {
return this.properties.touchListeners ? this.properties.touchListeners : this._touchListeners;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Touches.prototype, "mouseListeners", {
get: function () {
return this.properties.mouseListeners ? this.properties.mouseListeners : this._mouseListeners;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Touches.prototype, "otherListeners", {
get: function () {
return this.properties.otherListeners ? this.properties.otherListeners : this._otherListeners;
},
enumerable: false,
configurable: true
});
Touches.prototype.destroy = function () {

@@ -198,2 +219,8 @@ this.toggleEventListeners('removeEventListener');

};
Touches.prototype.addEventListeners = function (listener, handler) {
window.addEventListener(listener, this[handler], false);
};
Touches.prototype.removeEventListeners = function (listener, handler) {
window.removeEventListener(listener, this[handler], false);
};
Touches.prototype.handleLinearSwipe = function (event) {

@@ -660,3 +687,4 @@ //event.preventDefault();

};
Carousel.prototype.next = function () {
Carousel.prototype.next = function (length) {
if (length === void 0) { length = 1; }
if (this.isSlideInProgress) {

@@ -666,5 +694,6 @@ return;

this.direction = 'left';
this.handleSlide(1);
this.handleSlide(length);
};
Carousel.prototype.prev = function () {
Carousel.prototype.prev = function (length) {
if (length === void 0) { length = 1; }
if (this.isSlideInProgress) {

@@ -674,3 +703,3 @@ return;

this.direction = 'right';
this.handleSlide(1);
this.handleSlide(length);
};

@@ -891,2 +920,3 @@ Carousel.prototype.select = function (index) {

this.listeners = 'mouse and touch';
this.cellsToScroll = 1;
this.arrows = true;

@@ -898,2 +928,3 @@ this.arrowsTheme = 'light';

//event.preventDefault();
_this.touches.addEventListeners("mousemove", "handleMousemove");
_this.carousel.handleTouchstart(event);

@@ -911,2 +942,3 @@ _this.isMoving = true;

_this.carousel.handleTouchend(event);
_this.touches.removeEventListeners("mousemove", "handleMousemove");
_this.isMoving = false;

@@ -1054,3 +1086,7 @@ };

element: this.cellsElement,
listeners: this.listeners
listeners: this.listeners,
mouseListeners: {
"mousedown": "handleMousedown",
"mouseup": "handleMouseup"
}
});

@@ -1151,4 +1187,10 @@ this.touches.on('touchstart', this.handleTouchstart);

CarouselComponent.prototype.getCellWidth = function () {
var elementWidth = this.elementRef.nativeElement.clientWidth;
if (this.cellsToShow) {
var margin = this.cellsToShow > 1 ? this.margin : 0;
var totalMargin = margin * (this.cellsToShow - 1);
return (elementWidth - totalMargin) / this.cellsToShow;
}
if (this._cellWidth === '100%') {
return this.elementRef.nativeElement.clientWidth;
return elementWidth;
}

@@ -1160,7 +1202,7 @@ else {

CarouselComponent.prototype.next = function () {
this.carousel.next(1);
this.carousel.next(this.cellsToScroll);
this.carousel.stopAutoplay();
};
CarouselComponent.prototype.prev = function () {
this.carousel.prev(1);
this.carousel.prev(this.cellsToScroll);
this.carousel.stopAutoplay();

@@ -1219,2 +1261,4 @@ };

listeners: [{ type: core.Input }],
cellsToShow: [{ type: core.Input }],
cellsToScroll: [{ type: core.Input }],
cellWidth: [{ type: core.Input, args: ['cellWidth',] }],

@@ -1221,0 +1265,0 @@ isCounter: [{ type: core.Input, args: ['counter',] }],

@@ -1,2 +0,2 @@

!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-responsive-carousel",["exports","@angular/core","@angular/common"],e):e((t=t||self)["angular-responsive-carousel"]={},t.ng.core,t.ng.common)}(this,(function(t,e,i){"use strict";var n=function(){function t(t){var e=this;this.eventType=void 0,this.handlers={},this.startX=0,this.startY=0,this.lastTap=0,this.doubleTapMinTimeout=300,this.tapMinTimeout=200,this.touchstartTime=0,this.i=0,this.isMousedown=!1,this.touchListeners={touchstart:"handleTouchstart",touchmove:"handleTouchmove",touchend:"handleTouchend"},this.mouseListeners={mousedown:"handleMousedown",mousemove:"handleMousemove",mouseup:"handleMouseup",wheel:"handleWheel"},this.otherListeners={resize:"handleResize"},this.handleTouchstart=function(t){e.elementPosition=e.getElementPosition(),e.touchstartTime=(new Date).getTime(),void 0===e.eventType&&e.getTouchstartPosition(t),e.runHandler("touchstart",t)},this.handleTouchmove=function(t){var i=t.touches;switch(e.detectPan(i)&&e.runHandler("pan",t),e.detectPinch(t)&&e.runHandler("pinch",t),e.detectLinearSwipe(t)){case"horizontal-swipe":t.swipeType="horizontal-swipe",e.runHandler("horizontal-swipe",t);break;case"vertical-swipe":t.swipeType="vertical-swipe",e.runHandler("vertical-swipe",t)}(e.detectLinearSwipe(t)||"horizontal-swipe"===e.eventType||"vertical-swipe"===e.eventType)&&e.handleLinearSwipe(t)},this.handleTouchend=function(t){var i=t.touches;e.detectDoubleTap()&&e.runHandler("double-tap",t),e.detectTap(),e.runHandler("touchend",t),e.eventType="touchend",i&&0===i.length&&(e.eventType=void 0,e.i=0)},this.handleMousedown=function(t){e.isMousedown=!0,e.elementPosition=e.getElementPosition(),e.touchstartTime=(new Date).getTime(),void 0===e.eventType&&e.getMousedownPosition(t),e.runHandler("mousedown",t)},this.handleMousemove=function(t){if(e.isMousedown){switch(e.runHandler("pan",t),e.detectLinearSwipe(t)){case"horizontal-swipe":t.swipeType="horizontal-swipe",e.runHandler("horizontal-swipe",t);break;case"vertical-swipe":t.swipeType="vertical-swipe",e.runHandler("vertical-swipe",t)}(e.detectLinearSwipe(t)||"horizontal-swipe"===e.eventType||"vertical-swipe"===e.eventType)&&e.handleLinearSwipe(t)}},this.handleMouseup=function(t){e.detectTap(),e.isMousedown=!1,e.runHandler("mouseup",t),e.eventType=void 0,e.i=0},this.handleWheel=function(t){e.runHandler("wheel",t)},this.handleResize=function(t){e.runHandler("resize",t)},this.properties=t,this.element=this.properties.element,this.elementPosition=this.getElementPosition(),this.toggleEventListeners("addEventListener")}return t.prototype.destroy=function(){this.toggleEventListeners("removeEventListener")},t.prototype.toggleEventListeners=function(t){var e;for(var i in e="mouse and touch"===this.properties.listeners?Object.assign(this.touchListeners,this.mouseListeners):this.detectTouchScreen()?this.touchListeners:this.mouseListeners,this.properties.resize&&(e=Object.assign(e,this.otherListeners)),e){var n=e[i];"resize"===i?("addEventListener"===t&&window.addEventListener(i,this[n],!1),"removeEventListener"===t&&window.removeEventListener(i,this[n],!1)):"mouseup"===i||"mousemove"===i?("addEventListener"===t&&document.addEventListener(i,this[n],!1),"removeEventListener"===t&&document.removeEventListener(i,this[n],!1)):("addEventListener"===t&&this.element.addEventListener(i,this[n],!1),"removeEventListener"===t&&this.element.removeEventListener(i,this[n],!1))}},t.prototype.handleLinearSwipe=function(t){this.i++,this.i>3&&(this.eventType=this.getLinearSwipeType(t)),"horizontal-swipe"===this.eventType&&this.runHandler("horizontal-swipe",t),"vertical-swipe"===this.eventType&&this.runHandler("vertical-swipe",t)},t.prototype.runHandler=function(t,e){this.handlers[t]&&this.handlers[t](e)},t.prototype.detectPan=function(t){return 1===t.length&&!this.eventType||"pan"===this.eventType},t.prototype.detectDoubleTap=function(){var t=this;if(null==this.eventType){var e=(new Date).getTime(),i=e-this.lastTap;if(clearTimeout(this.doubleTapTimeout),i<this.doubleTapMinTimeout&&i>0)return!0;this.doubleTapTimeout=setTimeout((function(){clearTimeout(t.doubleTapTimeout)}),this.doubleTapMinTimeout),this.lastTap=e}},t.prototype.detectTap=function(){if(null==this.eventType){var t=(new Date).getTime()-this.touchstartTime;t>0&&(t<this.tapMinTimeout?this.runHandler("tap",event):this.runHandler("longtap",event))}},t.prototype.detectPinch=function(t){return 2===t.touches.length&&void 0===this.eventType||"pinch"===this.eventType},t.prototype.detectLinearSwipe=function(t){var e=t.touches;if(e){if(1===e.length&&!this.eventType||"horizontal-swipe"===this.eventType||"vertical-swipe"===this.eventType)return this.getLinearSwipeType(t)}else if(!this.eventType||"horizontal-swipe"===this.eventType||"vertical-swipe"===this.eventType)return this.getLinearSwipeType(t)},t.prototype.getLinearSwipeType=function(t){if("horizontal-swipe"!==this.eventType&&"vertical-swipe"!==this.eventType){var e=Math.abs(this.moveLeft(0,t)-this.startX);return 3*Math.abs(this.moveTop(0,t)-this.startY)>e?"vertical-swipe":"horizontal-swipe"}return this.eventType},t.prototype.getElementPosition=function(){return this.element.getBoundingClientRect()},t.prototype.getTouchstartPosition=function(t){this.startX=t.touches[0].clientX-this.elementPosition.left,this.startY=t.touches[0].clientY-this.elementPosition.top},t.prototype.getMousedownPosition=function(t){this.startX=t.clientX-this.elementPosition.left,this.startY=t.clientY-this.elementPosition.top},t.prototype.moveLeft=function(t,e){var i=e.touches;return i?i[t].clientX-this.elementPosition.left:e.clientX-this.elementPosition.left},t.prototype.moveTop=function(t,e){var i=e.touches;return i?i[t].clientY-this.elementPosition.top:e.clientY-this.elementPosition.top},t.prototype.detectTouchScreen=function(){var t=" -webkit- -moz- -o- -ms- ".split(" ");return"ontouchstart"in window||function(t){return window.matchMedia(t).matches}(["(",t.join("touch-enabled),("),"heartz",")"].join(""))},t.prototype.on=function(t,e){t&&(this.handlers[t]=e)},t}(),o=function(){function t(t){var e=this;this.initialPositionX=0,this.newContainerPositionIndex=0,this.preliminarySlideCounter=0,this.slideCounter=0,this.previousSlideCounter=0,this.isContentImages=!0,this.isLazyLoad=!0,this.isContainerLocked=!0,this.alignCells="left",this.initialContainerPosition=0,this.handleTouchstart=function(t){if(e.isTouchstart=!0,!e.isSlideInProgress){var i=t.touches;e.startX=i?i[0].clientX-e.getCarouselElementPosition().left:t.clientX-e.getCarouselElementPosition().left,e.containerInitialPositionX=e.getElementPosition().left-e.getCarouselElementPosition().left,e.isMoveInProgress=!0}},this.handleHorizontalSwipe=function(t){if(!e.isSlideInProgress){var i=t.touches;e.moveX=i?i[0].clientX-e.getCarouselElementPosition().left:t.clientX-e.getCarouselElementPosition().left,e.distanceAbs=e.getDistanceAbs(),e.direction=e.getDirection(),e.moveContainer()}},this.handleTouchend=function(t){!e.isSlideInProgress&&e.isTouchstart?(e.isMoveInProgress=!1,e.detectSlide()?e.handleSlide():(e.newContainerPositionIndex=0,e.alignContainer()),e.startX=e.moveX=e.distanceAbs=void 0,e.isTouchstart=!1):e.isTouchstart=!1},this.element=t.element,this.properties=t,this.cells=this.element.children,this.visibleWidth=this.properties.visibleWidth||this.element.parentElement.clientWidth,this.setContainerWidth(),this.alignContainer(0)}return Object.defineProperty(t.prototype,"cellLength",{get:function(){return this.images?this.images.length:this.cells.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"totalContainerCellsCount",{get:function(){if(this.images){var t=this.visibleCellsCount+2*this.overflowCellsLimit;return t>this.images.length&&(t=this.images.length),t}return this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isFirstCell",{get:function(){return 0===this.slideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastCellIndex",{get:function(){return this.images.length?this.images.length-1:this.cells.length-1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"overflowCellsLimit",{get:function(){return this.images&&this.isImagesLessCellLimit?Math.floor((this.images.length-this.visibleCellsCount)/2):this.properties.overflowCellsLimit},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isImagesLessCellLimit",{get:function(){return 2*this.properties.overflowCellsLimit+this.visibleCellsCount>this.images.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellLimit",{get:function(){return this.visibleCellsCount+2*this.overflowCellsLimit},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"images",{get:function(){return this.properties.images},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"margin",{get:function(){return this.properties.margin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"minSwipeDistance",{get:function(){return this.properties.minSwipeDistance},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"transitionDuration",{get:function(){return this.properties.transitionDuration},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"transitionTimingFunction",{get:function(){return this.properties.transitionTimingFunction},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"fullCellWidth",{get:function(){return this.properties.cellWidth+this.margin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"visibleCellsCount",{get:function(){return Math.ceil(this.visibleWidth/this.fullCellWidth)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lapCounter",{get:function(){return Math.floor(this.slideCounter/this.totalContainerCellsCount)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"visibleCellsOverflowContainer",{get:function(){return this.visibleCellsCount*this.fullCellWidth-this.margin>this.visibleWidth},enumerable:!1,configurable:!0}),t.prototype.moveContainer=function(){var t=this.getMovePositionX();this.transformPositionX(t,0)},t.prototype.getMovePositionX=function(){var t=this.getDistance();return this.containerInitialPositionX-t},t.prototype.alignContainer=function(t){void 0===t&&(t=this.transitionDuration);var e=this.getContainerPosition();this.transformPositionX(e,t),this.setInitialContainerPosition(e)},t.prototype.getContainerPosition=function(){var t=this.getContainerPositionCorrection();return this.isContainerPositionCorrection=0!=t,this.initialContainerPosition+this.newContainerPositionIndex*this.fullCellWidth+t},t.prototype.setInitialContainerPosition=function(t){var e=this.getContainerPositionCorrection();this.initialContainerPosition=t-e},t.prototype.getContainerPositionCorrection=function(){var t=0;return this.properties.loop?0:((this.cellLength-this.preliminarySlideCounter<this.visibleCellsCount||this.isSlideLengthLimited)&&(this.visibleWidth<this.totalContainerCellsCount*this.fullCellWidth&&(t=-(this.visibleCellsCount*this.fullCellWidth-this.visibleWidth-this.margin)),t>=-this.margin&&(t=0)),t)},t.prototype.quicklyPositionContainer=function(){var t=this.getContainerPositionCorrection(),e=this.getNewContainerPosition()+t;this.transformPositionX(e,0),this.setInitialContainerPosition(e)},t.prototype.getNewContainerPosition=function(){return this.slideCounter>this.overflowCellsLimit&&"left"===this.alignCells?(this.lineUpCells(),-this.overflowCellsLimit*this.fullCellWidth):this.slideCounter<=this.overflowCellsLimit?(this.previousSlideCounter>this.overflowCellsLimit&&this.lineUpCells(),-this.slideCounter*this.fullCellWidth):void 0},t.prototype.setContainerWidth=function(){var t=this.getContainerWidth();this.element.style.width=t+"px"},t.prototype.getContainerWidth=function(){var t=this.totalContainerCellsCount*this.fullCellWidth,e=this.cellLength*this.fullCellWidth;return e<t&&(t=e),t},t.prototype.getFile=function(t){var e=this.getFileIndex(t),i=this.images[e];return i&&!i.type&&(i.type="image"),{image:this.images[e],imageIndex:e}},t.prototype.getFileIndex=function(t){var e,i=this.getPositionIndex(t),n=(this.totalContainerCellsCount,this.slideCounter);if(!this.isContainerLocked)return n<=this.overflowCellsLimit?t:(e=i+(n-this.overflowCellsLimit),this.images&&this.properties.loop&&(e%=this.images.length),e);"left"===this.alignCells&&(e=n>this.overflowCellsLimit?i+(n-this.overflowCellsLimit):t);return!(e>this.lastCellIndex&&!this.properties.loop)&&e},t.prototype.transformPositionX=function(t,e){void 0===e&&(e=this.transitionDuration),this.element.style.transition="transform "+e+"ms "+this.transitionTimingFunction,this.element.style.transform="translateX("+t+"px)"},t.prototype.detectSlide=function(){return this.distanceAbs>=this.minSwipeDistance},t.prototype.next=function(){this.isSlideInProgress||(this.direction="left",this.handleSlide(1))},t.prototype.prev=function(){this.isSlideInProgress||(this.direction="right",this.handleSlide(1))},t.prototype.select=function(t){this.slideCounter=t,this.quicklyPositionContainer()},t.prototype.handleSlide=function(t){void 0===t&&(t=void 0),this.slideLength=this.getSlideLength(),this.slideLength=t||this.limitSlideLength(this.slideLength),"left"!==this.direction||this.isSlideInProgress||(this.preliminarySlideCounter=this.slideCounter+this.slideLength,this.detectLastSlide(this.slideCounter+this.slideLength)||(this.newContainerPositionIndex=this.newContainerPositionIndex-this.slideLength,this.isSlideInProgress=!0,this.isLazyLoad&&(this.isContainerLocked=this.preliminarySlideCounter>this.overflowCellsLimit,this.detectContainerUnlock()&&(this.isContainerLocked=!1)))),"right"!==this.direction||this.isSlideInProgress||(this.slideCounter-this.slideLength<0&&(this.slideLength=this.slideCounter),this.preliminarySlideCounter=this.slideCounter-this.slideLength,this.isFirstCell||(this.newContainerPositionIndex=this.newContainerPositionIndex+this.slideLength,this.isSlideInProgress=!0,this.isLazyLoad&&(this.preliminarySlideCounter>this.overflowCellsLimit?this.isContainerLocked=!0:this.isContainerLocked=!1,this.detectContainerUnlock()&&(this.isContainerLocked=!1)))),this.alignContainer()},t.prototype.getSlideLength=function(){var t=this.getContainerPositionCorrection(),e=Math.floor((this.distanceAbs+t)/this.fullCellWidth);return this.distanceAbs%this.fullCellWidth>=this.minSwipeDistance&&e++,e},t.prototype.limitSlideLength=function(t){if(t>1)for(var e=0;e<t;e++){var i=this.slideCounter+(t-e);if(!this.detectLastSlide(i)){t-=e,this.isSlideLengthLimited=e>0;break}}return t},t.prototype.detectLastSlide=function(t){return!this.properties.loop&&this.cellLength-t<this.visibleCellsCount},t.prototype.isNextArrowDisabled=function(){return this.visibleCellsOverflowContainer?this.detectLastSlide(this.slideCounter+1)&&this.isContainerPositionCorrection:this.detectLastSlide(this.slideCounter+1)},t.prototype.isPrevArrowDisabled=function(){return 0===this.slideCounter},t.prototype.detectContainerUnlock=function(){return this.cellLength-this.preliminarySlideCounter<this.visibleCellsCount+this.overflowCellsLimit},t.prototype.handleSlideEnd=function(){this.isSlideInProgress&&(this.transformSlideEnd(),this.isSlideInProgress=!1,this.newContainerPositionIndex=0,this.isSlideLengthLimited=void 0)},t.prototype.transformSlideEnd=function(){this.isLazyLoad&&(this.setSlideCounter(),(this.images||!this.images&&this.properties.loop)&&this.quicklyPositionContainer()),this.previousSlideCounter=this.slideCounter},t.prototype.setSlideCounter=function(){"left"===this.direction&&(this.slideCounter=this.slideCounter+this.slideLength),"right"===this.direction&&(this.slideCounter=this.slideCounter-this.slideLength),this.direction=void 0,this.slideLength=0},t.prototype.resetTransition=function(){this.element.style.transition=""},t.prototype.getElementPosition=function(){return this.element.getBoundingClientRect()},t.prototype.getCarouselElementPosition=function(){return this.properties.container.getBoundingClientRect()},t.prototype.getDistance=function(){return this.startX-this.moveX},t.prototype.getDistanceAbs=function(){return Math.abs(this.startX-this.moveX)},t.prototype.getDirection=function(){var t=Math.sign(this.startX-this.moveX);return-1===t?"right":1===t?"left":void 0},t.prototype.lineUpCells=function(){for(var t=this.element.children,e=0;e<t.length;e++){var i=t[e],n=this.getCellPositionX(e);i.style.transform="translateX("+n+"px)",i.style.width=this.properties.cellWidth+"px"}},t.prototype.getCellPositionX=function(t){return this.getPositionIndex(t)*this.fullCellWidth},t.prototype.getPositionIndex=function(t){var e,i=this.slideCounter,n=this.totalContainerCellsCount,o=i-this.overflowCellsLimit;return o>n&&(o%=n),o<0?t:((e=t-o)<0&&(e=n+e),e)},t.prototype.getCenterPositionIndex=function(){return(this.totalContainerCellsCount-1)/2},t.prototype.autoplay=function(){var t=this;this.autoplayId=setInterval((function(){t.next()}),this.properties.autoplayInterval)},t.prototype.stopAutoplay=function(){this.autoplayId&&clearInterval(this.autoplayId)},t.prototype.destroy=function(){this.stopAutoplay()},t}(),s=function(){function t(t,i){var n=this;this.elementRef=t,this.ref=i,this.minTimeout=30,this._cellWidth=200,this.events=new e.EventEmitter,this.height=200,this.loop=!1,this.autoplay=!1,this.autoplayInterval=5e3,this.pauseOnHover=!0,this.dots=!1,this.margin=10,this.objectFit="cover",this.minSwipeDistance=50,this.transitionDuration=200,this.transitionTimingFunction="ease",this.counterSeparator=" / ",this.overflowCellsLimit=3,this.listeners="mouse and touch",this.arrows=!0,this.arrowsTheme="light",this.hostClassCarousel=!0,this.handleTouchstart=function(t){n.carousel.handleTouchstart(t),n.isMoving=!0},this.handleHorizontalSwipe=function(t){t.preventDefault(),n.carousel.handleHorizontalSwipe(t)},this.handleTouchend=function(t){t.touches;n.carousel.handleTouchend(t),n.isMoving=!1}}return Object.defineProperty(t.prototype,"isContainerLocked",{get:function(){return this.carousel.isContainerLocked},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"slideCounter",{get:function(){return this.carousel.slideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"previousSlideCounter",{get:function(){return this.carousel.previousSlideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lapCounter",{get:function(){return this.carousel.lapCounter},enumerable:!1,configurable:!0}),t.prototype.lineUpCells=function(){this.carousel.lineUpCells()},t.prototype.quicklyPositionContainer=function(){this.carousel.quicklyPositionContainer()},Object.defineProperty(t.prototype,"isLandscape",{get:function(){return window.innerWidth>window.innerHeight},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isSafari",{get:function(){var t=navigator.userAgent.toLowerCase();if(-1!==t.indexOf("safari"))return!(t.indexOf("chrome")>-1)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"counter",{get:function(){return(this.loop?this.slideCounter%this.cellLength:this.slideCounter)+1+this.counterSeparator+this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellsElement",{get:function(){return this.elementRef.nativeElement.querySelector(".carousel-cells")},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"images",{get:function(){return this._images},set:function(t){this._images=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellWidth",{set:function(t){t&&(this._cellWidth=t)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isCounter",{get:function(){return this._isCounter&&this.cellLength>1},set:function(t){t&&(this._isCounter=t)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"activeDotIndex",{get:function(){return this.slideCounter%this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellLimit",{get:function(){if(this.carousel)return this.carousel.cellLimit},enumerable:!1,configurable:!0}),t.prototype.onWindowResize=function(t){this.landscapeMode=this.isLandscape,this.ref.detectChanges(),this.initCarousel(),this.carousel.lineUpCells()},t.prototype.onMousemove=function(t){this.autoplay&&this.pauseOnHover&&this.carousel.stopAutoplay()},t.prototype.onMouseleave=function(t){this.autoplay&&this.pauseOnHover&&this.carousel.autoplay()},t.prototype.ngOnInit=function(){this.isNgContent=this.cellsElement.children.length>0,this.touches=new n({element:this.cellsElement,listeners:this.listeners}),this.touches.on("touchstart",this.handleTouchstart),this.touches.on("horizontal-swipe",this.handleHorizontalSwipe),this.touches.on("touchend",this.handleTouchend),this.touches.on("mousedown",this.handleTouchstart),this.touches.on("mouseup",this.handleTouchend),this.initCarousel(),this.setDimensions(),this.autoplay&&this.carousel.autoplay()},t.prototype.ngAfterViewInit=function(){this.cellLength=this.getCellLength(),this.dotsArr=Array(this.cellLength).fill(1),this.ref.detectChanges(),this.carousel.lineUpCells(),this.detectDomChanges()},t.prototype.ngOnChanges=function(t){(t.width||t.height||t.images)&&(this.setDimensions(),this.initCarousel(),this.carousel.lineUpCells(),this.ref.detectChanges())},t.prototype.ngOnDestroy=function(){this.touches.destroy(),this.carousel.destroy()},t.prototype.initCarousel=function(){this.carousel=new o({element:this.elementRef.nativeElement.querySelector(".carousel-cells"),container:this.elementRef.nativeElement,images:this.images,cellWidth:this.getCellWidth(),loop:this.loop,autoplayInterval:this.autoplayInterval,overflowCellsLimit:this.overflowCellsLimit,visibleWidth:this.width,margin:this.margin,minSwipeDistance:this.minSwipeDistance,transitionDuration:this.transitionDuration,transitionTimingFunction:this.transitionTimingFunction,videoProperties:this.videoProperties})},t.prototype.detectDomChanges=function(){var t=this;new MutationObserver((function(e){t.onDomChanges()})).observe(this.elementRef.nativeElement,{attributes:!0,childList:!0,characterData:!0})},t.prototype.onDomChanges=function(){this.cellLength=this.getCellLength(),this.carousel.lineUpCells(),this.ref.detectChanges()},t.prototype.setDimensions=function(){this.hostStyleHeight=this.height+"px",this.hostStyleWidth=this.width+"px"},t.prototype.getFile=function(t){return this.carousel.getFile(t)},t.prototype.handleTransitionendCellContainer=function(t){this.carousel.handleSlideEnd()},t.prototype.toggleVideo=function(t){event.preventDefault(),this.videoProperties.noPlay||(t.paused?(t.play(),this.isVideoPlaying=!0):(t.pause(),this.isVideoPlaying=!1),this.ref.detectChanges())},t.prototype.getCurrentIndex=function(){return this.carousel.slideCounter},t.prototype.getCellWidth=function(){return"100%"===this._cellWidth?this.elementRef.nativeElement.clientWidth:this._cellWidth},t.prototype.next=function(){this.carousel.next(1),this.carousel.stopAutoplay()},t.prototype.prev=function(){this.carousel.prev(1),this.carousel.stopAutoplay()},t.prototype.select=function(t){this.carousel.select(t)},t.prototype.isNextArrowDisabled=function(){return this.carousel.isNextArrowDisabled()},t.prototype.isPrevArrowDisabled=function(){return this.carousel.isPrevArrowDisabled()},t.prototype.getCellLength=function(){return this.images?this.images.length:this.cellsElement.children.length},t}();s.decorators=[{type:e.Component,args:[{selector:"carousel, [carousel]",exportAs:"carousel",template:'<div class="carousel-counter" *ngIf="isCounter">{{counter}}</div>\n\n<div class="carousel-container" [class.carousel-moving]="isMoving">\n\t<div class="carousel-cells" #cells (transitionend)="handleTransitionendCellContainer($event)">\n\t\t<ng-content></ng-content>\n\n\t\t<ng-template ngFor let-image [ngForOf]="images" let-i="index">\n\t\t\t<div class="carousel-cell" \n\t\t\t\t*ngIf="i < cellLimit" \n\t\t\t\t[style.width]="getCellWidth()+\'px\'"\n\t\t\t\t[style.border-radius]="borderRadius+\'px\'">\n\n\t\t\t\t\x3c!-- Image --\x3e\n\t\t\t\t<img \n\t\t\t\t\t*ngIf="getFile(i) && getFile(i)[\'image\']" \n\t\t\t\t\t[src]="getFile(i)[\'image\'][\'path\']"\n\t\t\t\t\t[style.object-fit]="objectFit"\n\t\t\t\t\tdraggable="false" />\n\n\t\t\t\t\x3c!-- Video --\x3e\n\t\t\t\t<ng-template [ngIf]="getFile(i) && getFile(i)[\'type\'] === \'video\'">\n\t\t\t\t\t<div class="carousel-play" (click)="toggleVideo(video)"></div>\n\n\t\t\t\t\t<video #video\n\t\t\t\t\t\t[loop]="videoProperties.loop"\n\t\t\t\t\t\t[muted]="videoProperties.muted"\n\t\t\t\t\t\t[controls]="isSafari"\n\t\t\t\t\t\t[style.object-fit]="objectFit"\n\t\t\t\t\t\t[style.border-radius]="borderRadius+\'px\'">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<source [src]="getFile(i)[\'path\']" type="video/mp4">\n\t\t\t\t\t</video>\n\t\t\t\t</ng-template>\n\t\t\t</div>\n\t\t</ng-template>\n\t</div>\n\n\t<div class="carousel-dots" *ngIf="dots">\n\t\t<div class="carousel-dot" [class.carousel-dot-active]="i === activeDotIndex" *ngFor="let dot of dotsArr; index as i"></div>\n\t</div>\n</div>\n\n<div class="carousel-arrows" \n\t[class.carousel-arrows-outside]="arrowsOutside" \n\t[class.carousel-dark-arrows]="arrowsTheme === \'dark\'"\n\t*ngIf="arrows">\n\t\n\t<div class="carousel-arrow carousel-arrow-prev" [class.carousel-arrow-disabled]="isPrevArrowDisabled()" (click)="prev()"></div>\n\t<div class="carousel-arrow carousel-arrow-next" [class.carousel-arrow-disabled]="isNextArrowDisabled()" (click)="next()"></div>\n</div>',styles:[":host{-moz-user-select:none;-webkit-user-select:none;box-sizing:border-box;display:block;height:100%;left:0;position:relative;top:0;transform-origin:top left;user-select:none;width:100%;z-index:10000}:host .carousel-container{cursor:grab;height:100%;overflow:hidden;width:100%}:host .carousel-container.carousel-moving{cursor:grabbing}:host .carousel-counter{background-color:rgba(23,37,68,.3);border-radius:13px;color:#fff;font-size:11px;line-height:normal;padding:5px 7px;position:absolute;right:24px;text-align:right;top:8px;transition:opacity .2s;z-index:30}:host ::ng-deep .carousel-cells{display:block;height:100%;transition:transform .2s;width:100%}:host ::ng-deep .carousel-cells .carousel-cell.swiper-prev-image{transform:translate3d(-100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell.swiper-next-image{transform:translate3d(100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell{height:100%;overflow:hidden;position:absolute;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img,:host ::ng-deep .carousel-cells .carousel-cell video{height:100%;object-fit:contain;position:relative;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img.swiper-hide{display:none}:host ::ng-deep .carousel-cells .carousel-cell .carousel-play{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}:host .carousel-arrow{background-color:#fff;background-position:50%;background-repeat:no-repeat;background-size:31px;border-radius:100px;box-shadow:0 0 5px rgba(0,0,0,.15);cursor:pointer;height:40px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:10}:host .carousel-arrow-prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMTUuNDEgMTYuNTlMMTAuODMgMTJsNC41OC00LjU5TDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);left:10px}:host .carousel-arrow-next{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNOC41OSAxNi41OUwxMy4xNyAxMiA4LjU5IDcuNDEgMTAgNmw2IDYtNiA2LTEuNDEtMS40MXoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);right:10px}:host .carousel-arrows-outside .carousel-arrow-prev{left:-60px}:host .carousel-arrows-outside .carousel-arrow-next{right:-60px}:host .carousel-dark-arrows .carousel-arrow{filter:invert(1)}:host .carousel-arrow-disabled{cursor:default;opacity:.5}:host .carousel-dots{bottom:0;left:0;position:absolute;right:0;text-align:center;z-index:10}:host .carousel-dots .carousel-dot{border:2px solid #fff;border-radius:100px;display:inline-block;height:8px;margin:4px;width:8px}:host .carousel-dots .carousel-dot-active{background-color:#fff}"]}]}],s.ctorParameters=function(){return[{type:e.ElementRef},{type:e.ChangeDetectorRef}]},s.propDecorators={images:[{type:e.Input}],events:[{type:e.Output}],height:[{type:e.Input}],width:[{type:e.Input}],loop:[{type:e.Input}],autoplay:[{type:e.Input}],autoplayInterval:[{type:e.Input}],pauseOnHover:[{type:e.Input}],dots:[{type:e.Input}],borderRadius:[{type:e.Input}],margin:[{type:e.Input}],objectFit:[{type:e.Input}],minSwipeDistance:[{type:e.Input}],transitionDuration:[{type:e.Input}],transitionTimingFunction:[{type:e.Input}],videoProperties:[{type:e.Input}],counterSeparator:[{type:e.Input}],overflowCellsLimit:[{type:e.Input}],listeners:[{type:e.Input}],cellWidth:[{type:e.Input,args:["cellWidth"]}],isCounter:[{type:e.Input,args:["counter"]}],arrows:[{type:e.Input}],arrowsOutside:[{type:e.Input}],arrowsTheme:[{type:e.Input}],hostClassCarousel:[{type:e.HostBinding,args:["class.carousel"]}],hostStyleHeight:[{type:e.HostBinding,args:["style.height"]}],hostStyleWidth:[{type:e.HostBinding,args:["style.width"]}],onWindowResize:[{type:e.HostListener,args:["window:resize",["$event"]]}],onMousemove:[{type:e.HostListener,args:["mousemove",["$event"]]}],onMouseleave:[{type:e.HostListener,args:["mouseleave",["$event"]]}]};var r=function(){};r.decorators=[{type:e.NgModule,args:[{declarations:[s],imports:[i.CommonModule],exports:[s],providers:[],bootstrap:[],entryComponents:[s]}]}],t.CarouselComponent=s,t.IvyCarouselModule=r,Object.defineProperty(t,"__esModule",{value:!0})}));
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-responsive-carousel",["exports","@angular/core","@angular/common"],e):e((t=t||self)["angular-responsive-carousel"]={},t.ng.core,t.ng.common)}(this,(function(t,e,i){"use strict";var n=function(){function t(t){var e=this;this.eventType=void 0,this.handlers={},this.startX=0,this.startY=0,this.lastTap=0,this.doubleTapMinTimeout=300,this.tapMinTimeout=200,this.touchstartTime=0,this.i=0,this.isMousedown=!1,this._touchListeners={touchstart:"handleTouchstart",touchmove:"handleTouchmove",touchend:"handleTouchend"},this._mouseListeners={mousedown:"handleMousedown",mousemove:"handleMousemove",mouseup:"handleMouseup",wheel:"handleWheel"},this._otherListeners={resize:"handleResize"},this.handleTouchstart=function(t){e.elementPosition=e.getElementPosition(),e.touchstartTime=(new Date).getTime(),void 0===e.eventType&&e.getTouchstartPosition(t),e.runHandler("touchstart",t)},this.handleTouchmove=function(t){var i=t.touches;switch(e.detectPan(i)&&e.runHandler("pan",t),e.detectPinch(t)&&e.runHandler("pinch",t),e.detectLinearSwipe(t)){case"horizontal-swipe":t.swipeType="horizontal-swipe",e.runHandler("horizontal-swipe",t);break;case"vertical-swipe":t.swipeType="vertical-swipe",e.runHandler("vertical-swipe",t)}(e.detectLinearSwipe(t)||"horizontal-swipe"===e.eventType||"vertical-swipe"===e.eventType)&&e.handleLinearSwipe(t)},this.handleTouchend=function(t){var i=t.touches;e.detectDoubleTap()&&e.runHandler("double-tap",t),e.detectTap(),e.runHandler("touchend",t),e.eventType="touchend",i&&0===i.length&&(e.eventType=void 0,e.i=0)},this.handleMousedown=function(t){e.isMousedown=!0,e.elementPosition=e.getElementPosition(),e.touchstartTime=(new Date).getTime(),void 0===e.eventType&&e.getMousedownPosition(t),e.runHandler("mousedown",t)},this.handleMousemove=function(t){if(e.isMousedown){switch(e.runHandler("pan",t),e.detectLinearSwipe(t)){case"horizontal-swipe":t.swipeType="horizontal-swipe",e.runHandler("horizontal-swipe",t);break;case"vertical-swipe":t.swipeType="vertical-swipe",e.runHandler("vertical-swipe",t)}(e.detectLinearSwipe(t)||"horizontal-swipe"===e.eventType||"vertical-swipe"===e.eventType)&&e.handleLinearSwipe(t)}},this.handleMouseup=function(t){e.detectTap(),e.isMousedown=!1,e.runHandler("mouseup",t),e.eventType=void 0,e.i=0},this.handleWheel=function(t){e.runHandler("wheel",t)},this.handleResize=function(t){e.runHandler("resize",t)},this.properties=t,this.element=this.properties.element,this.elementPosition=this.getElementPosition(),this.toggleEventListeners("addEventListener")}return Object.defineProperty(t.prototype,"touchListeners",{get:function(){return this.properties.touchListeners?this.properties.touchListeners:this._touchListeners},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"mouseListeners",{get:function(){return this.properties.mouseListeners?this.properties.mouseListeners:this._mouseListeners},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"otherListeners",{get:function(){return this.properties.otherListeners?this.properties.otherListeners:this._otherListeners},enumerable:!1,configurable:!0}),t.prototype.destroy=function(){this.toggleEventListeners("removeEventListener")},t.prototype.toggleEventListeners=function(t){var e;for(var i in e="mouse and touch"===this.properties.listeners?Object.assign(this.touchListeners,this.mouseListeners):this.detectTouchScreen()?this.touchListeners:this.mouseListeners,this.properties.resize&&(e=Object.assign(e,this.otherListeners)),e){var n=e[i];"resize"===i?("addEventListener"===t&&window.addEventListener(i,this[n],!1),"removeEventListener"===t&&window.removeEventListener(i,this[n],!1)):"mouseup"===i||"mousemove"===i?("addEventListener"===t&&document.addEventListener(i,this[n],!1),"removeEventListener"===t&&document.removeEventListener(i,this[n],!1)):("addEventListener"===t&&this.element.addEventListener(i,this[n],!1),"removeEventListener"===t&&this.element.removeEventListener(i,this[n],!1))}},t.prototype.addEventListeners=function(t,e){window.addEventListener(t,this[e],!1)},t.prototype.removeEventListeners=function(t,e){window.removeEventListener(t,this[e],!1)},t.prototype.handleLinearSwipe=function(t){this.i++,this.i>3&&(this.eventType=this.getLinearSwipeType(t)),"horizontal-swipe"===this.eventType&&this.runHandler("horizontal-swipe",t),"vertical-swipe"===this.eventType&&this.runHandler("vertical-swipe",t)},t.prototype.runHandler=function(t,e){this.handlers[t]&&this.handlers[t](e)},t.prototype.detectPan=function(t){return 1===t.length&&!this.eventType||"pan"===this.eventType},t.prototype.detectDoubleTap=function(){var t=this;if(null==this.eventType){var e=(new Date).getTime(),i=e-this.lastTap;if(clearTimeout(this.doubleTapTimeout),i<this.doubleTapMinTimeout&&i>0)return!0;this.doubleTapTimeout=setTimeout((function(){clearTimeout(t.doubleTapTimeout)}),this.doubleTapMinTimeout),this.lastTap=e}},t.prototype.detectTap=function(){if(null==this.eventType){var t=(new Date).getTime()-this.touchstartTime;t>0&&(t<this.tapMinTimeout?this.runHandler("tap",event):this.runHandler("longtap",event))}},t.prototype.detectPinch=function(t){return 2===t.touches.length&&void 0===this.eventType||"pinch"===this.eventType},t.prototype.detectLinearSwipe=function(t){var e=t.touches;if(e){if(1===e.length&&!this.eventType||"horizontal-swipe"===this.eventType||"vertical-swipe"===this.eventType)return this.getLinearSwipeType(t)}else if(!this.eventType||"horizontal-swipe"===this.eventType||"vertical-swipe"===this.eventType)return this.getLinearSwipeType(t)},t.prototype.getLinearSwipeType=function(t){if("horizontal-swipe"!==this.eventType&&"vertical-swipe"!==this.eventType){var e=Math.abs(this.moveLeft(0,t)-this.startX);return 3*Math.abs(this.moveTop(0,t)-this.startY)>e?"vertical-swipe":"horizontal-swipe"}return this.eventType},t.prototype.getElementPosition=function(){return this.element.getBoundingClientRect()},t.prototype.getTouchstartPosition=function(t){this.startX=t.touches[0].clientX-this.elementPosition.left,this.startY=t.touches[0].clientY-this.elementPosition.top},t.prototype.getMousedownPosition=function(t){this.startX=t.clientX-this.elementPosition.left,this.startY=t.clientY-this.elementPosition.top},t.prototype.moveLeft=function(t,e){var i=e.touches;return i?i[t].clientX-this.elementPosition.left:e.clientX-this.elementPosition.left},t.prototype.moveTop=function(t,e){var i=e.touches;return i?i[t].clientY-this.elementPosition.top:e.clientY-this.elementPosition.top},t.prototype.detectTouchScreen=function(){var t=" -webkit- -moz- -o- -ms- ".split(" ");return"ontouchstart"in window||function(t){return window.matchMedia(t).matches}(["(",t.join("touch-enabled),("),"heartz",")"].join(""))},t.prototype.on=function(t,e){t&&(this.handlers[t]=e)},t}(),o=function(){function t(t){var e=this;this.initialPositionX=0,this.newContainerPositionIndex=0,this.preliminarySlideCounter=0,this.slideCounter=0,this.previousSlideCounter=0,this.isContentImages=!0,this.isLazyLoad=!0,this.isContainerLocked=!0,this.alignCells="left",this.initialContainerPosition=0,this.handleTouchstart=function(t){if(e.isTouchstart=!0,!e.isSlideInProgress){var i=t.touches;e.startX=i?i[0].clientX-e.getCarouselElementPosition().left:t.clientX-e.getCarouselElementPosition().left,e.containerInitialPositionX=e.getElementPosition().left-e.getCarouselElementPosition().left,e.isMoveInProgress=!0}},this.handleHorizontalSwipe=function(t){if(!e.isSlideInProgress){var i=t.touches;e.moveX=i?i[0].clientX-e.getCarouselElementPosition().left:t.clientX-e.getCarouselElementPosition().left,e.distanceAbs=e.getDistanceAbs(),e.direction=e.getDirection(),e.moveContainer()}},this.handleTouchend=function(t){!e.isSlideInProgress&&e.isTouchstart?(e.isMoveInProgress=!1,e.detectSlide()?e.handleSlide():(e.newContainerPositionIndex=0,e.alignContainer()),e.startX=e.moveX=e.distanceAbs=void 0,e.isTouchstart=!1):e.isTouchstart=!1},this.element=t.element,this.properties=t,this.cells=this.element.children,this.visibleWidth=this.properties.visibleWidth||this.element.parentElement.clientWidth,this.setContainerWidth(),this.alignContainer(0)}return Object.defineProperty(t.prototype,"cellLength",{get:function(){return this.images?this.images.length:this.cells.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"totalContainerCellsCount",{get:function(){if(this.images){var t=this.visibleCellsCount+2*this.overflowCellsLimit;return t>this.images.length&&(t=this.images.length),t}return this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isFirstCell",{get:function(){return 0===this.slideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lastCellIndex",{get:function(){return this.images.length?this.images.length-1:this.cells.length-1},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"overflowCellsLimit",{get:function(){return this.images&&this.isImagesLessCellLimit?Math.floor((this.images.length-this.visibleCellsCount)/2):this.properties.overflowCellsLimit},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isImagesLessCellLimit",{get:function(){return 2*this.properties.overflowCellsLimit+this.visibleCellsCount>this.images.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellLimit",{get:function(){return this.visibleCellsCount+2*this.overflowCellsLimit},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"images",{get:function(){return this.properties.images},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"margin",{get:function(){return this.properties.margin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"minSwipeDistance",{get:function(){return this.properties.minSwipeDistance},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"transitionDuration",{get:function(){return this.properties.transitionDuration},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"transitionTimingFunction",{get:function(){return this.properties.transitionTimingFunction},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"fullCellWidth",{get:function(){return this.properties.cellWidth+this.margin},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"visibleCellsCount",{get:function(){return Math.ceil(this.visibleWidth/this.fullCellWidth)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lapCounter",{get:function(){return Math.floor(this.slideCounter/this.totalContainerCellsCount)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"visibleCellsOverflowContainer",{get:function(){return this.visibleCellsCount*this.fullCellWidth-this.margin>this.visibleWidth},enumerable:!1,configurable:!0}),t.prototype.moveContainer=function(){var t=this.getMovePositionX();this.transformPositionX(t,0)},t.prototype.getMovePositionX=function(){var t=this.getDistance();return this.containerInitialPositionX-t},t.prototype.alignContainer=function(t){void 0===t&&(t=this.transitionDuration);var e=this.getContainerPosition();this.transformPositionX(e,t),this.setInitialContainerPosition(e)},t.prototype.getContainerPosition=function(){var t=this.getContainerPositionCorrection();return this.isContainerPositionCorrection=0!=t,this.initialContainerPosition+this.newContainerPositionIndex*this.fullCellWidth+t},t.prototype.setInitialContainerPosition=function(t){var e=this.getContainerPositionCorrection();this.initialContainerPosition=t-e},t.prototype.getContainerPositionCorrection=function(){var t=0;return this.properties.loop?0:((this.cellLength-this.preliminarySlideCounter<this.visibleCellsCount||this.isSlideLengthLimited)&&(this.visibleWidth<this.totalContainerCellsCount*this.fullCellWidth&&(t=-(this.visibleCellsCount*this.fullCellWidth-this.visibleWidth-this.margin)),t>=-this.margin&&(t=0)),t)},t.prototype.quicklyPositionContainer=function(){var t=this.getContainerPositionCorrection(),e=this.getNewContainerPosition()+t;this.transformPositionX(e,0),this.setInitialContainerPosition(e)},t.prototype.getNewContainerPosition=function(){return this.slideCounter>this.overflowCellsLimit&&"left"===this.alignCells?(this.lineUpCells(),-this.overflowCellsLimit*this.fullCellWidth):this.slideCounter<=this.overflowCellsLimit?(this.previousSlideCounter>this.overflowCellsLimit&&this.lineUpCells(),-this.slideCounter*this.fullCellWidth):void 0},t.prototype.setContainerWidth=function(){var t=this.getContainerWidth();this.element.style.width=t+"px"},t.prototype.getContainerWidth=function(){var t=this.totalContainerCellsCount*this.fullCellWidth,e=this.cellLength*this.fullCellWidth;return e<t&&(t=e),t},t.prototype.getFile=function(t){var e=this.getFileIndex(t),i=this.images[e];return i&&!i.type&&(i.type="image"),{image:this.images[e],imageIndex:e}},t.prototype.getFileIndex=function(t){var e,i=this.getPositionIndex(t),n=(this.totalContainerCellsCount,this.slideCounter);if(!this.isContainerLocked)return n<=this.overflowCellsLimit?t:(e=i+(n-this.overflowCellsLimit),this.images&&this.properties.loop&&(e%=this.images.length),e);"left"===this.alignCells&&(e=n>this.overflowCellsLimit?i+(n-this.overflowCellsLimit):t);return!(e>this.lastCellIndex&&!this.properties.loop)&&e},t.prototype.transformPositionX=function(t,e){void 0===e&&(e=this.transitionDuration),this.element.style.transition="transform "+e+"ms "+this.transitionTimingFunction,this.element.style.transform="translateX("+t+"px)"},t.prototype.detectSlide=function(){return this.distanceAbs>=this.minSwipeDistance},t.prototype.next=function(t){void 0===t&&(t=1),this.isSlideInProgress||(this.direction="left",this.handleSlide(t))},t.prototype.prev=function(t){void 0===t&&(t=1),this.isSlideInProgress||(this.direction="right",this.handleSlide(t))},t.prototype.select=function(t){this.slideCounter=t,this.quicklyPositionContainer()},t.prototype.handleSlide=function(t){void 0===t&&(t=void 0),this.slideLength=this.getSlideLength(),this.slideLength=t||this.limitSlideLength(this.slideLength),"left"!==this.direction||this.isSlideInProgress||(this.preliminarySlideCounter=this.slideCounter+this.slideLength,this.detectLastSlide(this.slideCounter+this.slideLength)||(this.newContainerPositionIndex=this.newContainerPositionIndex-this.slideLength,this.isSlideInProgress=!0,this.isLazyLoad&&(this.isContainerLocked=this.preliminarySlideCounter>this.overflowCellsLimit,this.detectContainerUnlock()&&(this.isContainerLocked=!1)))),"right"!==this.direction||this.isSlideInProgress||(this.slideCounter-this.slideLength<0&&(this.slideLength=this.slideCounter),this.preliminarySlideCounter=this.slideCounter-this.slideLength,this.isFirstCell||(this.newContainerPositionIndex=this.newContainerPositionIndex+this.slideLength,this.isSlideInProgress=!0,this.isLazyLoad&&(this.preliminarySlideCounter>this.overflowCellsLimit?this.isContainerLocked=!0:this.isContainerLocked=!1,this.detectContainerUnlock()&&(this.isContainerLocked=!1)))),this.alignContainer()},t.prototype.getSlideLength=function(){var t=this.getContainerPositionCorrection(),e=Math.floor((this.distanceAbs+t)/this.fullCellWidth);return this.distanceAbs%this.fullCellWidth>=this.minSwipeDistance&&e++,e},t.prototype.limitSlideLength=function(t){if(t>1)for(var e=0;e<t;e++){var i=this.slideCounter+(t-e);if(!this.detectLastSlide(i)){t-=e,this.isSlideLengthLimited=e>0;break}}return t},t.prototype.detectLastSlide=function(t){return!this.properties.loop&&this.cellLength-t<this.visibleCellsCount},t.prototype.isNextArrowDisabled=function(){return this.visibleCellsOverflowContainer?this.detectLastSlide(this.slideCounter+1)&&this.isContainerPositionCorrection:this.detectLastSlide(this.slideCounter+1)},t.prototype.isPrevArrowDisabled=function(){return 0===this.slideCounter},t.prototype.detectContainerUnlock=function(){return this.cellLength-this.preliminarySlideCounter<this.visibleCellsCount+this.overflowCellsLimit},t.prototype.handleSlideEnd=function(){this.isSlideInProgress&&(this.transformSlideEnd(),this.isSlideInProgress=!1,this.newContainerPositionIndex=0,this.isSlideLengthLimited=void 0)},t.prototype.transformSlideEnd=function(){this.isLazyLoad&&(this.setSlideCounter(),(this.images||!this.images&&this.properties.loop)&&this.quicklyPositionContainer()),this.previousSlideCounter=this.slideCounter},t.prototype.setSlideCounter=function(){"left"===this.direction&&(this.slideCounter=this.slideCounter+this.slideLength),"right"===this.direction&&(this.slideCounter=this.slideCounter-this.slideLength),this.direction=void 0,this.slideLength=0},t.prototype.resetTransition=function(){this.element.style.transition=""},t.prototype.getElementPosition=function(){return this.element.getBoundingClientRect()},t.prototype.getCarouselElementPosition=function(){return this.properties.container.getBoundingClientRect()},t.prototype.getDistance=function(){return this.startX-this.moveX},t.prototype.getDistanceAbs=function(){return Math.abs(this.startX-this.moveX)},t.prototype.getDirection=function(){var t=Math.sign(this.startX-this.moveX);return-1===t?"right":1===t?"left":void 0},t.prototype.lineUpCells=function(){for(var t=this.element.children,e=0;e<t.length;e++){var i=t[e],n=this.getCellPositionX(e);i.style.transform="translateX("+n+"px)",i.style.width=this.properties.cellWidth+"px"}},t.prototype.getCellPositionX=function(t){return this.getPositionIndex(t)*this.fullCellWidth},t.prototype.getPositionIndex=function(t){var e,i=this.slideCounter,n=this.totalContainerCellsCount,o=i-this.overflowCellsLimit;return o>n&&(o%=n),o<0?t:((e=t-o)<0&&(e=n+e),e)},t.prototype.getCenterPositionIndex=function(){return(this.totalContainerCellsCount-1)/2},t.prototype.autoplay=function(){var t=this;this.autoplayId=setInterval((function(){t.next()}),this.properties.autoplayInterval)},t.prototype.stopAutoplay=function(){this.autoplayId&&clearInterval(this.autoplayId)},t.prototype.destroy=function(){this.stopAutoplay()},t}(),s=function(){function t(t,i){var n=this;this.elementRef=t,this.ref=i,this.minTimeout=30,this._cellWidth=200,this.events=new e.EventEmitter,this.height=200,this.loop=!1,this.autoplay=!1,this.autoplayInterval=5e3,this.pauseOnHover=!0,this.dots=!1,this.margin=10,this.objectFit="cover",this.minSwipeDistance=50,this.transitionDuration=200,this.transitionTimingFunction="ease",this.counterSeparator=" / ",this.overflowCellsLimit=3,this.listeners="mouse and touch",this.cellsToScroll=1,this.arrows=!0,this.arrowsTheme="light",this.hostClassCarousel=!0,this.handleTouchstart=function(t){n.touches.addEventListeners("mousemove","handleMousemove"),n.carousel.handleTouchstart(t),n.isMoving=!0},this.handleHorizontalSwipe=function(t){t.preventDefault(),n.carousel.handleHorizontalSwipe(t)},this.handleTouchend=function(t){t.touches;n.carousel.handleTouchend(t),n.touches.removeEventListeners("mousemove","handleMousemove"),n.isMoving=!1}}return Object.defineProperty(t.prototype,"isContainerLocked",{get:function(){return this.carousel.isContainerLocked},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"slideCounter",{get:function(){return this.carousel.slideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"previousSlideCounter",{get:function(){return this.carousel.previousSlideCounter},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"lapCounter",{get:function(){return this.carousel.lapCounter},enumerable:!1,configurable:!0}),t.prototype.lineUpCells=function(){this.carousel.lineUpCells()},t.prototype.quicklyPositionContainer=function(){this.carousel.quicklyPositionContainer()},Object.defineProperty(t.prototype,"isLandscape",{get:function(){return window.innerWidth>window.innerHeight},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isSafari",{get:function(){var t=navigator.userAgent.toLowerCase();if(-1!==t.indexOf("safari"))return!(t.indexOf("chrome")>-1)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"counter",{get:function(){return(this.loop?this.slideCounter%this.cellLength:this.slideCounter)+1+this.counterSeparator+this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellsElement",{get:function(){return this.elementRef.nativeElement.querySelector(".carousel-cells")},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"images",{get:function(){return this._images},set:function(t){this._images=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellWidth",{set:function(t){t&&(this._cellWidth=t)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isCounter",{get:function(){return this._isCounter&&this.cellLength>1},set:function(t){t&&(this._isCounter=t)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"activeDotIndex",{get:function(){return this.slideCounter%this.cellLength},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"cellLimit",{get:function(){if(this.carousel)return this.carousel.cellLimit},enumerable:!1,configurable:!0}),t.prototype.onWindowResize=function(t){this.landscapeMode=this.isLandscape,this.ref.detectChanges(),this.initCarousel(),this.carousel.lineUpCells()},t.prototype.onMousemove=function(t){this.autoplay&&this.pauseOnHover&&this.carousel.stopAutoplay()},t.prototype.onMouseleave=function(t){this.autoplay&&this.pauseOnHover&&this.carousel.autoplay()},t.prototype.ngOnInit=function(){this.isNgContent=this.cellsElement.children.length>0,this.touches=new n({element:this.cellsElement,listeners:this.listeners,mouseListeners:{mousedown:"handleMousedown",mouseup:"handleMouseup"}}),this.touches.on("touchstart",this.handleTouchstart),this.touches.on("horizontal-swipe",this.handleHorizontalSwipe),this.touches.on("touchend",this.handleTouchend),this.touches.on("mousedown",this.handleTouchstart),this.touches.on("mouseup",this.handleTouchend),this.initCarousel(),this.setDimensions(),this.autoplay&&this.carousel.autoplay()},t.prototype.ngAfterViewInit=function(){this.cellLength=this.getCellLength(),this.dotsArr=Array(this.cellLength).fill(1),this.ref.detectChanges(),this.carousel.lineUpCells(),this.detectDomChanges()},t.prototype.ngOnChanges=function(t){(t.width||t.height||t.images)&&(this.setDimensions(),this.initCarousel(),this.carousel.lineUpCells(),this.ref.detectChanges())},t.prototype.ngOnDestroy=function(){this.touches.destroy(),this.carousel.destroy()},t.prototype.initCarousel=function(){this.carousel=new o({element:this.elementRef.nativeElement.querySelector(".carousel-cells"),container:this.elementRef.nativeElement,images:this.images,cellWidth:this.getCellWidth(),loop:this.loop,autoplayInterval:this.autoplayInterval,overflowCellsLimit:this.overflowCellsLimit,visibleWidth:this.width,margin:this.margin,minSwipeDistance:this.minSwipeDistance,transitionDuration:this.transitionDuration,transitionTimingFunction:this.transitionTimingFunction,videoProperties:this.videoProperties})},t.prototype.detectDomChanges=function(){var t=this;new MutationObserver((function(e){t.onDomChanges()})).observe(this.elementRef.nativeElement,{attributes:!0,childList:!0,characterData:!0})},t.prototype.onDomChanges=function(){this.cellLength=this.getCellLength(),this.carousel.lineUpCells(),this.ref.detectChanges()},t.prototype.setDimensions=function(){this.hostStyleHeight=this.height+"px",this.hostStyleWidth=this.width+"px"},t.prototype.getFile=function(t){return this.carousel.getFile(t)},t.prototype.handleTransitionendCellContainer=function(t){this.carousel.handleSlideEnd()},t.prototype.toggleVideo=function(t){event.preventDefault(),this.videoProperties.noPlay||(t.paused?(t.play(),this.isVideoPlaying=!0):(t.pause(),this.isVideoPlaying=!1),this.ref.detectChanges())},t.prototype.getCurrentIndex=function(){return this.carousel.slideCounter},t.prototype.getCellWidth=function(){var t=this.elementRef.nativeElement.clientWidth;return this.cellsToShow?(t-(this.cellsToShow>1?this.margin:0)*(this.cellsToShow-1))/this.cellsToShow:"100%"===this._cellWidth?t:this._cellWidth},t.prototype.next=function(){this.carousel.next(this.cellsToScroll),this.carousel.stopAutoplay()},t.prototype.prev=function(){this.carousel.prev(this.cellsToScroll),this.carousel.stopAutoplay()},t.prototype.select=function(t){this.carousel.select(t)},t.prototype.isNextArrowDisabled=function(){return this.carousel.isNextArrowDisabled()},t.prototype.isPrevArrowDisabled=function(){return this.carousel.isPrevArrowDisabled()},t.prototype.getCellLength=function(){return this.images?this.images.length:this.cellsElement.children.length},t}();s.decorators=[{type:e.Component,args:[{selector:"carousel, [carousel]",exportAs:"carousel",template:'<div class="carousel-counter" *ngIf="isCounter">{{counter}}</div>\n\n<div class="carousel-container" [class.carousel-moving]="isMoving">\n\t<div class="carousel-cells" #cells (transitionend)="handleTransitionendCellContainer($event)">\n\t\t<ng-content></ng-content>\n\n\t\t<ng-template ngFor let-image [ngForOf]="images" let-i="index">\n\t\t\t<div class="carousel-cell" \n\t\t\t\t*ngIf="i < cellLimit" \n\t\t\t\t[style.width]="getCellWidth()+\'px\'"\n\t\t\t\t[style.border-radius]="borderRadius+\'px\'">\n\n\t\t\t\t\x3c!-- Image --\x3e\n\t\t\t\t<img \n\t\t\t\t\t*ngIf="getFile(i) && getFile(i)[\'image\']" \n\t\t\t\t\t[src]="getFile(i)[\'image\'][\'path\']"\n\t\t\t\t\t[style.object-fit]="objectFit"\n\t\t\t\t\tdraggable="false" />\n\n\t\t\t\t\x3c!-- Video --\x3e\n\t\t\t\t<ng-template [ngIf]="getFile(i) && getFile(i)[\'type\'] === \'video\'">\n\t\t\t\t\t<div class="carousel-play" (click)="toggleVideo(video)"></div>\n\n\t\t\t\t\t<video #video\n\t\t\t\t\t\t[loop]="videoProperties.loop"\n\t\t\t\t\t\t[muted]="videoProperties.muted"\n\t\t\t\t\t\t[controls]="isSafari"\n\t\t\t\t\t\t[style.object-fit]="objectFit"\n\t\t\t\t\t\t[style.border-radius]="borderRadius+\'px\'">\n\t\t\t\t\t\t\n\t\t\t\t\t\t<source [src]="getFile(i)[\'path\']" type="video/mp4">\n\t\t\t\t\t</video>\n\t\t\t\t</ng-template>\n\t\t\t</div>\n\t\t</ng-template>\n\t</div>\n\n\t<div class="carousel-dots" *ngIf="dots">\n\t\t<div class="carousel-dot" [class.carousel-dot-active]="i === activeDotIndex" *ngFor="let dot of dotsArr; index as i"></div>\n\t</div>\n</div>\n\n<div class="carousel-arrows" \n\t[class.carousel-arrows-outside]="arrowsOutside" \n\t[class.carousel-dark-arrows]="arrowsTheme === \'dark\'"\n\t*ngIf="arrows">\n\t\n\t<div class="carousel-arrow carousel-arrow-prev" [class.carousel-arrow-disabled]="isPrevArrowDisabled()" (click)="prev()"></div>\n\t<div class="carousel-arrow carousel-arrow-next" [class.carousel-arrow-disabled]="isNextArrowDisabled()" (click)="next()"></div>\n</div>',styles:[":host{-moz-user-select:none;-webkit-user-select:none;box-sizing:border-box;display:block;height:100%;left:0;position:relative;top:0;transform-origin:top left;user-select:none;width:100%;z-index:10000}:host .carousel-container{cursor:grab;height:100%;overflow:hidden;width:100%}:host .carousel-container.carousel-moving{cursor:grabbing}:host .carousel-counter{background-color:rgba(23,37,68,.3);border-radius:13px;color:#fff;font-size:11px;line-height:normal;padding:5px 7px;position:absolute;right:24px;text-align:right;top:8px;transition:opacity .2s;z-index:30}:host ::ng-deep .carousel-cells{display:block;height:100%;transition:transform .2s;width:100%}:host ::ng-deep .carousel-cells .carousel-cell.swiper-prev-image{transform:translate3d(-100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell.swiper-next-image{transform:translate3d(100%,0,0)}:host ::ng-deep .carousel-cells .carousel-cell{height:100%;overflow:hidden;position:absolute;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img,:host ::ng-deep .carousel-cells .carousel-cell video{height:100%;object-fit:contain;position:relative;width:100%}:host ::ng-deep .carousel-cells .carousel-cell img.swiper-hide{display:none}:host ::ng-deep .carousel-cells .carousel-cell .carousel-play{bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}:host .carousel-arrow{background-color:#fff;background-position:50%;background-repeat:no-repeat;background-size:31px;border-radius:100px;box-shadow:0 0 5px rgba(0,0,0,.15);cursor:pointer;height:40px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:10}:host .carousel-arrow-prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNMTUuNDEgMTYuNTlMMTAuODMgMTJsNC41OC00LjU5TDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);left:10px}:host .carousel-arrow-next{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0Ij48cGF0aCBkPSJNOC41OSAxNi41OUwxMy4xNyAxMiA4LjU5IDcuNDEgMTAgNmw2IDYtNiA2LTEuNDEtMS40MXoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);right:10px}:host .carousel-arrows-outside .carousel-arrow-prev{left:-60px}:host .carousel-arrows-outside .carousel-arrow-next{right:-60px}:host .carousel-dark-arrows .carousel-arrow{filter:invert(1)}:host .carousel-arrow-disabled{cursor:default;opacity:.5}:host .carousel-dots{bottom:0;left:0;position:absolute;right:0;text-align:center;z-index:10}:host .carousel-dots .carousel-dot{border:2px solid #fff;border-radius:100px;display:inline-block;height:8px;margin:4px;width:8px}:host .carousel-dots .carousel-dot-active{background-color:#fff}"]}]}],s.ctorParameters=function(){return[{type:e.ElementRef},{type:e.ChangeDetectorRef}]},s.propDecorators={images:[{type:e.Input}],events:[{type:e.Output}],height:[{type:e.Input}],width:[{type:e.Input}],loop:[{type:e.Input}],autoplay:[{type:e.Input}],autoplayInterval:[{type:e.Input}],pauseOnHover:[{type:e.Input}],dots:[{type:e.Input}],borderRadius:[{type:e.Input}],margin:[{type:e.Input}],objectFit:[{type:e.Input}],minSwipeDistance:[{type:e.Input}],transitionDuration:[{type:e.Input}],transitionTimingFunction:[{type:e.Input}],videoProperties:[{type:e.Input}],counterSeparator:[{type:e.Input}],overflowCellsLimit:[{type:e.Input}],listeners:[{type:e.Input}],cellsToShow:[{type:e.Input}],cellsToScroll:[{type:e.Input}],cellWidth:[{type:e.Input,args:["cellWidth"]}],isCounter:[{type:e.Input,args:["counter"]}],arrows:[{type:e.Input}],arrowsOutside:[{type:e.Input}],arrowsTheme:[{type:e.Input}],hostClassCarousel:[{type:e.HostBinding,args:["class.carousel"]}],hostStyleHeight:[{type:e.HostBinding,args:["style.height"]}],hostStyleWidth:[{type:e.HostBinding,args:["style.width"]}],onWindowResize:[{type:e.HostListener,args:["window:resize",["$event"]]}],onMousemove:[{type:e.HostListener,args:["mousemove",["$event"]]}],onMouseleave:[{type:e.HostListener,args:["mouseleave",["$event"]]}]};var r=function(){};r.decorators=[{type:e.NgModule,args:[{declarations:[s],imports:[i.CommonModule],exports:[s],providers:[],bootstrap:[],entryComponents:[s]}]}],t.CarouselComponent=s,t.IvyCarouselModule=r,Object.defineProperty(t,"__esModule",{value:!0})}));
//# sourceMappingURL=angular-responsive-carousel.umd.min.js.map

@@ -25,2 +25,3 @@ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';

this.listeners = 'mouse and touch';
this.cellsToScroll = 1;
this.arrows = true;

@@ -32,2 +33,3 @@ this.arrowsTheme = 'light';

//event.preventDefault();
this.touches.addEventListeners("mousemove", "handleMousemove");
this.carousel.handleTouchstart(event);

@@ -45,2 +47,3 @@ this.isMoving = true;

this.carousel.handleTouchend(event);
this.touches.removeEventListeners("mousemove", "handleMousemove");
this.isMoving = false;

@@ -136,3 +139,7 @@ };

element: this.cellsElement,
listeners: this.listeners
listeners: this.listeners,
mouseListeners: {
"mousedown": "handleMousedown",
"mouseup": "handleMouseup"
}
});

@@ -232,4 +239,10 @@ this.touches.on('touchstart', this.handleTouchstart);

getCellWidth() {
let elementWidth = this.elementRef.nativeElement.clientWidth;
if (this.cellsToShow) {
let margin = this.cellsToShow > 1 ? this.margin : 0;
let totalMargin = margin * (this.cellsToShow - 1);
return (elementWidth - totalMargin) / this.cellsToShow;
}
if (this._cellWidth === '100%') {
return this.elementRef.nativeElement.clientWidth;
return elementWidth;
}

@@ -241,7 +254,7 @@ else {

next() {
this.carousel.next(1);
this.carousel.next(this.cellsToScroll);
this.carousel.stopAutoplay();
}
prev() {
this.carousel.prev(1);
this.carousel.prev(this.cellsToScroll);
this.carousel.stopAutoplay();

@@ -299,2 +312,4 @@ }

listeners: [{ type: Input }],
cellsToShow: [{ type: Input }],
cellsToScroll: [{ type: Input }],
cellWidth: [{ type: Input, args: ['cellWidth',] }],

@@ -312,2 +327,2 @@ isCounter: [{ type: Input, args: ['counter',] }],

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1yZXNwb25zaXZlLWNhcm91c2VsL3NyYy9saWIvY2Fyb3VzZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBR3BLLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQVVwQyxNQUFNLE9BQU8saUJBQWlCO0lBcUoxQixZQUNZLFVBQXNCLEVBQ3RCLEdBQXNCO1FBRHRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEzSGxDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFJaEIsZUFBVSxHQUFvQixHQUFHLENBQUM7UUF5Q3hCLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVyRCxXQUFNLEdBQVcsR0FBRyxDQUFDO1FBRXJCLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDaEMsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUV0QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBaUMsT0FBTyxDQUFDO1FBQ2xELHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUM5Qix1QkFBa0IsR0FBVyxHQUFHLENBQUM7UUFDakMsNkJBQXdCLEdBQStELE1BQU0sQ0FBQztRQUU5RixxQkFBZ0IsR0FBVyxLQUFLLENBQUM7UUFDakMs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ZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ltYWdlc30gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7VG91Y2hlc30gZnJvbSAnLi90b3VjaGVzJztcbmltcG9ydCB7Q2Fyb3VzZWx9IGZyb20gJy4vY2Fyb3VzZWwnO1xuXG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2Nhcm91c2VsLCBbY2Fyb3VzZWxdJyxcbiAgICBleHBvcnRBczogJ2Nhcm91c2VsJyxcblx0dGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2FzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgZ2V0IGlzQ29udGFpbmVyTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbC5pc0NvbnRhaW5lckxvY2tlZDtcbiAgICB9XG4gICAgZ2V0IHNsaWRlQ291bnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuc2xpZGVDb3VudGVyO1xuICAgIH1cbiAgICBnZXQgcHJldmlvdXNTbGlkZUNvdW50ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLnByZXZpb3VzU2xpZGVDb3VudGVyO1xuICAgIH1cbiAgICBnZXQgbGFwQ291bnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwubGFwQ291bnRlcjtcbiAgICB9XG5cbiAgICBsaW5lVXBDZWxscygpIHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5saW5lVXBDZWxscygpO1xuICAgIH1cblxuICAgIHF1aWNrbHlQb3NpdGlvbkNvbnRhaW5lcigpIHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5xdWlja2x5UG9zaXRpb25Db250YWluZXIoKTtcbiAgICB9XG4gICAgXG4gICAgX2lkOiBzdHJpbmc7XG4gICAgX2ltYWdlczogSW1hZ2VzO1xuICAgIHRvdWNoZXM6IGFueTtcbiAgICBjYXJvdXNlbDogYW55O1xuICAgIGxhbmRzY2FwZU1vZGU6IGFueTtcbiAgICBtaW5UaW1lb3V0ID0gMzA7XG4gICAgaXNWaWRlb1BsYXlpbmc6IGJvb2xlYW47XG4gICAgX2lzQ291bnRlcjogYm9vbGVhbjtcbiAgICBfd2lkdGg6IG51bWJlcjtcbiAgICBfY2VsbFdpZHRoOiBudW1iZXIgfCAnMTAwJScgPSAyMDA7XG4gICAgaXNNb3Zpbmc6IGJvb2xlYW47XG4gICAgaXNOZ0NvbnRlbnQ6IGJvb2xlYW47XG4gICAgY2VsbExlbmd0aDogbnVtYmVyO1xuICAgIGRvdHNBcnI6YW55O1xuXG4gICAgZ2V0IGlzTGFuZHNjYXBlKCl7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgaXNTYWZhcmkoKTogYW55IHtcbiAgICAgICAgY29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh1YS5pbmRleE9mKCdzYWZhcmknKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiAhKHVhLmluZGV4T2YoJ2Nocm9tZScpID4gLTEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGNvdW50ZXIoKSB7XG4gICAgICAgIGxldCBjb3VudGVyO1xuXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciAlIHRoaXMuY2VsbExlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb3VudGVyICsgMSArIHRoaXMuY291bnRlclNlcGFyYXRvciArIHRoaXMuY2VsbExlbmd0aDtcbiAgICB9XG5cbiAgICBnZXQgY2VsbHNFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmNhcm91c2VsLWNlbGxzJyk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgaW1hZ2VzKGltYWdlczogSW1hZ2VzICYgYW55KSB7XG4gICAgICAgIHRoaXMuX2ltYWdlcyA9IGltYWdlcztcbiAgICB9XG4gICAgZ2V0IGltYWdlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VzO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBldmVudHM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBASW5wdXQoKSBoZWlnaHQ6IG51bWJlciA9IDIwMDtcbiAgICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhdXRvcGxheTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGF1dG9wbGF5SW50ZXJ2YWw6IG51bWJlciA9IDUwMDA7XG4gICAgQElucHV0KCkgcGF1c2VPbkhvdmVyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBkb3RzOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgYm9yZGVyUmFkaXVzOiBudW1iZXI7XG4gICAgQElucHV0KCkgbWFyZ2luOiBudW1iZXIgPSAxMDtcbiAgICBASW5wdXQoKSBvYmplY3RGaXQ6ICdjb250YWluJyB8ICdjb3ZlcicgfCAnbm9uZScgPSAnY292ZXInO1xuICAgIEBJbnB1dCgpIG1pblN3aXBlRGlzdGFuY2U6IG51bWJlciA9IDUwO1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb25EdXJhdGlvbjogbnVtYmVyID0gMjAwO1xuICAgIEBJbnB1dCgpIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogJ2Vhc2UnIHwgJ2Vhc2UtaW4nIHwgJ2Vhc2Utb3V0JyB8ICdlYXNlLWluLW91dCcgfCAnbGluZWFyJyA9ICdlYXNlJztcbiAgICBASW5wdXQoKSB2aWRlb1Byb3BlcnRpZXM6IGFueTtcbiAgICBASW5wdXQoKSBjb3VudGVyU2VwYXJhdG9yOiBzdHJpbmcgPSBcIiAvIFwiO1xuICAgIEBJbnB1dCgpIG92ZXJmbG93Q2VsbHNMaW1pdDogbnVtYmVyID0gMztcbiAgICBASW5wdXQoKSBsaXN0ZW5lcnM6ICdhdXRvJyB8ICdtb3VzZSBhbmQgdG91Y2gnID0gJ21vdXNlIGFuZCB0b3VjaCc7XG5cbiAgICBASW5wdXQoJ2NlbGxXaWR0aCcpIHNldCBjZWxsV2lkdGgodmFsdWU6IG51bWJlciB8ICcxMDAlJykge1xuICAgICAgICBpZiAodmFsdWUpe1xuICAgICAgICAgICAgdGhpcy5fY2VsbFdpZHRoID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoJ2NvdW50ZXInKSBzZXQgaXNDb3VudGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSl7XG4gICAgICAgICAgICB0aGlzLl9pc0NvdW50ZXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaXNDb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb3VudGVyICYmIHRoaXMuY2VsbExlbmd0aCA+IDE7XG4gICAgfVxuXG4gICAgZ2V0IGFjdGl2ZURvdEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGlkZUNvdW50ZXIgJSB0aGlzLmNlbGxMZW5ndGg7XG4gICAgfVxuXG4gICAgQElucHV0KCkgYXJyb3dzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBhcnJvd3NPdXRzaWRlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFycm93c1RoZW1lOiAnbGlnaHQnIHwgJ2RhcmsnID0gJ2xpZ2h0JztcblxuICAgIGdldCBjZWxsTGltaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhcm91c2VsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbC5jZWxsTGltaXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNhcm91c2VsJykgaG9zdENsYXNzQ2Fyb3VzZWw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JykgaG9zdFN0eWxlSGVpZ2h0OiBzdHJpbmc7XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpIGhvc3RTdHlsZVdpZHRoOiBzdHJpbmc7XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgICBvbldpbmRvd1Jlc2l6ZShldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMubGFuZHNjYXBlTW9kZSA9IHRoaXMuaXNMYW5kc2NhcGU7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmluaXRDYXJvdXNlbCgpO1xuICAgICAgICB0aGlzLmNhcm91c2VsLmxpbmVVcENlbGxzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgICBvbk1vdXNlbW92ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvcGxheSAmJiB0aGlzLnBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbC5zdG9wQXV0b3BsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBbJyRldmVudCddKVxuICAgIG9uTW91c2VsZWF2ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hdXRvcGxheSAmJiB0aGlzLnBhdXNlT25Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5jYXJvdXNlbC5hdXRvcGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgXG4gICAgICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZil7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKXtcbiAgICAgICAgdGhpcy5pc05nQ29udGVudCA9IHRoaXMuY2VsbHNFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgdGhpcy50b3VjaGVzID0gbmV3IFRvdWNoZXMoe1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5jZWxsc0VsZW1lbnQsXG4gICAgICAgICAgICBsaXN0ZW5lcnM6IHRoaXMubGlzdGVuZXJzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudG91Y2hlcy5vbigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2hzdGFydCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5vbignaG9yaXpvbnRhbC1zd2lwZScsIHRoaXMuaGFuZGxlSG9yaXpvbnRhbFN3aXBlKTtcbiAgICAgICAgdGhpcy50b3VjaGVzLm9uKCd0b3VjaGVuZCcsIHRoaXMuaGFuZGxlVG91Y2hlbmQpO1xuICAgICAgICB0aGlzLnRvdWNoZXMub24oJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlVG91Y2hzdGFydCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5vbignbW91c2V1cCcsIHRoaXMuaGFuZGxlVG91Y2hlbmQpO1xuXG4gICAgICAgIHRoaXMuaW5pdENhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLmF1dG9wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbExlbmd0aCA9IHRoaXMuZ2V0Q2VsbExlbmd0aCgpO1xuICAgICAgICB0aGlzLmRvdHNBcnIgPSBBcnJheSh0aGlzLmNlbGxMZW5ndGgpLmZpbGwoMSk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5saW5lVXBDZWxscygpO1xuXG4gICAgICAgIC8qIFN0YXJ0IGRldGVjdGluZyBjaGFuZ2VzIGluIHRoZSBET00gdHJlZSAqL1xuICAgICAgICB0aGlzLmRldGVjdERvbUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLndpZHRoIHx8IGNoYW5nZXMuaGVpZ2h0IHx8IGNoYW5nZXMuaW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VsKCk7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLmxpbmVVcENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50b3VjaGVzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaW5pdENhcm91c2VsKCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsID0gbmV3IENhcm91c2VsKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jZWxscycpLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGltYWdlczogdGhpcy5pbWFnZXMsXG4gICAgICAgICAgICBjZWxsV2lkdGg6IHRoaXMuZ2V0Q2VsbFdpZHRoKCksXG4gICAgICAgICAgICBsb29wOiB0aGlzLmxvb3AsXG4gICAgICAgICAgICBhdXRvcGxheUludGVydmFsOiB0aGlzLmF1dG9wbGF5SW50ZXJ2YWwsXG4gICAgICAgICAgICBvdmVyZmxvd0NlbGxzTGltaXQ6IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0LFxuICAgICAgICAgICAgdmlzaWJsZVdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIG1pblN3aXBlRGlzdGFuY2U6IHRoaXMubWluU3dpcGVEaXN0YW5jZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdGhpcy50cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IHRoaXMudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLFxuICAgICAgICAgICAgdmlkZW9Qcm9wZXJ0aWVzOiB0aGlzLnZpZGVvUHJvcGVydGllc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXRlY3REb21DaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Eb21DaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjb25maWcgPSB7IFxuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsIFxuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSBcbiAgICAgICAgfTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvbkRvbUNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2VsbExlbmd0aCA9IHRoaXMuZ2V0Q2VsbExlbmd0aCgpO1xuICAgICAgICB0aGlzLmNhcm91c2VsLmxpbmVVcENlbGxzKCk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBzZXREaW1lbnNpb25zKCkge1xuICAgICAgICB0aGlzLmhvc3RTdHlsZUhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5ob3N0U3R5bGVXaWR0aCA9IHRoaXMud2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIGdldEZpbGUoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuZ2V0RmlsZShpbmRleCk7XG4gICAgfVxuXG4gICAgLyogVG91Y2hzdGFydCAqL1xuICAgIGhhbmRsZVRvdWNoc3RhcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwuaGFuZGxlVG91Y2hzdGFydChldmVudCk7XG4gICAgICAgIHRoaXMuaXNNb3ZpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIFRvdWNobW92ZSAqL1xuICAgIGhhbmRsZUhvcml6b250YWxTd2lwZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwuaGFuZGxlSG9yaXpvbnRhbFN3aXBlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiBUb3VjaGVuZCAqL1xuICAgIGhhbmRsZVRvdWNoZW5kID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwuaGFuZGxlVG91Y2hlbmQoZXZlbnQpO1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlVHJhbnNpdGlvbmVuZENlbGxDb250YWluZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5oYW5kbGVTbGlkZUVuZCgpO1xuICAgIH1cblxuICAgIHRvZ2dsZVZpZGVvKHZpZGVvKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvUHJvcGVydGllcy5ub1BsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWRlby5wYXVzZWQpIHtcbiAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWaWRlb1BsYXlpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWaWRlb1BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLnNsaWRlQ291bnRlcjtcbiAgICB9XG5cbiAgICBnZXRDZWxsV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxXaWR0aCA9PT0gJzEwMCUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2VsbFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV4dCgpIHtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5uZXh0KDEpO1xuICAgICAgICB0aGlzLmNhcm91c2VsLnN0b3BBdXRvcGxheSgpO1xuICAgIH1cblxuICAgIHByZXYoKSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwucHJldigxKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5zdG9wQXV0b3BsYXkoKTtcbiAgICB9XG5cbiAgICBzZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmNhcm91c2VsLnNlbGVjdChpbmRleCk7XG4gICAgfVxuXG4gICAgaXNOZXh0QXJyb3dEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuaXNOZXh0QXJyb3dEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIGlzUHJldkFycm93RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLmlzUHJldkFycm93RGlzYWJsZWQoKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsTGVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc0VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1yZXNwb25zaXZlLWNhcm91c2VsL3NyYy9saWIvY2Fyb3VzZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFhLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQTJCLE1BQU0sZUFBZSxDQUFDO0FBR3BLLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFlBQVksQ0FBQztBQVVwQyxNQUFNLE9BQU8saUJBQWlCO0lBdUoxQixZQUNZLFVBQXNCLEVBQ3RCLEdBQXNCO1FBRHRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3SGxDLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFJaEIsZUFBVSxHQUFvQixHQUFHLENBQUM7UUF5Q3hCLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVyRCxXQUFNLEdBQVcsR0FBRyxDQUFDO1FBRXJCLFNBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDaEMsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsU0FBSSxHQUFZLEtBQUssQ0FBQztRQUV0QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGNBQVMsR0FBaUMsT0FBTyxDQUFDO1FBQ2xELHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUM5Qix1QkFBa0IsR0FBVyxHQUFHLENBQUM7UUFDakMsNkJBQXdCLEdBQStELE1BQU0sQ0FBQztRQUU5RixxQkFBZ0IsR0FBVyxLQUFLLENBQUM7UUFDakMs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K0VwQixLQUFLO3FCQVFMLE1BQU07cUJBRU4sS0FBSztvQkFDTCxLQUFLO21CQUNMLEtBQUs7dUJBQ0wsS0FBSzsrQkFDTCxLQUFLOzJCQUNMLEtBQUs7bUJBQ0wsS0FBSzsyQkFDTCxLQUFLO3FCQUNMLEtBQUs7d0JBQ0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7dUNBQ0wsS0FBSzs4QkFDTCxLQUFLOytCQUNMLEtBQUs7aUNBQ0wsS0FBSzt3QkFDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzt3QkFFTCxLQUFLLFNBQUMsV0FBVzt3QkFNakIsS0FBSyxTQUFDLFNBQVM7cUJBYWYsS0FBSzs0QkFDTCxLQUFLOzBCQUNMLEtBQUs7Z0NBUUwsV0FBVyxTQUFDLGdCQUFnQjs4QkFDNUIsV0FBVyxTQUFDLGNBQWM7NkJBQzFCLFdBQVcsU0FBQyxhQUFhOzZCQUV6QixZQUFZLFNBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDOzBCQVN4QyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOzJCQU9wQyxZQUFZLFNBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtJbWFnZXN9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1RvdWNoZXN9IGZyb20gJy4vdG91Y2hlcyc7XG5pbXBvcnQge0Nhcm91c2VsfSBmcm9tICcuL2Nhcm91c2VsJztcblxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdjYXJvdXNlbCwgW2Nhcm91c2VsXScsXG4gICAgZXhwb3J0QXM6ICdjYXJvdXNlbCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2Fyb3VzZWwuY29tcG9uZW50LnNhc3MnXVxufSlcblxuZXhwb3J0IGNsYXNzIENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIGdldCBpc0NvbnRhaW5lckxvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuaXNDb250YWluZXJMb2NrZWQ7XG4gICAgfVxuICAgIGdldCBzbGlkZUNvdW50ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLnNsaWRlQ291bnRlcjtcbiAgICB9XG4gICAgZ2V0IHByZXZpb3VzU2xpZGVDb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbC5wcmV2aW91c1NsaWRlQ291bnRlcjtcbiAgICB9XG4gICAgZ2V0IGxhcENvdW50ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLmxhcENvdW50ZXI7XG4gICAgfVxuXG4gICAgbGluZVVwQ2VsbHMoKSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwubGluZVVwQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBxdWlja2x5UG9zaXRpb25Db250YWluZXIoKSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwucXVpY2tseVBvc2l0aW9uQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIFxuICAgIF9pZDogc3RyaW5nO1xuICAgIF9pbWFnZXM6IEltYWdlcztcbiAgICB0b3VjaGVzOiBhbnk7XG4gICAgY2Fyb3VzZWw6IGFueTtcbiAgICBsYW5kc2NhcGVNb2RlOiBhbnk7XG4gICAgbWluVGltZW91dCA9IDMwO1xuICAgIGlzVmlkZW9QbGF5aW5nOiBib29sZWFuO1xuICAgIF9pc0NvdW50ZXI6IGJvb2xlYW47XG4gICAgX3dpZHRoOiBudW1iZXI7XG4gICAgX2NlbGxXaWR0aDogbnVtYmVyIHwgJzEwMCUnID0gMjAwO1xuICAgIGlzTW92aW5nOiBib29sZWFuO1xuICAgIGlzTmdDb250ZW50OiBib29sZWFuO1xuICAgIGNlbGxMZW5ndGg6IG51bWJlcjtcbiAgICBkb3RzQXJyOmFueTtcblxuICAgIGdldCBpc0xhbmRzY2FwZSgpe1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzU2FmYXJpKCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodWEuaW5kZXhPZignc2FmYXJpJykgIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gISh1YS5pbmRleE9mKCdjaHJvbWUnKSA+IC0xKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjb3VudGVyKCkge1xuICAgICAgICBsZXQgY291bnRlcjtcblxuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBjb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXIgJSB0aGlzLmNlbGxMZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnRlciArIDEgKyB0aGlzLmNvdW50ZXJTZXBhcmF0b3IgKyB0aGlzLmNlbGxMZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0IGNlbGxzRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jZWxscycpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGltYWdlcyhpbWFnZXM6IEltYWdlcyAmIGFueSkge1xuICAgICAgICB0aGlzLl9pbWFnZXMgPSBpbWFnZXM7XG4gICAgfVxuICAgIGdldCBpbWFnZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlcztcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgZXZlbnRzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXIgPSAyMDA7XG4gICAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcbiAgICBASW5wdXQoKSBsb29wOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b3BsYXk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhdXRvcGxheUludGVydmFsOiBudW1iZXIgPSA1MDAwO1xuICAgIEBJbnB1dCgpIHBhdXNlT25Ib3ZlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZG90czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGJvcmRlclJhZGl1czogbnVtYmVyO1xuICAgIEBJbnB1dCgpIG1hcmdpbjogbnVtYmVyID0gMTA7XG4gICAgQElucHV0KCkgb2JqZWN0Rml0OiAnY29udGFpbicgfCAnY292ZXInIHwgJ25vbmUnID0gJ2NvdmVyJztcbiAgICBASW5wdXQoKSBtaW5Td2lwZURpc3RhbmNlOiBudW1iZXIgPSA1MDtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uRHVyYXRpb246IG51bWJlciA9IDIwMDtcbiAgICBASW5wdXQoKSB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246ICdlYXNlJyB8ICdlYXNlLWluJyB8ICdlYXNlLW91dCcgfCAnZWFzZS1pbi1vdXQnIHwgJ2xpbmVhcicgPSAnZWFzZSc7XG4gICAgQElucHV0KCkgdmlkZW9Qcm9wZXJ0aWVzOiBhbnk7XG4gICAgQElucHV0KCkgY291bnRlclNlcGFyYXRvcjogc3RyaW5nID0gXCIgLyBcIjtcbiAgICBASW5wdXQoKSBvdmVyZmxvd0NlbGxzTGltaXQ6IG51bWJlciA9IDM7XG4gICAgQElucHV0KCkgbGlzdGVuZXJzOiAnYXV0bycgfCAnbW91c2UgYW5kIHRvdWNoJyA9ICdtb3VzZSBhbmQgdG91Y2gnO1xuICAgIEBJbnB1dCgpIGNlbGxzVG9TaG93OiBudW1iZXI7XG4gICAgQElucHV0KCkgY2VsbHNUb1Njcm9sbDogbnVtYmVyID0gMTtcblxuICAgIEBJbnB1dCgnY2VsbFdpZHRoJykgc2V0IGNlbGxXaWR0aCh2YWx1ZTogbnVtYmVyIHwgJzEwMCUnKSB7XG4gICAgICAgIGlmICh2YWx1ZSl7XG4gICAgICAgICAgICB0aGlzLl9jZWxsV2lkdGggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgnY291bnRlcicpIHNldCBpc0NvdW50ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKXtcbiAgICAgICAgICAgIHRoaXMuX2lzQ291bnRlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpc0NvdW50ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NvdW50ZXIgJiYgdGhpcy5jZWxsTGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICBnZXQgYWN0aXZlRG90SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlQ291bnRlciAlIHRoaXMuY2VsbExlbmd0aDtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhcnJvd3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGFycm93c091dHNpZGU6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJyb3dzVGhlbWU6ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnO1xuXG4gICAgZ2V0IGNlbGxMaW1pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2Fyb3VzZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLmNlbGxMaW1pdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY2Fyb3VzZWwnKSBob3N0Q2xhc3NDYXJvdXNlbDogYm9vbGVhbiA9IHRydWU7XG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKSBob3N0U3R5bGVIZWlnaHQ6IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJykgaG9zdFN0eWxlV2lkdGg6IHN0cmluZztcblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICAgIG9uV2luZG93UmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5sYW5kc2NhcGVNb2RlID0gdGhpcy5pc0xhbmRzY2FwZTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuaW5pdENhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwubGluZVVwQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICAgIG9uTW91c2Vtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5ICYmIHRoaXMucGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLnN0b3BBdXRvcGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgb25Nb3VzZWxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5ICYmIHRoaXMucGF1c2VPbkhvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLmF1dG9wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBcbiAgICAgICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmKXtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpe1xuICAgICAgICB0aGlzLmlzTmdDb250ZW50ID0gdGhpcy5jZWxsc0VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMDtcblxuICAgICAgICB0aGlzLnRvdWNoZXMgPSBuZXcgVG91Y2hlcyh7XG4gICAgICAgICAgICBlbGVtZW50OiB0aGlzLmNlbGxzRWxlbWVudCxcbiAgICAgICAgICAgIGxpc3RlbmVyczogdGhpcy5saXN0ZW5lcnMsXG4gICAgICAgICAgICBtb3VzZUxpc3RlbmVyczoge1xuICAgICAgICAgICAgICAgIFwibW91c2Vkb3duXCI6IFwiaGFuZGxlTW91c2Vkb3duXCIsXG4gICAgICAgICAgICAgICAgXCJtb3VzZXVwXCI6IFwiaGFuZGxlTW91c2V1cFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudG91Y2hlcy5vbigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2hzdGFydCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5vbignaG9yaXpvbnRhbC1zd2lwZScsIHRoaXMuaGFuZGxlSG9yaXpvbnRhbFN3aXBlKTtcbiAgICAgICAgdGhpcy50b3VjaGVzLm9uKCd0b3VjaGVuZCcsIHRoaXMuaGFuZGxlVG91Y2hlbmQpO1xuICAgICAgICB0aGlzLnRvdWNoZXMub24oJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlVG91Y2hzdGFydCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5vbignbW91c2V1cCcsIHRoaXMuaGFuZGxlVG91Y2hlbmQpO1xuXG4gICAgICAgIHRoaXMuaW5pdENhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dG9wbGF5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLmF1dG9wbGF5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuY2VsbExlbmd0aCA9IHRoaXMuZ2V0Q2VsbExlbmd0aCgpO1xuICAgICAgICB0aGlzLmRvdHNBcnIgPSBBcnJheSh0aGlzLmNlbGxMZW5ndGgpLmZpbGwoMSk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5saW5lVXBDZWxscygpO1xuXG4gICAgICAgIC8qIFN0YXJ0IGRldGVjdGluZyBjaGFuZ2VzIGluIHRoZSBET00gdHJlZSAqL1xuICAgICAgICB0aGlzLmRldGVjdERvbUNoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLndpZHRoIHx8IGNoYW5nZXMuaGVpZ2h0IHx8IGNoYW5nZXMuaW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VsKCk7XG4gICAgICAgICAgICB0aGlzLmNhcm91c2VsLmxpbmVVcENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50b3VjaGVzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaW5pdENhcm91c2VsKCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsID0gbmV3IENhcm91c2VsKHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jYXJvdXNlbC1jZWxscycpLFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGltYWdlczogdGhpcy5pbWFnZXMsXG4gICAgICAgICAgICBjZWxsV2lkdGg6IHRoaXMuZ2V0Q2VsbFdpZHRoKCksXG4gICAgICAgICAgICBsb29wOiB0aGlzLmxvb3AsXG4gICAgICAgICAgICBhdXRvcGxheUludGVydmFsOiB0aGlzLmF1dG9wbGF5SW50ZXJ2YWwsXG4gICAgICAgICAgICBvdmVyZmxvd0NlbGxzTGltaXQ6IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0LFxuICAgICAgICAgICAgdmlzaWJsZVdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgICAgIG1pblN3aXBlRGlzdGFuY2U6IHRoaXMubWluU3dpcGVEaXN0YW5jZSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdGhpcy50cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICAgICAgICB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IHRoaXMudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLFxuICAgICAgICAgICAgdmlkZW9Qcm9wZXJ0aWVzOiB0aGlzLnZpZGVvUHJvcGVydGllc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXRlY3REb21DaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Eb21DaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBjb25maWcgPSB7IFxuICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsIFxuICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSBcbiAgICAgICAgfTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBvbkRvbUNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2VsbExlbmd0aCA9IHRoaXMuZ2V0Q2VsbExlbmd0aCgpO1xuICAgICAgICB0aGlzLmNhcm91c2VsLmxpbmVVcENlbGxzKCk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBzZXREaW1lbnNpb25zKCkge1xuICAgICAgICB0aGlzLmhvc3RTdHlsZUhlaWdodCA9IHRoaXMuaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5ob3N0U3R5bGVXaWR0aCA9IHRoaXMud2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIGdldEZpbGUoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuZ2V0RmlsZShpbmRleCk7XG4gICAgfVxuXG4gICAgLyogVG91Y2hzdGFydCAqL1xuICAgIGhhbmRsZVRvdWNoc3RhcnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5hZGRFdmVudExpc3RlbmVycyhcIm1vdXNlbW92ZVwiLCBcImhhbmRsZU1vdXNlbW92ZVwiKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5oYW5kbGVUb3VjaHN0YXJ0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5pc01vdmluZyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyogVG91Y2htb3ZlICovXG4gICAgaGFuZGxlSG9yaXpvbnRhbFN3aXBlID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5oYW5kbGVIb3Jpem9udGFsU3dpcGUoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qIFRvdWNoZW5kICovXG4gICAgaGFuZGxlVG91Y2hlbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5oYW5kbGVUb3VjaGVuZChldmVudCk7XG4gICAgICAgIHRoaXMudG91Y2hlcy5yZW1vdmVFdmVudExpc3RlbmVycyhcIm1vdXNlbW92ZVwiLCBcImhhbmRsZU1vdXNlbW92ZVwiKTtcbiAgICAgICAgdGhpcy5pc01vdmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhhbmRsZVRyYW5zaXRpb25lbmRDZWxsQ29udGFpbmVyKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2Fyb3VzZWwuaGFuZGxlU2xpZGVFbmQoKTtcbiAgICB9XG5cbiAgICB0b2dnbGVWaWRlbyh2aWRlbykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy52aWRlb1Byb3BlcnRpZXMubm9QbGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmlkZW8ucGF1c2VkKSB7XG4gICAgICAgICAgICB2aWRlby5wbGF5KCk7XG4gICAgICAgICAgICB0aGlzLmlzVmlkZW9QbGF5aW5nID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZpZGVvLnBhdXNlKCk7XG4gICAgICAgICAgICB0aGlzLmlzVmlkZW9QbGF5aW5nID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJvdXNlbC5zbGlkZUNvdW50ZXI7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKCkge1xuICAgICAgICBsZXQgZWxlbWVudFdpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICAgICAgaWYgKHRoaXMuY2VsbHNUb1Nob3cpIHtcbiAgICAgICAgICAgIGxldCBtYXJnaW4gPSB0aGlzLmNlbGxzVG9TaG93ID4gMSA/IHRoaXMubWFyZ2luIDogMDtcbiAgICAgICAgICAgIGxldCB0b3RhbE1hcmdpbiA9IG1hcmdpbiAqICh0aGlzLmNlbGxzVG9TaG93IC0gMSk7XG4gICAgICAgICAgICByZXR1cm4gKGVsZW1lbnRXaWR0aCAtIHRvdGFsTWFyZ2luKSAvIHRoaXMuY2VsbHNUb1Nob3c7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY2VsbFdpZHRoID09PSAnMTAwJScpIHtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jZWxsV2lkdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0KCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLm5leHQodGhpcy5jZWxsc1RvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5zdG9wQXV0b3BsYXkoKTtcbiAgICB9XG5cbiAgICBwcmV2KCkge1xuICAgICAgICB0aGlzLmNhcm91c2VsLnByZXYodGhpcy5jZWxsc1RvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5jYXJvdXNlbC5zdG9wQXV0b3BsYXkoKTtcbiAgICB9XG5cbiAgICBzZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLmNhcm91c2VsLnNlbGVjdChpbmRleCk7XG4gICAgfVxuXG4gICAgaXNOZXh0QXJyb3dEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fyb3VzZWwuaXNOZXh0QXJyb3dEaXNhYmxlZCgpO1xuICAgIH1cblxuICAgIGlzUHJldkFycm93RGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcm91c2VsLmlzUHJldkFycm93RGlzYWJsZWQoKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsTGVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc0VsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==

@@ -255,3 +255,3 @@ export class Carousel {

}
next() {
next(length = 1) {
if (this.isSlideInProgress) {

@@ -261,5 +261,5 @@ return;

this.direction = 'left';
this.handleSlide(1);
this.handleSlide(length);
}
prev() {
prev(length = 1) {
if (this.isSlideInProgress) {

@@ -269,3 +269,3 @@ return;

this.direction = 'right';
this.handleSlide(1);
this.handleSlide(length);
}

@@ -460,2 +460,2 @@ select(index) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXJlc3BvbnNpdmUtY2Fyb3VzZWwvc3JjL2xpYi9jYXJvdXNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxPQUFPLFFBQVE7SUFnSGpCLFlBQVksVUFBc0I7UUF4R2xDLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUc3Qiw4QkFBeUIsR0FBVyxDQUFDLENBQUMsQ0FBQyxtRkFBbUY7UUFDMUgsNEJBQXVCLEdBQVcsQ0FBQyxDQUFDO1FBQ3BDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBQ3RELHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQVVqQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxlQUFVLEdBQXNCLE1BQU0sQ0FBQztRQUN2Qyw2QkFBd0IsR0FBVyxDQUFDLENBQUM7UUE2RnJDLHFCQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hCLE9BQU87YUFDVjtZQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRTtZQUNELElBQUks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QUFVLEVBQUU7WUFDM0IsWUFBWSxHQUFHLFlBQVksR0FBRyxVQUFVLENBQUM7U0FDNUM7UUFFRCxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUU7WUFDbEIsT0FBTyxTQUFTLENBQUM7U0FDcEI7YUFBTTtZQUNILGFBQWEsR0FBRyxTQUFTLEdBQUcsWUFBWSxDQUFDO1lBQ3pDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtnQkFDbkIsYUFBYSxHQUFHLFVBQVUsR0FBRyxhQUFhLENBQUM7YUFDOUM7U0FDSjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydGllcyB7XHJcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgICBpbWFnZXM6IGFueTtcclxuICAgIGNlbGxXaWR0aDogbnVtYmVyO1xyXG4gICAgbG9vcDogYm9vbGVhbjtcclxuICAgIGF1dG9wbGF5SW50ZXJ2YWw6IG51bWJlcjtcclxuICAgIG92ZXJmbG93Q2VsbHNMaW1pdDogbnVtYmVyO1xyXG4gICAgdmlzaWJsZVdpZHRoOiBudW1iZXI7XHJcbiAgICBtYXJnaW46IG51bWJlcjtcclxuICAgIG1pblN3aXBlRGlzdGFuY2U6IG51bWJlcjtcclxuICAgIHRyYW5zaXRpb25EdXJhdGlvbjogbnVtYmVyO1xyXG4gICAgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOiAnZWFzZScgfCAnZWFzZS1pbicgfCAnZWFzZS1vdXQnIHwgJ2Vhc2UtaW4tb3V0JyB8ICdsaW5lYXInO1xyXG4gICAgdmlkZW9Qcm9wZXJ0aWVzOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbCB7XHJcbiAgICBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzO1xyXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBzdGFydFg6IG51bWJlcjtcclxuICAgIG1vdmVYOiBudW1iZXI7XHJcbiAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XHJcbiAgICBzbGlkZUxlbmd0aDogbnVtYmVyO1xyXG4gICAgZGlzdGFuY2VBYnM6IG51bWJlcjtcclxuICAgIGluaXRpYWxQb3NpdGlvblg6IG51bWJlciA9IDA7XHJcbiAgICBjZWxsczogSFRNTENvbGxlY3Rpb247XHJcblxyXG4gICAgbmV3Q29udGFpbmVyUG9zaXRpb25JbmRleDogbnVtYmVyID0gMDsgLy8gVGhlIGluZGV4IG9mIHRoZSBuZXcgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGFjdGl2ZSBpbmRleCwgZm9yIGV4YW1wbGUgLTEgb3IgKzFcclxuICAgIHByZWxpbWluYXJ5U2xpZGVDb3VudGVyOiBudW1iZXIgPSAwO1xyXG4gICAgc2xpZGVDb3VudGVyOiBudW1iZXIgPSAwOyAvLyBTY3JvbGxpbmcgSW5kZXggKGNvdW50ZXIpXHJcbiAgICBwcmV2aW91c1NsaWRlQ291bnRlcjogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpc1NsaWRlSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICAgIGlzTW92ZUluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBpc1RyYW5zaXRpb25JblByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgaXNUb3VjaHN0YXJ0OiBib29sZWFuO1xyXG4gICAgaXNTbGlkZUxlbmd0aExpbWl0ZWQ6IGJvb2xlYW47XHJcbiAgICBpc0NvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbjogYm9vbGVhbjtcclxuXHJcbiAgICBjb250YWluZXJJbml0aWFsUG9zaXRpb25YOiBudW1iZXI7XHJcbiAgICBpc0NvbnRlbnRJbWFnZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgdmlzaWJsZVdpZHRoOiBudW1iZXI7XHJcbiAgICBpc0xhenlMb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGlzQ29udGFpbmVyTG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGFsaWduQ2VsbHM6IFwibGVmdFwiIHwgXCJjZW50ZXJcIiA9IFwibGVmdFwiO1xyXG4gICAgaW5pdGlhbENvbnRhaW5lclBvc2l0aW9uOiBudW1iZXIgPSAwO1xyXG4gICAgYXV0b3BsYXlJZDogYW55O1xyXG5cclxuICAgIGdldCBjZWxsTGVuZ3RoKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubGVuZ3RoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNlbGxzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNlbGxMZW5ndGggPSB0aGlzLnZpc2libGVDZWxsc0NvdW50ICsgdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQgKiAyO1xyXG4gICAgICAgICAgICBpZiAoY2VsbExlbmd0aCA+IHRoaXMuaW1hZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY2VsbExlbmd0aCA9IHRoaXMuaW1hZ2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2VsbExlbmd0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNGaXJzdENlbGwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVDb3VudGVyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsYXN0Q2VsbEluZGV4KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcy5sZW5ndGggPyAodGhpcy5pbWFnZXMubGVuZ3RoIC0gMSkgOiAodGhpcy5jZWxscy5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3ZlcmZsb3dDZWxsc0xpbWl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlcyAmJiB0aGlzLmlzSW1hZ2VzTGVzc0NlbGxMaW1pdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5pbWFnZXMubGVuZ3RoIC0gdGhpcy52aXNpYmxlQ2VsbHNDb3VudCkgLyAyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm92ZXJmbG93Q2VsbHNMaW1pdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW1hZ2VzTGVzc0NlbGxMaW1pdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm92ZXJmbG93Q2VsbHNMaW1pdCAqIDIgKyB0aGlzLnZpc2libGVDZWxsc0NvdW50ID4gdGhpcy5pbWFnZXMubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjZWxsTGltaXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNlbGxzQ291bnQgKyB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCAqIDI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGltYWdlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmltYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWFyZ2luKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubWFyZ2luO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtaW5Td2lwZURpc3RhbmNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubWluU3dpcGVEaXN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdHJhbnNpdGlvbkR1cmF0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMudHJhbnNpdGlvbkR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy50cmFuc2l0aW9uVGltaW5nRnVuY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZ1bGxDZWxsV2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5jZWxsV2lkdGggKyB0aGlzLm1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmlzaWJsZUNlbGxzQ291bnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnZpc2libGVXaWR0aCAvIHRoaXMuZnVsbENlbGxXaWR0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxhcENvdW50ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5zbGlkZUNvdW50ZXIgLyB0aGlzLnRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpc2libGVDZWxsc092ZXJmbG93Q29udGFpbmVyKCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy52aXNpYmxlQ2VsbHNDb3VudCAqIHRoaXMuZnVsbENlbGxXaWR0aCAtdGhpcy5tYXJnaW4pID4gdGhpcy52aXNpYmxlV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllcykge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IHByb3BlcnRpZXMuZWxlbWVudDtcclxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIHRoaXMuY2VsbHMgPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW47XHJcbiAgICAgICAgdGhpcy52aXNpYmxlV2lkdGggPSB0aGlzLnByb3BlcnRpZXMudmlzaWJsZVdpZHRoIHx8IHRoaXMuZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoO1xyXG5cclxuICAgICAgICB0aGlzLnNldENvbnRhaW5lcldpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5hbGlnbkNvbnRhaW5lcigwKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUb3VjaHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzVG91Y2hzdGFydCA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzU2xpZGVJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xyXG4gICAgICAgIGlmICh0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gdG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5nZXRDYXJvdXNlbEVsZW1lbnRQb3NpdGlvbigpWydsZWZ0J107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5nZXRDYXJvdXNlbEVsZW1lbnRQb3NpdGlvbigpWydsZWZ0J107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udGFpbmVySW5pdGlhbFBvc2l0aW9uWCA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKClbJ2xlZnQnXSAtIHRoaXMuZ2V0Q2Fyb3VzZWxFbGVtZW50UG9zaXRpb24oKVsnbGVmdCddO1xyXG4gICAgICAgIHRoaXMuaXNNb3ZlSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSG9yaXpvbnRhbFN3aXBlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1NsaWRlSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuICAgICAgICBpZiAodG91Y2hlcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVYID0gdG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5nZXRDYXJvdXNlbEVsZW1lbnRQb3NpdGlvbigpWydsZWZ0J107XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmdldENhcm91c2VsRWxlbWVudFBvc2l0aW9uKClbJ2xlZnQnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZUFicyA9IHRoaXMuZ2V0RGlzdGFuY2VBYnMoKTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMubW92ZUNvbnRhaW5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVRvdWNoZW5kID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1NsaWRlSW5Qcm9ncmVzcyB8fCAhdGhpcy5pc1RvdWNoc3RhcnQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1RvdWNoc3RhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc01vdmVJblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRldGVjdFNsaWRlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTbGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmV3Q29udGFpbmVyUG9zaXRpb25JbmRleCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25Db250YWluZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3RhcnRYID0gdGhpcy5tb3ZlWCA9IHRoaXMuZGlzdGFuY2VBYnMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5pc1RvdWNoc3RhcnQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBNb3ZlICovXHJcbiAgICBtb3ZlQ29udGFpbmVyKCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvblggPSB0aGlzLmdldE1vdmVQb3NpdGlvblgoKTtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uWChwb3NpdGlvblgsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vdmVQb3NpdGlvblgoKSB7XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVySW5pdGlhbFBvc2l0aW9uWCAtIGRpc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEFsaWduICovXHJcbiAgICBhbGlnbkNvbnRhaW5lcihkdXJhdGlvbjogbnVtYmVyID0gdGhpcy50cmFuc2l0aW9uRHVyYXRpb24pIHtcclxuICAgICAgICBsZXQgcG9zaXRpb25YID0gdGhpcy5nZXRDb250YWluZXJQb3NpdGlvbigpO1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb25YKHBvc2l0aW9uWCwgZHVyYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbENvbnRhaW5lclBvc2l0aW9uKHBvc2l0aW9uWCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGFpbmVyUG9zaXRpb24oKSB7XHJcbiAgICAgICAgbGV0IGNvcnJlY3Rpb24gPSB0aGlzLmdldENvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLmlzQ29udGFpbmVyUG9zaXRpb25Db3JyZWN0aW9uID0gY29ycmVjdGlvbiAhPSAwO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5pbml0aWFsQ29udGFpbmVyUG9zaXRpb24gKyB0aGlzLm5ld0NvbnRhaW5lclBvc2l0aW9uSW5kZXggKiB0aGlzLmZ1bGxDZWxsV2lkdGgpICsgY29ycmVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsQ29udGFpbmVyUG9zaXRpb24ocG9zaXRpb24pIHtcclxuICAgICAgICBsZXQgY29ycmVjdGlvbiA9IHRoaXMuZ2V0Q29udGFpbmVyUG9zaXRpb25Db3JyZWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsQ29udGFpbmVyUG9zaXRpb24gPSBwb3NpdGlvbiAtIGNvcnJlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGFpbmVyUG9zaXRpb25Db3JyZWN0aW9uKCkge1xyXG4gICAgICAgIGxldCBjb3JyZWN0aW9uID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5sb29wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCh0aGlzLmNlbGxMZW5ndGggLSB0aGlzLnByZWxpbWluYXJ5U2xpZGVDb3VudGVyKSA8IHRoaXMudmlzaWJsZUNlbGxzQ291bnQgfHwgdGhpcy5pc1NsaWRlTGVuZ3RoTGltaXRlZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlV2lkdGggPCB0aGlzLnRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudCAqIHRoaXMuZnVsbENlbGxXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgY29ycmVjdGlvbiA9IC0gKHRoaXMudmlzaWJsZUNlbGxzQ291bnQgKiB0aGlzLmZ1bGxDZWxsV2lkdGggLSB0aGlzLnZpc2libGVXaWR0aCAtIHRoaXMubWFyZ2luKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvcnJlY3Rpb24gPj0gLSB0aGlzLm1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgY29ycmVjdGlvbiA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjb3JyZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFF1aWNrbHkgY2VudGVyICovXHJcbiAgICBxdWlja2x5UG9zaXRpb25Db250YWluZXIoKSB7XHJcbiAgICAgICAgbGV0IGNvcnJlY3Rpb24gPSB0aGlzLmdldENvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHRoaXMuZ2V0TmV3Q29udGFpbmVyUG9zaXRpb24oKSArIGNvcnJlY3Rpb247XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvblgoaW5pdGlhbFBvc2l0aW9uLCAwKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb250YWluZXJQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE5ld0NvbnRhaW5lclBvc2l0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlQ291bnRlciA+IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFsaWduQ2VsbHMgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVVcENlbGxzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLSh0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCAqIHRoaXMuZnVsbENlbGxXaWR0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNsaWRlQ291bnRlciA8PSB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aW91c1NsaWRlQ291bnRlciA+IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVVcENlbGxzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIC0odGhpcy5zbGlkZUNvdW50ZXIgKiB0aGlzLmZ1bGxDZWxsV2lkdGgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRDb250YWluZXJXaWR0aCgpIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuZ2V0Q29udGFpbmVyV2lkdGgoKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBjb250YWluZXJXaWR0aCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250YWluZXJXaWR0aCgpIHtcclxuICAgICAgICBsZXQgY29udGFpbmVyV2lkdGggPSB0aGlzLnRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudCAqIHRoaXMuZnVsbENlbGxXaWR0aDtcclxuICAgICAgICBsZXQgdG90YWxJbWFnZVdpZHRoID0gdGhpcy5jZWxsTGVuZ3RoICogdGhpcy5mdWxsQ2VsbFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAodG90YWxJbWFnZVdpZHRoIDwgY29udGFpbmVyV2lkdGgpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGggPSB0b3RhbEltYWdlV2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29udGFpbmVyV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZShjZWxsSW5kZXgpIHtcclxuICAgICAgICBsZXQgaW1hZ2VJbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGNlbGxJbmRleCk7IFxyXG4gICAgICAgIGxldCBmaWxlID0gdGhpcy5pbWFnZXNbaW1hZ2VJbmRleF07XHJcblxyXG4gICAgICAgIGlmIChmaWxlICYmICFmaWxlLnR5cGUpIHtcclxuICAgICAgICAgICAgZmlsZS50eXBlID0gJ2ltYWdlJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLmltYWdlc1tpbWFnZUluZGV4XSxcclxuICAgICAgICAgICAgaW1hZ2VJbmRleFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsZUluZGV4KGNlbGxJbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25JbmRleCA9IHRoaXMuZ2V0UG9zaXRpb25JbmRleChjZWxsSW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IG51bWJlckxlZnRDZWxscyA9ICh0aGlzLnRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudCAtIDEpIC8gMjtcclxuICAgICAgICBsZXQgaW1hZ2VJbmRleDtcclxuICAgICAgICBsZXQgY291bnRlciA9IHRoaXMuc2xpZGVDb3VudGVyO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNDb250YWluZXJMb2NrZWQpIHtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPD0gdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjZWxsSW5kZXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VsbExpbWl0T3ZlcmZsb3cgPSBjb3VudGVyIC0gdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQ7XHJcbiAgICAgICAgICAgICAgICBpbWFnZUluZGV4ID0gcG9zaXRpb25JbmRleCArIGNlbGxMaW1pdE92ZXJmbG93O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlcyAmJiB0aGlzLnByb3BlcnRpZXMubG9vcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlSW5kZXggPSBpbWFnZUluZGV4ICUgdGhpcy5pbWFnZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZUluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGlnbkNlbGxzID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICBpZiAoY291bnRlciA+IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2VsbExpbWl0T3ZlcmZsb3cgPSBjb3VudGVyIC0gdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQ7XHJcbiAgICAgICAgICAgICAgICBpbWFnZUluZGV4ID0gcG9zaXRpb25JbmRleCArIGNlbGxMaW1pdE92ZXJmbG93O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VJbmRleCA9IGNlbGxJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGltYWdlSW5kZXggPiB0aGlzLmxhc3RDZWxsSW5kZXggJiYgIXRoaXMucHJvcGVydGllcy5sb29wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbWFnZUluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybVBvc2l0aW9uWCh2YWx1ZSwgZHVyYXRpb24gPSB0aGlzLnRyYW5zaXRpb25EdXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAnICsgZHVyYXRpb24gKyAnbXMgJyArIHRoaXMudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgnICsgdmFsdWUgKyAncHgpJztcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RTbGlkZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaXN0YW5jZUFicyA+PSB0aGlzLm1pblN3aXBlRGlzdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NsaWRlSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9ICdsZWZ0JztcclxuICAgICAgICB0aGlzLmhhbmRsZVNsaWRlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXYoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAncmlnaHQnO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlU2xpZGUoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0KGluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnNsaWRlQ291bnRlciA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMucXVpY2tseVBvc2l0aW9uQ29udGFpbmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2xpZGUoc2xpZGVMZW5ndGg6IG51bWJlciA9IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2xpZGVMZW5ndGggPSB0aGlzLmdldFNsaWRlTGVuZ3RoKCk7XHJcbiAgICAgICAgdGhpcy5zbGlkZUxlbmd0aCA9IHNsaWRlTGVuZ3RoID8gc2xpZGVMZW5ndGggOiB0aGlzLmxpbWl0U2xpZGVMZW5ndGgodGhpcy5zbGlkZUxlbmd0aCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2xlZnQnICYmICF0aGlzLmlzU2xpZGVJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbGltaW5hcnlTbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciArIHRoaXMuc2xpZGVMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGV0ZWN0TGFzdFNsaWRlKHRoaXMuc2xpZGVDb3VudGVyICsgdGhpcy5zbGlkZUxlbmd0aCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q29udGFpbmVyUG9zaXRpb25JbmRleCA9IHRoaXMubmV3Q29udGFpbmVyUG9zaXRpb25JbmRleCAtIHRoaXMuc2xpZGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVJblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRhaW5lckxvY2tlZCA9IHRoaXMucHJlbGltaW5hcnlTbGlkZUNvdW50ZXIgPiB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0ZWN0Q29udGFpbmVyVW5sb2NrKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRhaW5lckxvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAncmlnaHQnICYmICF0aGlzLmlzU2xpZGVJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlQ291bnRlciAtIHRoaXMuc2xpZGVMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlTGVuZ3RoID0gdGhpcy5zbGlkZUNvdW50ZXI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJlbGltaW5hcnlTbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciAtIHRoaXMuc2xpZGVMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdENlbGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q29udGFpbmVyUG9zaXRpb25JbmRleCA9IHRoaXMubmV3Q29udGFpbmVyUG9zaXRpb25JbmRleCArIHRoaXMuc2xpZGVMZW5ndGg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVJblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlbGltaW5hcnlTbGlkZUNvdW50ZXIgPiB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFpbmVyTG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFpbmVyTG9ja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRlY3RDb250YWluZXJVbmxvY2soKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFpbmVyTG9ja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFsaWduQ29udGFpbmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2xpZGVMZW5ndGgoKSB7XHJcbiAgICAgICAgbGV0IGNvcnJlY3Rpb24gPSB0aGlzLmdldENvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbigpO1xyXG4gICAgICAgIGxldCBsZW5ndGggPSBNYXRoLmZsb29yKCh0aGlzLmRpc3RhbmNlQWJzICsgY29ycmVjdGlvbikgLyB0aGlzLmZ1bGxDZWxsV2lkdGgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kaXN0YW5jZUFicyAlIHRoaXMuZnVsbENlbGxXaWR0aCA+PSB0aGlzLm1pblN3aXBlRGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgbGVuZ3RoKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgbGltaXRTbGlkZUxlbmd0aChzbGlkZUxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHNsaWRlTGVuZ3RoID4gMSkge1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3U2xpZGVDb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXIgKyAoc2xpZGVMZW5ndGggLSBpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGV0ZWN0TGFzdFNsaWRlKG5ld1NsaWRlQ291bnRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZUxlbmd0aCA9IHNsaWRlTGVuZ3RoIC0gaTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2xpZGVMZW5ndGhMaW1pdGVkID0gaSA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNsaWRlTGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdExhc3RTbGlkZShzbGlkZUNvdW50ZXI6IG51bWJlcikge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubG9vcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmNlbGxMZW5ndGggLSBzbGlkZUNvdW50ZXIpIDwgdGhpcy52aXNpYmxlQ2VsbHNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNOZXh0QXJyb3dEaXNhYmxlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy52aXNpYmxlQ2VsbHNPdmVyZmxvd0NvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRlY3RMYXN0U2xpZGUodGhpcy5zbGlkZUNvdW50ZXIgKyAxKSAmJiB0aGlzLmlzQ29udGFpbmVyUG9zaXRpb25Db3JyZWN0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGVjdExhc3RTbGlkZSh0aGlzLnNsaWRlQ291bnRlciArIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc1ByZXZBcnJvd0Rpc2FibGVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlQ291bnRlciA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RDb250YWluZXJVbmxvY2soKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmNlbGxMZW5ndGggLSB0aGlzLnByZWxpbWluYXJ5U2xpZGVDb3VudGVyKSA8ICh0aGlzLnZpc2libGVDZWxsc0NvdW50ICsgdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVNsaWRlRW5kKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2xpZGVJblByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2xpZGVFbmQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5pc1NsaWRlTGVuZ3RoTGltaXRlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNmb3JtU2xpZGVFbmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNMYXp5TG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNsaWRlQ291bnRlcigpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbWFnZXMgfHwgIXRoaXMuaW1hZ2VzICYmIHRoaXMucHJvcGVydGllcy5sb29wKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1aWNrbHlQb3NpdGlvbkNvbnRhaW5lcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpb3VzU2xpZGVDb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2xpZGVDb3VudGVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVDb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXIgKyB0aGlzLnNsaWRlTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2xpZGVDb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXIgLSB0aGlzLnNsaWRlTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zbGlkZUxlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRUcmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RWxlbWVudFBvc2l0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2Fyb3VzZWxFbGVtZW50UG9zaXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzdGFuY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRYIC0gdGhpcy5tb3ZlWDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXN0YW5jZUFicygpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5zdGFydFggLSB0aGlzLm1vdmVYKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXJlY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gTWF0aC5zaWduKHRoaXMuc3RhcnRYIC0gdGhpcy5tb3ZlWCk7XHJcblxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncmlnaHQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnbGVmdCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxpbmVVcENlbGxzKCkge1xyXG4gICAgICAgIGNvbnN0IGNlbGxzID0gdGhpcy5lbGVtZW50LmNoaWxkcmVuO1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBjZWxsID0gY2VsbHNbaV07XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvblggPSB0aGlzLmdldENlbGxQb3NpdGlvblgoaSk7XHJcbiAgICAgICAgICAgIChjZWxsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgnICsgcG9zaXRpb25YICsgJ3B4KSc7XHJcblxyXG4gICAgICAgICAgICAvLyBub3RpY2VcclxuICAgICAgICAgICAgKGNlbGwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLndpZHRoID0gdGhpcy5wcm9wZXJ0aWVzLmNlbGxXaWR0aCsncHgnO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2VsbFBvc2l0aW9uWChpbmRleCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbkluZGV4ID0gdGhpcy5nZXRQb3NpdGlvbkluZGV4KGluZGV4KTtcclxuICAgICAgICByZXR1cm4gcG9zaXRpb25JbmRleCAqIHRoaXMuZnVsbENlbGxXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3NpdGlvbkluZGV4KGNlbGxJbmRleCkge1xyXG4gICAgICAgIGxldCBjb3VudGVyID0gdGhpcy5zbGlkZUNvdW50ZXI7XHJcbiAgICAgICAgbGV0IGNlbGxMZW5ndGggPSB0aGlzLnRvdGFsQ29udGFpbmVyQ2VsbHNDb3VudDtcclxuICAgICAgICBsZXQgc2xpZGVDb3VudGVyID0gY291bnRlciAtIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0O1xyXG4gICAgICAgIGxldCBwb3NpdGlvbkluZGV4O1xyXG5cclxuICAgICAgICBpZiAoc2xpZGVDb3VudGVyID4gY2VsbExlbmd0aCkge1xyXG4gICAgICAgICAgICBzbGlkZUNvdW50ZXIgPSBzbGlkZUNvdW50ZXIgJSBjZWxsTGVuZ3RoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNsaWRlQ291bnRlciA8IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNlbGxJbmRleDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwb3NpdGlvbkluZGV4ID0gY2VsbEluZGV4IC0gc2xpZGVDb3VudGVyO1xyXG4gICAgICAgICAgICBpZiAocG9zaXRpb25JbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXggPSBjZWxsTGVuZ3RoICsgcG9zaXRpb25JbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uSW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2VudGVyUG9zaXRpb25JbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudG90YWxDb250YWluZXJDZWxsc0NvdW50IC0gMSkgLyAyO1xyXG4gICAgfVxyXG5cclxuICAgIGF1dG9wbGF5KCkge1xyXG4gICAgICAgIHRoaXMuYXV0b3BsYXlJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZXh0KCk7IFxyXG4gICAgICAgIH0sIHRoaXMucHJvcGVydGllcy5hdXRvcGxheUludGVydmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wQXV0b3BsYXkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b3BsYXlJZCkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b3BsYXlJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQXV0b3BsYXkoKTtcclxuICAgIH1cclxufSJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXJlc3BvbnNpdmUtY2Fyb3VzZWwvc3JjL2xpYi9jYXJvdXNlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxPQUFPLFFBQVE7SUFnSGpCLFlBQVksVUFBc0I7UUF4R2xDLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUc3Qiw4QkFBeUIsR0FBVyxDQUFDLENBQUMsQ0FBQyxtRkFBbUY7UUFDMUgsNEJBQXVCLEdBQVcsQ0FBQyxDQUFDO1FBQ3BDLGlCQUFZLEdBQVcsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBQ3RELHlCQUFvQixHQUFXLENBQUMsQ0FBQztRQVVqQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUVoQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBQzNCLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxlQUFVLEdBQXNCLE1BQU0sQ0FBQztRQUN2Qyw2QkFBd0IsR0FBVyxDQUFDLENBQUM7UUE2RnJDLHFCQUFnQixHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFekIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hCLE9BQU87YUFDVjtZQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDOUIsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2hGO2lCQUFNO2dCQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzRTtZQUNELElBQUks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SSxhQUFhLENBQUM7UUFFbEIsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFO1lBQzNCLFlBQVksR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDO1NBQzVDO1FBRUQsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO2FBQU07WUFDSCxhQUFhLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztZQUN6QyxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUU7Z0JBQ25CLGFBQWEsR0FBRyxVQUFVLEdBQUcsYUFBYSxDQUFDO2FBQzlDO1NBQ0o7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFByb3BlcnRpZXMge1xyXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gICAgaW1hZ2VzOiBhbnk7XHJcbiAgICBjZWxsV2lkdGg6IG51bWJlcjtcclxuICAgIGxvb3A6IGJvb2xlYW47XHJcbiAgICBhdXRvcGxheUludGVydmFsOiBudW1iZXI7XHJcbiAgICBvdmVyZmxvd0NlbGxzTGltaXQ6IG51bWJlcjtcclxuICAgIHZpc2libGVXaWR0aDogbnVtYmVyO1xyXG4gICAgbWFyZ2luOiBudW1iZXI7XHJcbiAgICBtaW5Td2lwZURpc3RhbmNlOiBudW1iZXI7XHJcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IG51bWJlcjtcclxuICAgIHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjogJ2Vhc2UnIHwgJ2Vhc2UtaW4nIHwgJ2Vhc2Utb3V0JyB8ICdlYXNlLWluLW91dCcgfCAnbGluZWFyJztcclxuICAgIHZpZGVvUHJvcGVydGllczogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWwge1xyXG4gICAgcHJvcGVydGllczogUHJvcGVydGllcztcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgc3RhcnRYOiBudW1iZXI7XHJcbiAgICBtb3ZlWDogbnVtYmVyO1xyXG4gICAgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xyXG4gICAgc2xpZGVMZW5ndGg6IG51bWJlcjtcclxuICAgIGRpc3RhbmNlQWJzOiBudW1iZXI7XHJcbiAgICBpbml0aWFsUG9zaXRpb25YOiBudW1iZXIgPSAwO1xyXG4gICAgY2VsbHM6IEhUTUxDb2xsZWN0aW9uO1xyXG5cclxuICAgIG5ld0NvbnRhaW5lclBvc2l0aW9uSW5kZXg6IG51bWJlciA9IDA7IC8vIFRoZSBpbmRleCBvZiB0aGUgbmV3IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBhY3RpdmUgaW5kZXgsIGZvciBleGFtcGxlIC0xIG9yICsxXHJcbiAgICBwcmVsaW1pbmFyeVNsaWRlQ291bnRlcjogbnVtYmVyID0gMDtcclxuICAgIHNsaWRlQ291bnRlcjogbnVtYmVyID0gMDsgLy8gU2Nyb2xsaW5nIEluZGV4IChjb3VudGVyKVxyXG4gICAgcHJldmlvdXNTbGlkZUNvdW50ZXI6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaXNTbGlkZUluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBpc01vdmVJblByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgaXNUcmFuc2l0aW9uSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICAgIGlzVG91Y2hzdGFydDogYm9vbGVhbjtcclxuICAgIGlzU2xpZGVMZW5ndGhMaW1pdGVkOiBib29sZWFuO1xyXG4gICAgaXNDb250YWluZXJQb3NpdGlvbkNvcnJlY3Rpb246IGJvb2xlYW47XHJcblxyXG4gICAgY29udGFpbmVySW5pdGlhbFBvc2l0aW9uWDogbnVtYmVyO1xyXG4gICAgaXNDb250ZW50SW1hZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHZpc2libGVXaWR0aDogbnVtYmVyO1xyXG4gICAgaXNMYXp5TG9hZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpc0NvbnRhaW5lckxvY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBhbGlnbkNlbGxzOiBcImxlZnRcIiB8IFwiY2VudGVyXCIgPSBcImxlZnRcIjtcclxuICAgIGluaXRpYWxDb250YWluZXJQb3NpdGlvbjogbnVtYmVyID0gMDtcclxuICAgIGF1dG9wbGF5SWQ6IGFueTtcclxuXHJcbiAgICBnZXQgY2VsbExlbmd0aCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzLmxlbmd0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxscy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0b3RhbENvbnRhaW5lckNlbGxzQ291bnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VzKSB7XHJcbiAgICAgICAgICAgIGxldCBjZWxsTGVuZ3RoID0gdGhpcy52aXNpYmxlQ2VsbHNDb3VudCArIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0ICogMjtcclxuICAgICAgICAgICAgaWYgKGNlbGxMZW5ndGggPiB0aGlzLmltYWdlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNlbGxMZW5ndGggPSB0aGlzLmltYWdlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNlbGxMZW5ndGg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VsbExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzRmlyc3RDZWxsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNsaWRlQ291bnRlciA9PT0gMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFzdENlbGxJbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMubGVuZ3RoID8gKHRoaXMuaW1hZ2VzLmxlbmd0aCAtIDEpIDogKHRoaXMuY2VsbHMubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG92ZXJmbG93Q2VsbHNMaW1pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbWFnZXMgJiYgdGhpcy5pc0ltYWdlc0xlc3NDZWxsTGltaXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuaW1hZ2VzLmxlbmd0aCAtIHRoaXMudmlzaWJsZUNlbGxzQ291bnQpIC8gMik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5vdmVyZmxvd0NlbGxzTGltaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0ltYWdlc0xlc3NDZWxsTGltaXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5vdmVyZmxvd0NlbGxzTGltaXQgKiAyICsgdGhpcy52aXNpYmxlQ2VsbHNDb3VudCA+IHRoaXMuaW1hZ2VzLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2VsbExpbWl0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVDZWxsc0NvdW50ICsgdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQgKiAyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbWFnZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5pbWFnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1hcmdpbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm1hcmdpbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWluU3dpcGVEaXN0YW5jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLm1pblN3aXBlRGlzdGFuY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHRyYW5zaXRpb25EdXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnRyYW5zaXRpb25EdXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMudHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmdWxsQ2VsbFdpZHRoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMuY2VsbFdpZHRoICsgdGhpcy5tYXJnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZpc2libGVDZWxsc0NvdW50KCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy52aXNpYmxlV2lkdGggLyB0aGlzLmZ1bGxDZWxsV2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsYXBDb3VudGVyKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuc2xpZGVDb3VudGVyIC8gdGhpcy50b3RhbENvbnRhaW5lckNlbGxzQ291bnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2aXNpYmxlQ2VsbHNPdmVyZmxvd0NvbnRhaW5lcigpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudmlzaWJsZUNlbGxzQ291bnQgKiB0aGlzLmZ1bGxDZWxsV2lkdGggLXRoaXMubWFyZ2luKSA+IHRoaXMudmlzaWJsZVdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXMpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSBwcm9wZXJ0aWVzLmVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcclxuICAgICAgICB0aGlzLmNlbGxzID0gdGhpcy5lbGVtZW50LmNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMudmlzaWJsZVdpZHRoID0gdGhpcy5wcm9wZXJ0aWVzLnZpc2libGVXaWR0aCB8fCB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aDtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDb250YWluZXJXaWR0aCgpO1xyXG4gICAgICAgIHRoaXMuYWxpZ25Db250YWluZXIoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVG91Y2hzdGFydCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1RvdWNoc3RhcnQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1NsaWRlSW5Qcm9ncmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuICAgICAgICBpZiAodG91Y2hlcykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0WCA9IHRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMuZ2V0Q2Fyb3VzZWxFbGVtZW50UG9zaXRpb24oKVsnbGVmdCddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZ2V0Q2Fyb3VzZWxFbGVtZW50UG9zaXRpb24oKVsnbGVmdCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckluaXRpYWxQb3NpdGlvblggPSB0aGlzLmdldEVsZW1lbnRQb3NpdGlvbigpWydsZWZ0J10gLSB0aGlzLmdldENhcm91c2VsRWxlbWVudFBvc2l0aW9uKClbJ2xlZnQnXTtcclxuICAgICAgICB0aGlzLmlzTW92ZUluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUhvcml6b250YWxTd2lwZSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XHJcbiAgICAgICAgaWYgKHRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlWCA9IHRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMuZ2V0Q2Fyb3VzZWxFbGVtZW50UG9zaXRpb24oKVsnbGVmdCddO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5nZXRDYXJvdXNlbEVsZW1lbnRQb3NpdGlvbigpWydsZWZ0J107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzdGFuY2VBYnMgPSB0aGlzLmdldERpc3RhbmNlQWJzKCk7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLm1vdmVDb250YWluZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUb3VjaGVuZCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MgfHwgIXRoaXMuaXNUb3VjaHN0YXJ0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUb3VjaHN0YXJ0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNNb3ZlSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RTbGlkZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2xpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ld0NvbnRhaW5lclBvc2l0aW9uSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmFsaWduQ29udGFpbmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IHRoaXMubW92ZVggPSB0aGlzLmRpc3RhbmNlQWJzID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuaXNUb3VjaHN0YXJ0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyogTW92ZSAqL1xyXG4gICAgbW92ZUNvbnRhaW5lcigpIHtcclxuICAgICAgICBsZXQgcG9zaXRpb25YID0gdGhpcy5nZXRNb3ZlUG9zaXRpb25YKCk7XHJcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvblgocG9zaXRpb25YLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb3ZlUG9zaXRpb25YKCkge1xyXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluaXRpYWxQb3NpdGlvblggLSBkaXN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBBbGlnbiAqL1xyXG4gICAgYWxpZ25Db250YWluZXIoZHVyYXRpb246IG51bWJlciA9IHRoaXMudHJhbnNpdGlvbkR1cmF0aW9uKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uWCA9IHRoaXMuZ2V0Q29udGFpbmVyUG9zaXRpb24oKTtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uWChwb3NpdGlvblgsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb250YWluZXJQb3NpdGlvbihwb3NpdGlvblgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRhaW5lclBvc2l0aW9uKCkge1xyXG4gICAgICAgIGxldCBjb3JyZWN0aW9uID0gdGhpcy5nZXRDb250YWluZXJQb3NpdGlvbkNvcnJlY3Rpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0NvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbiA9IGNvcnJlY3Rpb24gIT0gMDtcclxuICAgICAgICByZXR1cm4gKHRoaXMuaW5pdGlhbENvbnRhaW5lclBvc2l0aW9uICsgdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4ICogdGhpcy5mdWxsQ2VsbFdpZHRoKSArIGNvcnJlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbENvbnRhaW5lclBvc2l0aW9uKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNvcnJlY3Rpb24gPSB0aGlzLmdldENvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbigpO1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbENvbnRhaW5lclBvc2l0aW9uID0gcG9zaXRpb24gLSBjb3JyZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRhaW5lclBvc2l0aW9uQ29ycmVjdGlvbigpIHtcclxuICAgICAgICBsZXQgY29ycmVjdGlvbiA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubG9vcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5jZWxsTGVuZ3RoIC0gdGhpcy5wcmVsaW1pbmFyeVNsaWRlQ291bnRlcikgPCB0aGlzLnZpc2libGVDZWxsc0NvdW50IHx8IHRoaXMuaXNTbGlkZUxlbmd0aExpbWl0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVdpZHRoIDwgdGhpcy50b3RhbENvbnRhaW5lckNlbGxzQ291bnQgKiB0aGlzLmZ1bGxDZWxsV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIGNvcnJlY3Rpb24gPSAtICh0aGlzLnZpc2libGVDZWxsc0NvdW50ICogdGhpcy5mdWxsQ2VsbFdpZHRoIC0gdGhpcy52aXNpYmxlV2lkdGggLSB0aGlzLm1hcmdpbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb3JyZWN0aW9uID49IC0gdGhpcy5tYXJnaW4pIHtcclxuICAgICAgICAgICAgICAgIGNvcnJlY3Rpb24gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY29ycmVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiBRdWlja2x5IGNlbnRlciAqL1xyXG4gICAgcXVpY2tseVBvc2l0aW9uQ29udGFpbmVyKCkge1xyXG4gICAgICAgIGxldCBjb3JyZWN0aW9uID0gdGhpcy5nZXRDb250YWluZXJQb3NpdGlvbkNvcnJlY3Rpb24oKTtcclxuICAgICAgICBjb25zdCBpbml0aWFsUG9zaXRpb24gPSB0aGlzLmdldE5ld0NvbnRhaW5lclBvc2l0aW9uKCkgKyBjb3JyZWN0aW9uO1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb25YKGluaXRpYWxQb3NpdGlvbiwgMCk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29udGFpbmVyUG9zaXRpb24oaW5pdGlhbFBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXROZXdDb250YWluZXJQb3NpdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZUNvdW50ZXIgPiB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hbGlnbkNlbGxzID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVXBDZWxscygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0odGhpcy5vdmVyZmxvd0NlbGxzTGltaXQgKiB0aGlzLmZ1bGxDZWxsV2lkdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zbGlkZUNvdW50ZXIgPD0gdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlvdXNTbGlkZUNvdW50ZXIgPiB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVXBDZWxscygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAtKHRoaXMuc2xpZGVDb3VudGVyICogdGhpcy5mdWxsQ2VsbFdpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q29udGFpbmVyV2lkdGgoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmdldENvbnRhaW5lcldpZHRoKCk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gY29udGFpbmVyV2lkdGggKyBcInB4XCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGFpbmVyV2lkdGgoKSB7XHJcbiAgICAgICAgbGV0IGNvbnRhaW5lcldpZHRoID0gdGhpcy50b3RhbENvbnRhaW5lckNlbGxzQ291bnQgKiB0aGlzLmZ1bGxDZWxsV2lkdGg7XHJcbiAgICAgICAgbGV0IHRvdGFsSW1hZ2VXaWR0aCA9IHRoaXMuY2VsbExlbmd0aCAqIHRoaXMuZnVsbENlbGxXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKHRvdGFsSW1hZ2VXaWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoID0gdG90YWxJbWFnZVdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGUoY2VsbEluZGV4KSB7XHJcbiAgICAgICAgbGV0IGltYWdlSW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChjZWxsSW5kZXgpOyBcclxuICAgICAgICBsZXQgZmlsZSA9IHRoaXMuaW1hZ2VzW2ltYWdlSW5kZXhdO1xyXG5cclxuICAgICAgICBpZiAoZmlsZSAmJiAhZmlsZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGZpbGUudHlwZSA9ICdpbWFnZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbWFnZTogdGhpcy5pbWFnZXNbaW1hZ2VJbmRleF0sXHJcbiAgICAgICAgICAgIGltYWdlSW5kZXhcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVJbmRleChjZWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoY2VsbEluZGV4KTtcclxuICAgICAgICBjb25zdCBudW1iZXJMZWZ0Q2VsbHMgPSAodGhpcy50b3RhbENvbnRhaW5lckNlbGxzQ291bnQgLSAxKSAvIDI7XHJcbiAgICAgICAgbGV0IGltYWdlSW5kZXg7XHJcbiAgICAgICAgbGV0IGNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlcjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbmVyTG9ja2VkKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3VudGVyIDw9IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2VsbEluZGV4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNlbGxMaW1pdE92ZXJmbG93ID0gY291bnRlciAtIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0O1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VJbmRleCA9IHBvc2l0aW9uSW5kZXggKyBjZWxsTGltaXRPdmVyZmxvdztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZXMgJiYgdGhpcy5wcm9wZXJ0aWVzLmxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZUluZGV4ID0gaW1hZ2VJbmRleCAlIHRoaXMuaW1hZ2VzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWxpZ25DZWxscyA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPiB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNlbGxMaW1pdE92ZXJmbG93ID0gY291bnRlciAtIHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0O1xyXG4gICAgICAgICAgICAgICAgaW1hZ2VJbmRleCA9IHBvc2l0aW9uSW5kZXggKyBjZWxsTGltaXRPdmVyZmxvdztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGltYWdlSW5kZXggPSBjZWxsSW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbWFnZUluZGV4ID4gdGhpcy5sYXN0Q2VsbEluZGV4ICYmICF0aGlzLnByb3BlcnRpZXMubG9vcCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaW1hZ2VJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2Zvcm1Qb3NpdGlvblgodmFsdWUsIGR1cmF0aW9uID0gdGhpcy50cmFuc2l0aW9uRHVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gJyArIGR1cmF0aW9uICsgJ21zICcgKyB0aGlzLnRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoJyArIHZhbHVlICsgJ3B4KSc7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0U2xpZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VBYnMgPj0gdGhpcy5taW5Td2lwZURpc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5leHQobGVuZ3RoOiBudW1iZXIgPSAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAnbGVmdCc7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVTbGlkZShsZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXYobGVuZ3RoOiBudW1iZXIgPSAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAncmlnaHQnO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlU2xpZGUobGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3QoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuc2xpZGVDb3VudGVyID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5xdWlja2x5UG9zaXRpb25Db250YWluZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTbGlkZShzbGlkZUxlbmd0aDogbnVtYmVyID0gdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zbGlkZUxlbmd0aCA9IHRoaXMuZ2V0U2xpZGVMZW5ndGgoKTtcclxuICAgICAgICB0aGlzLnNsaWRlTGVuZ3RoID0gc2xpZGVMZW5ndGggPyBzbGlkZUxlbmd0aCA6IHRoaXMubGltaXRTbGlkZUxlbmd0aCh0aGlzLnNsaWRlTGVuZ3RoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnbGVmdCcgJiYgIXRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVsaW1pbmFyeVNsaWRlQ291bnRlciA9IHRoaXMuc2xpZGVDb3VudGVyICsgdGhpcy5zbGlkZUxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXRlY3RMYXN0U2xpZGUodGhpcy5zbGlkZUNvdW50ZXIgKyB0aGlzLnNsaWRlTGVuZ3RoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4ID0gdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4IC0gdGhpcy5zbGlkZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFpbmVyTG9ja2VkID0gdGhpcy5wcmVsaW1pbmFyeVNsaWRlQ291bnRlciA+IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRlY3RDb250YWluZXJVbmxvY2soKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGFpbmVyTG9ja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdyaWdodCcgJiYgIXRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVDb3VudGVyIC0gdGhpcy5zbGlkZUxlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVMZW5ndGggPSB0aGlzLnNsaWRlQ291bnRlcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5wcmVsaW1pbmFyeVNsaWRlQ291bnRlciA9IHRoaXMuc2xpZGVDb3VudGVyIC0gdGhpcy5zbGlkZUxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpcnN0Q2VsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4ID0gdGhpcy5uZXdDb250YWluZXJQb3NpdGlvbkluZGV4ICsgdGhpcy5zbGlkZUxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmVsaW1pbmFyeVNsaWRlQ291bnRlciA+IHRoaXMub3ZlcmZsb3dDZWxsc0xpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250YWluZXJMb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250YWluZXJMb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldGVjdENvbnRhaW5lclVubG9jaygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250YWluZXJMb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWxpZ25Db250YWluZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTbGlkZUxlbmd0aCgpIHtcclxuICAgICAgICBsZXQgY29ycmVjdGlvbiA9IHRoaXMuZ2V0Q29udGFpbmVyUG9zaXRpb25Db3JyZWN0aW9uKCk7XHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IE1hdGguZmxvb3IoKHRoaXMuZGlzdGFuY2VBYnMgKyBjb3JyZWN0aW9uKSAvIHRoaXMuZnVsbENlbGxXaWR0aCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlQWJzICUgdGhpcy5mdWxsQ2VsbFdpZHRoID49IHRoaXMubWluU3dpcGVEaXN0YW5jZSkge1xyXG4gICAgICAgICAgICBsZW5ndGgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBsaW1pdFNsaWRlTGVuZ3RoKHNsaWRlTGVuZ3RoOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoc2xpZGVMZW5ndGggPiAxKSB7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlTGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBuZXdTbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciArIChzbGlkZUxlbmd0aCAtIGkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXRlY3RMYXN0U2xpZGUobmV3U2xpZGVDb3VudGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlTGVuZ3RoID0gc2xpZGVMZW5ndGggLSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTbGlkZUxlbmd0aExpbWl0ZWQgPSBpID4gMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2xpZGVMZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0TGFzdFNsaWRlKHNsaWRlQ291bnRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5sb29wKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuY2VsbExlbmd0aCAtIHNsaWRlQ291bnRlcikgPCB0aGlzLnZpc2libGVDZWxsc0NvdW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05leHRBcnJvd0Rpc2FibGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnZpc2libGVDZWxsc092ZXJmbG93Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGVjdExhc3RTbGlkZSh0aGlzLnNsaWRlQ291bnRlciArIDEpICYmIHRoaXMuaXNDb250YWluZXJQb3NpdGlvbkNvcnJlY3Rpb247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0ZWN0TGFzdFNsaWRlKHRoaXMuc2xpZGVDb3VudGVyICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzUHJldkFycm93RGlzYWJsZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2xpZGVDb3VudGVyID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdENvbnRhaW5lclVubG9jaygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuY2VsbExlbmd0aCAtIHRoaXMucHJlbGltaW5hcnlTbGlkZUNvdW50ZXIpIDwgKHRoaXMudmlzaWJsZUNlbGxzQ291bnQgKyB0aGlzLm92ZXJmbG93Q2VsbHNMaW1pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2xpZGVFbmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTbGlkZUluUHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TbGlkZUVuZCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1NsaWRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0NvbnRhaW5lclBvc2l0aW9uSW5kZXggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmlzU2xpZGVMZW5ndGhMaW1pdGVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2Zvcm1TbGlkZUVuZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0xhenlMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVDb3VudGVyKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmltYWdlcyB8fCAhdGhpcy5pbWFnZXMgJiYgdGhpcy5wcm9wZXJ0aWVzLmxvb3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVpY2tseVBvc2l0aW9uQ29udGFpbmVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJldmlvdXNTbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlcjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTbGlkZUNvdW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5zbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciArIHRoaXMuc2xpZGVMZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcclxuICAgICAgICAgICAgdGhpcy5zbGlkZUNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlciAtIHRoaXMuc2xpZGVMZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNsaWRlTGVuZ3RoID0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbGVtZW50UG9zaXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDYXJvdXNlbEVsZW1lbnRQb3NpdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXN0YW5jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFggLSB0aGlzLm1vdmVYO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3RhbmNlQWJzKCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLnN0YXJ0WCAtIHRoaXMubW92ZVgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpcmVjdGlvbigpIHtcclxuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBNYXRoLnNpZ24odGhpcy5zdGFydFggLSB0aGlzLm1vdmVYKTtcclxuXHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdyaWdodCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdsZWZ0JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVVwQ2VsbHMoKSB7XHJcbiAgICAgICAgY29uc3QgY2VsbHMgPSB0aGlzLmVsZW1lbnQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNlbGwgPSBjZWxsc1tpXTtcclxuICAgICAgICAgICAgbGV0IHBvc2l0aW9uWCA9IHRoaXMuZ2V0Q2VsbFBvc2l0aW9uWChpKTtcclxuICAgICAgICAgICAgKGNlbGwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKCcgKyBwb3NpdGlvblggKyAncHgpJztcclxuXHJcbiAgICAgICAgICAgIC8vIG5vdGljZVxyXG4gICAgICAgICAgICAoY2VsbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUud2lkdGggPSB0aGlzLnByb3BlcnRpZXMuY2VsbFdpZHRoKydweCc7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDZWxsUG9zaXRpb25YKGluZGV4KSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uSW5kZXggPSB0aGlzLmdldFBvc2l0aW9uSW5kZXgoaW5kZXgpO1xyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbkluZGV4ICogdGhpcy5mdWxsQ2VsbFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBvc2l0aW9uSW5kZXgoY2VsbEluZGV4KSB7XHJcbiAgICAgICAgbGV0IGNvdW50ZXIgPSB0aGlzLnNsaWRlQ291bnRlcjtcclxuICAgICAgICBsZXQgY2VsbExlbmd0aCA9IHRoaXMudG90YWxDb250YWluZXJDZWxsc0NvdW50O1xyXG4gICAgICAgIGxldCBzbGlkZUNvdW50ZXIgPSBjb3VudGVyIC0gdGhpcy5vdmVyZmxvd0NlbGxzTGltaXQ7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uSW5kZXg7XHJcblxyXG4gICAgICAgIGlmIChzbGlkZUNvdW50ZXIgPiBjZWxsTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHNsaWRlQ291bnRlciA9IHNsaWRlQ291bnRlciAlIGNlbGxMZW5ndGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2xpZGVDb3VudGVyIDwgMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY2VsbEluZGV4O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uSW5kZXggPSBjZWxsSW5kZXggLSBzbGlkZUNvdW50ZXI7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbkluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleCA9IGNlbGxMZW5ndGggKyBwb3NpdGlvbkluZGV4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcG9zaXRpb25JbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDZW50ZXJQb3NpdGlvbkluZGV4KCkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy50b3RhbENvbnRhaW5lckNlbGxzQ291bnQgLSAxKSAvIDI7XHJcbiAgICB9XHJcblxyXG4gICAgYXV0b3BsYXkoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvcGxheUlkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5leHQoKTsgXHJcbiAgICAgICAgfSwgdGhpcy5wcm9wZXJ0aWVzLmF1dG9wbGF5SW50ZXJ2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BBdXRvcGxheSgpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvcGxheUlkKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvcGxheUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLnN0b3BBdXRvcGxheSgpO1xyXG4gICAgfVxyXG59Il19

@@ -13,3 +13,3 @@ export class Touches {

this.isMousedown = false;
this.touchListeners = {
this._touchListeners = {
"touchstart": "handleTouchstart",

@@ -19,3 +19,3 @@ "touchmove": "handleTouchmove",

};
this.mouseListeners = {
this._mouseListeners = {
"mousedown": "handleMousedown",

@@ -26,3 +26,3 @@ "mousemove": "handleMousemove",

};
this.otherListeners = {
this._otherListeners = {
"resize": "handleResize"

@@ -145,2 +145,11 @@ };

}
get touchListeners() {
return this.properties.touchListeners ? this.properties.touchListeners : this._touchListeners;
}
get mouseListeners() {
return this.properties.mouseListeners ? this.properties.mouseListeners : this._mouseListeners;
}
get otherListeners() {
return this.properties.otherListeners ? this.properties.otherListeners : this._otherListeners;
}
destroy() {

@@ -191,2 +200,8 @@ this.toggleEventListeners('removeEventListener');

}
addEventListeners(listener, handler) {
window.addEventListener(listener, this[handler], false);
}
removeEventListeners(listener, handler) {
window.removeEventListener(listener, this[handler], false);
}
handleLinearSwipe(event) {

@@ -329,2 +344,2 @@ //event.preventDefault();

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2hlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItcmVzcG9uc2l2ZS1jYXJvdXNlbC9zcmMvbGliL3RvdWNoZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsTUFBTSxPQUFPLE9BQU87SUErQmhCLFlBQVksVUFBc0I7UUEzQmxDLGNBQVMsR0FBYyxTQUFTLENBQUM7UUFDakMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFFWix3QkFBbUIsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxHQUFHLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBQyxHQUFXLENBQUMsQ0FBQztRQUNkLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLG1CQUFjLEdBQVE7WUFDbEIsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFVBQVUsRUFBRSxnQkFBZ0I7U0FDL0IsQ0FBQTtRQUNELG1CQUFjLEdBQVE7WUFDbEIsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLE9BQU8sRUFBRSxhQUFhO1NBQ3pCLENBQUE7UUFDRCxtQkFBYyxHQUFRO1lBQ2xCLFFBQVEsRUFBRSxjQUFjO1NBQzNCLENBQUE7UUEwREQ7O1dBRUc7UUFFSCxnQkFBZ0I7UUFFaEIscUJBQWdCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUzQyxJQUFJ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QU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7U0FDNUQ7YUFBTTtZQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsSUFBSSxFQUFFLEdBQUcsVUFBUyxLQUFVO1lBQ3hCLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDNUMsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQscUZBQXFGO1FBQ3JGLHVCQUF1QjtRQUN2QixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RSxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBR0QsbUNBQW1DO0lBQ25DLEVBQUUsQ0FBQyxLQUFnQixFQUFFLE9BQWlCO1FBQ2xDLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDbEM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFByb3BlcnRpZXMge1xyXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICBsaXN0ZW5lcnM/OiAnYXV0bycgfCAnbW91c2UgYW5kIHRvdWNoJztcclxuICAgIHJlc2l6ZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEV2ZW50VHlwZSA9IHVuZGVmaW5lZCB8ICd0b3VjaGVuZCcgfCAncGFuJyB8ICdwaW5jaCcgfCAnaG9yaXpvbnRhbC1zd2lwZScgfCAndmVydGljYWwtc3dpcGUnIHwgJ3RhcCcgfCAnbG9uZ3RhcCc7XHJcbmV4cG9ydCB0eXBlIFRvdWNoSGFuZGxlciA9ICdoYW5kbGVUb3VjaHN0YXJ0JyB8ICdoYW5kbGVUb3VjaG1vdmUnIHwgJ2hhbmRsZVRvdWNoZW5kJztcclxuZXhwb3J0IHR5cGUgTW91c2VIYW5kbGVyID0gJ2hhbmRsZU1vdXNlZG93bicgfCAnaGFuZGxlTW91c2Vtb3ZlJyB8ICdoYW5kbGVNb3VzZXVwJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb3VjaGVzIHtcclxuICAgIHByb3BlcnRpZXM6IFByb3BlcnRpZXM7XHJcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIGVsZW1lbnRQb3NpdGlvbjogQ2xpZW50UmVjdDtcclxuICAgIGV2ZW50VHlwZTogRXZlbnRUeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgaGFuZGxlcnM6IGFueSA9IHt9O1xyXG4gICAgc3RhcnRYID0gMDtcclxuICAgIHN0YXJ0WSA9IDA7XHJcbiAgICBsYXN0VGFwID0gMDtcclxuICAgIGRvdWJsZVRhcFRpbWVvdXQ6IGFueTtcclxuICAgIGRvdWJsZVRhcE1pblRpbWVvdXQgPSAzMDA7XHJcbiAgICB0YXBNaW5UaW1lb3V0ID0gMjAwO1xyXG4gICAgdG91Y2hzdGFydFRpbWUgPSAwO1xyXG4gICAgaTogbnVtYmVyID0gMDtcclxuICAgIGlzTW91c2Vkb3duID0gZmFsc2U7XHJcblxyXG4gICAgdG91Y2hMaXN0ZW5lcnM6IGFueSA9IHtcclxuICAgICAgICBcInRvdWNoc3RhcnRcIjogXCJoYW5kbGVUb3VjaHN0YXJ0XCIsXHJcbiAgICAgICAgXCJ0b3VjaG1vdmVcIjogXCJoYW5kbGVUb3VjaG1vdmVcIixcclxuICAgICAgICBcInRvdWNoZW5kXCI6IFwiaGFuZGxlVG91Y2hlbmRcIlxyXG4gICAgfVxyXG4gICAgbW91c2VMaXN0ZW5lcnM6IGFueSA9IHtcclxuICAgICAgICBcIm1vdXNlZG93blwiOiBcImhhbmRsZU1vdXNlZG93blwiLFxyXG4gICAgICAgIFwibW91c2Vtb3ZlXCI6IFwiaGFuZGxlTW91c2Vtb3ZlXCIsXHJcbiAgICAgICAgXCJtb3VzZXVwXCI6IFwiaGFuZGxlTW91c2V1cFwiLFxyXG4gICAgICAgIFwid2hlZWxcIjogXCJoYW5kbGVXaGVlbFwiXHJcbiAgICB9XHJcbiAgICBvdGhlckxpc3RlbmVyczogYW55ID0ge1xyXG4gICAgICAgIFwicmVzaXplXCI6IFwiaGFuZGxlUmVzaXplXCJcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcclxuICAgICAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLnByb3BlcnRpZXMuZWxlbWVudDtcclxuICAgICAgICB0aGlzLmVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlRXZlbnRMaXN0ZW5lcnMoJ2FkZEV2ZW50TGlzdGVuZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlRXZlbnRMaXN0ZW5lcnMoJ3JlbW92ZUV2ZW50TGlzdGVuZXInKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVFdmVudExpc3RlbmVycyhhY3Rpb246ICdhZGRFdmVudExpc3RlbmVyJyB8ICdyZW1vdmVFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgIGxldCBsaXN0ZW5lcnM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXMubGlzdGVuZXJzID09PSAnbW91c2UgYW5kIHRvdWNoJykge1xyXG4gICAgICAgICAgICBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKHRoaXMudG91Y2hMaXN0ZW5lcnMsIHRoaXMubW91c2VMaXN0ZW5lcnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVycyA9IHRoaXMuZGV0ZWN0VG91Y2hTY3JlZW4oKSA/IHRoaXMudG91Y2hMaXN0ZW5lcnMgOiB0aGlzLm1vdXNlTGlzdGVuZXJzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5yZXNpemUpIHtcclxuICAgICAgICAgICAgbGlzdGVuZXJzID0gT2JqZWN0LmFzc2lnbihsaXN0ZW5lcnMsIHRoaXMub3RoZXJMaXN0ZW5lcnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgbGlzdGVuZXIgaW4gbGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXI6IE1vdXNlSGFuZGxlciA9IGxpc3RlbmVyc1tsaXN0ZW5lcl07XHJcblxyXG4gICAgICAgICAgICAvLyBXaW5kb3dcclxuICAgICAgICAgICAgaWYgKGxpc3RlbmVyID09PSBcInJlc2l6ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnYWRkRXZlbnRMaXN0ZW5lcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgdGhpc1toYW5kbGVyXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3JlbW92ZUV2ZW50TGlzdGVuZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHRoaXNbaGFuZGxlcl0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRG9jdW1lbnRcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciA9PT0gJ21vdXNldXAnIHx8IGxpc3RlbmVyID09PSBcIm1vdXNlbW92ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnYWRkRXZlbnRMaXN0ZW5lcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzW2hhbmRsZXJdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAncmVtb3ZlRXZlbnRMaXN0ZW5lcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzW2hhbmRsZXJdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEVsZW1lbnRcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhZGRFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzW2hhbmRsZXJdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAncmVtb3ZlRXZlbnRMaXN0ZW5lcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgdGhpc1toYW5kbGVyXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBMaXN0ZW5lcnNcclxuICAgICAqL1xyXG5cclxuICAgIC8qIFRvdWNoc3RhcnQgKi9cclxuXHJcbiAgICBoYW5kbGVUb3VjaHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50b3VjaHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ldmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRvdWNoc3RhcnRQb3NpdGlvbihldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJ0b3VjaHN0YXJ0XCIsIGV2ZW50KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogVG91Y2htb3ZlICovXHJcblxyXG4gICAgaGFuZGxlVG91Y2htb3ZlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuXHJcbiAgICAgICAgLy8gUGFuXHJcbiAgICAgICAgaWYgKHRoaXMuZGV0ZWN0UGFuKHRvdWNoZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcInBhblwiLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQaW5jaFxyXG4gICAgICAgIGlmICh0aGlzLmRldGVjdFBpbmNoKGV2ZW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJwaW5jaFwiLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGV0ZWN0TGluZWFyU3dpcGUoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJob3Jpem9udGFsLXN3aXBlXCI6XHJcbiAgICAgICAgICAgICAgICBldmVudC5zd2lwZVR5cGUgPSBcImhvcml6b250YWwtc3dpcGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImhvcml6b250YWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbC1zd2lwZVwiOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3dpcGVUeXBlID0gXCJ2ZXJ0aWNhbC1zd2lwZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidmVydGljYWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RMaW5lYXJTd2lwZShldmVudCkgfHxcclxuICAgICAgICAgICAgdGhpcy5ldmVudFR5cGUgPT09ICdob3Jpem9udGFsLXN3aXBlJyB8fFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVMaW5lYXJTd2lwZShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUxpbmVhclN3aXBlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaSsrO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pID4gMykge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9IHRoaXMuZ2V0TGluZWFyU3dpcGVUeXBlKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcignaG9yaXpvbnRhbC1zd2lwZScsIGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoJ3ZlcnRpY2FsLXN3aXBlJywgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogVG91Y2hlbmQgKi9cclxuXHJcbiAgICBoYW5kbGVUb3VjaGVuZCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XHJcblxyXG4gICAgICAgIC8vIERvdWJsZSBUYXBcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3REb3VibGVUYXAoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJkb3VibGUtdGFwXCIsIGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRhcFxyXG4gICAgICAgIHRoaXMuZGV0ZWN0VGFwKCk7XHJcblxyXG4gICAgICAgIHRoaXMucnVuSGFuZGxlcihcInRvdWNoZW5kXCIsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLmV2ZW50VHlwZSA9ICd0b3VjaGVuZCc7XHJcblxyXG4gICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogTW91c2Vkb3duICovXHJcblxyXG4gICAgaGFuZGxlTW91c2Vkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzTW91c2Vkb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50b3VjaHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ldmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldE1vdXNlZG93blBvc2l0aW9uKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnVuSGFuZGxlcihcIm1vdXNlZG93blwiLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qIE1vdXNlbW92ZSAqL1xyXG5cclxuICAgIGhhbmRsZU1vdXNlbW92ZSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5pc01vdXNlZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQYW5cclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJwYW5cIiwgZXZlbnQpO1xyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGV0ZWN0TGluZWFyU3dpcGUoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJob3Jpem9udGFsLXN3aXBlXCI6XHJcbiAgICAgICAgICAgICAgICBldmVudC5zd2lwZVR5cGUgPSBcImhvcml6b250YWwtc3dpcGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImhvcml6b250YWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbC1zd2lwZVwiOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3dpcGVUeXBlID0gXCJ2ZXJ0aWNhbC1zd2lwZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidmVydGljYWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RMaW5lYXJTd2lwZShldmVudCkgfHxcclxuICAgICAgICAgICAgdGhpcy5ldmVudFR5cGUgPT09ICdob3Jpem9udGFsLXN3aXBlJyB8fFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVMaW5lYXJTd2lwZShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiBNb3VzZXVwICovXHJcblxyXG4gICAgaGFuZGxlTW91c2V1cCA9IChldmVudDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRhcFxyXG4gICAgICAgIHRoaXMuZGV0ZWN0VGFwKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNNb3VzZWRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJtb3VzZXVwXCIsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLmV2ZW50VHlwZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmkgPSAwO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiBXaGVlbCAqL1xyXG5cclxuICAgIGhhbmRsZVdoZWVsID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJ3aGVlbFwiLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogUmVzaXplICovXHJcblxyXG4gICAgaGFuZGxlUmVzaXplID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJyZXNpemVcIiwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1bkhhbmRsZXIoZXZlbnROYW1lOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5oYW5kbGVyc1tldmVudE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXShyZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogRGV0ZWN0aW9uXHJcbiAgICAgKi9cclxuXHJcbiAgICBkZXRlY3RQYW4odG91Y2hlczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRvdWNoZXMubGVuZ3RoID09PSAxICYmICF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ3Bhbic7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0RG91YmxlVGFwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0YXBMZW5ndGggPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRhcDtcclxuXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZG91YmxlVGFwVGltZW91dCk7XHJcblxyXG4gICAgICAgIGlmICh0YXBMZW5ndGggPCB0aGlzLmRvdWJsZVRhcE1pblRpbWVvdXQgJiYgdGFwTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZVRhcFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRvdWJsZVRhcFRpbWVvdXQpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLmRvdWJsZVRhcE1pblRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RUYXAgPSBjdXJyZW50VGltZTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RUYXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnN0IHRhcExlbmd0aCA9IGN1cnJlbnRUaW1lIC0gdGhpcy50b3VjaHN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRhcExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRhcExlbmd0aCA8IHRoaXMudGFwTWluVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidGFwXCIsIGV2ZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImxvbmd0YXBcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdFBpbmNoKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuICAgICAgICByZXR1cm4gKHRvdWNoZXMubGVuZ3RoID09PSAyICYmIHRoaXMuZXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHx8IHRoaXMuZXZlbnRUeXBlID09PSAncGluY2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdExpbmVhclN3aXBlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKHRvdWNoZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID09PSAxICYmICF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnIHx8IHRoaXMuZXZlbnRUeXBlID09PSAndmVydGljYWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lYXJTd2lwZVR5cGUoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnIHx8IHRoaXMuZXZlbnRUeXBlID09PSAndmVydGljYWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lYXJTd2lwZVR5cGUoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmVhclN3aXBlVHlwZShldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9PSAnaG9yaXpvbnRhbC1zd2lwZScgJiYgdGhpcy5ldmVudFR5cGUgIT09ICd2ZXJ0aWNhbC1zd2lwZScpIHtcclxuICAgICAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gTWF0aC5hYnModGhpcy5tb3ZlTGVmdCgwLCBldmVudCkgLSB0aGlzLnN0YXJ0WCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IE1hdGguYWJzKHRoaXMubW92ZVRvcCgwLCBldmVudCkgLSB0aGlzLnN0YXJ0WSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoKG1vdmVtZW50WSAqIDMpID4gbW92ZW1lbnRYKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZlcnRpY2FsLXN3aXBlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnaG9yaXpvbnRhbC1zd2lwZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEVsZW1lbnRQb3NpdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRvdWNoc3RhcnRQb3NpdGlvbihldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5lbGVtZW50UG9zaXRpb24udG9wO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vdXNlZG93blBvc2l0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlTGVmdChpbmRleDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XHJcblxyXG4gICAgICAgIGlmICh0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3VjaGVzW2luZGV4XS5jbGllbnRYIC0gdGhpcy5lbGVtZW50UG9zaXRpb24ubGVmdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLmxlZnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1vdmVUb3AoaW5kZXg6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAodG91Y2hlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdG91Y2hlc1tpbmRleF0uY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0VG91Y2hTY3JlZW4oKSB7XHJcbiAgICAgICAgdmFyIHByZWZpeGVzID0gJyAtd2Via2l0LSAtbW96LSAtby0gLW1zLSAnLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIG1xID0gZnVuY3Rpb24ocXVlcnk6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpbmNsdWRlIHRoZSAnaGVhcnR6JyBhcyBhIHdheSB0byBoYXZlIGEgbm9uIG1hdGNoaW5nIE1RIHRvIGhlbHAgdGVybWluYXRlIHRoZSBqb2luXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXQuaW8vdnpuRkhcclxuICAgICAgICB2YXIgcXVlcnkgPSBbJygnLCBwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksICdoZWFydHonLCAnKSddLmpvaW4oJycpO1xyXG4gICAgICAgIHJldHVybiBtcShxdWVyeSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qIFB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzICovXHJcbiAgICBvbihldmVudDogRXZlbnRUeXBlLCBoYW5kbGVyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG91Y2hlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItcmVzcG9uc2l2ZS1jYXJvdXNlbC9zcmMvbGliL3RvdWNoZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxPQUFPLE9BQU87SUEyQ2hCLFlBQVksVUFBc0I7UUF2Q2xDLGNBQVMsR0FBYyxTQUFTLENBQUM7UUFDakMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFFWix3QkFBbUIsR0FBRyxHQUFHLENBQUM7UUFDMUIsa0JBQWEsR0FBRyxHQUFHLENBQUM7UUFDcEIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsTUFBQyxHQUFXLENBQUMsQ0FBQztRQUNkLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLG9CQUFlLEdBQVE7WUFDbkIsWUFBWSxFQUFFLGtCQUFrQjtZQUNoQyxXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFVBQVUsRUFBRSxnQkFBZ0I7U0FDL0IsQ0FBQTtRQUNELG9CQUFlLEdBQVE7WUFDbkIsV0FBVyxFQUFFLGlCQUFpQjtZQUM5QixXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLFNBQVMsRUFBRSxlQUFlO1lBQzFCLE9BQU8sRUFBRSxhQUFhO1NBQ3pCLENBQUE7UUFDRCxvQkFBZSxHQUFRO1lBQ25CLFFBQVEsRUFBRSxjQUFjO1NBQzNCLENBQUE7UUE4RUQ7O1dBRUc7UUFFSCxnQkFBZ0I7UUFFaEIscUJBQWdCLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUUzQyxJQUFJ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QVU7WUFDeEIsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM1QyxDQUFDLENBQUE7UUFFRCxJQUFJLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxxRkFBcUY7UUFDckYsdUJBQXVCO1FBQ3ZCLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFHRCxtQ0FBbUM7SUFDbkMsRUFBRSxDQUFDLEtBQWdCLEVBQUUsT0FBaUI7UUFDbEMsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUNsQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydGllcyB7XHJcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICAgIGxpc3RlbmVycz86ICdhdXRvJyB8ICdtb3VzZSBhbmQgdG91Y2gnO1xyXG4gICAgdG91Y2hMaXN0ZW5lcnM/OiBhbnk7XHJcbiAgICBtb3VzZUxpc3RlbmVycz86IGFueTtcclxuICAgIG90aGVyTGlzdGVuZXJzPzogYW55O1xyXG4gICAgcmVzaXplPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0gdW5kZWZpbmVkIHwgJ3RvdWNoZW5kJyB8ICdwYW4nIHwgJ3BpbmNoJyB8ICdob3Jpem9udGFsLXN3aXBlJyB8ICd2ZXJ0aWNhbC1zd2lwZScgfCAndGFwJyB8ICdsb25ndGFwJztcclxuZXhwb3J0IHR5cGUgVG91Y2hIYW5kbGVyID0gJ2hhbmRsZVRvdWNoc3RhcnQnIHwgJ2hhbmRsZVRvdWNobW92ZScgfCAnaGFuZGxlVG91Y2hlbmQnO1xyXG5leHBvcnQgdHlwZSBNb3VzZUhhbmRsZXIgPSAnaGFuZGxlTW91c2Vkb3duJyB8ICdoYW5kbGVNb3VzZW1vdmUnIHwgJ2hhbmRsZU1vdXNldXAnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRvdWNoZXMge1xyXG4gICAgcHJvcGVydGllczogUHJvcGVydGllcztcclxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgZWxlbWVudFBvc2l0aW9uOiBDbGllbnRSZWN0O1xyXG4gICAgZXZlbnRUeXBlOiBFdmVudFR5cGUgPSB1bmRlZmluZWQ7XHJcbiAgICBoYW5kbGVyczogYW55ID0ge307XHJcbiAgICBzdGFydFggPSAwO1xyXG4gICAgc3RhcnRZID0gMDtcclxuICAgIGxhc3RUYXAgPSAwO1xyXG4gICAgZG91YmxlVGFwVGltZW91dDogYW55O1xyXG4gICAgZG91YmxlVGFwTWluVGltZW91dCA9IDMwMDtcclxuICAgIHRhcE1pblRpbWVvdXQgPSAyMDA7XHJcbiAgICB0b3VjaHN0YXJ0VGltZSA9IDA7XHJcbiAgICBpOiBudW1iZXIgPSAwO1xyXG4gICAgaXNNb3VzZWRvd24gPSBmYWxzZTtcclxuXHJcbiAgICBfdG91Y2hMaXN0ZW5lcnM6IGFueSA9IHtcclxuICAgICAgICBcInRvdWNoc3RhcnRcIjogXCJoYW5kbGVUb3VjaHN0YXJ0XCIsXHJcbiAgICAgICAgXCJ0b3VjaG1vdmVcIjogXCJoYW5kbGVUb3VjaG1vdmVcIixcclxuICAgICAgICBcInRvdWNoZW5kXCI6IFwiaGFuZGxlVG91Y2hlbmRcIlxyXG4gICAgfVxyXG4gICAgX21vdXNlTGlzdGVuZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgXCJtb3VzZWRvd25cIjogXCJoYW5kbGVNb3VzZWRvd25cIixcclxuICAgICAgICBcIm1vdXNlbW92ZVwiOiBcImhhbmRsZU1vdXNlbW92ZVwiLFxyXG4gICAgICAgIFwibW91c2V1cFwiOiBcImhhbmRsZU1vdXNldXBcIixcclxuICAgICAgICBcIndoZWVsXCI6IFwiaGFuZGxlV2hlZWxcIlxyXG4gICAgfVxyXG4gICAgX290aGVyTGlzdGVuZXJzOiBhbnkgPSB7XHJcbiAgICAgICAgXCJyZXNpemVcIjogXCJoYW5kbGVSZXNpemVcIlxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0b3VjaExpc3RlbmVycygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLnRvdWNoTGlzdGVuZXJzID8gdGhpcy5wcm9wZXJ0aWVzLnRvdWNoTGlzdGVuZXJzIDogdGhpcy5fdG91Y2hMaXN0ZW5lcnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vdXNlTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXMubW91c2VMaXN0ZW5lcnMgPyB0aGlzLnByb3BlcnRpZXMubW91c2VMaXN0ZW5lcnMgOiB0aGlzLl9tb3VzZUxpc3RlbmVycztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3RoZXJMaXN0ZW5lcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcy5vdGhlckxpc3RlbmVycyA/IHRoaXMucHJvcGVydGllcy5vdGhlckxpc3RlbmVycyA6IHRoaXMuX290aGVyTGlzdGVuZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXMpIHtcclxuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IHRoaXMucHJvcGVydGllcy5lbGVtZW50O1xyXG4gICAgICAgIHRoaXMuZWxlbWVudFBvc2l0aW9uID0gdGhpcy5nZXRFbGVtZW50UG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVFdmVudExpc3RlbmVycygnYWRkRXZlbnRMaXN0ZW5lcicpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVFdmVudExpc3RlbmVycygncmVtb3ZlRXZlbnRMaXN0ZW5lcicpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV2ZW50TGlzdGVuZXJzKGFjdGlvbjogJ2FkZEV2ZW50TGlzdGVuZXInIHwgJ3JlbW92ZUV2ZW50TGlzdGVuZXInKSB7XHJcbiAgICAgICAgbGV0IGxpc3RlbmVycztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcy5saXN0ZW5lcnMgPT09ICdtb3VzZSBhbmQgdG91Y2gnKSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVycyA9IE9iamVjdC5hc3NpZ24odGhpcy50b3VjaExpc3RlbmVycywgdGhpcy5tb3VzZUxpc3RlbmVycyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGlzdGVuZXJzID0gdGhpcy5kZXRlY3RUb3VjaFNjcmVlbigpID8gdGhpcy50b3VjaExpc3RlbmVycyA6IHRoaXMubW91c2VMaXN0ZW5lcnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzLnJlc2l6ZSkge1xyXG4gICAgICAgICAgICBsaXN0ZW5lcnMgPSBPYmplY3QuYXNzaWduKGxpc3RlbmVycywgdGhpcy5vdGhlckxpc3RlbmVycyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKHZhciBsaXN0ZW5lciBpbiBsaXN0ZW5lcnMpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlcjogTW91c2VIYW5kbGVyID0gbGlzdGVuZXJzW2xpc3RlbmVyXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFdpbmRvd1xyXG4gICAgICAgICAgICBpZiAobGlzdGVuZXIgPT09IFwicmVzaXplXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhZGRFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzW2hhbmRsZXJdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAncmVtb3ZlRXZlbnRMaXN0ZW5lcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgdGhpc1toYW5kbGVyXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBEb2N1bWVudFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3RlbmVyID09PSAnbW91c2V1cCcgfHwgbGlzdGVuZXIgPT09IFwibW91c2Vtb3ZlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhZGRFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHRoaXNbaGFuZGxlcl0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZW1vdmVFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHRoaXNbaGFuZGxlcl0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRWxlbWVudFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2FkZEV2ZW50TGlzdGVuZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHRoaXNbaGFuZGxlcl0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZW1vdmVFdmVudExpc3RlbmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzW2hhbmRsZXJdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkRXZlbnRMaXN0ZW5lcnMobGlzdGVuZXI6IHN0cmluZywgaGFuZGxlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIHRoaXNbaGFuZGxlcl0sIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVFdmVudExpc3RlbmVycyhsaXN0ZW5lcjogc3RyaW5nLCBoYW5kbGVyOiBzdHJpbmcpIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgdGhpc1toYW5kbGVyXSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBMaXN0ZW5lcnNcclxuICAgICAqL1xyXG5cclxuICAgIC8qIFRvdWNoc3RhcnQgKi9cclxuXHJcbiAgICBoYW5kbGVUb3VjaHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50b3VjaHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ldmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRvdWNoc3RhcnRQb3NpdGlvbihldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJ0b3VjaHN0YXJ0XCIsIGV2ZW50KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogVG91Y2htb3ZlICovXHJcblxyXG4gICAgaGFuZGxlVG91Y2htb3ZlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuXHJcbiAgICAgICAgLy8gUGFuXHJcbiAgICAgICAgaWYgKHRoaXMuZGV0ZWN0UGFuKHRvdWNoZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcInBhblwiLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQaW5jaFxyXG4gICAgICAgIGlmICh0aGlzLmRldGVjdFBpbmNoKGV2ZW50KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJwaW5jaFwiLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGV0ZWN0TGluZWFyU3dpcGUoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJob3Jpem9udGFsLXN3aXBlXCI6XHJcbiAgICAgICAgICAgICAgICBldmVudC5zd2lwZVR5cGUgPSBcImhvcml6b250YWwtc3dpcGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImhvcml6b250YWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbC1zd2lwZVwiOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3dpcGVUeXBlID0gXCJ2ZXJ0aWNhbC1zd2lwZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidmVydGljYWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RMaW5lYXJTd2lwZShldmVudCkgfHxcclxuICAgICAgICAgICAgdGhpcy5ldmVudFR5cGUgPT09ICdob3Jpem9udGFsLXN3aXBlJyB8fFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVMaW5lYXJTd2lwZShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUxpbmVhclN3aXBlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaSsrO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pID4gMykge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9IHRoaXMuZ2V0TGluZWFyU3dpcGVUeXBlKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcignaG9yaXpvbnRhbC1zd2lwZScsIGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoJ3ZlcnRpY2FsLXN3aXBlJywgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogVG91Y2hlbmQgKi9cclxuXHJcbiAgICBoYW5kbGVUb3VjaGVuZCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XHJcblxyXG4gICAgICAgIC8vIERvdWJsZSBUYXBcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3REb3VibGVUYXAoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJkb3VibGUtdGFwXCIsIGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRhcFxyXG4gICAgICAgIHRoaXMuZGV0ZWN0VGFwKCk7XHJcblxyXG4gICAgICAgIHRoaXMucnVuSGFuZGxlcihcInRvdWNoZW5kXCIsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLmV2ZW50VHlwZSA9ICd0b3VjaGVuZCc7XHJcblxyXG4gICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRUeXBlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLmkgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyogTW91c2Vkb3duICovXHJcblxyXG4gICAgaGFuZGxlTW91c2Vkb3duID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmlzTW91c2Vkb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuZ2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50b3VjaHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ldmVudFR5cGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldE1vdXNlZG93blBvc2l0aW9uKGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnVuSGFuZGxlcihcIm1vdXNlZG93blwiLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qIE1vdXNlbW92ZSAqL1xyXG5cclxuICAgIGhhbmRsZU1vdXNlbW92ZSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5pc01vdXNlZG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBQYW5cclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJwYW5cIiwgZXZlbnQpO1xyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuZGV0ZWN0TGluZWFyU3dpcGUoZXZlbnQpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJob3Jpem9udGFsLXN3aXBlXCI6XHJcbiAgICAgICAgICAgICAgICBldmVudC5zd2lwZVR5cGUgPSBcImhvcml6b250YWwtc3dpcGVcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImhvcml6b250YWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ2ZXJ0aWNhbC1zd2lwZVwiOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3dpcGVUeXBlID0gXCJ2ZXJ0aWNhbC1zd2lwZVwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidmVydGljYWwtc3dpcGVcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMaW5lYXIgc3dpcGVcclxuICAgICAgICBpZiAodGhpcy5kZXRlY3RMaW5lYXJTd2lwZShldmVudCkgfHxcclxuICAgICAgICAgICAgdGhpcy5ldmVudFR5cGUgPT09ICdob3Jpem9udGFsLXN3aXBlJyB8fFxyXG4gICAgICAgICAgICB0aGlzLmV2ZW50VHlwZSA9PT0gJ3ZlcnRpY2FsLXN3aXBlJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVMaW5lYXJTd2lwZShldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiBNb3VzZXVwICovXHJcblxyXG4gICAgaGFuZGxlTW91c2V1cCA9IChldmVudDogYW55KSA9PiB7XHJcblxyXG4gICAgICAgIC8vIFRhcFxyXG4gICAgICAgIHRoaXMuZGV0ZWN0VGFwKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNNb3VzZWRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJtb3VzZXVwXCIsIGV2ZW50KTtcclxuICAgICAgICB0aGlzLmV2ZW50VHlwZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmkgPSAwO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKiBXaGVlbCAqL1xyXG5cclxuICAgIGhhbmRsZVdoZWVsID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJ3aGVlbFwiLCBldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogUmVzaXplICovXHJcblxyXG4gICAgaGFuZGxlUmVzaXplID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJ1bkhhbmRsZXIoXCJyZXNpemVcIiwgZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1bkhhbmRsZXIoZXZlbnROYW1lOiBhbnksIHJlc3BvbnNlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5oYW5kbGVyc1tldmVudE5hbWVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcnNbZXZlbnROYW1lXShyZXNwb25zZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKlxyXG4gICAgICogRGV0ZWN0aW9uXHJcbiAgICAgKi9cclxuXHJcbiAgICBkZXRlY3RQYW4odG91Y2hlczogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRvdWNoZXMubGVuZ3RoID09PSAxICYmICF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ3Bhbic7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0RG91YmxlVGFwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmV2ZW50VHlwZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0YXBMZW5ndGggPSBjdXJyZW50VGltZSAtIHRoaXMubGFzdFRhcDtcclxuXHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZG91YmxlVGFwVGltZW91dCk7XHJcblxyXG4gICAgICAgIGlmICh0YXBMZW5ndGggPCB0aGlzLmRvdWJsZVRhcE1pblRpbWVvdXQgJiYgdGFwTGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvdWJsZVRhcFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRvdWJsZVRhcFRpbWVvdXQpO1xyXG4gICAgICAgICAgICB9LCB0aGlzLmRvdWJsZVRhcE1pblRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RUYXAgPSBjdXJyZW50VGltZTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RUYXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnN0IHRhcExlbmd0aCA9IGN1cnJlbnRUaW1lIC0gdGhpcy50b3VjaHN0YXJ0VGltZTtcclxuXHJcbiAgICAgICAgaWYgKHRhcExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRhcExlbmd0aCA8IHRoaXMudGFwTWluVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5IYW5kbGVyKFwidGFwXCIsIGV2ZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuSGFuZGxlcihcImxvbmd0YXBcIiwgZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdFBpbmNoKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuICAgICAgICByZXR1cm4gKHRvdWNoZXMubGVuZ3RoID09PSAyICYmIHRoaXMuZXZlbnRUeXBlID09PSB1bmRlZmluZWQpIHx8IHRoaXMuZXZlbnRUeXBlID09PSAncGluY2gnO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGVjdExpbmVhclN3aXBlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0b3VjaGVzID0gZXZlbnQudG91Y2hlcztcclxuXHJcbiAgICAgICAgaWYgKHRvdWNoZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID09PSAxICYmICF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnIHx8IHRoaXMuZXZlbnRUeXBlID09PSAndmVydGljYWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lYXJTd2lwZVR5cGUoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmV2ZW50VHlwZSB8fCB0aGlzLmV2ZW50VHlwZSA9PT0gJ2hvcml6b250YWwtc3dpcGUnIHx8IHRoaXMuZXZlbnRUeXBlID09PSAndmVydGljYWwtc3dpcGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lYXJTd2lwZVR5cGUoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmVhclN3aXBlVHlwZShldmVudDogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9PSAnaG9yaXpvbnRhbC1zd2lwZScgJiYgdGhpcy5ldmVudFR5cGUgIT09ICd2ZXJ0aWNhbC1zd2lwZScpIHtcclxuICAgICAgICAgICAgY29uc3QgbW92ZW1lbnRYID0gTWF0aC5hYnModGhpcy5tb3ZlTGVmdCgwLCBldmVudCkgLSB0aGlzLnN0YXJ0WCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmVtZW50WSA9IE1hdGguYWJzKHRoaXMubW92ZVRvcCgwLCBldmVudCkgLSB0aGlzLnN0YXJ0WSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoKG1vdmVtZW50WSAqIDMpID4gbW92ZW1lbnRYKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZlcnRpY2FsLXN3aXBlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnaG9yaXpvbnRhbC1zd2lwZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEVsZW1lbnRQb3NpdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRvdWNoc3RhcnRQb3NpdGlvbihldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZIC0gdGhpcy5lbGVtZW50UG9zaXRpb24udG9wO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vdXNlZG93blBvc2l0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLmVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xyXG4gICAgICAgIHRoaXMuc3RhcnRZID0gZXZlbnQuY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgIH1cclxuXHJcbiAgICBtb3ZlTGVmdChpbmRleDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IGV2ZW50LnRvdWNoZXM7XHJcblxyXG4gICAgICAgIGlmICh0b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b3VjaGVzW2luZGV4XS5jbGllbnRYIC0gdGhpcy5lbGVtZW50UG9zaXRpb24ubGVmdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xpZW50WCAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLmxlZnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG1vdmVUb3AoaW5kZXg6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHRvdWNoZXMgPSBldmVudC50b3VjaGVzO1xyXG5cclxuICAgICAgICBpZiAodG91Y2hlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdG91Y2hlc1tpbmRleF0uY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuY2xpZW50WSAtIHRoaXMuZWxlbWVudFBvc2l0aW9uLnRvcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0VG91Y2hTY3JlZW4oKSB7XHJcbiAgICAgICAgdmFyIHByZWZpeGVzID0gJyAtd2Via2l0LSAtbW96LSAtby0gLW1zLSAnLnNwbGl0KCcgJyk7XHJcbiAgICAgICAgdmFyIG1xID0gZnVuY3Rpb24ocXVlcnk6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpbmNsdWRlIHRoZSAnaGVhcnR6JyBhcyBhIHdheSB0byBoYXZlIGEgbm9uIG1hdGNoaW5nIE1RIHRvIGhlbHAgdGVybWluYXRlIHRoZSBqb2luXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXQuaW8vdnpuRkhcclxuICAgICAgICB2YXIgcXVlcnkgPSBbJygnLCBwcmVmaXhlcy5qb2luKCd0b3VjaC1lbmFibGVkKSwoJyksICdoZWFydHonLCAnKSddLmpvaW4oJycpO1xyXG4gICAgICAgIHJldHVybiBtcShxdWVyeSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qIFB1YmxpYyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzICovXHJcbiAgICBvbihldmVudDogRXZlbnRUeXBlLCBoYW5kbGVyOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19

@@ -16,3 +16,3 @@ import { EventEmitter, Component, ElementRef, ChangeDetectorRef, Input, Output, HostBinding, HostListener, NgModule } from '@angular/core';

this.isMousedown = false;
this.touchListeners = {
this._touchListeners = {
"touchstart": "handleTouchstart",

@@ -22,3 +22,3 @@ "touchmove": "handleTouchmove",

};
this.mouseListeners = {
this._mouseListeners = {
"mousedown": "handleMousedown",

@@ -29,3 +29,3 @@ "mousemove": "handleMousemove",

};
this.otherListeners = {
this._otherListeners = {
"resize": "handleResize"

@@ -148,2 +148,11 @@ };

}
get touchListeners() {
return this.properties.touchListeners ? this.properties.touchListeners : this._touchListeners;
}
get mouseListeners() {
return this.properties.mouseListeners ? this.properties.mouseListeners : this._mouseListeners;
}
get otherListeners() {
return this.properties.otherListeners ? this.properties.otherListeners : this._otherListeners;
}
destroy() {

@@ -194,2 +203,8 @@ this.toggleEventListeners('removeEventListener');

}
addEventListeners(listener, handler) {
window.addEventListener(listener, this[handler], false);
}
removeEventListeners(listener, handler) {
window.removeEventListener(listener, this[handler], false);
}
handleLinearSwipe(event) {

@@ -587,3 +602,3 @@ //event.preventDefault();

}
next() {
next(length = 1) {
if (this.isSlideInProgress) {

@@ -593,5 +608,5 @@ return;

this.direction = 'left';
this.handleSlide(1);
this.handleSlide(length);
}
prev() {
prev(length = 1) {
if (this.isSlideInProgress) {

@@ -601,3 +616,3 @@ return;

this.direction = 'right';
this.handleSlide(1);
this.handleSlide(length);
}

@@ -814,2 +829,3 @@ select(index) {

this.listeners = 'mouse and touch';
this.cellsToScroll = 1;
this.arrows = true;

@@ -821,2 +837,3 @@ this.arrowsTheme = 'light';

//event.preventDefault();
this.touches.addEventListeners("mousemove", "handleMousemove");
this.carousel.handleTouchstart(event);

@@ -834,2 +851,3 @@ this.isMoving = true;

this.carousel.handleTouchend(event);
this.touches.removeEventListeners("mousemove", "handleMousemove");
this.isMoving = false;

@@ -925,3 +943,7 @@ };

element: this.cellsElement,
listeners: this.listeners
listeners: this.listeners,
mouseListeners: {
"mousedown": "handleMousedown",
"mouseup": "handleMouseup"
}
});

@@ -1021,4 +1043,10 @@ this.touches.on('touchstart', this.handleTouchstart);

getCellWidth() {
let elementWidth = this.elementRef.nativeElement.clientWidth;
if (this.cellsToShow) {
let margin = this.cellsToShow > 1 ? this.margin : 0;
let totalMargin = margin * (this.cellsToShow - 1);
return (elementWidth - totalMargin) / this.cellsToShow;
}
if (this._cellWidth === '100%') {
return this.elementRef.nativeElement.clientWidth;
return elementWidth;
}

@@ -1030,7 +1058,7 @@ else {

next() {
this.carousel.next(1);
this.carousel.next(this.cellsToScroll);
this.carousel.stopAutoplay();
}
prev() {
this.carousel.prev(1);
this.carousel.prev(this.cellsToScroll);
this.carousel.stopAutoplay();

@@ -1088,2 +1116,4 @@ }

listeners: [{ type: Input }],
cellsToShow: [{ type: Input }],
cellsToScroll: [{ type: Input }],
cellWidth: [{ type: Input, args: ['cellWidth',] }],

@@ -1090,0 +1120,0 @@ isCounter: [{ type: Input, args: ['counter',] }],

@@ -50,2 +50,4 @@ import { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, SimpleChanges } from '@angular/core';

listeners: 'auto' | 'mouse and touch';
cellsToShow: number;
cellsToScroll: number;
set cellWidth(value: number | '100%');

@@ -81,3 +83,3 @@ set isCounter(value: boolean);

getCurrentIndex(): any;
getCellWidth(): number;
getCellWidth(): any;
next(): void;

@@ -84,0 +86,0 @@ prev(): void;

@@ -81,4 +81,4 @@ export interface Properties {

detectSlide(): boolean;
next(): void;
prev(): void;
next(length?: number): void;
prev(length?: number): void;
select(index: number): void;

@@ -85,0 +85,0 @@ handleSlide(slideLength?: number): void;

export interface Properties {
element: HTMLElement;
listeners?: 'auto' | 'mouse and touch';
touchListeners?: any;
mouseListeners?: any;
otherListeners?: any;
resize?: boolean;

@@ -24,8 +27,13 @@ }

isMousedown: boolean;
touchListeners: any;
mouseListeners: any;
otherListeners: any;
_touchListeners: any;
_mouseListeners: any;
_otherListeners: any;
get touchListeners(): any;
get mouseListeners(): any;
get otherListeners(): any;
constructor(properties: Properties);
destroy(): void;
toggleEventListeners(action: 'addEventListener' | 'removeEventListener'): void;
addEventListeners(listener: string, handler: string): void;
removeEventListeners(listener: string, handler: string): void;
handleTouchstart: (event: any) => void;

@@ -32,0 +40,0 @@ handleTouchmove: (event: any) => void;

{
"name": "angular-responsive-carousel",
"version": "1.3.11",
"version": "1.4.11",
"description": "Carousel for Angular. A simple solution for horizontal scrolling images with lazy loading.",

@@ -5,0 +5,0 @@ "repository": {

@@ -64,2 +64,4 @@ # Carousel for Angular

| cellWidth | number, '100%' | 200 | Cell width. |
| cellsToShow | number | | The number of carousel cells in the visible area. |
| cellsToScroll | number | 1 | The number of carousel cells to scroll per arrow click. |
| loop | boolean | false | Infinite loop. |

@@ -66,0 +68,0 @@ | autoplay | boolean | false | Automatically start the carousel after initialization. |

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc