simpo-component-library 3.6.916 → 3.6.918
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/hover-elements/hover-elements.component.mjs +3 -7
- package/esm2022/lib/directive/button-directive.directive.mjs +7 -1
- package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.component.mjs +14 -8
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -3
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +2 -2
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +2 -2
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +2 -2
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +2 -2
- package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +2 -2
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +2 -2
- package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +2 -2
- package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +24 -4
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +2 -2
- package/esm2022/lib/sections/header-section/header-section.component.mjs +3 -3
- package/esm2022/lib/sections/header-text/header-text.component.mjs +2 -2
- package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +14 -8
- package/esm2022/lib/sections/image-section/image-section.component.mjs +2 -2
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +2 -2
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +2 -2
- package/esm2022/lib/sections/new-services/new-services.component.mjs +2 -2
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +2 -2
- package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +2 -2
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +2 -2
- package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +2 -2
- package/esm2022/lib/sections/service-section/service-section.component.mjs +2 -2
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +2 -2
- package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +2 -2
- package/esm2022/lib/sections/text-section/text-section.component.mjs +2 -2
- package/fesm2022/simpo-component-library.mjs +86 -50
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/components/hover-elements/hover-elements.component.d.ts +0 -1
- package/lib/ecommerce/sections/featured-category/featured-category.component.d.ts +1 -1
- package/lib/ecommerce/sections/featured-category/featured-collection.component.d.ts +1 -1
- package/lib/ecommerce/sections/new-collection/new-collection.component.d.ts +1 -1
- package/lib/ecommerce/sections/refer-earn/refer-earn.component.d.ts +2 -1
- package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
- package/lib/elements/pricing-s1/pricing-s1.component.d.ts +1 -1
- package/lib/elements/simpo-button/simpo-button.component.d.ts +2 -1
- package/lib/sections/banner-carousel/banner-carousel.component.d.ts +2 -2
- package/lib/sections/carousel-banner/carousel-banner.component.d.ts +1 -1
- package/lib/sections/contact-us/contact-us.component.d.ts +1 -1
- package/lib/sections/countdown-banner/countdown-banner.component.d.ts +2 -1
- package/lib/sections/faq-columns-cards/faq-columns-cards.component.d.ts +1 -1
- package/lib/sections/faq-section/faq-section.component.d.ts +1 -1
- package/lib/sections/image-background/image-background/image-background.component.d.ts +2 -1
- package/lib/sections/image-grid-hotspot/image-grid-hotspot.component.d.ts +1 -1
- package/lib/sections/image-grid-section/image-grid-section.component.d.ts +1 -1
- package/lib/sections/image-section/image-section.component.d.ts +2 -2
- package/lib/sections/new-testimonials/new-testimonials.component.d.ts +1 -1
- package/lib/sections/pricing-section/pricing-section.component.d.ts +2 -2
- package/package.json +1 -1
- package/simpo-component-library-3.6.918.tgz +0 -0
- package/simpo-component-library-3.6.916.tgz +0 -0
|
@@ -22,6 +22,10 @@ export class CountdownBannerComponent extends BaseSection {
|
|
|
22
22
|
super();
|
|
23
23
|
this.eventService = eventService;
|
|
24
24
|
this.platformId = platformId;
|
|
25
|
+
// When rendered embedded inside a header (see HeaderSectionComponent),
|
|
26
|
+
// this banner must always stay compact regardless of whatever spacing is
|
|
27
|
+
// stored in its own data — see stylesLayout below.
|
|
28
|
+
this.isHeaderRenderer = false;
|
|
25
29
|
this.days = '00';
|
|
26
30
|
this.hours = '00';
|
|
27
31
|
this.minutes = '00';
|
|
@@ -90,7 +94,21 @@ export class CountdownBannerComponent extends BaseSection {
|
|
|
90
94
|
return Math.floor((difference / 1000) % 60);
|
|
91
95
|
}
|
|
92
96
|
get stylesLayout() {
|
|
93
|
-
|
|
97
|
+
const layout = { ...this.style?.layout };
|
|
98
|
+
if (this.isHeaderRenderer) {
|
|
99
|
+
// Don't force spacing to 'remove' (0rem) — that's still an inline
|
|
100
|
+
// override that beats this component's own CSS padding (8px 32px),
|
|
101
|
+
// just at the opposite extreme (too tight instead of too loose).
|
|
102
|
+
// Omitting these keys entirely means the spacing directives' own
|
|
103
|
+
// guards skip setting any inline padding at all (ContentFitDirective
|
|
104
|
+
// checks `space?.top`/`space?.bottom`; SpacingHorizontalDirective's
|
|
105
|
+
// desktop branch calls setProperty with an invalid value when
|
|
106
|
+
// spacingHorizontal is undefined, which the browser silently
|
|
107
|
+
// ignores) — so the CSS's own padding: 8px 32px applies untouched.
|
|
108
|
+
const { spacing, spacingHorizontal, ...rest } = layout;
|
|
109
|
+
return rest;
|
|
110
|
+
}
|
|
111
|
+
return layout;
|
|
94
112
|
}
|
|
95
113
|
getContrastColor(bgColor) {
|
|
96
114
|
if (!bgColor)
|
|
@@ -150,7 +168,7 @@ export class CountdownBannerComponent extends BaseSection {
|
|
|
150
168
|
}
|
|
151
169
|
}
|
|
152
170
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountdownBannerComponent, deps: [{ token: i1.EventsService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
153
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountdownBannerComponent, isStandalone: true, selector: "simpo-countdown-banner", inputs: { edit: "edit", data: "data", customClass: "customClass", nextComponentColor: "nextComponentColor", index: "index", delete: "delete" }, usesInheritance: true, ngImport: i0, template: "<section>\r\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\r\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\r\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"
|
|
171
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountdownBannerComponent, isStandalone: true, selector: "simpo-countdown-banner", inputs: { edit: "edit", data: "data", customClass: "customClass", nextComponentColor: "nextComponentColor", index: "index", delete: "delete", isHeaderRenderer: "isHeaderRenderer" }, usesInheritance: true, ngImport: i0, template: "<section>\r\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\r\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\r\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n class=\"sale-bar\">\r\n <!-- LEFT TEXT -->\r\n <div class=\"sale-text\">\r\n <simpo-text-editor *ngIf=\"content?.inputText?.[0] as countdownText\" [(value)]=\"countdownText.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"0\"></simpo-text-editor>\r\n </div>\r\n\r\n <!-- TIMER -->\r\n <div class=\"sale-timer\" [style.color]=\"getContrastColor(style?.background?.accentColor)\">\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getDays(content?.endDate)}}</span>\r\n <small>DAY</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getHours(content?.endDate) }}</span>\r\n <small>HOUR</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getMinutes(content?.endDate) }}</span>\r\n <small>MIN</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getSeconds(content?.endDate) }}</span>\r\n <small>SEC</small>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT ACTION -->\r\n <div class=\"sale-action\">\r\n <ng-container *ngIf=\"data?.action?.display\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\"\r\n [buttonId]=\"button.id\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [edit]=\"edit\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Divider -->\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n\r\n <!-- EDIT SELECTOR -->\r\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <!-- DELETE SELECTOR -->\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{ hover_effect: delete }\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n </div>\r\n</section>", styles: [".sale-wrapper{width:100%}.total-container{height:auto;position:relative}.sale-bar{width:100%;color:#fff;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:8px 32px}.sale-text{font-size:18px;font-weight:700;white-space:nowrap}.sale-timer{display:flex;align-items:baseline;gap:6px}.time-card{background-color:#fff;padding:5px 12px;border-radius:20px;display:flex;align-items:baseline;gap:4px;white-space:nowrap}.time-card span{font-size:15px;font-weight:800}.time-card small{font-size:11px;font-weight:600;opacity:.85}.sale-action{display:flex;align-items:center;gap:20px}.shop-button{background-color:#fff;color:#1c2a39;border:none;padding:5px 14px;border-radius:30px;font-size:14px;font-weight:500;cursor:pointer;transition:.3s ease}.shop-button:hover{background-color:#f2f2f2}.close-icon{font-size:20px;cursor:pointer;opacity:.8}.close-icon:hover{opacity:1}@media (max-width: 768px){.sale-bar{flex-direction:column;gap:20px;text-align:center}.sale-action{justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i2.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "disabled", "loading", "isFullWidth", "itemIndex"] }, { kind: "component", type: i3.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i4.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i5.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }] }); }
|
|
154
172
|
}
|
|
155
173
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountdownBannerComponent, decorators: [{
|
|
156
174
|
type: Component,
|
|
@@ -165,7 +183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
165
183
|
SpacingHorizontalDirective,
|
|
166
184
|
BorderDirective,
|
|
167
185
|
ContentFitDirective
|
|
168
|
-
], template: "<section>\r\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\r\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\r\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"
|
|
186
|
+
], template: "<section>\r\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\r\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\r\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\r\n class=\"sale-bar\">\r\n <!-- LEFT TEXT -->\r\n <div class=\"sale-text\">\r\n <simpo-text-editor *ngIf=\"content?.inputText?.[0] as countdownText\" [(value)]=\"countdownText.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"0\"></simpo-text-editor>\r\n </div>\r\n\r\n <!-- TIMER -->\r\n <div class=\"sale-timer\" [style.color]=\"getContrastColor(style?.background?.accentColor)\">\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getDays(content?.endDate)}}</span>\r\n <small>DAY</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getHours(content?.endDate) }}</span>\r\n <small>HOUR</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getMinutes(content?.endDate) }}</span>\r\n <small>MIN</small>\r\n </div>\r\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\r\n <span>{{ getSeconds(content?.endDate) }}</span>\r\n <small>SEC</small>\r\n </div>\r\n </div>\r\n\r\n <!-- RIGHT ACTION -->\r\n <div class=\"sale-action\">\r\n <ng-container *ngIf=\"data?.action?.display\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\"\r\n [buttonId]=\"button.id\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\" [edit]=\"edit\"\r\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- Divider -->\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\r\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n\r\n <!-- EDIT SELECTOR -->\r\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n\r\n <!-- DELETE SELECTOR -->\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{ hover_effect: delete }\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n </div>\r\n</section>", styles: [".sale-wrapper{width:100%}.total-container{height:auto;position:relative}.sale-bar{width:100%;color:#fff;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:8px 32px}.sale-text{font-size:18px;font-weight:700;white-space:nowrap}.sale-timer{display:flex;align-items:baseline;gap:6px}.time-card{background-color:#fff;padding:5px 12px;border-radius:20px;display:flex;align-items:baseline;gap:4px;white-space:nowrap}.time-card span{font-size:15px;font-weight:800}.time-card small{font-size:11px;font-weight:600;opacity:.85}.sale-action{display:flex;align-items:center;gap:20px}.shop-button{background-color:#fff;color:#1c2a39;border:none;padding:5px 14px;border-radius:30px;font-size:14px;font-weight:500;cursor:pointer;transition:.3s ease}.shop-button:hover{background-color:#f2f2f2}.close-icon{font-size:20px;cursor:pointer;opacity:.8}.close-icon:hover{opacity:1}@media (max-width: 768px){.sale-bar{flex-direction:column;gap:20px;text-align:center}.sale-action{justify-content:center}}\n"] }]
|
|
169
187
|
}], ctorParameters: () => [{ type: i1.EventsService }, { type: undefined, decorators: [{
|
|
170
188
|
type: Inject,
|
|
171
189
|
args: [PLATFORM_ID]
|
|
@@ -181,5 +199,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
181
199
|
type: Input
|
|
182
200
|
}], delete: [{
|
|
183
201
|
type: Input
|
|
202
|
+
}], isHeaderRenderer: [{
|
|
203
|
+
type: Input
|
|
184
204
|
}] } });
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CekMsTUFBTSxPQUFPLHdCQUNYLFNB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QUFZLG1iQUNaLG1CQUFtQiw2TEFDbkIsbUJBQW1CLDBHQUNuQixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsMEJBQTBCLDJHQUUxQixtQkFBbUI7OzRGQUtWLHdCQUF3QjtrQkFsQnBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3BCOzswQkE0QkUsTUFBTTsyQkFBQyxXQUFXO3lDQXBCWixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBQTEFURk9STV9JRCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLi8uLi9lbGVtZW50cy9pbmRleCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTdHlsZXNNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhY2tncm91bmRNb2RlbCwgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvdGV4dC1lZGl0b3IvdGV4dC1lZGl0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ291bnREb3duQmFubmVyQ29udGVudE1vZGFsLCBDb3VudERvd25CYW5uZXJTZWN0aW9uIH0gZnJvbSAnLi9jb3VudGRvd24tYmFubmVyLmNvbXBvbmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRlbnQtZml0LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XHJcblxyXG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vQmFzZVNlY3Rpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1jb3VudGRvd24tYmFubmVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXHJcbiAgICBTaW1wb0NvbXBvbmVudE1vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxyXG4gICAgSG92ZXJEaXJlY3RpdmUsXHJcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXHJcbiAgICBCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2NvdW50ZG93bi1iYW5uZXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50ZG93bkJhbm5lckNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQmFzZVNlY3Rpb25cclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGF0YT86IENvdW50RG93bkJhbm5lclNlY3Rpb24gfCBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XHJcblxyXG4gIHN0eWxlPzogU3R5bGVzTW9kZWw7XHJcbiAgY29udGVudD86IENvdW50RG93bkJhbm5lckNvbnRlbnRNb2RhbDtcclxuXHJcbiAgZGF5czogc3RyaW5nID0gJzAwJztcclxuICBob3Vyczogc3RyaW5nID0gJzAwJztcclxuICBtaW51dGVzOiBzdHJpbmcgPSAnMDAnO1xyXG4gIHNlY29uZHM6IHN0cmluZyA9ICcwMCc7XHJcbiAgaW50ZXJ2YWw6IGFueTtcclxuICBiYW5uZXJUZXh0OiBzdHJpbmcgPSAnJztcclxuICB0YXJnZXREYXRlOiBzdHJpbmcgPSBcIjIwMjYtMDItMTdUMDA6MDA6MDBcIjtcclxuICBjdXJyZW50VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBvYmplY3RcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcclxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIHRoaXMuYmFubmVyVGV4dCA9IHRoaXMuY29udGVudD8uaW5wdXRUZXh0WzBdLnZhbHVlID8/ICcnO1xyXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RGF5cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XHJcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XHJcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcclxuICB9XHJcblxyXG4gIGdldEhvdXJzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoIWRhdGVTdHJpbmcpIHJldHVybiAwO1xyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcclxuICAgIGlmIChpc05hTih0YXJnZXQpKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcclxuICAgIGlmIChkaWZmZXJlbmNlIDw9IDApIHJldHVybiAwO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwKSkgJSAyNCk7XHJcbiAgfVxyXG5cclxuICBnZXRNaW51dGVzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoIWRhdGVTdHJpbmcpIHJldHVybiAwO1xyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcclxuICAgIGlmIChpc05hTih0YXJnZXQpKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcclxuICAgIGlmIChkaWZmZXJlbmNlIDw9IDApIHJldHVybiAwO1xyXG5cclxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCkpICUgNjApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2Vjb25kcyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XHJcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XHJcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGlmZmVyZW5jZSAvIDEwMDApICUgNjApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJhc3RDb2xvcihiZ0NvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFiZ0NvbG9yKSByZXR1cm4gJyMwMDAwMDAnO1xyXG5cclxuICAgIGxldCBjb2xvclRvQ2hlY2sgPSBiZ0NvbG9yO1xyXG5cclxuICAgIC8vIElmIGdyYWRpZW50IOKGkiBleHRyYWN0IGZpcnN0IGNvbG9yIGluc2lkZSBsaW5lYXItZ3JhZGllbnQoLi4uKVxyXG4gICAgaWYgKGJnQ29sb3IuaW5jbHVkZXMoJ2xpbmVhci1ncmFkaWVudCcpKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gYmdDb2xvci5tYXRjaCgvKCNbMC05QS1GYS1mXXs2fXxyZ2JcXChbXildK1xcKSkvKTtcclxuICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgY29sb3JUb0NoZWNrID0gbWF0Y2hbMF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgciA9IDAsIGcgPSAwLCBiID0gMDtcclxuXHJcbiAgICAvLyBIRVggZm9ybWF0XHJcbiAgICBpZiAoY29sb3JUb0NoZWNrLnN0YXJ0c1dpdGgoJyMnKSkge1xyXG4gICAgICBjb25zdCBoZXggPSBjb2xvclRvQ2hlY2sucmVwbGFjZSgnIycsICcnKTtcclxuICAgICAgciA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMCwgMiksIDE2KTtcclxuICAgICAgZyA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoMiwgNCksIDE2KTtcclxuICAgICAgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSR0IgZm9ybWF0XHJcbiAgICBlbHNlIGlmIChjb2xvclRvQ2hlY2suc3RhcnRzV2l0aCgncmdiJykpIHtcclxuICAgICAgY29uc3QgdmFsdWVzID0gY29sb3JUb0NoZWNrLm1hdGNoKC9cXGQrL2cpO1xyXG4gICAgICBpZiAodmFsdWVzKSB7XHJcbiAgICAgICAgciA9ICt2YWx1ZXNbMF07XHJcbiAgICAgICAgZyA9ICt2YWx1ZXNbMV07XHJcbiAgICAgICAgYiA9ICt2YWx1ZXNbMl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBicmlnaHRuZXNzID0gKHIgKiAyOTkgKyBnICogNTg3ICsgYiAqIDExNCkgLyAxMDAwO1xyXG5cclxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWNjZW50QmFja2dyb3VuZCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYmcgPSB0aGlzLnN0eWxlPy5iYWNrZ3JvdW5kO1xyXG5cclxuICAgIGlmICghYmcpIHJldHVybiAnJztcclxuXHJcbiAgICBpZiAoYmcuYWNjZW50QmFja2dyb3VuZFR5cGUgPT09ICdTb2xpZCcpIHtcclxuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGFuZ2xlXHJcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcclxuICAgICAgOiBgbGluZWFyLWdyYWRpZW50KCR7YmcuYWNjZW50Q29sb3J9LCAke2JnLnNlY29uZGFyeUFjY2VudENvbG9yfSlgO1xyXG4gIH1cclxuICBnZXRHcmFkaWVudERpcmVjdGlvbihkaXJlY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICBjYXNlICdET1dOJzpcclxuICAgICAgICByZXR1cm4gJyc7IC8vIGRlZmF1bHQgdG9wIOKGkiBib3R0b20gKG5vIGFuZ2xlIG5lZWRlZClcclxuXHJcbiAgICAgIGNhc2UgJ1JJR0hUJzpcclxuICAgICAgICByZXR1cm4gJzkwZGVnJztcclxuXHJcbiAgICAgIGNhc2UgJ0RJQUdPTkFMX1JJR0hUJzpcclxuICAgICAgICByZXR1cm4gJzQ1ZGVnJztcclxuXHJcbiAgICAgIGNhc2UgJ0RJQUdPTkFMX0xFRlQnOlxyXG4gICAgICAgIHJldHVybiAnMTM1ZGVnJztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnOyAvLyBmYWxsYmFja1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbj5cclxuICAgIDxkaXYgW2lkXT1cImRhdGE/LmlkXCIgc2ltcG9Ib3ZlciAoaG92ZXJpbmcpPVwic2hvd0VkaXRUYWJzKCRldmVudClcIiBjbGFzcz1cInNhbGUtd3JhcHBlciB0b3RhbC1jb250YWluZXJcIlxyXG4gICAgICAgIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIj5cclxuICAgICAgICA8ZGl2ICNtYWluQ29udGFpbmVyIFtpZF09XCJkYXRhPy5pZFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIiBbc2ltcG9MYXlvdXRdPVwic3R5bGU/LmxheW91dFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2FsZS1iYXJcIj5cclxuICAgICAgICAgICAgPCEtLSBMRUZUIFRFWFQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciAqbmdJZj1cImNvbnRlbnQ/LmlucHV0VGV4dD8uWzBdIGFzIGNvdW50ZG93blRleHRcIiBbKHZhbHVlKV09XCJjb3VudGRvd25UZXh0LnZhbHVlXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCIgW2lucHV0VGV4dEluZGV4XT1cIjBcIj48L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVElNRVIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxlLXRpbWVyXCIgW3N0eWxlLmNvbG9yXT1cImdldENvbnRyYXN0Q29sb3Ioc3R5bGU/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtY2FyZFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6Z2V0QWNjZW50QmFja2dyb3VuZCgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXREYXlzKGNvbnRlbnQ/LmVuZERhdGUpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPkRBWTwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0SG91cnMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPkhPVVI8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpnZXRBY2NlbnRCYWNrZ3JvdW5kKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldE1pbnV0ZXMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPk1JTjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0U2Vjb25kcyhjb250ZW50Py5lbmREYXRlKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+U0VDPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gUklHSFQgQUNUSU9OIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2FsZS1hY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYnV0dG9uLWVsZW1lbnQgW2J1dHRvbkNvbnRlbnRdPVwiYnV0dG9uLmNvbnRlbnRcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uLnN0eWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uSWRdPVwiYnV0dG9uLmlkXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtlZGl0XT1cImVkaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JhY2tncm91bmRJbmZvXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZFwiPjwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERpdmlkZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlPy5kZXZpZGVyPy5kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGU/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcclxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJuZXh0Q29tcG9uZW50Q29sb3I/LmNvbG9yXCI+PC9zaW1wby1zdmctZGl2aWRlcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBFRElUIFNFTEVDVE9SIC0tPlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBob3Zlcl9lZmZlY3Q6IGVkaXQgfVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cclxuICAgICAgICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gREVMRVRFIFNFTEVDVE9SIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieyBob3Zlcl9lZmZlY3Q6IGRlbGV0ZSB9XCI+XHJcbiAgICAgICAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CekMsTUFBTSxPQUFPLHdCQUNYLFNB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LENBQUMsU0FBNkI7UUFDaEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7WUFFdEQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBRWpCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLE9BQU8sQ0FBQztZQUVqQixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBRWxCO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO0lBQ0gsQ0FBQzsrR0EzTFUsd0JBQXdCLCtDQTRCekIsV0FBVzttR0E1QlYsd0JBQXdCLCtSQzVDckMsMHdHQTJEVSwyaUNEN0JOLG1CQUFtQixtWUFDbkIsb0JBQW9CLG1XQUNwQixZQUFZLG1iQUNaLG1CQUFtQiw2TEFDbkIsbUJBQW1CLDBHQUNuQixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsMEJBQTBCLDJHQUUxQixtQkFBbUI7OzRGQUtWLHdCQUF3QjtrQkFsQnBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3BCOzswQkFnQ0UsTUFBTTsyQkFBQyxXQUFXO3lDQXhCWixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUExBVEZPUk1fSUQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvdW50RG93bkJhbm5lckNvbnRlbnRNb2RhbCwgQ291bnREb3duQmFubmVyU2VjdGlvbiB9IGZyb20gJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQm9yZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTaW1wb0NvbXBvbmVudE1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5cclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tY291bnRkb3duLWJhbm5lcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxyXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvdW50ZG93bi1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jb3VudGRvd24tYmFubmVyLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3VudGRvd25CYW5uZXJDb21wb25lbnRcclxuICBleHRlbmRzIEJhc2VTZWN0aW9uXHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGE/OiBDb3VudERvd25CYW5uZXJTZWN0aW9uIHwgYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnRDb2xvcj86IEJhY2tncm91bmRNb2RlbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIC8vIFdoZW4gcmVuZGVyZWQgZW1iZWRkZWQgaW5zaWRlIGEgaGVhZGVyIChzZWUgSGVhZGVyU2VjdGlvbkNvbXBvbmVudCksXHJcbiAgLy8gdGhpcyBiYW5uZXIgbXVzdCBhbHdheXMgc3RheSBjb21wYWN0IHJlZ2FyZGxlc3Mgb2Ygd2hhdGV2ZXIgc3BhY2luZyBpc1xyXG4gIC8vIHN0b3JlZCBpbiBpdHMgb3duIGRhdGEg4oCUIHNlZSBzdHlsZXNMYXlvdXQgYmVsb3cuXHJcbiAgQElucHV0KCkgaXNIZWFkZXJSZW5kZXJlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzdHlsZT86IFN0eWxlc01vZGVsO1xyXG4gIGNvbnRlbnQ/OiBDb3VudERvd25CYW5uZXJDb250ZW50TW9kYWw7XHJcblxyXG4gIGRheXM6IHN0cmluZyA9ICcwMCc7XHJcbiAgaG91cnM6IHN0cmluZyA9ICcwMCc7XHJcbiAgbWludXRlczogc3RyaW5nID0gJzAwJztcclxuICBzZWNvbmRzOiBzdHJpbmcgPSAnMDAnO1xyXG4gIGludGVydmFsOiBhbnk7XHJcbiAgYmFubmVyVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgdGFyZ2V0RGF0ZTogc3RyaW5nID0gXCIyMDI2LTAyLTE3VDAwOjAwOjAwXCI7XHJcbiAgY3VycmVudFRpbWU6IG51bWJlciA9IERhdGUubm93KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcclxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlID0gdGhpcy5kYXRhPy5zdHlsZXM7XHJcbiAgICB0aGlzLmJhbm5lclRleHQgPSB0aGlzLmNvbnRlbnQ/LmlucHV0VGV4dFswXS52YWx1ZSA/PyAnJztcclxuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldERheXMoZGF0ZVN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpO1xyXG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xyXG5cclxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0YXJnZXQgLSB0aGlzLmN1cnJlbnRUaW1lO1xyXG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XHJcblxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRIb3VycyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XHJcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XHJcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGlmZmVyZW5jZSAvICgxMDAwICogNjAgKiA2MCkpICUgMjQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWludXRlcyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcclxuXHJcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XHJcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XHJcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcclxuXHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGlmZmVyZW5jZSAvICgxMDAwICogNjApKSAlIDYwKTtcclxuICB9XHJcblxyXG4gIGdldFNlY29uZHMoZGF0ZVN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpO1xyXG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xyXG5cclxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0YXJnZXQgLSB0aGlzLmN1cnJlbnRUaW1lO1xyXG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XHJcblxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKGRpZmZlcmVuY2UgLyAxMDAwKSAlIDYwKTtcclxuICB9XHJcblxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XHJcbiAgICBjb25zdCBsYXlvdXQgPSB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xyXG4gICAgaWYgKHRoaXMuaXNIZWFkZXJSZW5kZXJlcikge1xyXG4gICAgICAvLyBEb24ndCBmb3JjZSBzcGFjaW5nIHRvICdyZW1vdmUnICgwcmVtKSDigJQgdGhhdCdzIHN0aWxsIGFuIGlubGluZVxyXG4gICAgICAvLyBvdmVycmlkZSB0aGF0IGJlYXRzIHRoaXMgY29tcG9uZW50J3Mgb3duIENTUyBwYWRkaW5nICg4cHggMzJweCksXHJcbiAgICAgIC8vIGp1c3QgYXQgdGhlIG9wcG9zaXRlIGV4dHJlbWUgKHRvbyB0aWdodCBpbnN0ZWFkIG9mIHRvbyBsb29zZSkuXHJcbiAgICAgIC8vIE9taXR0aW5nIHRoZXNlIGtleXMgZW50aXJlbHkgbWVhbnMgdGhlIHNwYWNpbmcgZGlyZWN0aXZlcycgb3duXHJcbiAgICAgIC8vIGd1YXJkcyBza2lwIHNldHRpbmcgYW55IGlubGluZSBwYWRkaW5nIGF0IGFsbCAoQ29udGVudEZpdERpcmVjdGl2ZVxyXG4gICAgICAvLyBjaGVja3MgYHNwYWNlPy50b3BgL2BzcGFjZT8uYm90dG9tYDsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUnc1xyXG4gICAgICAvLyBkZXNrdG9wIGJyYW5jaCBjYWxscyBzZXRQcm9wZXJ0eSB3aXRoIGFuIGludmFsaWQgdmFsdWUgd2hlblxyXG4gICAgICAvLyBzcGFjaW5nSG9yaXpvbnRhbCBpcyB1bmRlZmluZWQsIHdoaWNoIHRoZSBicm93c2VyIHNpbGVudGx5XHJcbiAgICAgIC8vIGlnbm9yZXMpIOKAlCBzbyB0aGUgQ1NTJ3Mgb3duIHBhZGRpbmc6IDhweCAzMnB4IGFwcGxpZXMgdW50b3VjaGVkLlxyXG4gICAgICBjb25zdCB7IHNwYWNpbmcsIHNwYWNpbmdIb3Jpem9udGFsLCAuLi5yZXN0IH0gPSBsYXlvdXQgYXMgYW55O1xyXG4gICAgICByZXR1cm4gcmVzdCBhcyBMYXlPdXRNb2RlbDtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXlvdXQ7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cmFzdENvbG9yKGJnQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWJnQ29sb3IpIHJldHVybiAnIzAwMDAwMCc7XHJcblxyXG4gICAgbGV0IGNvbG9yVG9DaGVjayA9IGJnQ29sb3I7XHJcblxyXG4gICAgLy8gSWYgZ3JhZGllbnQg4oaSIGV4dHJhY3QgZmlyc3QgY29sb3IgaW5zaWRlIGxpbmVhci1ncmFkaWVudCguLi4pXHJcbiAgICBpZiAoYmdDb2xvci5pbmNsdWRlcygnbGluZWFyLWdyYWRpZW50JykpIHtcclxuICAgICAgY29uc3QgbWF0Y2ggPSBiZ0NvbG9yLm1hdGNoKC8oI1swLTlBLUZhLWZdezZ9fHJnYlxcKFteKV0rXFwpKS8pO1xyXG4gICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICBjb2xvclRvQ2hlY2sgPSBtYXRjaFswXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByID0gMCwgZyA9IDAsIGIgPSAwO1xyXG5cclxuICAgIC8vIEhFWCBmb3JtYXRcclxuICAgIGlmIChjb2xvclRvQ2hlY2suc3RhcnRzV2l0aCgnIycpKSB7XHJcbiAgICAgIGNvbnN0IGhleCA9IGNvbG9yVG9DaGVjay5yZXBsYWNlKCcjJywgJycpO1xyXG4gICAgICByID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygwLCAyKSwgMTYpO1xyXG4gICAgICBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xyXG4gICAgICBiID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZyg0LCA2KSwgMTYpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJHQiBmb3JtYXRcclxuICAgIGVsc2UgaWYgKGNvbG9yVG9DaGVjay5zdGFydHNXaXRoKCdyZ2InKSkge1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb2xvclRvQ2hlY2subWF0Y2goL1xcZCsvZyk7XHJcbiAgICAgIGlmICh2YWx1ZXMpIHtcclxuICAgICAgICByID0gK3ZhbHVlc1swXTtcclxuICAgICAgICBnID0gK3ZhbHVlc1sxXTtcclxuICAgICAgICBiID0gK3ZhbHVlc1syXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJyaWdodG5lc3MgPSAociAqIDI5OSArIGcgKiA1ODcgKyBiICogMTE0KSAvIDEwMDA7XHJcblxyXG4gICAgcmV0dXJuIGJyaWdodG5lc3MgPiAxMjggPyAnIzAwMDAwMCcgOiAnI2ZmZmZmZic7XHJcbiAgfVxyXG5cclxuICBnZXRBY2NlbnRCYWNrZ3JvdW5kKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBiZyA9IHRoaXMuc3R5bGU/LmJhY2tncm91bmQ7XHJcblxyXG4gICAgaWYgKCFiZykgcmV0dXJuICcnO1xyXG5cclxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xyXG4gICAgICByZXR1cm4gYmcuYWNjZW50Q29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW5nbGUgPSB0aGlzLmdldEdyYWRpZW50RGlyZWN0aW9uKGJnLmdyYWRpZW50RGlyZWN0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gYW5nbGVcclxuICAgICAgPyBgbGluZWFyLWdyYWRpZW50KCR7YW5nbGV9LCAke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYFxyXG4gICAgICA6IGBsaW5lYXItZ3JhZGllbnQoJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWA7XHJcbiAgfVxyXG4gIGdldEdyYWRpZW50RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ0RPV04nOlxyXG4gICAgICAgIHJldHVybiAnJzsgLy8gZGVmYXVsdCB0b3Ag4oaSIGJvdHRvbSAobm8gYW5nbGUgbmVlZGVkKVxyXG5cclxuICAgICAgY2FzZSAnUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnOTBkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfUklHSFQnOlxyXG4gICAgICAgIHJldHVybiAnNDVkZWcnO1xyXG5cclxuICAgICAgY2FzZSAnRElBR09OQUxfTEVGVCc6XHJcbiAgICAgICAgcmV0dXJuICcxMzVkZWcnO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uPlxyXG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIGNsYXNzPVwic2FsZS13cmFwcGVyIHRvdGFsLWNvbnRhaW5lclwiXHJcbiAgICAgICAgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlPy5iYWNrZ3JvdW5kXCIgW3NpbXBvT3ZlcmxheV09XCJzdHlsZT8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgIDxkaXYgI21haW5Db250YWluZXIgW2lkXT1cImRhdGE/LmlkXCIgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXNMYXlvdXRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNhbGUtYmFyXCI+XHJcbiAgICAgICAgICAgIDwhLS0gTEVGVCBURVhUIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2FsZS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgKm5nSWY9XCJjb250ZW50Py5pbnB1dFRleHQ/LlswXSBhcyBjb3VudGRvd25UZXh0XCIgWyh2YWx1ZSldPVwiY291bnRkb3duVGV4dC52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtpbnB1dFRleHRJbmRleF09XCIwXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFRJTUVSIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2FsZS10aW1lclwiIFtzdHlsZS5jb2xvcl09XCJnZXRDb250cmFzdENvbG9yKHN0eWxlPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvcilcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0RGF5cyhjb250ZW50Py5lbmREYXRlKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5EQVk8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpnZXRBY2NlbnRCYWNrZ3JvdW5kKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldEhvdXJzKGNvbnRlbnQ/LmVuZERhdGUpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5IT1VSPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtY2FyZFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6Z2V0QWNjZW50QmFja2dyb3VuZCgpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRNaW51dGVzKGNvbnRlbnQ/LmVuZERhdGUpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5NSU48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpnZXRBY2NlbnRCYWNrZ3JvdW5kKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFNlY29uZHMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlNFQzwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIFJJR0hUIEFDVElPTiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGUtYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uYWN0aW9uPy5kaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvbklkXT1cImJ1dHRvbi5pZFwiIFtzZWN0aW9uSWRdPVwiZGF0YT8uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZT8uZGV2aWRlcj8uZGlzcGxheVwiPlxyXG4gICAgICAgICAgICA8c2ltcG8tc3ZnLWRpdmlkZXIgW2RpdmlkZXJUeXBlXT1cInN0eWxlPy5kZXZpZGVyPy5kZXZpZGVyVHlwZVwiXHJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRURJVCBTRUxFQ1RPUiAtLT5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgaG92ZXJfZWZmZWN0OiBlZGl0IH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICAgICAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERFTEVURSBTRUxFQ1RPUiAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsgaG92ZXJfZWZmZWN0OiBkZWxldGUgfVwiPlxyXG4gICAgICAgICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPiJdfQ==
|