ctt-babylon 0.13.34 → 0.13.35
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.
- package/esm2022/lib/components/core/babylon-he-me-svg-text-cta-mot/babylon-he-me-svg-text-cta-mot.component.mjs +104 -0
- package/esm2022/lib/components/core/babylon-he-me-svg-text-cta-mot/index.mjs +2 -0
- package/esm2022/lib/components/core/babylon-sli-c3-svg-vid-cta/babylon-sli-c3-svg-vid-cta.component.mjs +98 -0
- package/esm2022/lib/components/core/babylon-sli-c3-svg-vid-cta/index.mjs +2 -0
- package/esm2022/lib/components/core/index.mjs +3 -1
- package/esm2022/lib/directives/sliders/swiper-init.directive.mjs +215 -0
- package/fesm2022/ctt-babylon.mjs +452 -48
- package/fesm2022/ctt-babylon.mjs.map +1 -1
- package/lib/components/core/babylon-he-me-svg-text-cta-mot/babylon-he-me-svg-text-cta-mot.component.d.ts +22 -0
- package/lib/components/core/babylon-he-me-svg-text-cta-mot/index.d.ts +1 -0
- package/lib/components/core/babylon-sli-c3-svg-vid-cta/babylon-sli-c3-svg-vid-cta.component.d.ts +14 -0
- package/lib/components/core/babylon-sli-c3-svg-vid-cta/index.d.ts +1 -0
- package/lib/components/core/index.d.ts +2 -0
- package/lib/directives/sliders/swiper-init.directive.d.ts +14 -0
- package/package.json +1 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { Directive, Inject, PLATFORM_ID, } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class SwiperInitDirective {
|
|
5
|
+
constructor(host, platformId) {
|
|
6
|
+
this.host = host;
|
|
7
|
+
this.platformId = platformId;
|
|
8
|
+
this.arrowCleanupFns = [];
|
|
9
|
+
}
|
|
10
|
+
async ngAfterViewInit() {
|
|
11
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
12
|
+
console.log('[SwiperInitDirective] No es browser, salgo');
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const parent = this.host.nativeElement;
|
|
16
|
+
const dataset = parent.dataset;
|
|
17
|
+
console.log('[SwiperInitDirective] ngAfterViewInit', {
|
|
18
|
+
parent,
|
|
19
|
+
dataset,
|
|
20
|
+
});
|
|
21
|
+
// Helpers para leer data-*
|
|
22
|
+
const get = (key) => dataset[key];
|
|
23
|
+
const getBool = (key) => get(key) === 'true';
|
|
24
|
+
const getNum = (key, fallback = 0) => {
|
|
25
|
+
const v = Number(get(key));
|
|
26
|
+
return Number.isFinite(v) ? v : fallback;
|
|
27
|
+
};
|
|
28
|
+
const sliderName = get('slider_name');
|
|
29
|
+
if (!sliderName) {
|
|
30
|
+
console.warn('[SwiperInitDirective] Sin data-slider_name en el parent', parent);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const sliderSelector = parent.querySelector('.' + sliderName);
|
|
34
|
+
if (!sliderSelector) {
|
|
35
|
+
console.warn('[SwiperInitDirective] No encuentro el contenedor .', sliderName, ' dentro de ', parent);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Swiper ya inicializado → salir
|
|
39
|
+
if (sliderSelector.classList.contains('swiper-initialized')) {
|
|
40
|
+
console.log('[SwiperInitDirective] Swiper ya inicializado en este contenedor, salgo');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// ====== LECTURA DE DATA-ATTRIBUTES ======
|
|
44
|
+
const showDots = getBool('slider_showdots');
|
|
45
|
+
const showButtons = getBool('slider_showbtns');
|
|
46
|
+
const fade = getBool('slider_fade');
|
|
47
|
+
const center = getBool('slider_centermode');
|
|
48
|
+
const autoplay = getBool('slider_autoplay');
|
|
49
|
+
const vertical = getBool('slider_vertical');
|
|
50
|
+
const rtl = getBool('slider_rtl');
|
|
51
|
+
const draggable = get('slider_draggable') !== 'false';
|
|
52
|
+
const adaptiveHeight = getBool('slider_adaptive_height');
|
|
53
|
+
const variableWidth = getBool('slider_variable_width');
|
|
54
|
+
const freeMode = getBool('slider_freemode');
|
|
55
|
+
const speed = getNum('slider_speed', 750);
|
|
56
|
+
const infinite = getBool('slides_infinite');
|
|
57
|
+
// contenedores
|
|
58
|
+
const navContainer = parent.querySelector('.js-slider-arrows');
|
|
59
|
+
const dotsContainer = parent.querySelector('.js-slider-dots');
|
|
60
|
+
// ====== SVG FLECHAS ======
|
|
61
|
+
const arrowSVG = `
|
|
62
|
+
<svg width="35" height="70" viewBox="0 0 35 70" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
63
|
+
<path d="M35 70C30.4037 70 25.8525 69.0947 21.6061 67.3358C17.3597 65.5769 13.5013 62.9988 10.2513 59.7487C7.00121 56.4987 4.42313 52.6403 2.66421 48.3939C0.9053 44.1475 -4.0182e-07 39.5963 0 35C4.0182e-07 30.4037 0.905303 25.8525 2.66422 21.6061C4.42313 17.3597 7.00121 13.5013 10.2513 10.2513C13.5013 7.00121 17.3597 4.42313 21.6061 2.66421C25.8525 0.9053 30.4037 -6.0273e-07 35 0V35V70Z" fill="#D0A67B"/>
|
|
64
|
+
<path d="M16.7368 28.126C16.5683 27.9578 16.2949 27.9577 16.1265 28.126C15.958 28.2944 15.9582 28.5678 16.1265 28.7363L22.6821 35.292L16.1265 41.8477C15.9579 42.0162 15.9579 42.2895 16.1265 42.458C16.295 42.6265 16.5683 42.6265 16.7368 42.458L23.5972 35.5977C23.6816 35.5133 23.7242 35.4026 23.7241 35.292C23.7241 35.1816 23.6814 35.0715 23.5972 34.9873L16.7368 28.126Z" fill="white"/>
|
|
65
|
+
</svg>`.trim();
|
|
66
|
+
if (showButtons && navContainer) {
|
|
67
|
+
if (!navContainer.querySelector('.swiper-button-prev')) {
|
|
68
|
+
const prev = document.createElement('div');
|
|
69
|
+
prev.className = 'swiper-button-prev';
|
|
70
|
+
prev.innerHTML = arrowSVG;
|
|
71
|
+
prev.style.transform = 'rotate(180deg)'; // Prev girada
|
|
72
|
+
navContainer.appendChild(prev);
|
|
73
|
+
}
|
|
74
|
+
if (!navContainer.querySelector('.swiper-button-next')) {
|
|
75
|
+
const next = document.createElement('div');
|
|
76
|
+
next.className = 'swiper-button-next';
|
|
77
|
+
next.innerHTML = arrowSVG;
|
|
78
|
+
navContainer.appendChild(next);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ====== BREAKPOINTS ======
|
|
82
|
+
const slides_pc = getNum('slides_pc', 1);
|
|
83
|
+
const slides_laptop = getNum('slides_laptop', slides_pc);
|
|
84
|
+
const slides_tablet = getNum('slides_tablet', slides_laptop);
|
|
85
|
+
const slides_mobile = getNum('slides_mobile', slides_tablet);
|
|
86
|
+
const slides_mobile_small = getNum('slides_mobile_small', slides_mobile);
|
|
87
|
+
const slides_mobile_xsmall = getNum('slides_mobile_xsmall', slides_mobile_small);
|
|
88
|
+
// ====== OPCIONES SWIPER ======
|
|
89
|
+
const swiperOptions = {
|
|
90
|
+
direction: vertical ? 'vertical' : 'horizontal',
|
|
91
|
+
speed,
|
|
92
|
+
loop: infinite,
|
|
93
|
+
centeredSlides: center,
|
|
94
|
+
effect: fade ? 'fade' : 'slide',
|
|
95
|
+
autoplay: autoplay ? { delay: 5000 } : false,
|
|
96
|
+
allowTouchMove: draggable,
|
|
97
|
+
observer: true,
|
|
98
|
+
observeParents: true,
|
|
99
|
+
autoHeight: adaptiveHeight,
|
|
100
|
+
freeMode: freeMode ? { enabled: true, momentum: true } : false,
|
|
101
|
+
slidesPerView: variableWidth ? 'auto' : slides_mobile_xsmall,
|
|
102
|
+
spaceBetween: variableWidth ? 16 : 0,
|
|
103
|
+
navigation: showButtons && navContainer
|
|
104
|
+
? {
|
|
105
|
+
nextEl: navContainer.querySelector('.swiper-button-next'),
|
|
106
|
+
prevEl: navContainer.querySelector('.swiper-button-prev'),
|
|
107
|
+
}
|
|
108
|
+
: undefined,
|
|
109
|
+
pagination: showDots && dotsContainer
|
|
110
|
+
? { el: dotsContainer, clickable: true }
|
|
111
|
+
: undefined,
|
|
112
|
+
breakpoints: {
|
|
113
|
+
540: {
|
|
114
|
+
slidesPerView: variableWidth ? 'auto' : slides_mobile_small,
|
|
115
|
+
freeMode: freeMode ? { enabled: true } : false,
|
|
116
|
+
},
|
|
117
|
+
768: {
|
|
118
|
+
slidesPerView: variableWidth ? 'auto' : slides_mobile,
|
|
119
|
+
freeMode: freeMode ? { enabled: true } : false,
|
|
120
|
+
},
|
|
121
|
+
1024: {
|
|
122
|
+
slidesPerView: variableWidth ? 'auto' : slides_tablet,
|
|
123
|
+
freeMode: freeMode ? { enabled: true } : false,
|
|
124
|
+
},
|
|
125
|
+
1280: {
|
|
126
|
+
slidesPerView: variableWidth ? 'auto' : slides_laptop,
|
|
127
|
+
freeMode: freeMode ? { enabled: true } : false,
|
|
128
|
+
},
|
|
129
|
+
1366: {
|
|
130
|
+
slidesPerView: variableWidth ? 'auto' : slides_pc,
|
|
131
|
+
freeMode: freeMode ? { enabled: true } : false,
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
// ====== INIT SWIPER ======
|
|
136
|
+
if (!Swiper) {
|
|
137
|
+
console.error('[SwiperInitDirective] Swiper global no encontrado (window.Swiper es falsy)');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
console.log('[SwiperInitDirective] INIT SWIPER', {
|
|
141
|
+
sliderName,
|
|
142
|
+
sliderSelector,
|
|
143
|
+
options: swiperOptions,
|
|
144
|
+
swiperType: typeof Swiper,
|
|
145
|
+
});
|
|
146
|
+
this.swiperInstance = new Swiper(sliderSelector, swiperOptions);
|
|
147
|
+
// Posición flechas tipo --sliderNav__position
|
|
148
|
+
this.initArrowPositioning(parent);
|
|
149
|
+
}
|
|
150
|
+
ngOnDestroy() {
|
|
151
|
+
if (!isPlatformBrowser(this.platformId))
|
|
152
|
+
return;
|
|
153
|
+
if (this.swiperInstance?.destroy) {
|
|
154
|
+
this.swiperInstance.destroy(true, true);
|
|
155
|
+
}
|
|
156
|
+
this.arrowCleanupFns.forEach((fn) => fn());
|
|
157
|
+
this.arrowCleanupFns = [];
|
|
158
|
+
}
|
|
159
|
+
// ======== POSICIÓN DE FLECHAS (equivalente js-slider_fix-arrows) ========
|
|
160
|
+
initArrowPositioning(parent) {
|
|
161
|
+
const sliders = parent.querySelectorAll('.js-slider_fix-arrows');
|
|
162
|
+
if (!sliders.length)
|
|
163
|
+
return;
|
|
164
|
+
sliders.forEach((slider) => {
|
|
165
|
+
const section = slider.closest('.js-active-slider') || parent;
|
|
166
|
+
if (!section)
|
|
167
|
+
return;
|
|
168
|
+
const calcPosition = () => {
|
|
169
|
+
let heightSelector = null;
|
|
170
|
+
const mobileSel = slider.querySelector('.js-slider_fix-arrows-zone.mobile');
|
|
171
|
+
const desktopSel = slider.querySelector('.js-slider_fix-arrows-zone.desktop');
|
|
172
|
+
const genericSel = slider.querySelector('.js-slider_fix-arrows-zone');
|
|
173
|
+
if (mobileSel && window.innerWidth <= 1279) {
|
|
174
|
+
heightSelector = mobileSel;
|
|
175
|
+
}
|
|
176
|
+
else if (desktopSel && window.innerWidth >= 1280) {
|
|
177
|
+
heightSelector = desktopSel;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
heightSelector = genericSel;
|
|
181
|
+
}
|
|
182
|
+
if (!heightSelector)
|
|
183
|
+
return;
|
|
184
|
+
const relative = heightSelector.closest('.relative');
|
|
185
|
+
if (!relative)
|
|
186
|
+
return;
|
|
187
|
+
const rect = heightSelector.getBoundingClientRect();
|
|
188
|
+
const parentRect = relative.getBoundingClientRect();
|
|
189
|
+
const height = rect.top - parentRect.top + rect.height / 2;
|
|
190
|
+
section.style.setProperty('--sliderNav__position', `${height}px`);
|
|
191
|
+
};
|
|
192
|
+
calcPosition();
|
|
193
|
+
setTimeout(calcPosition, 500);
|
|
194
|
+
const onScroll = () => calcPosition();
|
|
195
|
+
const onResize = () => calcPosition();
|
|
196
|
+
window.addEventListener('scroll', onScroll, { passive: true });
|
|
197
|
+
window.addEventListener('resize', onResize, { passive: true });
|
|
198
|
+
this.arrowCleanupFns.push(() => window.removeEventListener('scroll', onScroll));
|
|
199
|
+
this.arrowCleanupFns.push(() => window.removeEventListener('resize', onResize));
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwiperInitDirective, deps: [{ token: i0.ElementRef }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
203
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: SwiperInitDirective, isStandalone: true, selector: ".js-active-slider,[appSwiperInit]", ngImport: i0 }); }
|
|
204
|
+
}
|
|
205
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SwiperInitDirective, decorators: [{
|
|
206
|
+
type: Directive,
|
|
207
|
+
args: [{
|
|
208
|
+
selector: '.js-active-slider,[appSwiperInit]',
|
|
209
|
+
standalone: true,
|
|
210
|
+
}]
|
|
211
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: undefined, decorators: [{
|
|
212
|
+
type: Inject,
|
|
213
|
+
args: [PLATFORM_ID]
|
|
214
|
+
}] }] });
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGVyLWluaXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2RpcmVjdGl2ZXMvc2xpZGVycy9zd2lwZXItaW5pdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBRU4sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDOztBQVN2QixNQUFNLE9BQU8sbUJBQW1CO0lBSTVCLFlBQ1ksSUFBNkIsRUFDUixVQUFrQjtRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUF5QjtRQUNSLGVBQVUsR0FBVixVQUFVLENBQVE7UUFKM0Msb0JBQWUsR0FBc0IsRUFBRSxDQUFDO0lBSzdDLENBQUM7SUFFSixLQUFLLENBQUMsZUFBZTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUMxRCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBdUIsQ0FBQztRQUUvQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxFQUFFO1lBQ2pELE1BQU07WUFDTixPQUFPO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFzQixFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDO1FB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QztZQUUvRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDM0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FDakQsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUMzQixNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUNqRCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXRSUSxtQkFBbUIsNENBTWhCLFdBQVc7bUdBTmQsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjs7MEJBT1EsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBTd2lwZXIgZ2xvYmFsICh2aWVuZSBkZWwgYW5ndWxhci5qc29uIC0+IHNjcmlwdHMpXG5kZWNsYXJlIGNvbnN0IFN3aXBlcjogYW55O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJy5qcy1hY3RpdmUtc2xpZGVyLFthcHBTd2lwZXJJbml0XScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3dpcGVySW5pdERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBzd2lwZXJJbnN0YW5jZT86IGFueTtcbiAgICBwcml2YXRlIGFycm93Q2xlYW51cEZuczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IG9iamVjdFxuICAgICkge31cblxuICAgIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1N3aXBlckluaXREaXJlY3RpdmVdIE5vIGVzIGJyb3dzZXIsIHNhbGdvJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgZGF0YXNldCA9IHBhcmVudC5kYXRhc2V0IGFzIERPTVN0cmluZ01hcDtcblxuICAgICAgICBjb25zb2xlLmxvZygnW1N3aXBlckluaXREaXJlY3RpdmVdIG5nQWZ0ZXJWaWV3SW5pdCcsIHtcbiAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEhlbHBlcnMgcGFyYSBsZWVyIGRhdGEtKlxuICAgICAgICBjb25zdCBnZXQgPSAoa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gZGF0YXNldFtrZXldO1xuICAgICAgICBjb25zdCBnZXRCb29sID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiBnZXQoa2V5KSA9PT0gJ3RydWUnO1xuICAgICAgICBjb25zdCBnZXROdW0gPSAoa2V5OiBzdHJpbmcsIGZhbGxiYWNrID0gMCk6IG51bWJlciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ID0gTnVtYmVyKGdldChrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodikgPyB2IDogZmFsbGJhY2s7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3Qgc2xpZGVyTmFtZSA9IGdldCgnc2xpZGVyX25hbWUnKTtcbiAgICAgICAgaWYgKCFzbGlkZXJOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ1tTd2lwZXJJbml0RGlyZWN0aXZlXSBTaW4gZGF0YS1zbGlkZXJfbmFtZSBlbiBlbCBwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhcmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNsaWRlclNlbGVjdG9yID0gcGFyZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICAgICAgICAgJy4nICsgc2xpZGVyTmFtZVxuICAgICAgICApO1xuICAgICAgICBpZiAoIXNsaWRlclNlbGVjdG9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ1tTd2lwZXJJbml0RGlyZWN0aXZlXSBObyBlbmN1ZW50cm8gZWwgY29udGVuZWRvciAuJyxcbiAgICAgICAgICAgICAgICBzbGlkZXJOYW1lLFxuICAgICAgICAgICAgICAgICcgZGVudHJvIGRlICcsXG4gICAgICAgICAgICAgICAgcGFyZW50XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3dpcGVyIHlhIGluaWNpYWxpemFkbyDihpIgc2FsaXJcbiAgICAgICAgaWYgKHNsaWRlclNlbGVjdG9yLmNsYXNzTGlzdC5jb250YWlucygnc3dpcGVyLWluaXRpYWxpemVkJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICdbU3dpcGVySW5pdERpcmVjdGl2ZV0gU3dpcGVyIHlhIGluaWNpYWxpemFkbyBlbiBlc3RlIGNvbnRlbmVkb3IsIHNhbGdvJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vID09PT09PSBMRUNUVVJBIERFIERBVEEtQVRUUklCVVRFUyA9PT09PT1cbiAgICAgICAgY29uc3Qgc2hvd0RvdHMgPSBnZXRCb29sKCdzbGlkZXJfc2hvd2RvdHMnKTtcbiAgICAgICAgY29uc3Qgc2hvd0J1dHRvbnMgPSBnZXRCb29sKCdzbGlkZXJfc2hvd2J0bnMnKTtcbiAgICAgICAgY29uc3QgZmFkZSA9IGdldEJvb2woJ3NsaWRlcl9mYWRlJyk7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IGdldEJvb2woJ3NsaWRlcl9jZW50ZXJtb2RlJyk7XG4gICAgICAgIGNvbnN0IGF1dG9wbGF5ID0gZ2V0Qm9vbCgnc2xpZGVyX2F1dG9wbGF5Jyk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsID0gZ2V0Qm9vbCgnc2xpZGVyX3ZlcnRpY2FsJyk7XG4gICAgICAgIGNvbnN0IHJ0bCA9IGdldEJvb2woJ3NsaWRlcl9ydGwnKTtcbiAgICAgICAgY29uc3QgZHJhZ2dhYmxlID0gZ2V0KCdzbGlkZXJfZHJhZ2dhYmxlJykgIT09ICdmYWxzZSc7XG4gICAgICAgIGNvbnN0IGFkYXB0aXZlSGVpZ2h0ID0gZ2V0Qm9vbCgnc2xpZGVyX2FkYXB0aXZlX2hlaWdodCcpO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlV2lkdGggPSBnZXRCb29sKCdzbGlkZXJfdmFyaWFibGVfd2lkdGgnKTtcbiAgICAgICAgY29uc3QgZnJlZU1vZGUgPSBnZXRCb29sKCdzbGlkZXJfZnJlZW1vZGUnKTtcblxuICAgICAgICBjb25zdCBzcGVlZCA9IGdldE51bSgnc2xpZGVyX3NwZWVkJywgNzUwKTtcbiAgICAgICAgY29uc3QgaW5maW5pdGUgPSBnZXRCb29sKCdzbGlkZXNfaW5maW5pdGUnKTtcblxuICAgICAgICAvLyBjb250ZW5lZG9yZXNcbiAgICAgICAgY29uc3QgbmF2Q29udGFpbmVyID1cbiAgICAgICAgICAgIHBhcmVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmpzLXNsaWRlci1hcnJvd3MnKTtcbiAgICAgICAgY29uc3QgZG90c0NvbnRhaW5lciA9XG4gICAgICAgICAgICBwYXJlbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5qcy1zbGlkZXItZG90cycpO1xuXG4gICAgICAgIC8vID09PT09PSBTVkcgRkxFQ0hBUyA9PT09PT1cbiAgICAgICAgY29uc3QgYXJyb3dTVkcgPSBgXG48c3ZnIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCI3MFwiIHZpZXdCb3g9XCIwIDAgMzUgNzBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbjxwYXRoIGQ9XCJNMzUgNzBDMzAuNDAzNyA3MCAyNS44NTI1IDY5LjA5NDcgMjEuNjA2MSA2Ny4zMzU4QzE3LjM1OTcgNjUuNTc2OSAxMy41MDEzIDYyLjk5ODggMTAuMjUxMyA1OS43NDg3QzcuMDAxMjEgNTYuNDk4NyA0LjQyMzEzIDUyLjY0MDMgMi42NjQyMSA0OC4zOTM5QzAuOTA1MyA0NC4xNDc1IC00LjAxODJlLTA3IDM5LjU5NjMgMCAzNUM0LjAxODJlLTA3IDMwLjQwMzcgMC45MDUzMDMgMjUuODUyNSAyLjY2NDIyIDIxLjYwNjFDNC40MjMxMyAxNy4zNTk3IDcuMDAxMjEgMTMuNTAxMyAxMC4yNTEzIDEwLjI1MTNDMTMuNTAxMyA3LjAwMTIxIDE3LjM1OTcgNC40MjMxMyAyMS42MDYxIDIuNjY0MjFDMjUuODUyNSAwLjkwNTMgMzAuNDAzNyAtNi4wMjczZS0wNyAzNSAwVjM1VjcwWlwiIGZpbGw9XCIjRDBBNjdCXCIvPlxuPHBhdGggZD1cIk0xNi43MzY4IDI4LjEyNkMxNi41NjgzIDI3Ljk1NzggMTYuMjk0OSAyNy45NTc3IDE2LjEyNjUgMjguMTI2QzE1Ljk1OCAyOC4yOTQ0IDE1Ljk1ODIgMjguNTY3OCAxNi4xMjY1IDI4LjczNjNMMjIuNjgyMSAzNS4yOTJMMTYuMTI2NSA0MS44NDc3QzE1Ljk1NzkgNDIuMDE2MiAxNS45NTc5IDQyLjI4OTUgMTYuMTI2NSA0Mi40NThDMTYuMjk1IDQyLjYyNjUgMTYuNTY4MyA0Mi42MjY1IDE2LjczNjggNDIuNDU4TDIzLjU5NzIgMzUuNTk3N0MyMy42ODE2IDM1LjUxMzMgMjMuNzI0MiAzNS40MDI2IDIzLjcyNDEgMzUuMjkyQzIzLjcyNDEgMzUuMTgxNiAyMy42ODE0IDM1LjA3MTUgMjMuNTk3MiAzNC45ODczTDE2LjczNjggMjguMTI2WlwiIGZpbGw9XCJ3aGl0ZVwiLz5cbjwvc3ZnPmAudHJpbSgpO1xuXG4gICAgICAgIGlmIChzaG93QnV0dG9ucyAmJiBuYXZDb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmICghbmF2Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItYnV0dG9uLXByZXYnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBwcmV2LmNsYXNzTmFtZSA9ICdzd2lwZXItYnV0dG9uLXByZXYnO1xuICAgICAgICAgICAgICAgIHByZXYuaW5uZXJIVE1MID0gYXJyb3dTVkc7XG4gICAgICAgICAgICAgICAgcHJldi5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKDE4MGRlZyknOyAvLyBQcmV2IGdpcmFkYVxuICAgICAgICAgICAgICAgIG5hdkNvbnRhaW5lci5hcHBlbmRDaGlsZChwcmV2KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFuYXZDb250YWluZXIucXVlcnlTZWxlY3RvcignLnN3aXBlci1idXR0b24tbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIG5leHQuY2xhc3NOYW1lID0gJ3N3aXBlci1idXR0b24tbmV4dCc7XG4gICAgICAgICAgICAgICAgbmV4dC5pbm5lckhUTUwgPSBhcnJvd1NWRztcbiAgICAgICAgICAgICAgICBuYXZDb250YWluZXIuYXBwZW5kQ2hpbGQobmV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyA9PT09PT0gQlJFQUtQT0lOVFMgPT09PT09XG4gICAgICAgIGNvbnN0IHNsaWRlc19wYyA9IGdldE51bSgnc2xpZGVzX3BjJywgMSk7XG4gICAgICAgIGNvbnN0IHNsaWRlc19sYXB0b3AgPSBnZXROdW0oJ3NsaWRlc19sYXB0b3AnLCBzbGlkZXNfcGMpO1xuICAgICAgICBjb25zdCBzbGlkZXNfdGFibGV0ID0gZ2V0TnVtKCdzbGlkZXNfdGFibGV0Jywgc2xpZGVzX2xhcHRvcCk7XG4gICAgICAgIGNvbnN0IHNsaWRlc19tb2JpbGUgPSBnZXROdW0oJ3NsaWRlc19tb2JpbGUnLCBzbGlkZXNfdGFibGV0KTtcbiAgICAgICAgY29uc3Qgc2xpZGVzX21vYmlsZV9zbWFsbCA9IGdldE51bShcbiAgICAgICAgICAgICdzbGlkZXNfbW9iaWxlX3NtYWxsJyxcbiAgICAgICAgICAgIHNsaWRlc19tb2JpbGVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2xpZGVzX21vYmlsZV94c21hbGwgPSBnZXROdW0oXG4gICAgICAgICAgICAnc2xpZGVzX21vYmlsZV94c21hbGwnLFxuICAgICAgICAgICAgc2xpZGVzX21vYmlsZV9zbWFsbFxuICAgICAgICApO1xuXG4gICAgICAgIC8vID09PT09PSBPUENJT05FUyBTV0lQRVIgPT09PT09XG4gICAgICAgIGNvbnN0IHN3aXBlck9wdGlvbnM6IGFueSA9IHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnLFxuICAgICAgICAgICAgc3BlZWQsXG4gICAgICAgICAgICBsb29wOiBpbmZpbml0ZSxcbiAgICAgICAgICAgIGNlbnRlcmVkU2xpZGVzOiBjZW50ZXIsXG4gICAgICAgICAgICBlZmZlY3Q6IGZhZGUgPyAnZmFkZScgOiAnc2xpZGUnLFxuICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5ID8geyBkZWxheTogNTAwMCB9IDogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd1RvdWNoTW92ZTogZHJhZ2dhYmxlLFxuICAgICAgICAgICAgb2JzZXJ2ZXI6IHRydWUsXG4gICAgICAgICAgICBvYnNlcnZlUGFyZW50czogdHJ1ZSxcbiAgICAgICAgICAgIGF1dG9IZWlnaHQ6IGFkYXB0aXZlSGVpZ2h0LFxuXG4gICAgICAgICAgICBmcmVlTW9kZTogZnJlZU1vZGUgPyB7IGVuYWJsZWQ6IHRydWUsIG1vbWVudHVtOiB0cnVlIH0gOiBmYWxzZSxcblxuICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogdmFyaWFibGVXaWR0aCA/ICdhdXRvJyA6IHNsaWRlc19tb2JpbGVfeHNtYWxsLFxuICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiB2YXJpYWJsZVdpZHRoID8gMTYgOiAwLFxuXG4gICAgICAgICAgICBuYXZpZ2F0aW9uOlxuICAgICAgICAgICAgICAgIHNob3dCdXR0b25zICYmIG5hdkNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVsOiBuYXZDb250YWluZXIucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuc3dpcGVyLWJ1dHRvbi1uZXh0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6IG5hdkNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5zd2lwZXItYnV0dG9uLXByZXYnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcblxuICAgICAgICAgICAgcGFnaW5hdGlvbjpcbiAgICAgICAgICAgICAgICBzaG93RG90cyAmJiBkb3RzQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgID8geyBlbDogZG90c0NvbnRhaW5lciwgY2xpY2thYmxlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG5cbiAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgICAgICAgICAgNTQwOiB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHZhcmlhYmxlV2lkdGggPyAnYXV0bycgOiBzbGlkZXNfbW9iaWxlX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBmcmVlTW9kZTogZnJlZU1vZGUgPyB7IGVuYWJsZWQ6IHRydWUgfSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgNzY4OiB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHZhcmlhYmxlV2lkdGggPyAnYXV0bycgOiBzbGlkZXNfbW9iaWxlLFxuICAgICAgICAgICAgICAgICAgICBmcmVlTW9kZTogZnJlZU1vZGUgPyB7IGVuYWJsZWQ6IHRydWUgfSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgMTAyNDoge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB2YXJpYWJsZVdpZHRoID8gJ2F1dG8nIDogc2xpZGVzX3RhYmxldCxcbiAgICAgICAgICAgICAgICAgICAgZnJlZU1vZGU6IGZyZWVNb2RlID8geyBlbmFibGVkOiB0cnVlIH0gOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIDEyODA6IHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogdmFyaWFibGVXaWR0aCA/ICdhdXRvJyA6IHNsaWRlc19sYXB0b3AsXG4gICAgICAgICAgICAgICAgICAgIGZyZWVNb2RlOiBmcmVlTW9kZSA/IHsgZW5hYmxlZDogdHJ1ZSB9IDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAxMzY2OiB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHZhcmlhYmxlV2lkdGggPyAnYXV0bycgOiBzbGlkZXNfcGMsXG4gICAgICAgICAgICAgICAgICAgIGZyZWVNb2RlOiBmcmVlTW9kZSA/IHsgZW5hYmxlZDogdHJ1ZSB9IDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gPT09PT09IElOSVQgU1dJUEVSID09PT09PVxuICAgICAgICBpZiAoIVN3aXBlcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnW1N3aXBlckluaXREaXJlY3RpdmVdIFN3aXBlciBnbG9iYWwgbm8gZW5jb250cmFkbyAod2luZG93LlN3aXBlciBlcyBmYWxzeSknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ1tTd2lwZXJJbml0RGlyZWN0aXZlXSBJTklUIFNXSVBFUicsIHtcbiAgICAgICAgICAgIHNsaWRlck5hbWUsXG4gICAgICAgICAgICBzbGlkZXJTZWxlY3RvcixcbiAgICAgICAgICAgIG9wdGlvbnM6IHN3aXBlck9wdGlvbnMsXG4gICAgICAgICAgICBzd2lwZXJUeXBlOiB0eXBlb2YgU3dpcGVyLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN3aXBlckluc3RhbmNlID0gbmV3IFN3aXBlcihzbGlkZXJTZWxlY3Rvciwgc3dpcGVyT3B0aW9ucyk7XG5cbiAgICAgICAgLy8gUG9zaWNpw7NuIGZsZWNoYXMgdGlwbyAtLXNsaWRlck5hdl9fcG9zaXRpb25cbiAgICAgICAgdGhpcy5pbml0QXJyb3dQb3NpdGlvbmluZyhwYXJlbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5zd2lwZXJJbnN0YW5jZT8uZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5zd2lwZXJJbnN0YW5jZS5kZXN0cm95KHRydWUsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hcnJvd0NsZWFudXBGbnMuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICAgICAgICB0aGlzLmFycm93Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIC8vID09PT09PT09IFBPU0lDScOTTiBERSBGTEVDSEFTIChlcXVpdmFsZW50ZSBqcy1zbGlkZXJfZml4LWFycm93cykgPT09PT09PT1cbiAgICBwcml2YXRlIGluaXRBcnJvd1Bvc2l0aW9uaW5nKHBhcmVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2xpZGVycyA9IHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgICAgICAgICcuanMtc2xpZGVyX2ZpeC1hcnJvd3MnXG4gICAgICAgICk7XG4gICAgICAgIGlmICghc2xpZGVycy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBzbGlkZXJzLmZvckVhY2goKHNsaWRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9XG4gICAgICAgICAgICAgICAgc2xpZGVyLmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCcuanMtYWN0aXZlLXNsaWRlcicpIHx8IHBhcmVudDtcbiAgICAgICAgICAgIGlmICghc2VjdGlvbikgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBjYWxjUG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGhlaWdodFNlbGVjdG9yOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9iaWxlU2VsID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICAgICAgICAgICAgICAgICAnLmpzLXNsaWRlcl9maXgtYXJyb3dzLXpvbmUubW9iaWxlJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVza3RvcFNlbCA9IHNsaWRlci5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcbiAgICAgICAgICAgICAgICAgICAgJy5qcy1zbGlkZXJfZml4LWFycm93cy16b25lLmRlc2t0b3AnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnZW5lcmljU2VsID0gc2xpZGVyLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICAgICAgICAgICAgICAgICAnLmpzLXNsaWRlcl9maXgtYXJyb3dzLXpvbmUnXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChtb2JpbGVTZWwgJiYgd2luZG93LmlubmVyV2lkdGggPD0gMTI3OSkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHRTZWxlY3RvciA9IG1vYmlsZVNlbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlc2t0b3BTZWwgJiYgd2luZG93LmlubmVyV2lkdGggPj0gMTI4MCkge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHRTZWxlY3RvciA9IGRlc2t0b3BTZWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0U2VsZWN0b3IgPSBnZW5lcmljU2VsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghaGVpZ2h0U2VsZWN0b3IpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlID1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0U2VsZWN0b3IuY2xvc2VzdDxIVE1MRWxlbWVudD4oJy5yZWxhdGl2ZScpO1xuICAgICAgICAgICAgICAgIGlmICghcmVsYXRpdmUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBoZWlnaHRTZWxlY3Rvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSZWN0ID0gcmVsYXRpdmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gcmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjtcblxuICAgICAgICAgICAgICAgIHNlY3Rpb24uc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICctLXNsaWRlck5hdl9fcG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBgJHtoZWlnaHR9cHhgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNhbGNQb3NpdGlvbigpO1xuICAgICAgICAgICAgc2V0VGltZW91dChjYWxjUG9zaXRpb24sIDUwMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4gY2FsY1Bvc2l0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBvblJlc2l6ZSA9ICgpID0+IGNhbGNQb3NpdGlvbigpO1xuXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvblJlc2l6ZSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmFycm93Q2xlYW51cEZucy5wdXNoKCgpID0+XG4gICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXJyb3dDbGVhbnVwRm5zLnB1c2goKCkgPT5cbiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|