nextalys-carousel 0.0.54 → 0.0.55

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,4 +3,4 @@ export class NxsCarouselModuleConfig {
3
3
  this.debug = false;
4
4
  }
5
5
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9ueHMtY2Fyb3VzZWwvbnhzLWNhcm91c2VsLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZFQSxNQUFNLE9BQU8sdUJBQXVCO0lBQXBDO1FBQ0ksVUFBSyxHQUFhLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE54c0Nhcm91c2VsSW1hZ2Uge1xuICAgIGFsdD86IHN0cmluZztcbiAgICBzcmM6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3dpcGVySW5zdGFuY2Uge1xuICAgIHJlYWxJbmRleDogbnVtYmVyO1xuICAgIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gICAgb246IChldnQ6ICdzbGlkZUNoYW5nZScgfCAnY2xpY2snLCBjYjogKGRhdGE6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICBkZXN0cm95OiAoZGVsZXRlSW5zdGFuY2U/OiBib29sZWFuLCBjbGVhblN0eWxlcz86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgc2xpZGVUbzogKGluZGV4OiBudW1iZXIsIHNwZWVkPzogbnVtYmVyLCBydW5DYWxsYmFja3M/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNsaWRlTmV4dDogKHNwZWVkPzogbnVtYmVyLCBydW5DYWxsYmFja3M/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNsaWRlUHJldjogKHNwZWVkPzogbnVtYmVyLCBydW5DYWxsYmFja3M/OiBib29sZWFuKSA9PiB2b2lkO1xufVxuZXhwb3J0IGludGVyZmFjZSBOeHNDYXJvdXNlbE9wdGlvbnMge1xuICAgIHdhdGNoU2xpZGVzVmlzaWJpbGl0eT86IGJvb2xlYW47XG4gICAgd2F0Y2hTbGlkZXNQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgZnJlZU1vZGU/OiBib29sZWFuO1xuICAgIGVmZmVjdD86IFwic2xpZGVcIiB8IFwiZmFkZVwiIHwgXCJjdWJlXCIgfCBcImNvdmVyZmxvd1wiIHwgXCJmbGlwXCI7XG4gICAgYXV0b3BsYXk/OiB7IGRlbGF5OiBudW1iZXI7IHN0b3BPbkxhc3RTbGlkZT86IGJvb2xlYW47IGRpc2FibGVPbkludGVyYWN0aW9uPzogYm9vbGVhbjsgcmV2ZXJzZURpcmVjdGlvbj86IGJvb2xlYW47IHdhaXRGb3JUcmFuc2l0aW9uPzogYm9vbGVhbiB9O1xuICAgIHJvdW5kTGVuZ3Rocz86IGJvb2xlYW47XG4gICAgaW5pdD86IGJvb2xlYW47XG4gICAgaW5pdGlhbFNsaWRlPzogbnVtYmVyO1xuICAgIHVwZGF0ZU9uV2luZG93UmVzaXplPzogYm9vbGVhbjtcbiAgICBkaXJlY3Rpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnO1xuICAgIHNsaWRlc1BlclZpZXc/OiBudW1iZXIgfCAnYXV0byc7XG4gICAgY2VudGVyZWRTbGlkZXM/OiBib29sZWFuO1xuICAgIGNlbnRlcmVkU2xpZGVzQm91bmRzPzogYm9vbGVhbjtcbiAgICBsb29wPzogYm9vbGVhbjtcbiAgICBjb3ZlcmZsb3dFZmZlY3Q/OiB7XG4gICAgICAgIHJvdGF0ZTogbnVtYmVyO1xuICAgICAgICBzdHJldGNoOiBudW1iZXI7XG4gICAgICAgIGRlcHRoPzogbnVtYmVyO1xuICAgICAgICBtb2RpZmllcj86IG51bWJlcjtcbiAgICAgICAgc2xpZGVTaGFkb3dzPzogYm9vbGVhbjtcbiAgICB9O1xuICAgIC8vIERpc2FibGUgcHJlbG9hZGluZyBvZiBhbGwgaW1hZ2VzXG4gICAgcHJlbG9hZEltYWdlcz86IGJvb2xlYW47XG4gICAgLy8gRW5hYmxlIGxhenkgbG9hZGluZ1xuICAgIGxhenk/OiBib29sZWFuO1xuICAgIHBhZ2luYXRpb24/OiB7XG4gICAgICAgIGVsOiBzdHJpbmc7XG4gICAgICAgIGNsaWNrYWJsZTogYm9vbGVhbjtcbiAgICAgICAgdHlwZT86IFwiYnVsbGV0c1wiIHwgXCJmcmFjdGlvblwiIHwgXCJwcm9ncmVzc2JhclwiIHwgXCJjdXN0b21cIjtcbiAgICB9O1xuICAgIG5hdmlnYXRpb24/OiB7XG4gICAgICAgIG5leHRFbDogc3RyaW5nO1xuICAgICAgICBwcmV2RWw6IHN0cmluZztcbiAgICB9O1xuICAgIHNwYWNlQmV0d2Vlbj86IG51bWJlcjtcbiAgICBicmVha3BvaW50cz86IHtcbiAgICAgICAgW3NpemU6IG51bWJlcl06IHtcbiAgICAgICAgICAgIHNwYWNlQmV0d2Vlbj86IG51bWJlcjtcbiAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IG51bWJlciB8ICdhdXRvJztcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIHRodW1icz86IHsgc3dpcGVyOiBTd2lwZXJJbnN0YW5jZSB9O1xuICAgIG54c1Nob3dOYXZpZ2F0aW9uQnVsbGV0cz86IGJvb2xlYW47XG4gICAgbnhzU2hvd05hdmlnYXRpb25BcnJvd3M/OiBib29sZWFuO1xuICAgIG54c1RodW1ibmFpbHM/OiB7XG4gICAgICAgIHNob3c6IGJvb2xlYW47IG9uTWFpblNsaWRlcj86IGJvb2xlYW47IHBlcmNlbnRIZWlnaHQ/OiBudW1iZXI7IHBlclZpZXc/OiBudW1iZXI7IGJyZWFrcG9pbnRzPzoge1xuICAgICAgICAgICAgW3NpemU6IG51bWJlcl06IHtcbiAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW4/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogbnVtYmVyIHwgJ2F1dG8nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIG54c1Nob3dJbWFnZXNDb3VudD86IGJvb2xlYW47XG4gICAgbnhzZnVsbHNjcmVlbk9uQ2xpY2s/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIGJhY2tncm91bmQgbW9kZSA6IGNvdmVyLCBjb250YWluLCBhdXRvLCBldGMuLi5cbiAgICAgKiBkZWZhdWx0ID0+IGNvdmVyXG4gICAgICovXG4gICAgbnhzQ2Fyb3VzZWxJbWFnZUJhY2tncm91bmRTaXplPzogc3RyaW5nO1xuICAgIG54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucz86IE54c0Nhcm91c2VsT3B0aW9ucztcbiAgICBueHNDYXJvdXNlbERpYWxvZ0V4aXRhYmxlPzogYm9vbGVhbjtcbiAgICBueHNDYXJvdXNlbERpYWxvZ1NpemU/OiB7IHdpZHRoOiBzdHJpbmc7IGhlaWdodDogc3RyaW5nOyB9O1xufVxuZXhwb3J0IGNsYXNzIE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZTtcbn0iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9ueHMtY2Fyb3VzZWwvbnhzLWNhcm91c2VsLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCQSxNQUFNLE9BQU8sdUJBQXVCO0lBQXBDO1FBQ0ksVUFBSyxHQUFhLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSBcInN3aXBlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE54c0Nhcm91c2VsSW1hZ2Uge1xuICAgIGFsdD86IHN0cmluZztcbiAgICBzcmM6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTnhzQ2Fyb3VzZWxPcHRpb25zIGV4dGVuZHMgU3dpcGVyT3B0aW9ucyB7XG4gICAgbnhzU2hvd05hdmlnYXRpb25CdWxsZXRzPzogYm9vbGVhbjtcbiAgICBueHNTaG93TmF2aWdhdGlvbkFycm93cz86IGJvb2xlYW47XG4gICAgbnhzVGh1bWJuYWlscz86IHtcbiAgICAgICAgc2hvdzogYm9vbGVhbjsgb25NYWluU2xpZGVyPzogYm9vbGVhbjsgcGVyY2VudEhlaWdodD86IG51bWJlcjsgcGVyVmlldz86IG51bWJlcjsgYnJlYWtwb2ludHM/OiB7XG4gICAgICAgICAgICBbc2l6ZTogbnVtYmVyXToge1xuICAgICAgICAgICAgICAgIHNwYWNlQmV0d2Vlbj86IG51bWJlcjtcbiAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBudW1iZXIgfCAnYXV0byc7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgbnhzU2hvd0ltYWdlc0NvdW50PzogYm9vbGVhbjtcbiAgICBueHNmdWxsc2NyZWVuT25DbGljaz86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogYmFja2dyb3VuZCBtb2RlIDogY292ZXIsIGNvbnRhaW4sIGF1dG8sIGV0Yy4uLlxuICAgICAqIGRlZmF1bHQgPT4gY292ZXJcbiAgICAgKi9cbiAgICBueHNDYXJvdXNlbEltYWdlQmFja2dyb3VuZFNpemU/OiBzdHJpbmc7XG4gICAgbnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zPzogTnhzQ2Fyb3VzZWxPcHRpb25zO1xuICAgIG54c0Nhcm91c2VsRGlhbG9nRXhpdGFibGU/OiBib29sZWFuO1xuICAgIG54c0Nhcm91c2VsRGlhbG9nU2l6ZT86IHsgd2lkdGg6IHN0cmluZzsgaGVpZ2h0OiBzdHJpbmc7IH07XG59XG5leHBvcnQgY2xhc3MgTnhzQ2Fyb3VzZWxNb2R1bGVDb25maWcge1xuICAgIGRlYnVnPzogYm9vbGVhbiA9IGZhbHNlO1xufSJdfQ==
@@ -1,10 +1,16 @@
1
- import { __awaiter } from "tslib";
2
- import { Component, ViewEncapsulation, Input, ViewChild, ElementRef, Output, EventEmitter, PLATFORM_ID, Inject, Optional, NgZone } from '@angular/core';
1
+ import { Component, ViewEncapsulation, Input, ViewChild, Output, EventEmitter, PLATFORM_ID, Inject, Optional, NgZone, ContentChildren, TemplateRef } from '@angular/core';
3
2
  import { NxsCarouselModuleConfig } from './nxs-carousel-types';
4
3
  import { NxsCarouselDialogComponent } from './nxs-carousel-dialog.component';
5
4
  import { MatDialog } from '@angular/material/dialog';
6
5
  import { isPlatformBrowser } from '@angular/common';
7
6
  import { EventsCollector } from 'nextalys-js-helpers/dist/events';
7
+ // import Swiper core and required modules
8
+ import SwiperCore, { Navigation, Pagination, Autoplay, Lazy, Thumbs } from 'swiper';
9
+ //Virtual,Scrollbar,A11y
10
+ import { SwiperComponent } from 'swiper/angular';
11
+ import { NxsSwiperTemplateDirective } from './swiper-directives';
12
+ // install Swiper modules
13
+ SwiperCore.use([Navigation, Pagination, Autoplay, Lazy, Thumbs]);
8
14
  export class NxsCarouselComponent {
9
15
  constructor(matDialog, zone, platformId, config) {
10
16
  this.matDialog = matDialog;
@@ -12,10 +18,9 @@ export class NxsCarouselComponent {
12
18
  this.platformId = platformId;
13
19
  this.config = config;
14
20
  this.lazy = true;
15
- this.mutationObserver = null;
16
- this.recreateSliderSubscribed = false;
17
21
  this.eventsCollector = new EventsCollector();
18
- this.options = {};
22
+ this.options = null;
23
+ this.thumbnailsOptions = null;
19
24
  this.hasHtmlContent = false;
20
25
  this.slidesCount = 0;
21
26
  this.slideChange = new EventEmitter();
@@ -30,133 +35,27 @@ export class NxsCarouselComponent {
30
35
  }
31
36
  set setOptions(val) {
32
37
  this.options = this.setDefaultOptions(val, false);
33
- }
34
- set setImages(val) {
35
- this.images = val;
36
- this.initSlides();
37
- this.createSlider(true);
38
+ this.setThumbnailsOptions();
38
39
  }
39
40
  log(...args) {
40
41
  if (!this.config.debug)
41
42
  return;
42
43
  console.log('[NxsCarousel]', ...args);
43
44
  }
44
- onContentChange(changes) {
45
- // console.log("Log: NxsCarouselComponent -> onContentChange -> changes", changes);
46
- // changes.forEach(change => console.log(change.target));
47
- }
48
- initSlides() {
49
- if (!this.isBrowser) {
50
- this.log('prevent initSlides on platform server');
51
- return;
52
- }
53
- if (!this.nxsSlidesWrapper) {
54
- this.log('can not initSlides : nxsSlidesWrapper is not defined !');
55
- return;
56
- }
57
- this.log('initSlides begins');
58
- this.zone.runOutsideAngular(() => {
59
- if (!this.hasHtmlContent && this.images) {
60
- this.nxsSlidesWrapper.nativeElement.innerHTML = '';
61
- for (const cImage of this.images) {
62
- const div = document.createElement('div');
63
- div.className = 'swiper-slide';
64
- if (this.lazy) {
65
- div.dataset.background = cImage.src;
66
- div.className += ' swiper-lazy';
67
- }
68
- else {
69
- div.style.backgroundImage = 'url(' + cImage.src + ')';
70
- }
71
- if (this.options.nxsCarouselImageBackgroundSize)
72
- div.style.backgroundSize = this.options.nxsCarouselImageBackgroundSize;
73
- this.nxsSlidesWrapper.nativeElement.appendChild(div);
74
- }
75
- this.slidesCount = this.images.length;
76
- if (!!this.options.nxsThumbnails && this.options.nxsThumbnails.show) {
77
- this.nxsThumbnailsSlidesWrapper.nativeElement.innerHTML = '';
78
- for (const cImage of this.images) {
79
- const div = document.createElement('div');
80
- div.className = 'swiper-slide';
81
- if (this.lazy) {
82
- div.dataset.background = cImage.src;
83
- div.className += ' swiper-lazy';
84
- }
85
- else {
86
- div.style.backgroundImage = 'url(' + cImage.src + ')';
87
- }
88
- this.nxsThumbnailsSlidesWrapper.nativeElement.appendChild(div);
89
- }
90
- }
91
- this.log('initSlides - images are defined - slides count => ', this.slidesCount);
92
- }
93
- else if (this.hasHtmlContent) {
94
- this.log('initSlides - html content - slides length => ', this.nxsSlidesWrapper.nativeElement.children.length);
95
- // eslint-disable-next-line @typescript-eslint/prefer-for-of
96
- for (let i = 0; i < this.nxsSlidesWrapper.nativeElement.children.length; i++) {
97
- const child = this.nxsSlidesWrapper.nativeElement.children[i];
98
- if (!child.className)
99
- child.className = 'swiper-slide';
100
- else if (child.className.indexOf('swiper-slide') === -1) {
101
- child.className += ' swiper-slide';
102
- }
103
- }
104
- this.slidesCount = this.nxsSlidesWrapper.nativeElement.children.length;
105
- this.log('initSlides - html content - slides count => ', this.slidesCount);
106
- }
107
- });
108
- }
109
45
  destroy() {
110
- var _a, _b, _c;
46
+ var _a;
111
47
  if (!this.isBrowser) {
112
48
  return;
113
49
  }
114
50
  (_a = this.eventsCollector) === null || _a === void 0 ? void 0 : _a.unsubscribeAll();
115
- (_b = this.mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
116
- (_c = this.sliderInstance) === null || _c === void 0 ? void 0 : _c.destroy();
117
51
  }
118
52
  ngOnDestroy() {
119
53
  this.destroy();
120
54
  }
121
- subscribeToSlideChanged() {
122
- if (!this.hasHtmlContent) {
123
- this.log('subscribeToSlideChanged cannot be subscribed : has no html content');
124
- return;
125
- }
126
- if (!this.nxsSlidesWrapper || !this.nxsSlidesWrapper.nativeElement) {
127
- this.log('subscribeToSlideChanged error : nxsSlidesWrapper is not defined');
128
- return;
129
- }
130
- if (typeof MutationObserver === 'undefined') {
131
- this.log('cannot use mutation observer');
132
- return;
133
- }
134
- if (this.mutationObserver)
135
- this.mutationObserver.disconnect();
136
- this.log('subscribe to mutation observer');
137
- this.mutationObserver = new MutationObserver((mutationsList) => {
138
- // console.log("Log: NxsCarouselComponent -> subscribeToSlideChanged -> mutationsList", mutationsList);
139
- // console.log("Log: NxsCarouselComponent -> subscribeToSlideChanged -> MutationObserver");
140
- this.log('mutation observer - html content has changed');
141
- if (mutationsList.length === 0)
142
- return;
143
- let mustUpdate = false;
144
- for (const mutation of mutationsList) {
145
- if (mutation.addedNodes.length > 0 || mutation.removedNodes.length > 0) {
146
- mustUpdate = true;
147
- break;
148
- }
149
- }
150
- if (mustUpdate) {
151
- this.initSlides();
152
- this.createSlider(true);
153
- }
154
- });
155
- this.mutationObserver.observe(this.nxsSlidesWrapper.nativeElement, { childList: true, attributes: false, });
156
- }
157
55
  ngAfterViewInit() {
158
- this.initSlides();
159
- this.createSlider(true);
56
+ // console.log('thi.contents', this.contents);
57
+ // this.initSlides();
58
+ // this.createSlider(true);
160
59
  }
161
60
  getMainSliderHeight() {
162
61
  if (!this.options)
@@ -174,10 +73,18 @@ export class NxsCarouselComponent {
174
73
  setDefaultOptions(options, forDialog) {
175
74
  var _a;
176
75
  if (!options && forDialog) {
177
- options = { nxsShowNavigationBullets: true, loop: true, nxsThumbnails: { show: true }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: true };
76
+ options = {
77
+ nxsShowNavigationBullets: true, loop: true, nxsThumbnails: { show: true }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: true,
78
+ lazy: true,
79
+ };
80
+ }
81
+ else if (!options) {
82
+ options = {
83
+ nxsShowNavigationBullets: true, loop: true,
84
+ nxsThumbnails: { show: false }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: false, nxsCarouselDialogOptions: {},
85
+ lazy: true,
86
+ };
178
87
  }
179
- else if (!options)
180
- options = { nxsShowNavigationBullets: true, loop: true, nxsThumbnails: { show: false }, effect: 'slide', nxsShowNavigationArrows: true, nxsShowImagesCount: false, nxsCarouselDialogOptions: {} };
181
88
  if (options.nxsCarouselDialogOptions) {
182
89
  if (typeof options.nxsCarouselDialogOptions.nxsThumbnails === 'undefined')
183
90
  options.nxsCarouselDialogOptions.nxsThumbnails = { show: false };
@@ -213,8 +120,37 @@ export class NxsCarouselComponent {
213
120
  options.nxsfullscreenOnClick = false;
214
121
  if (options.nxsThumbnails.onMainSlider)
215
122
  options.nxsShowNavigationBullets = false;
123
+ if (typeof options.lazy === 'undefined')
124
+ options.lazy = true;
125
+ if (typeof options.navigation === 'undefined')
126
+ options.navigation = true;
127
+ if (typeof options.pagination === 'undefined')
128
+ options.pagination = { clickable: true };
129
+ // console.log("Log ~ file: nxs-carousel.component.ts ~ line 272 ~ NxsCarouselComponent ~ setDefaultOptions ~ options", options);
216
130
  return options;
217
131
  }
132
+ setThumbnailsOptions() {
133
+ var _a, _b;
134
+ if (!!((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.nxsThumbnails) === null || _b === void 0 ? void 0 : _b.show)) {
135
+ this.thumbnailsOptions = {
136
+ slidesPerView: this.options.nxsThumbnails.perView,
137
+ loop: false,
138
+ freeMode: true,
139
+ // watchSlidesVisibility: true,
140
+ watchSlidesProgress: true,
141
+ breakpoints: this.options.nxsThumbnails.breakpoints,
142
+ // spaceBetween: 10,
143
+ };
144
+ if (this.lazy) {
145
+ // Disable preloading of all images
146
+ this.thumbnailsOptions.preloadImages = false;
147
+ // Enable lazy loading
148
+ this.thumbnailsOptions.lazy = true;
149
+ }
150
+ // this.thumbnailsSliderInstance = new Swiper(this.nxsThumbnailsSliderContainer.nativeElement, thumbnailsOptions);
151
+ // this.options.thumbs = { swiper: this.thumbnailsSliderInstance };
152
+ }
153
+ }
218
154
  showFullScreenCarousel(images, wrapperClass) {
219
155
  this.options.nxsCarouselDialogOptions = this.setDefaultOptions(this.options.nxsCarouselDialogOptions, true);
220
156
  const data = { images, wrapperClass, options: this.options.nxsCarouselDialogOptions };
@@ -226,110 +162,72 @@ export class NxsCarouselComponent {
226
162
  disableClose: !this.options.nxsCarouselDialogExitable,
227
163
  });
228
164
  }
229
- createSlider(forceRecreate) {
230
- if (!this.isBrowser) {
231
- this.log('prevent createSlider : platform is server');
232
- return;
233
- }
234
- if (!this.nxsSliderContainer) {
235
- this.log('can not createSlider : nxsSliderContainer is not defined !');
236
- return;
237
- }
238
- this.log('createSlider', this.nxsSliderContainer.nativeElement);
239
- if (this.slidesCount === 0) {
240
- this.log('can not createSlider : slidesCount === 0');
241
- this.subscribeToSlideChanged();
242
- return;
243
- }
244
- if (this.sliderInstance && !forceRecreate) {
245
- this.log('can re create slider => slider is already created.');
246
- return;
247
- }
248
- this.zone.runOutsideAngular(() => __awaiter(this, void 0, void 0, function* () {
249
- this.destroy();
250
- this.options.pagination = {
251
- el: '.nxs-carousel-pagination',
252
- clickable: true,
253
- type: 'bullets',
254
- };
255
- this.options.navigation = {
256
- nextEl: '.nxs-carousel-button-next',
257
- prevEl: '.nxs-carousel-button-prev',
258
- };
259
- if (!this.swiperLibrary)
260
- this.swiperLibrary = yield import("swiper");
261
- const Swiper = this.swiperLibrary.default;
262
- if (!!this.options.nxsThumbnails && this.options.nxsThumbnails.show) {
263
- const thumbnailsOptions = {
264
- slidesPerView: this.options.nxsThumbnails.perView,
265
- loop: false,
266
- freeMode: true,
267
- watchSlidesVisibility: true,
268
- watchSlidesProgress: true,
269
- breakpoints: this.options.nxsThumbnails.breakpoints,
270
- // spaceBetween: 10,
271
- };
272
- if (this.lazy) {
273
- // Disable preloading of all images
274
- thumbnailsOptions.preloadImages = false;
275
- // Enable lazy loading
276
- thumbnailsOptions.lazy = true;
277
- }
278
- this.thumbnailsSliderInstance = new Swiper(this.nxsThumbnailsSliderContainer.nativeElement, thumbnailsOptions);
279
- this.options.thumbs = { swiper: this.thumbnailsSliderInstance };
280
- }
281
- if (this.lazy) {
282
- // Disable preloading of all images
283
- this.options.preloadImages = false;
284
- // Enable lazy loading
285
- this.options.lazy = true;
286
- }
287
- // console.log("Log ~ file: nxs-carousel.component.ts ~ line 323 ~ NxsCarouselComponent ~ this.zone.runOutsideAngular ~ this.options", this.options);
288
- this.sliderInstance = new Swiper(this.nxsSliderContainer.nativeElement, this.options);
289
- this.log('sliderInstance has been created', this.sliderInstance);
290
- this.sliderInstance.on('slideChange', () => {
291
- this.zone.run(() => {
292
- this.currentSlide = this.sliderInstance.realIndex;
293
- this.log("slideChange", this.currentSlide);
294
- this.slideChange.next(this.currentSlide);
295
- });
296
- });
297
- this.sliderInstance.on('click', (evt) => {
298
- const target = evt.target;
299
- if (target.className.indexOf('nxs-carousel-button') !== -1 || target.className.indexOf('swiper-pagination') !== -1)
300
- return;
301
- this.zone.run(() => {
302
- this.slideClick.next(evt);
303
- if (this.options.nxsfullscreenOnClick && this.images && this.images.length && !this.hasHtmlContent) {
304
- this.showFullScreenCarousel(this.images, 'fullscreen-carousel');
305
- }
306
- });
307
- });
308
- this.subscribeToSlideChanged();
309
- }));
310
- }
311
165
  goToSlide(index, speed) {
312
- if (!this.sliderInstance)
313
- return;
314
- this.sliderInstance.slideTo(index, speed);
166
+ var _a;
167
+ (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.slideTo(index, speed);
315
168
  }
316
169
  next() {
317
- if (!this.sliderInstance)
318
- return;
319
- this.sliderInstance.slideNext();
170
+ var _a;
171
+ (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.slideNext();
320
172
  }
321
173
  previous() {
322
- if (!this.sliderInstance)
323
- return;
324
- this.sliderInstance.slidePrev();
174
+ var _a;
175
+ (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.slidePrev();
176
+ }
177
+ onSwiperThumbnails(instance) {
178
+ var _a, _b;
179
+ if ((_b = (_a = this.options) === null || _a === void 0 ? void 0 : _a.nxsThumbnails) === null || _b === void 0 ? void 0 : _b.show)
180
+ this.thumbnailsSwiperInstance = instance;
181
+ else
182
+ this.thumbnailsSwiperInstance = null;
183
+ // if (this.options?.nxsThumbnails?.show) {
184
+ // const optionsClone = MainHelpers.cloneObject(this.options);
185
+ // optionsClone.thumbs = { swiper: this.thumbnailsSwiperInstance };
186
+ // // this.options = optionsClone;
187
+ // // this.options = { ...this.options, thumbs: { swiper: this.thumbnailsSwiperInstance } };
188
+ // console.log("Log ~ file: nxs-carousel.component.ts ~ line 416 ~ NxsCarouselComponent ~ onSwiperThumbnails ~ this.options ", this.options);
189
+ // this.options.thumbs = { swiper: this.thumbnailsSwiperInstance };
190
+ // }
191
+ }
192
+ onSwiper(instance) {
193
+ this.log('swiper ready - instance', instance);
194
+ this.swiperInstance = instance;
195
+ this.swiperInstance.on('click', (swiperInstance, evt) => {
196
+ // console.log("Log ~ file: nxs-carousel.component.ts ~ line 392 ~ NxsCarouselComponent ~ this.swiperInstance.on ~ evt", evt);
197
+ const target = evt.target;
198
+ if (target.className.indexOf('nxs-carousel-button') !== -1 || target.className.indexOf('swiper-pagination') !== -1)
199
+ return;
200
+ this.runInZone(() => {
201
+ this.slideClick.next(evt);
202
+ if (this.options.nxsfullscreenOnClick && this.images && this.images.length && !this.hasHtmlContent) {
203
+ this.showFullScreenCarousel(this.images, 'fullscreen-carousel');
204
+ }
205
+ });
206
+ });
207
+ }
208
+ runInZone(callback, ...args) {
209
+ if (!this.zone) {
210
+ callback(args);
211
+ }
212
+ return this.zone.run(() => callback(args));
213
+ }
214
+ onSlideChange(instances) {
215
+ // this.swiperInstance = instance;
216
+ // this.log('slide change - instance', instance);
217
+ this.runInZone(() => {
218
+ var _a;
219
+ this.currentSlide = ((_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.realIndex) || 0;
220
+ this.log('slide change - currentSlide', this.currentSlide);
221
+ this.slideChange.next(this.currentSlide);
222
+ });
325
223
  }
326
224
  }
327
225
  NxsCarouselComponent.decorators = [
328
226
  { type: Component, args: [{
329
227
  selector: 'nxs-carousel',
330
- template: "<div #nxsSliderContainer\n [ngClass]=\"{'swiper-container':true,'nxs-slider-with-thumbnails':!!options.nxsThumbnails && options.nxsThumbnails.show}\"\n [style.height]=\"getMainSliderHeight()\">\n <div class=\"swiper-wrapper\" #nxsSlidesWrapper>\n <ng-content>\n\n </ng-content>\n </div>\n <!-- (cdkObserveContent)=\"onContentChange($event)\" -->\n <!-- If we need pagination -->\n <div class=\"swiper-pagination nxs-carousel-pagination\"\n [style.display]=\"slidesCount>0 && options && options.nxsShowNavigationBullets ? '':'none'\"></div>\n\n <!-- If we need navigation buttons -->\n <ng-container *ngIf=\"options.nxsShowNavigationArrows\">\n <div class=\"nxs-carousel-button-prev swiper-button-prev\"></div>\n <div class=\"nxs-carousel-button-next swiper-button-next\"></div>\n </ng-container>\n\n <ng-container *ngIf=\"images && options.nxsShowImagesCount\">\n <div class=\"nxs-image-counter\">\n {{currentSlide+1}} / {{images.length}}\n </div>\n </ng-container>\n\n</div>\n\n<div #nxsThumbnailsSliderContainer\n [style.display]=\"(images && !!options.nxsThumbnails && options.nxsThumbnails.show) ?'':'none'\"\n [style.height]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight) ? (options.nxsThumbnails.percentHeight + '%'):''\"\n [style.top]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight && options.nxsThumbnails.onMainSlider) ? ('-' + (options.nxsThumbnails.percentHeight) + '%'):''\"\n [ngClass]=\"{'swiper-container':true, 'nxs-slider-thumbnails-container':true,'nxs-slider-thumbnails-on-main-slider':options.nxsThumbnails && options.nxsThumbnails.onMainSlider}\">\n <div class=\"swiper-wrapper\" #nxsThumbnailsSlidesWrapper>\n\n </div>\n\n</div>",
228
+ template: "<div *ngIf=\"options\"\n [ngClass]=\"{'swiper-container':true,'nxs-slider-with-thumbnails':!!options.nxsThumbnails && options.nxsThumbnails.show}\"\n [style.height]=\"getMainSliderHeight()\">\n <swiper [config]=\"options\" (swiper)=\"onSwiper($event)\" (slideChange)=\"onSlideChange($event)\"\n [thumbs]=\"{ swiper: thumbnailsSwiperInstance }\">\n <ng-container *ngIf=\"hasHtmlContent\">\n <ng-template *ngFor=\"let slide of contents\" swiperSlide>\n <ng-template [ngTemplateOutlet]=\"slide\" [ngTemplateOutletContext]=\"{\n $implicit: slide\n }\"></ng-template>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!hasHtmlContent && images?.length\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img class=\"nxs-image-slide swiper-lazy\" [attr.data-src]=\"slideImage.src\" />\n <div class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </ng-container>\n </swiper>\n <ng-container *ngIf=\"images && options.nxsShowImagesCount\">\n <div class=\"nxs-image-counter\">\n {{currentSlide+1}} / {{images.length}}\n </div>\n </ng-container>\n</div>\n\n<div *ngIf=\"thumbnailsOptions && images?.length\"\n [style.height]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight) ? (options.nxsThumbnails.percentHeight + '%'):''\"\n [style.top]=\"(!!options.nxsThumbnails && options.nxsThumbnails.show && !!options.nxsThumbnails.percentHeight && options.nxsThumbnails.onMainSlider) ? ('-' + (options.nxsThumbnails.percentHeight) + '%'):''\"\n [ngClass]=\"{'swiper-container':true, 'nxs-slider-thumbnails-container':true,'nxs-slider-thumbnails-on-main-slider':options.nxsThumbnails && options.nxsThumbnails.onMainSlider}\">\n <swiper [config]=\"thumbnailsOptions\" (swiper)=\"onSwiperThumbnails($event)\">\n <ng-template swiperSlide *ngFor=\"let slideImage of images\">\n <img class=\"nxs-image-slide swiper-lazy\" [attr.data-src]=\"slideImage.src\" />\n <div class=\"swiper-lazy-preloader swiper-lazy-preloader-black\"></div>\n </ng-template>\n </swiper>\n</div>",
331
229
  encapsulation: ViewEncapsulation.None,
332
- styles: ["nxs-carousel{display:block;height:100%;position:relative;--swiper-navigation-color:#fff;--swiper-theme-color:#fff}nxs-carousel .swiper-container{width:100%;display:block;position:relative;height:100%}nxs-carousel .swiper-container .swiper-wrapper .swiper-slide{height:100%;position:relative;width:100%;min-height:50px;background-size:cover;background-position:50%;background-repeat:no-repeat}nxs-carousel .swiper-container.nxs-slider-with-thumbnails{height:80%}nxs-carousel .swiper-container.nxs-slider-thumbnails-container{height:20%;background:transparent;padding:6px 0}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide{cursor:pointer;border-radius:6px;margin:0 6px;border:2px solid transparent}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide.swiper-slide-thumb-active{border:2px solid #add8e6}nxs-carousel .swiper-container.nxs-slider-thumbnails-on-main-slider{top:-20%}nxs-carousel .nxs-image-counter{position:absolute;top:0;right:0;color:#fff;padding:4px;font-weight:700;z-index:10}"]
230
+ styles: ["@import \"~swiper/swiper.min.css\";@import \"~swiper/modules/navigation/navigation.min.css\";@import \"~swiper/modules/pagination/pagination.min.css\";@import \"~swiper/modules/lazy/lazy.min.css\";nxs-carousel{display:block;height:100%;position:relative;--swiper-navigation-color:#fff;--swiper-pagination-color:#fff;--swiper-theme-color:#fff}nxs-carousel .swiper-container{width:100%;height:100%;display:block;position:relative}nxs-carousel .swiper-container swiper{height:100%}nxs-carousel .swiper-container .swiper-wrapper .swiper-slide{height:100%;position:relative;width:100%;min-height:50px;background-size:cover;background-position:50%;background-repeat:no-repeat}nxs-carousel .swiper-container .nxs-image-slide{height:100%;-o-object-fit:cover;object-fit:cover;width:100%;-o-object-position:center;object-position:center}nxs-carousel .swiper-container.nxs-slider-with-thumbnails{height:80%}nxs-carousel .swiper-container.nxs-slider-thumbnails-container{height:20%;background:transparent;padding:6px 0}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide{cursor:pointer;border-radius:6px;margin:0 6px;border:2px solid transparent}nxs-carousel .swiper-container.nxs-slider-thumbnails-container .swiper-slide.swiper-slide-thumb-active{border:2px solid #add8e6}nxs-carousel .swiper-container.nxs-slider-thumbnails-on-main-slider{top:-20%}nxs-carousel .nxs-image-counter{position:absolute;top:0;right:0;color:#fff;padding:4px;font-weight:700;z-index:10}"]
333
231
  },] }
334
232
  ];
335
233
  NxsCarouselComponent.ctorParameters = () => [
@@ -339,15 +237,13 @@ NxsCarouselComponent.ctorParameters = () => [
339
237
  { type: NxsCarouselModuleConfig, decorators: [{ type: Optional }] }
340
238
  ];
341
239
  NxsCarouselComponent.propDecorators = {
240
+ contents: [{ type: ContentChildren, args: [NxsSwiperTemplateDirective, { read: TemplateRef },] }],
241
+ swiperComponent: [{ type: ViewChild, args: ['swiper', { static: false },] }],
342
242
  lazy: [{ type: Input }],
343
- nxsSliderContainer: [{ type: ViewChild, args: ['nxsSliderContainer', { static: true },] }],
344
- nxsSlidesWrapper: [{ type: ViewChild, args: ['nxsSlidesWrapper', { static: true },] }],
345
- nxsThumbnailsSliderContainer: [{ type: ViewChild, args: ['nxsThumbnailsSliderContainer', { static: true },] }],
346
- nxsThumbnailsSlidesWrapper: [{ type: ViewChild, args: ['nxsThumbnailsSlidesWrapper', { static: true },] }],
243
+ images: [{ type: Input }],
347
244
  setOptions: [{ type: Input, args: ['options',] }],
348
- setImages: [{ type: Input, args: ['images',] }],
349
245
  hasHtmlContent: [{ type: Input }],
350
246
  slideChange: [{ type: Output }],
351
247
  slideClick: [{ type: Output }]
352
248
  };
353
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbnhzLWNhcm91c2VsL254cy1jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZLLE9BQU8sRUFBd0QsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNySCxPQUFPLEVBQXlCLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU9sRSxNQUFNLE9BQU8sb0JBQW9CO0lBNEM3QixZQUNZLFNBQW9CLEVBQ3BCLElBQVksRUFDUyxVQUFlLEVBQ3hCLE1BQWdDO1FBSDVDLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNTLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBMEI7UUE5Q3hELFNBQUksR0FBRyxJQUFJLENBQUM7UUFDSixxQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO1FBQ3pELDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUN6QixvQkFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFjaEQsWUFBTyxHQUF1QixFQUFFLENBQUM7UUFZakMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZ0JBQVcsR0FBVyxDQUFD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Y0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OztZQXZXSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLHkxREFBNEM7Z0JBRTVDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJOzthQUN4Qzs7O1lBUlEsU0FBUztZQUh3RyxNQUFNOzRDQTJEdkgsTUFBTSxTQUFDLFdBQVc7WUExRG9DLHVCQUF1Qix1QkEyRDdFLFFBQVE7OzttQkEvQ1osS0FBSztpQ0FPTCxTQUFTLFNBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOytCQUdoRCxTQUFTLFNBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzJDQUk5QyxTQUFTLFNBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lDQUUxRCxTQUFTLFNBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lCQUd4RCxLQUFLLFNBQUMsU0FBUzt3QkFJZixLQUFLLFNBQUMsUUFBUTs2QkFNZCxLQUFLOzBCQU1MLE1BQU07eUJBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBQTEFURk9STV9JRCwgSW5qZWN0LCBPcHRpb25hbCwgTmdab25lLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbE9wdGlvbnMsIE54c0Nhcm91c2VsSW1hZ2UsIFN3aXBlckluc3RhbmNlLCBOeHNDYXJvdXNlbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbnhzLWNhcm91c2VsLXR5cGVzJztcbmltcG9ydCB7IE54c0Nhcm91c2VsRGlhbG9nRGF0YSwgTnhzQ2Fyb3VzZWxEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL254cy1jYXJvdXNlbC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBFdmVudHNDb2xsZWN0b3IgfSBmcm9tICduZXh0YWx5cy1qcy1oZWxwZXJzL2Rpc3QvZXZlbnRzJztcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbnhzLWNhcm91c2VsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbnhzLWNhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9ueHMtY2Fyb3VzZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBOeHNDYXJvdXNlbENvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBsYXp5ID0gdHJ1ZTtcbiAgICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgICByZWNyZWF0ZVNsaWRlclN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGV2ZW50c0NvbGxlY3RvciA9IG5ldyBFdmVudHNDb2xsZWN0b3IoKTtcbiAgICBwdWJsaWMgaW1hZ2VzOiBOeHNDYXJvdXNlbEltYWdlW107XG5cbiAgICBAVmlld0NoaWxkKCdueHNTbGlkZXJDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIG54c1NsaWRlckNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdueHNTbGlkZXNXcmFwcGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBueHNTbGlkZXNXcmFwcGVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8vdGh1bWJuYWlsc1xuICAgIEBWaWV3Q2hpbGQoJ254c1RodW1ibmFpbHNTbGlkZXJDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIG54c1RodW1ibmFpbHNTbGlkZXJDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ254c1RodW1ibmFpbHNTbGlkZXNXcmFwcGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBueHNUaHVtYm5haWxzU2xpZGVzV3JhcHBlcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgb3B0aW9uczogTnhzQ2Fyb3VzZWxPcHRpb25zID0ge307XG4gICAgQElucHV0KCdvcHRpb25zJylcbiAgICBzZXQgc2V0T3B0aW9ucyh2YWw6IE54c0Nhcm91c2VsT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldERlZmF1bHRPcHRpb25zKHZhbCwgZmFsc2UpO1xuICAgIH1cbiAgICBASW5wdXQoJ2ltYWdlcycpXG4gICAgc2V0IHNldEltYWdlcyh2YWw6IE54c0Nhcm91c2VsSW1hZ2VbXSkge1xuICAgICAgICB0aGlzLmltYWdlcyA9IHZhbDtcbiAgICAgICAgdGhpcy5pbml0U2xpZGVzKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlU2xpZGVyKHRydWUpO1xuICAgIH1cbiAgICBASW5wdXQoKVxuICAgIGhhc0h0bWxDb250ZW50ID0gZmFsc2U7XG4gICAgc2xpZGVzQ291bnQ6IG51bWJlciA9IDA7XG4gICAgcHVibGljIHNsaWRlckluc3RhbmNlOiBTd2lwZXJJbnN0YW5jZTtcbiAgICBwdWJsaWMgdGh1bWJuYWlsc1NsaWRlckluc3RhbmNlOiBTd2lwZXJJbnN0YW5jZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgcHVibGljIGN1cnJlbnRTbGlkZSA9IDA7XG4gICAgQE91dHB1dCgpXG4gICAgc2xpZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgICBpc0Jyb3dzZXIgPSBmYWxzZTtcbiAgICBwcml2YXRlIHN3aXBlckxpYnJhcnk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29uZmlnPzogTnhzQ2Fyb3VzZWxNb2R1bGVDb25maWcsXG4gICAgKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcpXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IHsgZGVidWc6IGZhbHNlIH07XG4gICAgICAgIHRoaXMuaXNCcm93c2VyID0gaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKTtcbiAgICAgICAgdGhpcy5sb2coJ2NvbnN0cnVjdG9yIC0gaXNCcm93c2VyJywgdGhpcy5pc0Jyb3dzZXIpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldERlZmF1bHRPcHRpb25zKHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgIH1cbiAgICBwcml2YXRlIGxvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmRlYnVnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zb2xlLmxvZygnW054c0Nhcm91c2VsXScsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIG9uQ29udGVudENoYW5nZShjaGFuZ2VzOiBNdXRhdGlvblJlY29yZFtdKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTG9nOiBOeHNDYXJvdXNlbENvbXBvbmVudCAtPiBvbkNvbnRlbnRDaGFuZ2UgLT4gY2hhbmdlc1wiLCBjaGFuZ2VzKTtcbiAgICAgICAgLy8gY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiBjb25zb2xlLmxvZyhjaGFuZ2UudGFyZ2V0KSk7XG4gICAgfVxuICAgIGluaXRTbGlkZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdwcmV2ZW50IGluaXRTbGlkZXMgb24gcGxhdGZvcm0gc2VydmVyJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm54c1NsaWRlc1dyYXBwZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdjYW4gbm90IGluaXRTbGlkZXMgOiBueHNTbGlkZXNXcmFwcGVyIGlzIG5vdCBkZWZpbmVkICEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZygnaW5pdFNsaWRlcyBiZWdpbnMnKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNIdG1sQ29udGVudCAmJiB0aGlzLmltYWdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubnhzU2xpZGVzV3JhcHBlci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjSW1hZ2Ugb2YgdGhpcy5pbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc05hbWUgPSAnc3dpcGVyLXNsaWRlJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmRhdGFzZXQuYmFja2dyb3VuZCA9IGNJbWFnZS5zcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lICs9ICcgc3dpcGVyLWxhenknO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoJyArIGNJbWFnZS5zcmMgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbEltYWdlQmFja2dyb3VuZFNpemUpXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUuYmFja2dyb3VuZFNpemUgPSB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxJbWFnZUJhY2tncm91bmRTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm54c1NsaWRlc1dyYXBwZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNsaWRlc0NvdW50ID0gdGhpcy5pbWFnZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICghIXRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzICYmIHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLnNob3cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ueHNUaHVtYm5haWxzU2xpZGVzV3JhcHBlci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNJbWFnZSBvZiB0aGlzLmltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXYuY2xhc3NOYW1lID0gJ3N3aXBlci1zbGlkZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmRhdGFzZXQuYmFja2dyb3VuZCA9IGNJbWFnZS5zcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNsYXNzTmFtZSArPSAnIHN3aXBlci1sYXp5JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICd1cmwoJyArIGNJbWFnZS5zcmMgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm54c1RodW1ibmFpbHNTbGlkZXNXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnaW5pdFNsaWRlcyAtIGltYWdlcyBhcmUgZGVmaW5lZCAtIHNsaWRlcyBjb3VudCA9PiAnLCB0aGlzLnNsaWRlc0NvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaGFzSHRtbENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnaW5pdFNsaWRlcyAtIGh0bWwgY29udGVudCAtIHNsaWRlcyBsZW5ndGggPT4gJywgdGhpcy5ueHNTbGlkZXNXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnhzU2xpZGVzV3JhcHBlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5ueHNTbGlkZXNXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQuY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2xhc3NOYW1lID0gJ3N3aXBlci1zbGlkZSc7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLmNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItc2xpZGUnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmNsYXNzTmFtZSArPSAnIHN3aXBlci1zbGlkZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zbGlkZXNDb3VudCA9IHRoaXMubnhzU2xpZGVzV3JhcHBlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZygnaW5pdFNsaWRlcyAtIGh0bWwgY29udGVudCAtIHNsaWRlcyBjb3VudCA9PiAnLCB0aGlzLnNsaWRlc0NvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV2ZW50c0NvbGxlY3Rvcj8udW5zdWJzY3JpYmVBbGwoKTtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMuc2xpZGVySW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvU2xpZGVDaGFuZ2VkKCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzSHRtbENvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdzdWJzY3JpYmVUb1NsaWRlQ2hhbmdlZCBjYW5ub3QgYmUgc3Vic2NyaWJlZCA6IGhhcyBubyBodG1sIGNvbnRlbnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubnhzU2xpZGVzV3JhcHBlciB8fCAhdGhpcy5ueHNTbGlkZXNXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdzdWJzY3JpYmVUb1NsaWRlQ2hhbmdlZCBlcnJvciA6IG54c1NsaWRlc1dyYXBwZXIgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmxvZygnY2Fubm90IHVzZSBtdXRhdGlvbiBvYnNlcnZlcicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlcilcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgdGhpcy5sb2coJ3N1YnNjcmliZSB0byBtdXRhdGlvbiBvYnNlcnZlcicpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJMb2c6IE54c0Nhcm91c2VsQ29tcG9uZW50IC0+IHN1YnNjcmliZVRvU2xpZGVDaGFuZ2VkIC0+IG11dGF0aW9uc0xpc3RcIiwgbXV0YXRpb25zTGlzdCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkxvZzogTnhzQ2Fyb3VzZWxDb21wb25lbnQgLT4gc3Vic2NyaWJlVG9TbGlkZUNoYW5nZWQgLT4gTXV0YXRpb25PYnNlcnZlclwiKTtcbiAgICAgICAgICAgIHRoaXMubG9nKCdtdXRhdGlvbiBvYnNlcnZlciAtIGh0bWwgY29udGVudCBoYXMgY2hhbmdlZCcpO1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uc0xpc3QubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGxldCBtdXN0VXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAobXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8IG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG11c3RVcGRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobXVzdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNsaWRlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2xpZGVyKHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm54c1NsaWRlc1dyYXBwZXIubmF0aXZlRWxlbWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIGF0dHJpYnV0ZXM6IGZhbHNlLCB9KTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRTbGlkZXMoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTbGlkZXIodHJ1ZSk7XG4gICAgfVxuICAgIGdldE1haW5TbGlkZXJIZWlnaHQoKSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMgJiYgdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMuc2hvdykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLm9uTWFpblNsaWRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnMTAwJSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgxMDAgLSB0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0KSArICclJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogTnhzQ2Fyb3VzZWxPcHRpb25zLCBmb3JEaWFsb2c6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCFvcHRpb25zICYmIGZvckRpYWxvZykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHsgbnhzU2hvd05hdmlnYXRpb25CdWxsZXRzOiB0cnVlLCBsb29wOiB0cnVlLCBueHNUaHVtYm5haWxzOiB7IHNob3c6IHRydWUgfSwgZWZmZWN0OiAnc2xpZGUnLCBueHNTaG93TmF2aWdhdGlvbkFycm93czogdHJ1ZSwgbnhzU2hvd0ltYWdlc0NvdW50OiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIW9wdGlvbnMpXG4gICAgICAgICAgICBvcHRpb25zID0geyBueHNTaG93TmF2aWdhdGlvbkJ1bGxldHM6IHRydWUsIGxvb3A6IHRydWUsIG54c1RodW1ibmFpbHM6IHsgc2hvdzogZmFsc2UgfSwgZWZmZWN0OiAnc2xpZGUnLCBueHNTaG93TmF2aWdhdGlvbkFycm93czogdHJ1ZSwgbnhzU2hvd0ltYWdlc0NvdW50OiBmYWxzZSwgbnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zOiB7fSB9O1xuICAgICAgICBpZiAob3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscyA9IHsgc2hvdzogZmFsc2UgfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMuZWZmZWN0ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5lZmZlY3QgPSAnc2xpZGUnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNTaG93TmF2aWdhdGlvbkFycm93cyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzU2hvd05hdmlnYXRpb25BcnJvd3MgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoISFvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzPy5zaG93KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQgPSAyMDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMucGVyVmlldyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMucGVyVmlldyA9IDEwO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMuYnJlYWtwb2ludHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIDY0MDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgNzY4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA3LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAxMDI0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA4LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLm54c1RodW1ibmFpbHMpXG4gICAgICAgICAgICBvcHRpb25zLm54c1RodW1ibmFpbHMgPSB7IHNob3c6IGZhbHNlIH07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubnhzVGh1bWJuYWlscy5zaG93ICYmIHR5cGVvZiBvcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICBvcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCA9IDIwO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm54c1RodW1ibmFpbHMuc2hvdyAmJiB0eXBlb2Ygb3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgb3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcgPSAxMDtcblxuXG4gICAgICAgIGlmIChmb3JEaWFsb2cpXG4gICAgICAgICAgICBvcHRpb25zLm54c2Z1bGxzY3JlZW5PbkNsaWNrID0gZmFsc2U7XG4gICAgICAgIGlmIChvcHRpb25zLm54c1RodW1ibmFpbHMub25NYWluU2xpZGVyKVxuICAgICAgICAgICAgb3B0aW9ucy5ueHNTaG93TmF2aWdhdGlvbkJ1bGxldHMgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIHB1YmxpYyBzaG93RnVsbFNjcmVlbkNhcm91c2VsKGltYWdlczogTnhzQ2Fyb3VzZWxJbWFnZVtdLCB3cmFwcGVyQ2xhc3M/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdE9wdGlvbnModGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGE6IE54c0Nhcm91c2VsRGlhbG9nRGF0YSA9IHsgaW1hZ2VzLCB3cmFwcGVyQ2xhc3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMgfTtcbiAgICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdueHMtY2Fyb3VzZWwtZGlhbG9nJyxcbiAgICAgICAgICAgIHdpZHRoOiAhIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUgPyB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dTaXplLndpZHRoIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaGVpZ2h0OiAhIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUgPyB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dTaXplLmhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ0V4aXRhYmxlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBjcmVhdGVTbGlkZXIoZm9yY2VSZWNyZWF0ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZygncHJldmVudCBjcmVhdGVTbGlkZXIgOiBwbGF0Zm9ybSBpcyBzZXJ2ZXInKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubnhzU2xpZGVyQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZygnY2FuIG5vdCBjcmVhdGVTbGlkZXIgOiBueHNTbGlkZXJDb250YWluZXIgaXMgbm90IGRlZmluZWQgIScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nKCdjcmVhdGVTbGlkZXInLCB0aGlzLm54c1NsaWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuc2xpZGVzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdjYW4gbm90IGNyZWF0ZVNsaWRlciA6IHNsaWRlc0NvdW50ID09PSAwJyk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvU2xpZGVDaGFuZ2VkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2xpZGVySW5zdGFuY2UgJiYgIWZvcmNlUmVjcmVhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCdjYW4gcmUgY3JlYXRlIHNsaWRlciA9PiBzbGlkZXIgaXMgYWxyZWFkeSBjcmVhdGVkLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5wYWdpbmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIGVsOiAnLm54cy1jYXJvdXNlbC1wYWdpbmF0aW9uJyxcbiAgICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uID0ge1xuICAgICAgICAgICAgICAgIG5leHRFbDogJy5ueHMtY2Fyb3VzZWwtYnV0dG9uLW5leHQnLFxuICAgICAgICAgICAgICAgIHByZXZFbDogJy5ueHMtY2Fyb3VzZWwtYnV0dG9uLXByZXYnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghdGhpcy5zd2lwZXJMaWJyYXJ5KVxuICAgICAgICAgICAgICAgIHRoaXMuc3dpcGVyTGlicmFyeSA9IGF3YWl0IGltcG9ydChcInN3aXBlclwiKTtcbiAgICAgICAgICAgIGNvbnN0IFN3aXBlciA9IHRoaXMuc3dpcGVyTGlicmFyeS5kZWZhdWx0O1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMgJiYgdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMuc2hvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbHNPcHRpb25zOiBOeHNDYXJvdXNlbE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlclZpZXcsXG4gICAgICAgICAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmcmVlTW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hTbGlkZXNWaXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50czogdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMuYnJlYWtwb2ludHMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwYWNlQmV0d2VlbjogMTAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERpc2FibGUgcHJlbG9hZGluZyBvZiBhbGwgaW1hZ2VzXG4gICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbHNPcHRpb25zLnByZWxvYWRJbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGxhenkgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWxzT3B0aW9ucy5sYXp5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYm5haWxzU2xpZGVySW5zdGFuY2UgPSBuZXcgU3dpcGVyKHRoaXMubnhzVGh1bWJuYWlsc1NsaWRlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB0aHVtYm5haWxzT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnRodW1icyA9IHsgc3dpcGVyOiB0aGlzLnRodW1ibmFpbHNTbGlkZXJJbnN0YW5jZSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBwcmVsb2FkaW5nIG9mIGFsbCBpbWFnZXNcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZEltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBsYXp5IGxvYWRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGF6eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkxvZyB+IGZpbGU6IG54cy1jYXJvdXNlbC5jb21wb25lbnQudHMgfiBsaW5lIDMyMyB+IE54c0Nhcm91c2VsQ29tcG9uZW50IH4gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyIH4gICB0aGlzLm9wdGlvbnNcIiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVySW5zdGFuY2UgPSBuZXcgU3dpcGVyKHRoaXMubnhzU2xpZGVyQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmxvZygnc2xpZGVySW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCcsIHRoaXMuc2xpZGVySW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJJbnN0YW5jZS5vbignc2xpZGVDaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNsaWRlID0gdGhpcy5zbGlkZXJJbnN0YW5jZS5yZWFsSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKFwic2xpZGVDaGFuZ2VcIiwgdGhpcy5jdXJyZW50U2xpZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2xpZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNsaWRlckluc3RhbmNlLm9uKCdjbGljaycsIChldnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ254cy1jYXJvdXNlbC1idXR0b24nKSAhPT0gLTEgfHwgdGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXItcGFnaW5hdGlvbicpICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNsaWRlQ2xpY2submV4dChldnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm54c2Z1bGxzY3JlZW5PbkNsaWNrICYmIHRoaXMuaW1hZ2VzICYmIHRoaXMuaW1hZ2VzLmxlbmd0aCAmJiAhdGhpcy5oYXNIdG1sQ29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RnVsbFNjcmVlbkNhcm91c2VsKHRoaXMuaW1hZ2VzLCAnZnVsbHNjcmVlbi1jYXJvdXNlbCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NsaWRlQ2hhbmdlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnb1RvU2xpZGUoaW5kZXg6IG51bWJlciwgc3BlZWQ/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNsaWRlckluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNsaWRlckluc3RhbmNlLnNsaWRlVG8oaW5kZXgsIHNwZWVkKTtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNsaWRlckluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNsaWRlckluc3RhbmNlLnNsaWRlTmV4dCgpO1xuICAgIH1cbiAgICBwcmV2aW91cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNsaWRlckluc3RhbmNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnNsaWRlckluc3RhbmNlLnNsaWRlUHJldigpO1xuICAgIH1cbn1cbiJdfQ==
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbnhzLWNhcm91c2VsL254cy1jYXJvdXNlbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUssT0FBTyxFQUF3Qyx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JHLE9BQU8sRUFBeUIsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLDBDQUEwQztBQUMxQyxPQUFPLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBeUIsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNHLHdCQUF3QjtBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakUseUJBQXlCO0FBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQU9qRSxNQUFNLE9BQU8sb0JBQW9CO0lBK0I3QixZQUNZLFNBQW9CLEVBQ3BCLElBQVksRUFD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QyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQW1CO1FBQzdCLGtDQUFrQztRQUNsQyxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7O1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLFNBQVMsS0FBSSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBNU9KLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsdXhFQUE0QztnQkFFNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7O2FBQ3hDOzs7WUFoQlEsU0FBUztZQUg0RixNQUFNOzRDQXNEM0csTUFBTSxTQUFDLFdBQVc7WUFyRG9CLHVCQUF1Qix1QkFzRDdELFFBQVE7Ozt1QkFsQ1osZUFBZSxTQUFDLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTs4QkFFakUsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7bUJBRXJDLEtBQUs7cUJBSUwsS0FBSzt5QkFJTCxLQUFLLFNBQUMsU0FBUzs2QkFLZixLQUFLOzBCQU1MLE1BQU07eUJBR04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIElucHV0LCBWaWV3Q2hpbGQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBQTEFURk9STV9JRCwgSW5qZWN0LCBPcHRpb25hbCwgTmdab25lLCBDb250ZW50Q2hpbGRyZW4sIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbE9wdGlvbnMsIE54c0Nhcm91c2VsSW1hZ2UsIE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9ueHMtY2Fyb3VzZWwtdHlwZXMnO1xuaW1wb3J0IHsgTnhzQ2Fyb3VzZWxEaWFsb2dEYXRhLCBOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbnhzLWNhcm91c2VsLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEV2ZW50c0NvbGxlY3RvciB9IGZyb20gJ25leHRhbHlzLWpzLWhlbHBlcnMvZGlzdC9ldmVudHMnO1xuLy8gaW1wb3J0IFN3aXBlciBjb3JlIGFuZCByZXF1aXJlZCBtb2R1bGVzXG5pbXBvcnQgU3dpcGVyQ29yZSwgeyBOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uLCBBdXRvcGxheSwgTGF6eSwgU3dpcGVyLCBTd2lwZXJPcHRpb25zLCBUaHVtYnMgfSBmcm9tICdzd2lwZXInO1xuLy9WaXJ0dWFsLFNjcm9sbGJhcixBMTF5XG5pbXBvcnQgeyBTd2lwZXJDb21wb25lbnQgfSBmcm9tICdzd2lwZXIvYW5ndWxhcic7XG5pbXBvcnQgeyBOeHNTd2lwZXJUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vc3dpcGVyLWRpcmVjdGl2ZXMnO1xuXG4vLyBpbnN0YWxsIFN3aXBlciBtb2R1bGVzXG5Td2lwZXJDb3JlLnVzZShbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbiwgQXV0b3BsYXksIExhenksIFRodW1ic10pO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdueHMtY2Fyb3VzZWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ueHMtY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL254cy1jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIE54c0Nhcm91c2VsQ29tcG9uZW50IHtcbiAgICBAQ29udGVudENoaWxkcmVuKE54c1N3aXBlclRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgY29udGVudHMhOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnc3dpcGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgc3dpcGVyQ29tcG9uZW50PzogU3dpcGVyQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpXG4gICAgbGF6eSA9IHRydWU7XG4gICAgcHJpdmF0ZSBldmVudHNDb2xsZWN0b3IgPSBuZXcgRXZlbnRzQ29sbGVjdG9yKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZXM6IE54c0Nhcm91c2VsSW1hZ2VbXTtcbiAgICBvcHRpb25zOiBOeHNDYXJvdXNlbE9wdGlvbnMgPSBudWxsO1xuICAgIHRodW1ibmFpbHNPcHRpb25zOiBTd2lwZXJPcHRpb25zID0gbnVsbDtcbiAgICBASW5wdXQoJ29wdGlvbnMnKVxuICAgIHNldCBzZXRPcHRpb25zKHZhbDogTnhzQ2Fyb3VzZWxPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdE9wdGlvbnModmFsLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0VGh1bWJuYWlsc09wdGlvbnMoKTtcbiAgICB9XG4gICAgQElucHV0KClcbiAgICBoYXNIdG1sQ29udGVudCA9IGZhbHNlO1xuICAgIHNsaWRlc0NvdW50OiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgc3dpcGVySW5zdGFuY2U6IFN3aXBlcjtcbiAgICB0aHVtYm5haWxzU3dpcGVySW5zdGFuY2U6IFN3aXBlcjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgcHVibGljIGN1cnJlbnRTbGlkZSA9IDA7XG4gICAgQE91dHB1dCgpXG4gICAgc2xpZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBQb2ludGVyRXZlbnQ+KCk7XG4gICAgaXNCcm93c2VyID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBtYXREaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZz86IE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnLFxuICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKVxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSB7IGRlYnVnOiBmYWxzZSB9O1xuICAgICAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgICAgIHRoaXMubG9nKCdjb25zdHJ1Y3RvciAtIGlzQnJvd3NlcicsIHRoaXMuaXNCcm93c2VyKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXREZWZhdWx0T3B0aW9ucyh1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5kZWJ1ZylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc29sZS5sb2coJ1tOeHNDYXJvdXNlbF0nLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudHNDb2xsZWN0b3I/LnVuc3Vic2NyaWJlQWxsKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpLmNvbnRlbnRzJywgdGhpcy5jb250ZW50cyk7XG4gICAgICAgIC8vIHRoaXMuaW5pdFNsaWRlcygpO1xuICAgICAgICAvLyB0aGlzLmNyZWF0ZVNsaWRlcih0cnVlKTtcbiAgICB9XG4gICAgZ2V0TWFpblNsaWRlckhlaWdodCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscyAmJiB0aGlzLm9wdGlvbnMubnhzVGh1bWJuYWlscy5zaG93KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMub25NYWluU2xpZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcxMDAlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDEwMCAtIHRoaXMub3B0aW9ucy5ueHNUaHVtYm5haWxzLnBlcmNlbnRIZWlnaHQpICsgJyUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBOeHNDYXJvdXNlbE9wdGlvbnMsIGZvckRpYWxvZzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIW9wdGlvbnMgJiYgZm9yRGlhbG9nKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG54c1Nob3dOYXZpZ2F0aW9uQnVsbGV0czogdHJ1ZSwgbG9vcDogdHJ1ZSwgbnhzVGh1bWJuYWlsczogeyBzaG93OiB0cnVlIH0sIGVmZmVjdDogJ3NsaWRlJywgbnhzU2hvd05hdmlnYXRpb25BcnJvd3M6IHRydWUsIG54c1Nob3dJbWFnZXNDb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXp5OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBueHNTaG93TmF2aWdhdGlvbkJ1bGxldHM6IHRydWUsIGxvb3A6IHRydWUsXG4gICAgICAgICAgICAgICAgbnhzVGh1bWJuYWlsczogeyBzaG93OiBmYWxzZSB9LCBlZmZlY3Q6ICdzbGlkZScsIG54c1Nob3dOYXZpZ2F0aW9uQXJyb3dzOiB0cnVlLCBueHNTaG93SW1hZ2VzQ291bnQ6IGZhbHNlLCBueHNDYXJvdXNlbERpYWxvZ09wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNUaHVtYm5haWxzID0geyBzaG93OiBmYWxzZSB9O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5lZmZlY3QgPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLmVmZmVjdCA9ICdzbGlkZSc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1Nob3dOYXZpZ2F0aW9uQXJyb3dzID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICBvcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucy5ueHNTaG93TmF2aWdhdGlvbkFycm93cyA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghIW9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHM/LnNob3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dPcHRpb25zLm54c1RodW1ibmFpbHMucGVyY2VudEhlaWdodCA9IDIwO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJWaWV3ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJWaWV3ID0gMTA7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMubnhzVGh1bWJuYWlscy5icmVha3BvaW50cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgNjQwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICA3Njg6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIDEwMjQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDgsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbnMubnhzVGh1bWJuYWlscylcbiAgICAgICAgICAgIG9wdGlvbnMubnhzVGh1bWJuYWlscyA9IHsgc2hvdzogZmFsc2UgfTtcblxuICAgICAgICBpZiAob3B0aW9ucy5ueHNUaHVtYm5haWxzLnNob3cgJiYgdHlwZW9mIG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIG9wdGlvbnMubnhzVGh1bWJuYWlscy5wZXJjZW50SGVpZ2h0ID0gMjA7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubnhzVGh1bWJuYWlscy5zaG93ICYmIHR5cGVvZiBvcHRpb25zLm54c1RodW1ibmFpbHMucGVyVmlldyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICBvcHRpb25zLm54c1RodW1ibmFpbHMucGVyVmlldyA9IDEwO1xuXG5cbiAgICAgICAgaWYgKGZvckRpYWxvZylcbiAgICAgICAgICAgIG9wdGlvbnMubnhzZnVsbHNjcmVlbk9uQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdGlvbnMubnhzVGh1bWJuYWlscy5vbk1haW5TbGlkZXIpXG4gICAgICAgICAgICBvcHRpb25zLm54c1Nob3dOYXZpZ2F0aW9uQnVsbGV0cyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sYXp5ID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgIG9wdGlvbnMubGF6eSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm5hdmlnYXRpb24gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgb3B0aW9ucy5uYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnBhZ2luYXRpb24gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgb3B0aW9ucy5wYWdpbmF0aW9uID0geyBjbGlja2FibGU6IHRydWUgfTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJMb2cgfiBmaWxlOiBueHMtY2Fyb3VzZWwuY29tcG9uZW50LnRzIH4gbGluZSAyNzIgfiBOeHNDYXJvdXNlbENvbXBvbmVudCB+IHNldERlZmF1bHRPcHRpb25zIH4gb3B0aW9uc1wiLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRodW1ibmFpbHNPcHRpb25zKCkge1xuICAgICAgICBpZiAoISF0aGlzLm9wdGlvbnM/Lm54c1RodW1ibmFpbHM/LnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsc09wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMucGVyVmlldyxcbiAgICAgICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmcmVlTW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAvLyB3YXRjaFNsaWRlc1Zpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBicmVha3BvaW50czogdGhpcy5vcHRpb25zLm54c1RodW1ibmFpbHMuYnJlYWtwb2ludHMsXG4gICAgICAgICAgICAgICAgLy8gc3BhY2VCZXR3ZWVuOiAxMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgLy8gRGlzYWJsZSBwcmVsb2FkaW5nIG9mIGFsbCBpbWFnZXNcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1ibmFpbHNPcHRpb25zLnByZWxvYWRJbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBFbmFibGUgbGF6eSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYm5haWxzT3B0aW9ucy5sYXp5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoaXMudGh1bWJuYWlsc1NsaWRlckluc3RhbmNlID0gbmV3IFN3aXBlcih0aGlzLm54c1RodW1ibmFpbHNTbGlkZXJDb250YWluZXIubmF0aXZlRWxlbWVudCwgdGh1bWJuYWlsc09wdGlvbnMpO1xuICAgICAgICAgICAgLy8gdGhpcy5vcHRpb25zLnRodW1icyA9IHsgc3dpcGVyOiB0aGlzLnRodW1ibmFpbHNTbGlkZXJJbnN0YW5jZSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBzaG93RnVsbFNjcmVlbkNhcm91c2VsKGltYWdlczogTnhzQ2Fyb3VzZWxJbWFnZVtdLCB3cmFwcGVyQ2xhc3M/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucyA9IHRoaXMuc2V0RGVmYXVsdE9wdGlvbnModGhpcy5vcHRpb25zLm54c0Nhcm91c2VsRGlhbG9nT3B0aW9ucywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGE6IE54c0Nhcm91c2VsRGlhbG9nRGF0YSA9IHsgaW1hZ2VzLCB3cmFwcGVyQ2xhc3MsIG9wdGlvbnM6IHRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ09wdGlvbnMgfTtcbiAgICAgICAgdGhpcy5tYXREaWFsb2cub3BlbihOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdueHMtY2Fyb3VzZWwtZGlhbG9nJyxcbiAgICAgICAgICAgIHdpZHRoOiAhIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUgPyB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dTaXplLndpZHRoIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaGVpZ2h0OiAhIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ1NpemUgPyB0aGlzLm9wdGlvbnMubnhzQ2Fyb3VzZWxEaWFsb2dTaXplLmhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogIXRoaXMub3B0aW9ucy5ueHNDYXJvdXNlbERpYWxvZ0V4aXRhYmxlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ29Ub1NsaWRlKGluZGV4OiBudW1iZXIsIHNwZWVkPzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3dpcGVySW5zdGFuY2U/LnNsaWRlVG8oaW5kZXgsIHNwZWVkKTtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgdGhpcy5zd2lwZXJJbnN0YW5jZT8uc2xpZGVOZXh0KCk7XG4gICAgfVxuICAgIHByZXZpb3VzKCkge1xuICAgICAgICB0aGlzLnN3aXBlckluc3RhbmNlPy5zbGlkZVByZXYoKTtcbiAgICB9XG4gICAgb25Td2lwZXJUaHVtYm5haWxzKGluc3RhbmNlOiBTd2lwZXIpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubnhzVGh1bWJuYWlscz8uc2hvdylcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsc1N3aXBlckluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsc1N3aXBlckluc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAvLyBpZiAodGhpcy5vcHRpb25zPy5ueHNUaHVtYm5haWxzPy5zaG93KSB7XG4gICAgICAgIC8vICAgICBjb25zdCBvcHRpb25zQ2xvbmUgPSBNYWluSGVscGVycy5jbG9uZU9iamVjdCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAvLyAgICAgb3B0aW9uc0Nsb25lLnRodW1icyA9IHsgc3dpcGVyOiB0aGlzLnRodW1ibmFpbHNTd2lwZXJJbnN0YW5jZSB9O1xuICAgICAgICAvLyAgICAgLy8gdGhpcy5vcHRpb25zID0gb3B0aW9uc0Nsb25lO1xuICAgICAgICAvLyAgICAgLy8gdGhpcy5vcHRpb25zID0geyAuLi50aGlzLm9wdGlvbnMsIHRodW1iczogeyBzd2lwZXI6IHRoaXMudGh1bWJuYWlsc1N3aXBlckluc3RhbmNlIH0gfTtcbiAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKFwiTG9nIH4gZmlsZTogbnhzLWNhcm91c2VsLmNvbXBvbmVudC50cyB+IGxpbmUgNDE2IH4gTnhzQ2Fyb3VzZWxDb21wb25lbnQgfiBvblN3aXBlclRodW1ibmFpbHMgfiAgICB0aGlzLm9wdGlvbnMgXCIsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIC8vICAgICB0aGlzLm9wdGlvbnMudGh1bWJzID0geyBzd2lwZXI6IHRoaXMudGh1bWJuYWlsc1N3aXBlckluc3RhbmNlIH07XG4gICAgICAgIC8vIH1cbiAgICB9XG4gICAgb25Td2lwZXIoaW5zdGFuY2U6IFN3aXBlcikge1xuICAgICAgICB0aGlzLmxvZygnc3dpcGVyIHJlYWR5IC0gaW5zdGFuY2UnLCBpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuc3dpcGVySW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgdGhpcy5zd2lwZXJJbnN0YW5jZS5vbignY2xpY2snLCAoc3dpcGVySW5zdGFuY2UsIGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJMb2cgfiBmaWxlOiBueHMtY2Fyb3VzZWwuY29tcG9uZW50LnRzIH4gbGluZSAzOTIgfiBOeHNDYXJvdXNlbENvbXBvbmVudCB+IHRoaXMuc3dpcGVySW5zdGFuY2Uub24gfiBldnRcIiwgZXZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdueHMtY2Fyb3VzZWwtYnV0dG9uJykgIT09IC0xIHx8IHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignc3dpcGVyLXBhZ2luYXRpb24nKSAhPT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5ydW5JblpvbmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2xpZGVDbGljay5uZXh0KGV2dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ueHNmdWxsc2NyZWVuT25DbGljayAmJiB0aGlzLmltYWdlcyAmJiB0aGlzLmltYWdlcy5sZW5ndGggJiYgIXRoaXMuaGFzSHRtbENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RnVsbFNjcmVlbkNhcm91c2VsKHRoaXMuaW1hZ2VzLCAnZnVsbHNjcmVlbi1jYXJvdXNlbCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwcml2YXRlIHJ1bkluWm9uZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkPihjYWxsYmFjazogVCwgLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgaWYgKCF0aGlzLnpvbmUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnpvbmUucnVuKCgpID0+IGNhbGxiYWNrKGFyZ3MpKTtcbiAgICB9XG5cbiAgICBvblNsaWRlQ2hhbmdlKGluc3RhbmNlczogU3dpcGVyW10pIHtcbiAgICAgICAgLy8gdGhpcy5zd2lwZXJJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAvLyB0aGlzLmxvZygnc2xpZGUgY2hhbmdlIC0gaW5zdGFuY2UnLCBpbnN0YW5jZSk7XG4gICAgICAgIHRoaXMucnVuSW5ab25lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNsaWRlID0gdGhpcy5zd2lwZXJJbnN0YW5jZT8ucmVhbEluZGV4IHx8IDA7XG4gICAgICAgICAgICB0aGlzLmxvZygnc2xpZGUgY2hhbmdlIC0gY3VycmVudFNsaWRlJywgdGhpcy5jdXJyZW50U2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZUNoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNsaWRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -6,7 +6,8 @@ import { MatIconModule } from '@angular/material/icon';
6
6
  import { MatDialogModule } from '@angular/material/dialog';
7
7
  import { NxsCarouselComponent } from './nxs-carousel.component';
8
8
  import { NxsCarouselModuleConfig } from './nxs-carousel-types';
9
- import { ObserversModule } from '@angular/cdk/observers';
9
+ import { SwiperModule } from 'swiper/angular';
10
+ import { NxsSwiperTemplateDirective } from './swiper-directives';
10
11
  export class NxsCarouselModule {
11
12
  static forRoot(config) {
12
13
  return {
@@ -22,17 +23,19 @@ NxsCarouselModule.decorators = [
22
23
  declarations: [
23
24
  NxsCarouselComponent,
24
25
  NxsCarouselDialogComponent,
26
+ NxsSwiperTemplateDirective,
25
27
  ],
26
28
  imports: [
27
29
  CommonModule,
28
30
  MatIconModule,
29
31
  MatButtonModule,
30
32
  MatDialogModule,
31
- ObserversModule,
33
+ SwiperModule,
32
34
  ],
33
35
  exports: [
34
36
  NxsCarouselComponent,
37
+ NxsSwiperTemplateDirective,
35
38
  ],
36
39
  },] }
37
40
  ];
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbnhzLWNhcm91c2VsL254cy1jYXJvdXNlbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWtCekQsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWdDO1FBQ2xELE9BQU87WUFDSCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQ3pEO1NBQ0osQ0FBQztJQUNOLENBQUM7OztZQXhCSixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFO29CQUNWLG9CQUFvQjtvQkFDcEIsMEJBQTBCO2lCQUM3QjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsWUFBWTtvQkFDWixhQUFhO29CQUNiLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixlQUFlO2lCQUNsQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ0wsb0JBQW9CO2lCQUN2QjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbnhzLWNhcm91c2VsLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4vbnhzLWNhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbnhzLWNhcm91c2VsLXR5cGVzJztcbmltcG9ydCB7IE9ic2VydmVyc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBOeHNDYXJvdXNlbENvbXBvbmVudCxcbiAgICAgICAgTnhzQ2Fyb3VzZWxEaWFsb2dDb21wb25lbnQsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIE9ic2VydmVyc01vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgTnhzQ2Fyb3VzZWxDb21wb25lbnQsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTnhzQ2Fyb3VzZWxNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBOeHNDYXJvdXNlbE1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TnhzQ2Fyb3VzZWxNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBOeHNDYXJvdXNlbE1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTnhzQ2Fyb3VzZWxNb2R1bGVDb25maWcsIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59Il19
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnhzLWNhcm91c2VsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbnhzLWNhcm91c2VsL254cy1jYXJvdXNlbC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQW9CakUsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWdDO1FBQ2xELE9BQU87WUFDSCxRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQ3pEO1NBQ0osQ0FBQztJQUNOLENBQUM7OztZQTFCSixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFO29CQUNWLG9CQUFvQjtvQkFDcEIsMEJBQTBCO29CQUMxQiwwQkFBMEI7aUJBQzdCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxZQUFZO29CQUNaLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixlQUFlO29CQUNmLFlBQVk7aUJBQ2Y7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLG9CQUFvQjtvQkFDcEIsMEJBQTBCO2lCQUM3QjthQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vbnhzLWNhcm91c2VsLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbENvbXBvbmVudCB9IGZyb20gJy4vbnhzLWNhcm91c2VsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHNDYXJvdXNlbE1vZHVsZUNvbmZpZyB9IGZyb20gJy4vbnhzLWNhcm91c2VsLXR5cGVzJztcbmltcG9ydCB7IFN3aXBlck1vZHVsZSB9IGZyb20gJ3N3aXBlci9hbmd1bGFyJztcbmltcG9ydCB7IE54c1N3aXBlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9zd2lwZXItZGlyZWN0aXZlcyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE54c0Nhcm91c2VsQ29tcG9uZW50LFxuICAgICAgICBOeHNDYXJvdXNlbERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgTnhzU3dpcGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgICAgIFN3aXBlck1vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgTnhzQ2Fyb3VzZWxDb21wb25lbnQsXG4gICAgICAgIE54c1N3aXBlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE54c0Nhcm91c2VsTW9kdWxlIHtcbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3QoY29uZmlnPzogTnhzQ2Fyb3VzZWxNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE54c0Nhcm91c2VsTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogTnhzQ2Fyb3VzZWxNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE54c0Nhcm91c2VsTW9kdWxlQ29uZmlnLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxufSJdfQ==