oasys-lib 2.0.0 → 2.0.1-rc.0
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/carousel/carousel.component.mjs +3 -3
- package/fesm2022/oasys-lib.mjs +2 -2
- package/fesm2022/oasys-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/bloomandwild/variables.css +1 -1
- package/src/assets/bloomon/variables.css +1 -1
- package/src/assets/global/scss-breakpoints.scss +1 -1
|
@@ -232,11 +232,11 @@ export class CarouselComponent {
|
|
|
232
232
|
this.activeIndexOnSlideChange.emit(swiper.activeIndex);
|
|
233
233
|
}
|
|
234
234
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CarouselComponent, deps: [{ token: i1.TokenService }, { token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CarouselComponent, isStandalone: true, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", text_for_left_arrow: "text_for_left_arrow", text_for_right_arrow: "text_for_right_arrow", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, providers: [TokenService], viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CarouselComponent, isStandalone: true, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", text_for_left_arrow: "text_for_left_arrow", text_for_right_arrow: "text_for_right_arrow", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, providers: [TokenService], viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"none\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <div\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n class=\"ui-carousel__small-arrows\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </div>\n </ui-box>\n </ui-stack>\n\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\"\n >\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack\n stack_direction=\"x\"\n stack_align=\"center\"\n *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\"\n >\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}.ui-carousel__small-arrows{align-items:center;display:flex;flex-direction:row;gap:var(--oasys-spacing-near);justify-content:center}@media only screen and (max-width: 767px){.ui-carousel__small-arrows{gap:var(--oasys-spacing-tight)}}\n"], dependencies: [{ kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_type", "button_full_width", "button_event_type", "button_disabled", "button_selected", "button_text_nowrap", "aria_label", "aria_role", "href"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
236
236
|
}
|
|
237
237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
238
238
|
type: Component,
|
|
239
|
-
args: [{ selector: 'ui-carousel', encapsulation: ViewEncapsulation.None, standalone: true, imports: [LayoutBoxComponent, NgClass, LayoutStackComponent, NgIf, OasysButtonComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [TokenService], template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"
|
|
239
|
+
args: [{ selector: 'ui-carousel', encapsulation: ViewEncapsulation.None, standalone: true, imports: [LayoutBoxComponent, NgClass, LayoutStackComponent, NgIf, OasysButtonComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [TokenService], template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"none\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <div\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n class=\"ui-carousel__small-arrows\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </div>\n </ui-box>\n </ui-stack>\n\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\"\n >\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack\n stack_direction=\"x\"\n stack_align=\"center\"\n *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\"\n >\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}.ui-carousel__small-arrows{align-items:center;display:flex;flex-direction:row;gap:var(--oasys-spacing-near);justify-content:center}@media only screen and (max-width: 767px){.ui-carousel__small-arrows{gap:var(--oasys-spacing-tight)}}\n"] }]
|
|
240
240
|
}], ctorParameters: () => [{ type: i1.TokenService }, { type: Document, decorators: [{
|
|
241
241
|
type: Inject,
|
|
242
242
|
args: [DOCUMENT]
|
|
@@ -286,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
286
286
|
}], activeIndexOnSlideChange: [{
|
|
287
287
|
type: Output
|
|
288
288
|
}] } });
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFFTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLHNCQUFzQixFQUN0QixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFdkQsb0VBQW9FO0FBWXBFLE1BQU0sT0FBTyxpQkFBaUI7SUFtQ2xCO0lBQ2tCO0lBQ2xCO0lBcENWLHNCQUFzQjtJQUNpQixNQUFNLENBQThCO0lBRTNFLDRCQUE0QixDQUFhO0lBQzJCLGdCQUFnQixDQUFhO0lBRWpHLHNGQUFzRjtJQUM3RSxNQUFNLEdBQVksS0FBSyxDQUFDO0lBRXhCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUVuQyxZQUFZLEdBQTBDLFNBQVMsQ0FBQztJQUVoRSxtQkFBbUIsR0FBNkQsTUFBTSxDQUFDO0lBRXZGLGdDQUFnQyxHQUFXLENBQUMsQ0FBQztJQUM3QywrQkFBK0IsR0FBVyxDQUFDLENBQUM7SUFDNUMsK0JBQStCLEdBQVcsR0FBRyxDQUFDO0lBQzlDLCtCQUErQixHQUFXLElBQUksQ0FBQztJQUMvQyxtQkFBbUIsR0FBVyxnQkFBZ0IsQ0FBQztJQUMvQyxvQkFBb0IsR0FBVyxZQUFZLENBQUM7SUFFNUMsNEJBQTRCLEdBQVUsQ0FBQyxDQUFDLENBQUMscUVBQXFFO0lBRTlHLGdCQUFnQixHQUFxQixNQUFNLENBQUMsQ0FBQyx3RkFBd0Y7SUFDckksa0JBQWtCLEdBQVksS0FBSyxDQUFDLENBQUMsMkVBQTJFO0lBQ2hILDBCQUEwQixHQUFZLElBQUksQ0FBQyxDQUFDLCtEQUErRDtJQUMzRyxtQkFBbUIsR0FBWSxLQUFLLENBQUMsQ0FBQywyQkFBMkI7SUFDakUsV0FBVyxHQUFXLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtJQUM3QyxvQkFBb0IsR0FBWSxLQUFLLENBQUMsQ0FBQyxrREFBa0Q7SUFFeEYsd0JBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVoRSxZQUNVLFlBQTBCLEVBQ1IsUUFBa0IsRUFDcEMsT0FBbUI7UUFGbkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDUixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFFM0IsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCx5QkFBeUI7UUFDdkIsbUNBQW1DO1FBQ25DLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsS0FBSztZQUNqQixTQUFTLEVBQUUsR0FBRztZQUNkLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUNGLGtDQUFrQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25GLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxPQUFvQyxFQUFFLFFBQThCO1FBQ2pGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQVEsRUFBRTtZQUM5QixJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBb0IsRUFBRSxLQUFhO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRDs7T0FFRztJQUNILDhCQUE4QjtRQUM1QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFnQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQWdCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxhQUFhLENBQUM7UUFFdkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXO2FBQzlDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUM7YUFDMUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUUvQyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FDN0MsK0JBQStCLEVBQy9CLEdBQUcsZ0JBQWdCLEVBQUUsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUN6RixDQUFDO1lBRUYsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FDN0Msb0NBQW9DLEVBQ3BDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixFQUFFLFlBQVksR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDbEksQ0FBQztZQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELElBQUksYUFBYSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXpGLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQzdDLG9DQUFvQyxFQUNwQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQ2xHLENBQUM7WUFFRixJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRXpGLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekYsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILHNDQUFzQztJQUN0QyxVQUFVO1FBQ1Isa0JBQWtCO1FBQ2xCLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQy9ELDhCQUE4QixDQUMvQixDQUFDO1FBQ0YsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FDM0Qsd0NBQXdDLENBQ3pDLENBQUM7UUFFRixpQkFBaUI7UUFDakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFFM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRTVGLG9CQUFvQjtRQUNwQixNQUFNLFlBQVksR0FBa0I7WUFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztZQUM3RCxjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFDTCxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZO2dCQUMzRixTQUFTLEVBQUUsSUFBSTthQUNoQjtZQUNELHdCQUF3QixFQUFFLElBQUksQ0FBQywwQkFBMEI7WUFDekQsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQy9CLENBQUMsQ0FBQztvQkFDRSxPQUFPLEVBQUUsSUFBSTtvQkFDYixNQUFNLEVBQUUsSUFBSTtvQkFDWixxQkFBcUIsRUFBRSxJQUFJO29CQUMzQixhQUFhLEVBQUUsSUFBSTtpQkFDcEI7Z0JBQ0gsQ0FBQyxDQUFDLEtBQUs7WUFDVCxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDakMsQ0FBQyxDQUFDO29CQUNFLFdBQVcsRUFBRSxJQUFJO2lCQUNsQjtnQkFDSCxDQUFDLENBQUMsS0FBSztZQUNULFlBQVksRUFBRTtnQkFDWjs7c0JBRWMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVE7Ozs7Ozs7O2tCQVFqRCxJQUFJLENBQUMsbUJBQW1CLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsSUFBSTt3QkFDaEYseUJBQXlCOzs7O3dCQUl6QixxQkFBcUI7VUFDbkM7YUFDSDtZQUNELFdBQVcsRUFBRTtnQkFDWCxDQUFDLEVBQUU7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULE9BQU8sRUFDTCxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZTs0QkFDNUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVk7d0JBQzNDLFNBQVMsRUFBRSxJQUFJO3FCQUNoQjtvQkFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtvQkFDbkQsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxJQUFJLENBQUMsNEJBQTRCO3dCQUN2QyxJQUFJLEVBQUUsS0FBSztxQkFDWjtpQkFDRjtnQkFDRCxHQUFHLEVBQUU7b0JBQ0gsU0FBUyxFQUFFO3dCQUNULE9BQU8sRUFDTCxJQUFJLENBQUMsbUJBQW1CLEtBQUssZUFBZTs0QkFDNUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLFlBQVk7d0JBQzNDLFNBQVMsRUFBRSxJQUFJO3FCQUNoQjtvQkFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLCtCQUErQjtpQkFDcEQ7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLFNBQVMsRUFBRTt3QkFDVCxPQUFPLEVBQ0wsSUFBSSxDQUFDLG1CQUFtQixLQUFLLGVBQWU7NEJBQzVDLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxZQUFZO3dCQUMzQyxTQUFTLEVBQUUsSUFBSTtxQkFDaEI7b0JBQ0QsYUFBYSxFQUFFLElBQUksQ0FBQywrQkFBK0I7aUJBQ3BEO2dCQUNELElBQUksRUFBRTtvQkFDSixTQUFTLEVBQUU7d0JBQ1QsT0FBTyxFQUNMLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxlQUFlOzRCQUM1QyxJQUFJLENBQUMsbUJBQW1CLEtBQUssWUFBWTt3QkFDM0MsU0FBUyxFQUFFLElBQUk7cUJBQ2hCO29CQUNELGFBQWEsRUFBRSxJQUFJLENBQUMsZ0NBQWdDO2lCQUNyRDthQUNGO1lBQ0QsRUFBRSxFQUFFO2dCQUNGLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDM0M7U0FDRixDQUFDO1FBRUYsNkRBQTZEO1FBQzdELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXRDLHdCQUF3QjtRQUN4QixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdEIsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXRDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBUyxFQUFFO1lBQzdDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsTUFBYztRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO3dHQWhSVSxpQkFBaUIsOENBb0NsQixRQUFROzRGQXBDUCxpQkFBaUIsdTdCQUZqQixDQUFDLFlBQVksQ0FBQyxvUEFLeUMsVUFBVSwrR0FFdEIsVUFBVSw2QkN4Q2xFLCttSEFrSEEsZ1lEbkZZLGtCQUFrQixnVUFBRSxPQUFPLG9GQUFFLG9CQUFvQix3S0FBRSxJQUFJLDZGQUFFLG9CQUFvQjs7NEZBSTVFLGlCQUFpQjtrQkFWN0IsU0FBUzsrQkFDRSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxXQUMvRSxDQUFDLHNCQUFzQixDQUFDLGFBQ3RCLENBQUMsWUFBWSxDQUFDOzswQkFzQ3RCLE1BQU07MkJBQUMsUUFBUTtrRUFsQ3FCLE1BQU07c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFckMsNEJBQTRCO3NCQUQzQixTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUVWLGdCQUFnQjtzQkFBbkYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHekQsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxnQ0FBZ0M7c0JBQXhDLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVJLHdCQUF3QjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBOZ0NsYXNzLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSW5qZWN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE91dHB1dCxcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBTd2lwZXIgZnJvbSAnc3dpcGVyJztcbmltcG9ydCB7IFN3aXBlck9wdGlvbnMgfSBmcm9tICdzd2lwZXIvdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XG5pbXBvcnQgeyBTd2lwZXJDb250YWluZXIgfSBmcm9tICdzd2lwZXIvZWxlbWVudCc7XG5pbXBvcnQgeyBMYXlvdXRCb3hDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXQvYm94L2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGF5b3V0U3RhY2tDb21wb25lbnQgfSBmcm9tICcuLi9sYXlvdXQvc3RhY2svc3RhY2suY29tcG9uZW50JztcbmltcG9ydCB7IE9hc3lzQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU1dJUEVSX1BST1ZJREVSX1RPS0VOIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG4vKiBUaGlzIGNvbXBvbmVudCB3cmFwcyBhcm91bmQgdGhlIHN3aXBlci5qcyBsaWJyYXJ5IFdlYkNvbXBvbmVudCAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1aS1jYXJvdXNlbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJvdXNlbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhcm91c2VsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtMYXlvdXRCb3hDb21wb25lbnQsIE5nQ2xhc3MsIExheW91dFN0YWNrQ29tcG9uZW50LCBOZ0lmLCBPYXN5c0J1dHRvbkNvbXBvbmVudF0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgcHJvdmlkZXJzOiBbVG9rZW5TZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyBUaGUgc3dpcGVyIGluc3RhbmNlXG4gIEBWaWV3Q2hpbGQoJ3N3aXBlcicsIHsgc3RhdGljOiB0cnVlIH0pIHN3aXBlcjogRWxlbWVudFJlZjxTd2lwZXJDb250YWluZXI+O1xuICBAVmlld0NoaWxkKCdjYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Nhcm91c2VsY3Rhc3RhY2snLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgY2Fyb3VzZWxjdGFzdGFjazogRWxlbWVudFJlZjtcblxuICAvLyBSZXdpbmRzIHRoZSBzbGlkZXMgYmFjayB0byB0aGUgc3RhcnQgd2hlbiB0aGUgdXNlciByZWFjaGVzIHRoZSBlbmQgd2hlbiBzZXQgdG8gdHJ1ZVxuICBASW5wdXQoKSByZXdpbmQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBjYXJvdXNlbF9vdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX2dhcDogJ2RlZmF1bHQnIHwgJ3RpZ2h0JyB8ICduZWFyJyB8ICdub25lJyA9ICdkZWZhdWx0JztcblxuICBASW5wdXQoKSBjYXJvdXNlbF9wYWdpbmF0aW9uOiAnc2Nyb2xsLWFycm93cycgfCAnbm9uZScgfCAnc2Nyb2xsLWJhcicgfCAnc21hbGwtYXJyb3dzJyA9ICdub25lJztcblxuICBASW5wdXQoKSBjYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfZGVza3RvcDogbnVtYmVyID0gNDtcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2xhcHRvcDogbnVtYmVyID0gMztcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X3RhYmxldDogbnVtYmVyID0gMi41O1xuICBASW5wdXQoKSBjYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfbW9iaWxlOiBudW1iZXIgPSAxLjI1O1xuICBASW5wdXQoKSB0ZXh0X2Zvcl9sZWZ0X2Fycm93OiBzdHJpbmcgPSAncHJldmlvdXMgc2xpZGUnO1xuICBASW5wdXQoKSB0ZXh0X2Zvcl9yaWdodF9hcnJvdzogc3RyaW5nID0gJ25leHQgc2xpZGUnO1xuXG4gIEBJbnB1dCgpIGNhcm91c2VsX3Jvd3NfcGVyX3Jvd19tb2JpbGU6IDEgfCAyID0gMTsgLy8gUmVxdWlyZWQgZm9yIENBVEVHT1JZX0NBUkQgZXhwZXJpbWVudC4gUmVtb3ZlIGlmIGV4cGVyaW1lbnQgZmFpbHMuXG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfbG9hZGluZzogJ2xhenknIHwgJ2VhZ2VyJyA9ICdsYXp5JzsgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBtdWx0aXBsZSBjYXJvdXNlbHMgb24gcGFnZSBhbmQgd2FudCB0byBwcmlvcml0aXNlIFVJIGxvYWRpbmcgb24gdGltZVxuICBASW5wdXQoKSBjYXJvdXNlbF9mcmVlX21vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRW5hYmxlcyBzY3JvbGxpbmcgd2l0aCBtb3VzZXdoZWVsIC8gc21vb3RoZXIgbW9tZW50dW0gc3dpcGluZyBleHBlcmllbmNlXG4gIEBJbnB1dCgpIGNlbnRlcl9pbnN1ZmZpY2llbnRfc2xpZGVzOiBib29sZWFuID0gdHJ1ZTsgLy8gQ2VudGVycyB0aGUgc2xpZGVzIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIHNwYWNlXG4gIEBJbnB1dCgpIGNlbnRlcl9hY3RpdmVfc2xpZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gQ2VudGVycyB0aGUgYWN0aXZlIHNsaWRlXG4gIEBJbnB1dCgpIHN0YXJ0X3NsaWRlOiBudW1iZXIgPSAwOyAvLyBTdGFydCBzbGlkZSBpbmRleFxuICBASW5wdXQoKSBvZmZzZXRfc2Nyb2xsYmFyX3RvcDogYm9vbGVhbiA9IGZhbHNlOyAvLyBPZmZzZXQgdGhlIHNjcm9sbGJhciB0byB0aGUgdG9wIG9mIHRoZSBjYXJvdXNlbFxuXG4gIEBPdXRwdXQoKSBhY3RpdmVJbmRleE9uU2xpZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZixcbiAgKSB7XG4gICAgaW5qZWN0KFNXSVBFUl9QUk9WSURFUl9UT0tFTikuZW5zdXJlU3dpcGVyUmVnaXN0ZXJlZCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2Fyb3VzZWxfbG9hZGluZyA9PT0gJ2xhenknKSB7XG4gICAgICB0aGlzLnNldFVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0U3dpcGVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCB0aGUgaW50ZXJzZWN0aW9uIG9ic2VydmVyIHdpdGggdGhlIHJlbGV2YW50IG9wdGlvbnNcbiAgICovXG4gIHNldFVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gU2V0IEludGVyc2VjdGlvbk9ic2VydmVyIG9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogbnVsbCxcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxuICAgICAgdGhyZXNob2xkOiAwLjUsXG4gICAgICBvbmNlOiB0cnVlLFxuICAgIH07XG4gICAgLy8gU2V0IHVwIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25JbnRlcnNlY3Rpb24uYmluZCh0aGlzKSwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBqdXN0IGJlZm9yZSB0aGUgdXNlciBzY3JvbGxzIHRoaXMgY29tcG9uZW50IGludG8gdmlld1xuICAgKiBAcGFyYW0gZW50cmllcyAtIEFuIGFycmF5IG9mIGludGVyc3dlY3Rpb24gb2JzZXJ2ZXIgZW50cmllc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZXIgLSBJbnRlcnNlY3Rpb24gb2JzZXJ2ZXJcbiAgICovXG4gIG9uSW50ZXJzZWN0aW9uKGVudHJpZXM6IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSwgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyKTogdm9pZCB7XG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgIC8vIEluaXRpYWxpc2Ugc3dpcGVyXG4gICAgICAgIHRoaXMuaW5pdFN3aXBlcigpO1xuICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdHlsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoc3R5bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2Nyb2xsYmFyIHBsYWNlbWVudCBhbmQgd2lkdGggYmFzZWQgb24gY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlciBhbmQgY2Fyb3VzZWxjdGFzdGFja1xuICAgKi9cbiAgc2V0dXBTY3JvbGxiYXJMYXlvdXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdub25lJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcm91c2VsU3RhY2s6IEhUTUxFbGVtZW50ID0gdGhpcy5jYXJvdXNlbGN0YXN0YWNrPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHNjcm9sbGJhckVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5jYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgc2Nyb2xsYmFySGVpZ2h0ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld1xuICAgICAgLmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc3dpcGVyLXNjcm9sbGJhci1zaXplJyk7XG5cbiAgICBpZiAoY2Fyb3VzZWxTdGFjayAmJiB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJykge1xuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgICctLXVpLWNhcm91c2VsLXNjcm9sbGJhci13aWR0aCcsXG4gICAgICAgIGAke3Njcm9sbGJhckVsZW1lbnQ/Lm9mZnNldFdpZHRoIC0gcGFyc2VJbnQodGhpcy5nZXRTdHlsZShjYXJvdXNlbFN0YWNrLCAnZ2FwJyksIDEwKX1weGAsXG4gICAgICApO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLW9mZnNldC10b3AnLFxuICAgICAgICBgJHtwYXJzZUludCh0aGlzLmdldFN0eWxlKGNhcm91c2VsU3RhY2ssICdnYXAnKSwgMTApICsgc2Nyb2xsYmFyRWxlbWVudD8ub2Zmc2V0SGVpZ2h0IC8gMiArIHBhcnNlSW50KHNjcm9sbGJhckhlaWdodCwgMTApIC8gMn1weGAsXG4gICAgICApO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItaGVpZ2h0JywgJzJweCcpO1xuICAgIH1cblxuICAgIGlmIChjYXJvdXNlbFN0YWNrICYmIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInKSB7XG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItd2lkdGgnLCAnMTAwJScpO1xuXG4gICAgICB0aGlzLmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLW9mZnNldC10b3AnLFxuICAgICAgICBgJHt0aGlzLm9mZnNldF9zY3JvbGxiYXJfdG9wID8gcGFyc2VJbnQodGhpcy5nZXRTdHlsZShjYXJvdXNlbFN0YWNrLCAnZ2FwJyksIDEwKSArICdweCcgOiAnMHB4J31gLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWhlaWdodCcsICc0cHgnKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWxlZnQnLCAnMHB4Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZHluYW1pYyBzd2lwZXIgcGFyYW1zIGFuZCBpbml0aWFsaXNlIHRoZSBzd2lwZXIgaW5zdGFuY2VcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGluaXRTd2lwZXIoKTogdm9pZCB7XG4gICAgLy8gQ29sb3VyIG92ZXJpZGVzXG4gICAgY29uc3Qgc2Nyb2xsYmFyQmFja2dyb3VuZENvbG91ciA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoXG4gICAgICAnLS1vYXN5cy1jb2xvci1saW5lbi1ncmV5LTIwMCcsXG4gICAgKTtcbiAgICBjb25zdCBzY3JvbGxiYXJTbGlkZXJDb2xvdXIgPSB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKFxuICAgICAgJy0tb2FzeXMtY29sb3ItYnJhbmQtZm9yZWdyb3VuZC1wcmltYXJ5JyxcbiAgICApO1xuXG4gICAgLy8gc3dpcGVyIGVsZW1lbnRcbiAgICBjb25zdCBzd2lwZXJFbCA9IHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBjYXJvdXNlbEdhcCA9IHRoaXMudG9rZW5TZXJ2aWNlLmdldFRva2VuVmFsdWUoYC0tb2FzeXMtc3BhY2luZy0ke3RoaXMuY2Fyb3VzZWxfZ2FwfWApO1xuXG4gICAgLy8gc3dpcGVyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBzd2lwZXJQYXJhbXM6IFN3aXBlck9wdGlvbnMgPSB7XG4gICAgICByZXdpbmQ6IHRoaXMucmV3aW5kLFxuICAgICAgZ3JhYkN1cnNvcjogdHJ1ZSxcbiAgICAgIHNwYWNlQmV0d2VlbjogcGFyc2VJbnQoY2Fyb3VzZWxHYXAucmVwbGFjZSgnLicsICcnKSwgMTApIHx8IDAsXG4gICAgICBjZW50ZXJlZFNsaWRlczogdGhpcy5jZW50ZXJfYWN0aXZlX3NsaWRlLFxuICAgICAgaW5pdGlhbFNsaWRlOiB0aGlzLnN0YXJ0X3NsaWRlLFxuICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHwgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IHRoaXMuY2VudGVyX2luc3VmZmljaWVudF9zbGlkZXMsXG4gICAgICBmcmVlTW9kZTogdGhpcy5jYXJvdXNlbF9mcmVlX21vZGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgc3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgbW9tZW50dW1WZWxvY2l0eVJhdGlvOiAwLjc1LFxuICAgICAgICAgICAgbW9tZW50dW1SYXRpbzogMC43NSxcbiAgICAgICAgICB9XG4gICAgICAgIDogZmFsc2UsXG4gICAgICBtb3VzZXdoZWVsOiB0aGlzLmNhcm91c2VsX2ZyZWVfbW9kZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGZvcmNlVG9BeGlzOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBmYWxzZSxcbiAgICAgIGluamVjdFN0eWxlczogW1xuICAgICAgICBgXG4gICAgICAgIC5zd2lwZXIge1xuICAgICAgICAgIG92ZXJmbG93OiAke3RoaXMuY2Fyb3VzZWxfb3ZlcmZsb3cgPyAndmlzaWJsZScgOiAnaGlkZGVuJ30gIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zd2lwZXItc2Nyb2xsYmFyLnN3aXBlci1zY3JvbGxiYXItaG9yaXpvbnRhbCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIHRvcDogdmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLW9mZnNldC10b3ApO1xuICAgICAgICAgIHdpZHRoOiB2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItd2lkdGgpO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWhlaWdodCk7XG4gICAgICAgICAgbGVmdDogJHt0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyA/ICd2YXIoLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItbGVmdCknIDogJzElJ307XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtzY3JvbGxiYXJCYWNrZ3JvdW5kQ29sb3VyfVxuICAgICAgICB9XG5cbiAgICAgICAgLnN3aXBlci1zY3JvbGxiYXItZHJhZyB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJHtzY3JvbGxiYXJTbGlkZXJDb2xvdXJ9XG4gICAgICAgIH1gLFxuICAgICAgXSxcbiAgICAgIGJyZWFrcG9pbnRzOiB7XG4gICAgICAgIDA6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5jYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfbW9iaWxlLFxuICAgICAgICAgIGdyaWQ6IHtcbiAgICAgICAgICAgIHJvd3M6IHRoaXMuY2Fyb3VzZWxfcm93c19wZXJfcm93X21vYmlsZSxcbiAgICAgICAgICAgIGZpbGw6ICdyb3cnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIDc2Nzoge1xuICAgICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgICAgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHxcbiAgICAgICAgICAgICAgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNhcm91c2VsX3NsaWRlc19wZXJfdmlld190YWJsZXQsXG4gICAgICAgIH0sXG4gICAgICAgIDEwODA6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5jYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfbGFwdG9wLFxuICAgICAgICB9LFxuICAgICAgICAxNDQwOiB7XG4gICAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgICBlbmFibGVkOlxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fFxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2Rlc2t0b3AsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgc2xpZGVDaGFuZ2U6IHRoaXMub25TbGlkZUNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gbm93IHdlIG5lZWQgdG8gYXNzaWduIGFsbCBwYXJhbWV0ZXJzIHRvIHRoZSBTd2lwZXIgZWxlbWVudFxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyRWwsIHN3aXBlclBhcmFtcyk7XG5cbiAgICAvLyBhbmQgbm93IGluaXRpYWxpemUgaXRcbiAgICBzd2lwZXJFbC5pbml0aWFsaXplKCk7XG5cbiAgICAvLyBTZXQgdXAgc2Nyb2xsYmFyIGFuZCBlbnN1cmUgdGhpcyBpcyByZWNhbGN1bGF0ZWQgb24gcmVzaXplIGV2ZW50c1xuICAgIHRoaXMuc2V0dXBTY3JvbGxiYXJMYXlvdXRQcm9wZXJ0aWVzKCk7XG5cbiAgICBzd2lwZXJFbC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnNldHVwU2Nyb2xsYmFyTGF5b3V0UHJvcGVydGllcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGNhcm91c2VsIG9uIHRvIHRoZSBuZXh0IHNsaWRlXG4gICAqL1xuICBuZXh0U2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudC5zd2lwZXIuc2xpZGVOZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZSB0aGUgY2Fyb3VzZWwgYmFjayB0byB0aGUgcHJldmlvdXMgc2xpZGVcbiAgICovXG4gIHByZXZpb3VzU2xpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zd2lwZXIubmF0aXZlRWxlbWVudC5zd2lwZXIuc2xpZGVQcmV2KCk7XG4gIH1cblxuICAvKipcbiAgICogRW1pdCBldmVudCB3aGVuIHRoZSBzbGlkZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBzd2lwZXJcbiAgICovXG4gIG9uU2xpZGVDaGFuZ2Uoc3dpcGVyOiBTd2lwZXIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4T25TbGlkZUNoYW5nZS5lbWl0KHN3aXBlci5hY3RpdmVJbmRleCk7XG4gIH1cbn1cbiIsIjx1aS1ib3hcbiAgY2xhc3M9XCJ1aS1jYXJvdXNlbFwiXG4gIFtuZ0NsYXNzXT1cInsgJ3VpLWNhcm91c2VsLW92ZXJmbG93JzogY2Fyb3VzZWxfb3ZlcmZsb3cgfVwiXG4gIGJveF9hbGlnbl95PVwiY2VudGVyXCJcbiAgYm94X3NwYWNlPVwibm9uZVwiXG4gIFtib3hfY29udGVudF9maWxsX3dpZHRoXT1cInRydWVcIlxuICBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCJcbj5cbiAgPHVpLXN0YWNrICNjYXJvdXNlbGN0YXN0YWNrPlxuICAgIDwhLS0gQ3VzdG9tIG5hdmlnYXRpb24gYnV0dG9ucyAtLT5cbiAgICA8dWktc3RhY2tcbiAgICAgICpuZ0lmPVwiY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3NtYWxsLWFycm93cydcIlxuICAgICAgc3RhY2tfZGlyZWN0aW9uPVwieFwiXG4gICAgICBzdGFja19hbGlnbj1cImNlbnRlclwiXG4gICAgICBzdGFja19kaXN0cmlidXRlPVwiZW5kXCJcbiAgICA+XG4gICAgICA8dWktYm94XG4gICAgICAgIGJveF9zcGFjZT1cIm5vbmVcIlxuICAgICAgICBib3hfZmlsbF9tb2RlPVwiZml0XCJcbiAgICAgICAgYm94X3NwYWNlX2JvdHRvbT1cIm5lYXJcIlxuICAgICAgICBbYm94X3NwYWNlX3JpZ2h0XT1cInsgbW9iaWxlOiAndGlnaHQnLCB0YWJsZXQ6ICdub25lJywgbGFwdG9wOiAnbm9uZScsIGRlc2t0b3A6ICdub25lJyB9XCJcbiAgICAgICAgYm94X2JhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiXG4gICAgICA+XG4gICAgICAgIDx1aS1zdGFja1xuICAgICAgICAgICpuZ0lmPVwiIShzd2lwZXI/LnN3aXBlcj8uaXNCZWdpbm5pbmcgJiYgc3dpcGVyPy5zd2lwZXI/LmlzRW5kKVwiXG4gICAgICAgICAgc3RhY2tfZGlyZWN0aW9uPVwieFwiXG4gICAgICAgICAgc3RhY2tfZ2FwPVwibmVhclwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIFByZXZpb3VzIGJ1dHRvbi0tPlxuICAgICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwidWktY2Fyb3VzZWxfX3ByZXZpb3VzXCJcbiAgICAgICAgICAgIGJ1dHRvbl9zaXplPVwic21hbGxcIlxuICAgICAgICAgICAgYnV0dG9uX2ljb25fcGxhY2VtZW50PVwiaWNvbk9ubHlcIlxuICAgICAgICAgICAgYnV0dG9uX2ljb249XCJhcnJvdy1sZWZ0XCJcbiAgICAgICAgICAgIGJ1dHRvbl90eXBlPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgW2FyaWFfbGFiZWxdPVwidGV4dF9mb3JfbGVmdF9hcnJvd1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJwcmV2aW91c1NsaWRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFByZXZvdXMgc2xpZGVcbiAgICAgICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgICAgICA8IS0tIE5leHQgYnV0dG9uLS0+XG4gICAgICAgICAgPHVpLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ1aS1jYXJvdXNlbF9fbmV4dFwiXG4gICAgICAgICAgICBidXR0b25fc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uX3BsYWNlbWVudD1cImljb25Pbmx5XCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uPVwiYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgYnV0dG9uX3R5cGU9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICBbYXJpYV9sYWJlbF09XCJ0ZXh0X2Zvcl9yaWdodF9hcnJvd1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJuZXh0U2xpZGUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTmV4dCBzbGlkZVxuICAgICAgICAgIDwvdWktYnV0dG9uPlxuICAgICAgICA8L3VpLXN0YWNrPlxuICAgICAgPC91aS1ib3g+XG4gICAgPC91aS1zdGFjaz5cblxuICAgIDwhLS0gU3dpcGVyIFdlYkNvbXBvbmVudC0tPlxuICAgIDxzd2lwZXItY29udGFpbmVyXG4gICAgICAjc3dpcGVyXG4gICAgICBpbml0PVwiZmFsc2VcIlxuICAgICAgdG91Y2gtc3RhcnQtcHJldmVudC1kZWZhdWx0PVwiZmFsc2VcIlxuICAgICAgcHJldmVudC1jbGlja3MtcHJvcGFnYXRpb249XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9zd2lwZXItY29udGFpbmVyPlxuXG4gICAgPCEtLSBDdXN0b20gbmF2aWdhdGlvbiBidXR0b25zIC0tPlxuICAgIDx1aS1zdGFja1xuICAgICAgc3RhY2tfZGlyZWN0aW9uPVwieFwiXG4gICAgICBzdGFja19hbGlnbj1cImNlbnRlclwiXG4gICAgICAqbmdJZj1cImNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fCBjYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcidcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1jYXJvdXNlbC1zY3JvbGxiYXItcGxhY2Vob2xkZXJcIiAjY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgIDx1aS1ib3hcbiAgICAgICAgKm5nSWY9XCJjYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cydcIlxuICAgICAgICBib3hfc3BhY2U9XCJub25lXCJcbiAgICAgICAgYm94X2ZpbGxfbW9kZT1cImZpdFwiXG4gICAgICAgIFtib3hfc3BhY2VfcmlnaHRdPVwieyBtb2JpbGU6ICd0aWdodCcsIHRhYmxldDogJ25vbmUnLCBsYXB0b3A6ICdub25lJywgZGVza3RvcDogJ25vbmUnIH1cIlxuICAgICAgICBib3hfYmFja2dyb3VuZD1cInRyYW5zcGFyZW50XCJcbiAgICAgID5cbiAgICAgICAgPHVpLXN0YWNrXG4gICAgICAgICAgKm5nSWY9XCIhKHN3aXBlcj8uc3dpcGVyPy5pc0JlZ2lubmluZyAmJiBzd2lwZXI/LnN3aXBlcj8uaXNFbmQpXCJcbiAgICAgICAgICBzdGFja19kaXJlY3Rpb249XCJ4XCJcbiAgICAgICAgICBzdGFja19nYXA9XCJuZWFyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gUHJldmlvdXMgYnV0dG9uLS0+XG4gICAgICAgICAgPHVpLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ1aS1jYXJvdXNlbF9fcHJldmlvdXNcIlxuICAgICAgICAgICAgYnV0dG9uX3NpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICBidXR0b25faWNvbl9wbGFjZW1lbnQ9XCJpY29uT25seVwiXG4gICAgICAgICAgICBidXR0b25faWNvbj1cImFycm93LWxlZnRcIlxuICAgICAgICAgICAgYnV0dG9uX3R5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgW2FyaWFfbGFiZWxdPVwidGV4dF9mb3JfbGVmdF9hcnJvd1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJwcmV2aW91c1NsaWRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFByZXZvdXMgc2xpZGVcbiAgICAgICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgICAgICA8IS0tIE5leHQgYnV0dG9uLS0+XG4gICAgICAgICAgPHVpLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ1aS1jYXJvdXNlbF9fbmV4dFwiXG4gICAgICAgICAgICBidXR0b25fc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uX3BsYWNlbWVudD1cImljb25Pbmx5XCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uPVwiYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgYnV0dG9uX3R5cGU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgW2FyaWFfbGFiZWxdPVwidGV4dF9mb3JfcmlnaHRfYXJyb3dcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwibmV4dFNsaWRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIE5leHQgc2xpZGVcbiAgICAgICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgICAgPC91aS1zdGFjaz5cbiAgICAgIDwvdWktYm94PlxuICAgIDwvdWktc3RhY2s+XG4gIDwvdWktc3RhY2s+XG48L3VpLWJveD5cbiJdfQ==
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2FzeXMtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJvdXNlbC9jYXJvdXNlbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vYXN5cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Nhcm91c2VsL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFFTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLHNCQUFzQixFQUN0QixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFdkQsb0VBQW9FO0FBWXBFLE1BQU0sT0FBTyxpQkFBaUI7SUFtQ2xCO0lBQ2tCO0lBQ2xCO0lBcENWLHNCQUFzQjtJQUNpQixNQUFNLENBQThCO0lBRTNFLDRCQUE0QixDQUFhO0lBQzJCLGdCQUFnQixDQUFhO0lBRWpHLHNGQUFzRjtJQUM3RSxNQUFNLEdBQVksS0FBSyxDQUFDO0lBRXhCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUVuQyxZQUFZLEdB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RUFBRSxVQUFVLEVBQUU7Z0JBR3pELE1BQU07c0JBQWQsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUcsZ0NBQWdDO3NCQUF4QyxLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcywgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgU3dpcGVyIGZyb20gJ3N3aXBlcic7XG5pbXBvcnQgeyBTd2lwZXJPcHRpb25zIH0gZnJvbSAnc3dpcGVyL3R5cGVzJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3dpcGVyQ29udGFpbmVyIH0gZnJvbSAnc3dpcGVyL2VsZW1lbnQnO1xuaW1wb3J0IHsgTGF5b3V0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0L2JveC9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IExheW91dFN0YWNrQ29tcG9uZW50IH0gZnJvbSAnLi4vbGF5b3V0L3N0YWNrL3N0YWNrLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYXN5c0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFNXSVBFUl9QUk9WSURFUl9UT0tFTiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcblxuLyogVGhpcyBjb21wb25lbnQgd3JhcHMgYXJvdW5kIHRoZSBzd2lwZXIuanMgbGlicmFyeSBXZWJDb21wb25lbnQgKi9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndWktY2Fyb3VzZWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTGF5b3V0Qm94Q29tcG9uZW50LCBOZ0NsYXNzLCBMYXlvdXRTdGFja0NvbXBvbmVudCwgTmdJZiwgT2FzeXNCdXR0b25Db21wb25lbnRdLFxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG4gIHByb3ZpZGVyczogW1Rva2VuU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIENhcm91c2VsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gVGhlIHN3aXBlciBpbnN0YW5jZVxuICBAVmlld0NoaWxkKCdzd2lwZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzd2lwZXI6IEVsZW1lbnRSZWY8U3dpcGVyQ29udGFpbmVyPjtcbiAgQFZpZXdDaGlsZCgnY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KVxuICBjYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjYXJvdXNlbGN0YXN0YWNrJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBFbGVtZW50UmVmIH0pIGNhcm91c2VsY3Rhc3RhY2s6IEVsZW1lbnRSZWY7XG5cbiAgLy8gUmV3aW5kcyB0aGUgc2xpZGVzIGJhY2sgdG8gdGhlIHN0YXJ0IHdoZW4gdGhlIHVzZXIgcmVhY2hlcyB0aGUgZW5kIHdoZW4gc2V0IHRvIHRydWVcbiAgQElucHV0KCkgcmV3aW5kOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfb3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBjYXJvdXNlbF9nYXA6ICdkZWZhdWx0JyB8ICd0aWdodCcgfCAnbmVhcicgfCAnbm9uZScgPSAnZGVmYXVsdCc7XG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfcGFnaW5hdGlvbjogJ3Njcm9sbC1hcnJvd3MnIHwgJ25vbmUnIHwgJ3Njcm9sbC1iYXInIHwgJ3NtYWxsLWFycm93cycgPSAnbm9uZSc7XG5cbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2Rlc2t0b3A6IG51bWJlciA9IDQ7XG4gIEBJbnB1dCgpIGNhcm91c2VsX3NsaWRlc19wZXJfdmlld19sYXB0b3A6IG51bWJlciA9IDM7XG4gIEBJbnB1dCgpIGNhcm91c2VsX3NsaWRlc19wZXJfdmlld190YWJsZXQ6IG51bWJlciA9IDIuNTtcbiAgQElucHV0KCkgY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X21vYmlsZTogbnVtYmVyID0gMS4yNTtcbiAgQElucHV0KCkgdGV4dF9mb3JfbGVmdF9hcnJvdzogc3RyaW5nID0gJ3ByZXZpb3VzIHNsaWRlJztcbiAgQElucHV0KCkgdGV4dF9mb3JfcmlnaHRfYXJyb3c6IHN0cmluZyA9ICduZXh0IHNsaWRlJztcblxuICBASW5wdXQoKSBjYXJvdXNlbF9yb3dzX3Blcl9yb3dfbW9iaWxlOiAxIHwgMiA9IDE7IC8vIFJlcXVpcmVkIGZvciBDQVRFR09SWV9DQVJEIGV4cGVyaW1lbnQuIFJlbW92ZSBpZiBleHBlcmltZW50IGZhaWxzLlxuXG4gIEBJbnB1dCgpIGNhcm91c2VsX2xvYWRpbmc6ICdsYXp5JyB8ICdlYWdlcicgPSAnbGF6eSc7IC8vIElmIHdlIGRvbid0IGhhdmUgbXVsdGlwbGUgY2Fyb3VzZWxzIG9uIHBhZ2UgYW5kIHdhbnQgdG8gcHJpb3JpdGlzZSBVSSBsb2FkaW5nIG9uIHRpbWVcbiAgQElucHV0KCkgY2Fyb3VzZWxfZnJlZV9tb2RlOiBib29sZWFuID0gZmFsc2U7IC8vIEVuYWJsZXMgc2Nyb2xsaW5nIHdpdGggbW91c2V3aGVlbCAvIHNtb290aGVyIG1vbWVudHVtIHN3aXBpbmcgZXhwZXJpZW5jZVxuICBASW5wdXQoKSBjZW50ZXJfaW5zdWZmaWNpZW50X3NsaWRlczogYm9vbGVhbiA9IHRydWU7IC8vIENlbnRlcnMgdGhlIHNsaWRlcyBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCB0byBmaWxsIHRoZSBzcGFjZVxuICBASW5wdXQoKSBjZW50ZXJfYWN0aXZlX3NsaWRlOiBib29sZWFuID0gZmFsc2U7IC8vIENlbnRlcnMgdGhlIGFjdGl2ZSBzbGlkZVxuICBASW5wdXQoKSBzdGFydF9zbGlkZTogbnVtYmVyID0gMDsgLy8gU3RhcnQgc2xpZGUgaW5kZXhcbiAgQElucHV0KCkgb2Zmc2V0X3Njcm9sbGJhcl90b3A6IGJvb2xlYW4gPSBmYWxzZTsgLy8gT2Zmc2V0IHRoZSBzY3JvbGxiYXIgdG8gdGhlIHRvcCBvZiB0aGUgY2Fyb3VzZWxcblxuICBAT3V0cHV0KCkgYWN0aXZlSW5kZXhPblNsaWRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICkge1xuICAgIGluamVjdChTV0lQRVJfUFJPVklERVJfVE9LRU4pLmVuc3VyZVN3aXBlclJlZ2lzdGVyZWQoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhcm91c2VsX2xvYWRpbmcgPT09ICdsYXp5Jykge1xuICAgICAgdGhpcy5zZXRVcEludGVyc2VjdGlvbk9ic2VydmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFN3aXBlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgdGhlIGludGVyc2VjdGlvbiBvYnNlcnZlciB3aXRoIHRoZSByZWxldmFudCBvcHRpb25zXG4gICAqL1xuICBzZXRVcEludGVyc2VjdGlvbk9ic2VydmVyKCk6IHZvaWQge1xuICAgIC8vIFNldCBJbnRlcnNlY3Rpb25PYnNlcnZlciBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IG51bGwsXG4gICAgICByb290TWFyZ2luOiAnMHB4JyxcbiAgICAgIHRocmVzaG9sZDogMC41LFxuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIFNldCB1cCB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih0aGlzLm9uSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksIG9wdGlvbnMpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIHVzZXIgc2Nyb2xscyB0aGlzIGNvbXBvbmVudCBpbnRvIHZpZXdcbiAgICogQHBhcmFtIGVudHJpZXMgLSBBbiBhcnJheSBvZiBpbnRlcnN3ZWN0aW9uIG9ic2VydmVyIGVudHJpZXNcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gSW50ZXJzZWN0aW9uIG9ic2VydmVyXG4gICAqL1xuICBvbkludGVyc2VjdGlvbihlbnRyaWVzOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5W10sIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlcik6IHZvaWQge1xuICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpOiB2b2lkID0+IHtcbiAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAvLyBJbml0aWFsaXNlIHN3aXBlclxuICAgICAgICB0aGlzLmluaXRTd2lwZXIoKTtcbiAgICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGVudHJ5LnRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHlsZShlbGVtZW50OiBIVE1MRWxlbWVudCwgc3R5bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHNjcm9sbGJhciBwbGFjZW1lbnQgYW5kIHdpZHRoIGJhc2VkIG9uIGNhcm91c2Vsc2Nyb2xsYmFycGxhY2Vob2xkZXIgYW5kIGNhcm91c2VsY3Rhc3RhY2tcbiAgICovXG4gIHNldHVwU2Nyb2xsYmFyTGF5b3V0UHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXJvdXNlbFN0YWNrOiBIVE1MRWxlbWVudCA9IHRoaXMuY2Fyb3VzZWxjdGFzdGFjaz8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxiYXJFbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuY2Fyb3VzZWxzY3JvbGxiYXJwbGFjZWhvbGRlcj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHNjcm9sbGJhckhlaWdodCA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgIC5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXN3aXBlci1zY3JvbGxiYXItc2l6ZScpO1xuXG4gICAgaWYgKGNhcm91c2VsU3RhY2sgJiYgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycpIHtcbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICAnLS11aS1jYXJvdXNlbC1zY3JvbGxiYXItd2lkdGgnLFxuICAgICAgICBgJHtzY3JvbGxiYXJFbGVtZW50Py5vZmZzZXRXaWR0aCAtIHBhcnNlSW50KHRoaXMuZ2V0U3R5bGUoY2Fyb3VzZWxTdGFjaywgJ2dhcCcpLCAxMCl9cHhgLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgICctLXVpLWNhcm91c2VsLXNjcm9sbGJhci1vZmZzZXQtdG9wJyxcbiAgICAgICAgYCR7cGFyc2VJbnQodGhpcy5nZXRTdHlsZShjYXJvdXNlbFN0YWNrLCAnZ2FwJyksIDEwKSArIHNjcm9sbGJhckVsZW1lbnQ/Lm9mZnNldEhlaWdodCAvIDIgKyBwYXJzZUludChzY3JvbGxiYXJIZWlnaHQsIDEwKSAvIDJ9cHhgLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWhlaWdodCcsICcycHgnKTtcbiAgICB9XG5cbiAgICBpZiAoY2Fyb3VzZWxTdGFjayAmJiB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJykge1xuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoJy0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLXdpZHRoJywgJzEwMCUnKTtcblxuICAgICAgdGhpcy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5zdHlsZT8uc2V0UHJvcGVydHkoXG4gICAgICAgICctLXVpLWNhcm91c2VsLXNjcm9sbGJhci1vZmZzZXQtdG9wJyxcbiAgICAgICAgYCR7dGhpcy5vZmZzZXRfc2Nyb2xsYmFyX3RvcCA/IHBhcnNlSW50KHRoaXMuZ2V0U3R5bGUoY2Fyb3VzZWxTdGFjaywgJ2dhcCcpLCAxMCkgKyAncHgnIDogJzBweCd9YCxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KCctLXVpLWNhcm91c2VsLXNjcm9sbGJhci1oZWlnaHQnLCAnNHB4Jyk7XG5cbiAgICAgIHRoaXMuZWxlbWVudD8ubmF0aXZlRWxlbWVudD8uc3R5bGU/LnNldFByb3BlcnR5KCctLXVpLWNhcm91c2VsLXNjcm9sbGJhci1sZWZ0JywgJzBweCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGR5bmFtaWMgc3dpcGVyIHBhcmFtcyBhbmQgaW5pdGlhbGlzZSB0aGUgc3dpcGVyIGluc3RhbmNlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBpbml0U3dpcGVyKCk6IHZvaWQge1xuICAgIC8vIENvbG91ciBvdmVyaWRlc1xuICAgIGNvbnN0IHNjcm9sbGJhckJhY2tncm91bmRDb2xvdXIgPSB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKFxuICAgICAgJy0tb2FzeXMtY29sb3ItbGluZW4tZ3JleS0yMDAnLFxuICAgICk7XG4gICAgY29uc3Qgc2Nyb2xsYmFyU2xpZGVyQ29sb3VyID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW5WYWx1ZShcbiAgICAgICctLW9hc3lzLWNvbG9yLWJyYW5kLWZvcmVncm91bmQtcHJpbWFyeScsXG4gICAgKTtcblxuICAgIC8vIHN3aXBlciBlbGVtZW50XG4gICAgY29uc3Qgc3dpcGVyRWwgPSB0aGlzLnN3aXBlci5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3QgY2Fyb3VzZWxHYXAgPSB0aGlzLnRva2VuU2VydmljZS5nZXRUb2tlblZhbHVlKGAtLW9hc3lzLXNwYWNpbmctJHt0aGlzLmNhcm91c2VsX2dhcH1gKTtcblxuICAgIC8vIHN3aXBlciBwYXJhbWV0ZXJzXG4gICAgY29uc3Qgc3dpcGVyUGFyYW1zOiBTd2lwZXJPcHRpb25zID0ge1xuICAgICAgcmV3aW5kOiB0aGlzLnJld2luZCxcbiAgICAgIGdyYWJDdXJzb3I6IHRydWUsXG4gICAgICBzcGFjZUJldHdlZW46IHBhcnNlSW50KGNhcm91c2VsR2FwLnJlcGxhY2UoJy4nLCAnJyksIDEwKSB8fCAwLFxuICAgICAgY2VudGVyZWRTbGlkZXM6IHRoaXMuY2VudGVyX2FjdGl2ZV9zbGlkZSxcbiAgICAgIGluaXRpYWxTbGlkZTogdGhpcy5zdGFydF9zbGlkZSxcbiAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICBlbmFibGVkOlxuICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2VudGVySW5zdWZmaWNpZW50U2xpZGVzOiB0aGlzLmNlbnRlcl9pbnN1ZmZpY2llbnRfc2xpZGVzLFxuICAgICAgZnJlZU1vZGU6IHRoaXMuY2Fyb3VzZWxfZnJlZV9tb2RlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIHN0aWNreTogdHJ1ZSxcbiAgICAgICAgICAgIG1vbWVudHVtVmVsb2NpdHlSYXRpbzogMC43NSxcbiAgICAgICAgICAgIG1vbWVudHVtUmF0aW86IDAuNzUsXG4gICAgICAgICAgfVxuICAgICAgICA6IGZhbHNlLFxuICAgICAgbW91c2V3aGVlbDogdGhpcy5jYXJvdXNlbF9mcmVlX21vZGVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBmb3JjZVRvQXhpczogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogZmFsc2UsXG4gICAgICBpbmplY3RTdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAuc3dpcGVyIHtcbiAgICAgICAgICBvdmVyZmxvdzogJHt0aGlzLmNhcm91c2VsX292ZXJmbG93ID8gJ3Zpc2libGUnIDogJ2hpZGRlbid9ICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAuc3dpcGVyLXNjcm9sbGJhci5zd2lwZXItc2Nyb2xsYmFyLWhvcml6b250YWwge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICB0b3A6IHZhcigtLXVpLWNhcm91c2VsLXNjcm9sbGJhci1vZmZzZXQtdG9wKTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLXVpLWNhcm91c2VsLXNjcm9sbGJhci1oZWlnaHQpO1xuICAgICAgICAgIGxlZnQ6ICR7dGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicgPyAndmFyKC0tdWktY2Fyb3VzZWwtc2Nyb2xsYmFyLWxlZnQpJyA6ICcxJSd9O1xuICAgICAgICAgIGJhY2tncm91bmQ6ICR7c2Nyb2xsYmFyQmFja2dyb3VuZENvbG91cn1cbiAgICAgICAgfVxuXG4gICAgICAgIC5zd2lwZXItc2Nyb2xsYmFyLWRyYWcge1xuICAgICAgICAgIGJhY2tncm91bmQ6ICR7c2Nyb2xsYmFyU2xpZGVyQ29sb3VyfVxuICAgICAgICB9YCxcbiAgICAgIF0sXG4gICAgICBicmVha3BvaW50czoge1xuICAgICAgICAwOiB7XG4gICAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgICBlbmFibGVkOlxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fFxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X21vYmlsZSxcbiAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICByb3dzOiB0aGlzLmNhcm91c2VsX3Jvd3NfcGVyX3Jvd19tb2JpbGUsXG4gICAgICAgICAgICBmaWxsOiAncm93JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICA3Njc6IHtcbiAgICAgICAgICBzY3JvbGxiYXI6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8XG4gICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1iYXInLFxuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogdGhpcy5jYXJvdXNlbF9zbGlkZXNfcGVyX3ZpZXdfdGFibGV0LFxuICAgICAgICB9LFxuICAgICAgICAxMDgwOiB7XG4gICAgICAgICAgc2Nyb2xsYmFyOiB7XG4gICAgICAgICAgICBlbmFibGVkOlxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJyB8fFxuICAgICAgICAgICAgICB0aGlzLmNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJyxcbiAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IHRoaXMuY2Fyb3VzZWxfc2xpZGVzX3Blcl92aWV3X2xhcHRvcCxcbiAgICAgICAgfSxcbiAgICAgICAgMTQ0MDoge1xuICAgICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgICAgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWFycm93cycgfHxcbiAgICAgICAgICAgICAgdGhpcy5jYXJvdXNlbF9wYWdpbmF0aW9uID09PSAnc2Nyb2xsLWJhcicsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiB0aGlzLmNhcm91c2VsX3NsaWRlc19wZXJfdmlld19kZXNrdG9wLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIHNsaWRlQ2hhbmdlOiB0aGlzLm9uU2xpZGVDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGFzc2lnbiBhbGwgcGFyYW1ldGVycyB0byB0aGUgU3dpcGVyIGVsZW1lbnRcbiAgICBPYmplY3QuYXNzaWduKHN3aXBlckVsLCBzd2lwZXJQYXJhbXMpO1xuXG4gICAgLy8gYW5kIG5vdyBpbml0aWFsaXplIGl0XG4gICAgc3dpcGVyRWwuaW5pdGlhbGl6ZSgpO1xuXG4gICAgLy8gU2V0IHVwIHNjcm9sbGJhciBhbmQgZW5zdXJlIHRoaXMgaXMgcmVjYWxjdWxhdGVkIG9uIHJlc2l6ZSBldmVudHNcbiAgICB0aGlzLnNldHVwU2Nyb2xsYmFyTGF5b3V0UHJvcGVydGllcygpO1xuXG4gICAgc3dpcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5zZXR1cFNjcm9sbGJhckxheW91dFByb3BlcnRpZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRoZSBjYXJvdXNlbCBvbiB0byB0aGUgbmV4dCBzbGlkZVxuICAgKi9cbiAgbmV4dFNsaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQuc3dpcGVyLnNsaWRlTmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIGNhcm91c2VsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHNsaWRlXG4gICAqL1xuICBwcmV2aW91c1NsaWRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3dpcGVyLm5hdGl2ZUVsZW1lbnQuc3dpcGVyLnNsaWRlUHJldigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgZXZlbnQgd2hlbiB0aGUgc2xpZGUgY2hhbmdlc1xuICAgKiBAcGFyYW0gc3dpcGVyXG4gICAqL1xuICBvblNsaWRlQ2hhbmdlKHN3aXBlcjogU3dpcGVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbmRleE9uU2xpZGVDaGFuZ2UuZW1pdChzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICB9XG59XG4iLCI8dWktYm94XG4gIGNsYXNzPVwidWktY2Fyb3VzZWxcIlxuICBbbmdDbGFzc109XCJ7ICd1aS1jYXJvdXNlbC1vdmVyZmxvdyc6IGNhcm91c2VsX292ZXJmbG93IH1cIlxuICBib3hfYWxpZ25feT1cImNlbnRlclwiXG4gIGJveF9zcGFjZT1cIm5vbmVcIlxuICBbYm94X2NvbnRlbnRfZmlsbF93aWR0aF09XCJ0cnVlXCJcbiAgYm94X2JhY2tncm91bmQ9XCJ0cmFuc3BhcmVudFwiXG4+XG4gIDx1aS1zdGFjayAjY2Fyb3VzZWxjdGFzdGFjaz5cbiAgICA8IS0tIEN1c3RvbSBuYXZpZ2F0aW9uIGJ1dHRvbnMgLS0+XG4gICAgPHVpLXN0YWNrXG4gICAgICAqbmdJZj1cImNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzbWFsbC1hcnJvd3MnXCJcbiAgICAgIHN0YWNrX2RpcmVjdGlvbj1cInhcIlxuICAgICAgc3RhY2tfYWxpZ249XCJjZW50ZXJcIlxuICAgICAgc3RhY2tfZGlzdHJpYnV0ZT1cImVuZFwiXG4gICAgPlxuICAgICAgPHVpLWJveFxuICAgICAgICBib3hfc3BhY2U9XCJub25lXCJcbiAgICAgICAgYm94X2ZpbGxfbW9kZT1cImZpdFwiXG4gICAgICAgIGJveF9zcGFjZV9ib3R0b209XCJub25lXCJcbiAgICAgICAgW2JveF9zcGFjZV9yaWdodF09XCJ7IG1vYmlsZTogJ3RpZ2h0JywgdGFibGV0OiAnbm9uZScsIGxhcHRvcDogJ25vbmUnLCBkZXNrdG9wOiAnbm9uZScgfVwiXG4gICAgICAgIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCIhKHN3aXBlcj8uc3dpcGVyPy5pc0JlZ2lubmluZyAmJiBzd2lwZXI/LnN3aXBlcj8uaXNFbmQpXCJcbiAgICAgICAgICBjbGFzcz1cInVpLWNhcm91c2VsX19zbWFsbC1hcnJvd3NcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBQcmV2aW91cyBidXR0b24tLT5cbiAgICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInVpLWNhcm91c2VsX19wcmV2aW91c1wiXG4gICAgICAgICAgICBidXR0b25fc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uX3BsYWNlbWVudD1cImljb25Pbmx5XCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uPVwiYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICBidXR0b25fdHlwZT1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgIFthcmlhX2xhYmVsXT1cInRleHRfZm9yX2xlZnRfYXJyb3dcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwicHJldmlvdXNTbGlkZSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBQcmV2b3VzIHNsaWRlXG4gICAgICAgICAgPC91aS1idXR0b24+XG4gICAgICAgICAgPCEtLSBOZXh0IGJ1dHRvbi0tPlxuICAgICAgICAgIDx1aS1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwidWktY2Fyb3VzZWxfX25leHRcIlxuICAgICAgICAgICAgYnV0dG9uX3NpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBidXR0b25faWNvbl9wbGFjZW1lbnQ9XCJpY29uT25seVwiXG4gICAgICAgICAgICBidXR0b25faWNvbj1cImFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgIGJ1dHRvbl90eXBlPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgW2FyaWFfbGFiZWxdPVwidGV4dF9mb3JfcmlnaHRfYXJyb3dcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwibmV4dFNsaWRlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIE5leHQgc2xpZGVcbiAgICAgICAgICA8L3VpLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3VpLWJveD5cbiAgICA8L3VpLXN0YWNrPlxuXG4gICAgPCEtLSBTd2lwZXIgV2ViQ29tcG9uZW50LS0+XG4gICAgPHN3aXBlci1jb250YWluZXJcbiAgICAgICNzd2lwZXJcbiAgICAgIGluaXQ9XCJmYWxzZVwiXG4gICAgICB0b3VjaC1zdGFydC1wcmV2ZW50LWRlZmF1bHQ9XCJmYWxzZVwiXG4gICAgICBwcmV2ZW50LWNsaWNrcy1wcm9wYWdhdGlvbj1cInRydWVcIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3N3aXBlci1jb250YWluZXI+XG5cbiAgICA8IS0tIEN1c3RvbSBuYXZpZ2F0aW9uIGJ1dHRvbnMgLS0+XG4gICAgPHVpLXN0YWNrXG4gICAgICBzdGFja19kaXJlY3Rpb249XCJ4XCJcbiAgICAgIHN0YWNrX2FsaWduPVwiY2VudGVyXCJcbiAgICAgICpuZ0lmPVwiY2Fyb3VzZWxfcGFnaW5hdGlvbiA9PT0gJ3Njcm9sbC1hcnJvd3MnIHx8IGNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYmFyJ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInVpLWNhcm91c2VsLXNjcm9sbGJhci1wbGFjZWhvbGRlclwiICNjYXJvdXNlbHNjcm9sbGJhcnBsYWNlaG9sZGVyPjwvZGl2PlxuICAgICAgPHVpLWJveFxuICAgICAgICAqbmdJZj1cImNhcm91c2VsX3BhZ2luYXRpb24gPT09ICdzY3JvbGwtYXJyb3dzJ1wiXG4gICAgICAgIGJveF9zcGFjZT1cIm5vbmVcIlxuICAgICAgICBib3hfZmlsbF9tb2RlPVwiZml0XCJcbiAgICAgICAgW2JveF9zcGFjZV9yaWdodF09XCJ7IG1vYmlsZTogJ3RpZ2h0JywgdGFibGV0OiAnbm9uZScsIGxhcHRvcDogJ25vbmUnLCBkZXNrdG9wOiAnbm9uZScgfVwiXG4gICAgICAgIGJveF9iYWNrZ3JvdW5kPVwidHJhbnNwYXJlbnRcIlxuICAgICAgPlxuICAgICAgICA8dWktc3RhY2tcbiAgICAgICAgICAqbmdJZj1cIiEoc3dpcGVyPy5zd2lwZXI/LmlzQmVnaW5uaW5nICYmIHN3aXBlcj8uc3dpcGVyPy5pc0VuZClcIlxuICAgICAgICAgIHN0YWNrX2RpcmVjdGlvbj1cInhcIlxuICAgICAgICAgIHN0YWNrX2dhcD1cIm5lYXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBQcmV2aW91cyBidXR0b24tLT5cbiAgICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInVpLWNhcm91c2VsX19wcmV2aW91c1wiXG4gICAgICAgICAgICBidXR0b25fc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uX3BsYWNlbWVudD1cImljb25Pbmx5XCJcbiAgICAgICAgICAgIGJ1dHRvbl9pY29uPVwiYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICBidXR0b25fdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBbYXJpYV9sYWJlbF09XCJ0ZXh0X2Zvcl9sZWZ0X2Fycm93XCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInByZXZpb3VzU2xpZGUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUHJldm91cyBzbGlkZVxuICAgICAgICAgIDwvdWktYnV0dG9uPlxuICAgICAgICAgIDwhLS0gTmV4dCBidXR0b24tLT5cbiAgICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInVpLWNhcm91c2VsX19uZXh0XCJcbiAgICAgICAgICAgIGJ1dHRvbl9zaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgYnV0dG9uX2ljb25fcGxhY2VtZW50PVwiaWNvbk9ubHlcIlxuICAgICAgICAgICAgYnV0dG9uX2ljb249XCJhcnJvdy1yaWdodFwiXG4gICAgICAgICAgICBidXR0b25fdHlwZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBbYXJpYV9sYWJlbF09XCJ0ZXh0X2Zvcl9yaWdodF9hcnJvd1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJuZXh0U2xpZGUoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgTmV4dCBzbGlkZVxuICAgICAgICAgIDwvdWktYnV0dG9uPlxuICAgICAgICA8L3VpLXN0YWNrPlxuICAgICAgPC91aS1ib3g+XG4gICAgPC91aS1zdGFjaz5cbiAgPC91aS1zdGFjaz5cbjwvdWktYm94PlxuIl19
|
package/fesm2022/oasys-lib.mjs
CHANGED
|
@@ -2607,11 +2607,11 @@ class CarouselComponent {
|
|
|
2607
2607
|
this.activeIndexOnSlideChange.emit(swiper.activeIndex);
|
|
2608
2608
|
}
|
|
2609
2609
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CarouselComponent, deps: [{ token: TokenService }, { token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2610
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CarouselComponent, isStandalone: true, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", text_for_left_arrow: "text_for_left_arrow", text_for_right_arrow: "text_for_right_arrow", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, providers: [TokenService], viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"
|
|
2610
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CarouselComponent, isStandalone: true, selector: "ui-carousel", inputs: { rewind: "rewind", carousel_overflow: "carousel_overflow", carousel_gap: "carousel_gap", carousel_pagination: "carousel_pagination", carousel_slides_per_view_desktop: "carousel_slides_per_view_desktop", carousel_slides_per_view_laptop: "carousel_slides_per_view_laptop", carousel_slides_per_view_tablet: "carousel_slides_per_view_tablet", carousel_slides_per_view_mobile: "carousel_slides_per_view_mobile", text_for_left_arrow: "text_for_left_arrow", text_for_right_arrow: "text_for_right_arrow", carousel_rows_per_row_mobile: "carousel_rows_per_row_mobile", carousel_loading: "carousel_loading", carousel_free_mode: "carousel_free_mode", center_insufficient_slides: "center_insufficient_slides", center_active_slide: "center_active_slide", start_slide: "start_slide", offset_scrollbar_top: "offset_scrollbar_top" }, outputs: { activeIndexOnSlideChange: "activeIndexOnSlideChange" }, providers: [TokenService], viewQueries: [{ propertyName: "swiper", first: true, predicate: ["swiper"], descendants: true, static: true }, { propertyName: "carouselscrollbarplaceholder", first: true, predicate: ["carouselscrollbarplaceholder"], descendants: true, read: ElementRef }, { propertyName: "carouselctastack", first: true, predicate: ["carouselctastack"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"none\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <div\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n class=\"ui-carousel__small-arrows\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </div>\n </ui-box>\n </ui-stack>\n\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\"\n >\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack\n stack_direction=\"x\"\n stack_align=\"center\"\n *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\"\n >\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}.ui-carousel__small-arrows{align-items:center;display:flex;flex-direction:row;gap:var(--oasys-spacing-near);justify-content:center}@media only screen and (max-width: 767px){.ui-carousel__small-arrows{gap:var(--oasys-spacing-tight)}}\n"], dependencies: [{ kind: "component", type: LayoutBoxComponent, selector: "ui-box", inputs: ["box_space", "box_space_top", "box_space_right", "box_space_bottom", "box_space_left", "box_align_x", "box_align_y", "box_fill_mode", "box_background", "box_content_fill_width", "box_border_color", "box_border_width", "box_border_style", "box_border_radius"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LayoutStackComponent, selector: "ui-stack", inputs: ["stack_gap", "stack_align", "stack_direction", "stack_distribute", "stack_wrap", "stack_collapse_below"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OasysButtonComponent, selector: "ui-button", inputs: ["button_icon", "button_icon_placement", "button_size", "button_type", "button_full_width", "button_event_type", "button_disabled", "button_selected", "button_text_nowrap", "aria_label", "aria_role", "href"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
2611
2611
|
}
|
|
2612
2612
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
2613
2613
|
type: Component,
|
|
2614
|
-
args: [{ selector: 'ui-carousel', encapsulation: ViewEncapsulation.None, standalone: true, imports: [LayoutBoxComponent, NgClass, LayoutStackComponent, NgIf, OasysButtonComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [TokenService], template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"
|
|
2614
|
+
args: [{ selector: 'ui-carousel', encapsulation: ViewEncapsulation.None, standalone: true, imports: [LayoutBoxComponent, NgClass, LayoutStackComponent, NgIf, OasysButtonComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [TokenService], template: "<ui-box\n class=\"ui-carousel\"\n [ngClass]=\"{ 'ui-carousel-overflow': carousel_overflow }\"\n box_align_y=\"center\"\n box_space=\"none\"\n [box_content_fill_width]=\"true\"\n box_background=\"transparent\"\n>\n <ui-stack #carouselctastack>\n <!-- Custom navigation buttons -->\n <ui-stack\n *ngIf=\"carousel_pagination === 'small-arrows'\"\n stack_direction=\"x\"\n stack_align=\"center\"\n stack_distribute=\"end\"\n >\n <ui-box\n box_space=\"none\"\n box_fill_mode=\"fit\"\n box_space_bottom=\"none\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <div\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n class=\"ui-carousel__small-arrows\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"small\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"tertiary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </div>\n </ui-box>\n </ui-stack>\n\n <!-- Swiper WebComponent-->\n <swiper-container\n #swiper\n init=\"false\"\n touch-start-prevent-default=\"false\"\n prevent-clicks-propagation=\"true\"\n >\n <ng-content></ng-content>\n </swiper-container>\n\n <!-- Custom navigation buttons -->\n <ui-stack\n stack_direction=\"x\"\n stack_align=\"center\"\n *ngIf=\"carousel_pagination === 'scroll-arrows' || carousel_pagination === 'scroll-bar'\"\n >\n <div class=\"ui-carousel-scrollbar-placeholder\" #carouselscrollbarplaceholder></div>\n <ui-box\n *ngIf=\"carousel_pagination === 'scroll-arrows'\"\n box_space=\"none\"\n box_fill_mode=\"fit\"\n [box_space_right]=\"{ mobile: 'tight', tablet: 'none', laptop: 'none', desktop: 'none' }\"\n box_background=\"transparent\"\n >\n <ui-stack\n *ngIf=\"!(swiper?.swiper?.isBeginning && swiper?.swiper?.isEnd)\"\n stack_direction=\"x\"\n stack_gap=\"near\"\n >\n <!-- Previous button-->\n <ui-button\n class=\"ui-carousel__previous\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-left\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_left_arrow\"\n (clicked)=\"previousSlide()\"\n >\n Prevous slide\n </ui-button>\n <!-- Next button-->\n <ui-button\n class=\"ui-carousel__next\"\n button_size=\"large\"\n button_icon_placement=\"iconOnly\"\n button_icon=\"arrow-right\"\n button_type=\"secondary\"\n [aria_label]=\"text_for_right_arrow\"\n (clicked)=\"nextSlide()\"\n >\n Next slide\n </ui-button>\n </ui-stack>\n </ui-box>\n </ui-stack>\n </ui-stack>\n</ui-box>\n", styles: [":root{--swiper-scrollbar-size: 4px}.ui-carousel{touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.ui-carousel swiper-container{width:100%}.ui-carousel .ui-carousel-scrollbar-placeholder{width:100%;display:flex;align-self:stretch}.ui-carousel swiper-slide img{-webkit-user-drag:none}.ui-carousel__small-arrows{align-items:center;display:flex;flex-direction:row;gap:var(--oasys-spacing-near);justify-content:center}@media only screen and (max-width: 767px){.ui-carousel__small-arrows{gap:var(--oasys-spacing-tight)}}\n"] }]
|
|
2615
2615
|
}], ctorParameters: () => [{ type: TokenService }, { type: Document, decorators: [{
|
|
2616
2616
|
type: Inject,
|
|
2617
2617
|
args: [DOCUMENT]
|