simpo-component-library 3.6.644 → 3.6.645
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/README.md +24 -24
- package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
- package/esm2022/lib/components/document/document.component.mjs +3 -3
- package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
- package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
- package/esm2022/lib/constants/business.constant.mjs +1 -1
- package/esm2022/lib/directive/alignment.directive.mjs +1 -1
- package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
- package/esm2022/lib/directive/borderlessImage.directive.mjs +1 -1
- package/esm2022/lib/directive/button-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/button-editor.directive.mjs +1 -1
- package/esm2022/lib/directive/color.directive.mjs +1 -1
- package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
- package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
- package/esm2022/lib/directive/content-title-spacing.directive.mjs +1 -1
- package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
- package/esm2022/lib/directive/corner-directive.mjs +1 -1
- package/esm2022/lib/directive/height.directive.mjs +1 -1
- package/esm2022/lib/directive/hover-animation.directive.mjs +1 -1
- package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
- package/esm2022/lib/directive/icon-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/image-container.directive.mjs +1 -1
- package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/image-editor.directive.mjs +1 -1
- package/esm2022/lib/directive/image-position.directive.mjs +1 -1
- package/esm2022/lib/directive/letters-only.directive.mjs +1 -1
- package/esm2022/lib/directive/merge-header.directive.mjs +1 -1
- package/esm2022/lib/directive/numbers-only.directive.mjs +1 -1
- package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/set-dynamic-background.directive.mjs +1 -1
- package/esm2022/lib/directive/spacing-around.directive.mjs +1 -1
- package/esm2022/lib/directive/spacing-horizontal.directive.mjs +1 -1
- package/esm2022/lib/directive/spacing.directive.mjs +1 -1
- package/esm2022/lib/directive/sticky-directive.mjs +1 -1
- package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
- package/esm2022/lib/directive/text-size.directive.mjs +1 -1
- package/esm2022/lib/directive/translate-onhover.directive.mjs +1 -1
- package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +170 -89
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +171 -63
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/passbook-transactions/passbook-transactions.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +494 -157
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +108 -17
- package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/schemes/schemes.component.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
- package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
- package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
- package/esm2022/lib/elements/address-list/address-list.component.mjs +3 -3
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/button/button.component.mjs +3 -3
- package/esm2022/lib/elements/button/button.model.mjs +1 -1
- package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
- package/esm2022/lib/elements/editor-service.service.mjs +1 -1
- package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
- package/esm2022/lib/elements/image-editor/image-editor.component.mjs +1 -1
- package/esm2022/lib/elements/index.mjs +1 -1
- package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +3 -3
- package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
- package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
- package/esm2022/lib/elements/property/property.component.mjs +3 -3
- package/esm2022/lib/elements/schedule-video-call/schedule-video-call.component.mjs +3 -3
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +12 -3
- package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
- package/esm2022/lib/elements/text/text.component.mjs +3 -3
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
- package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
- package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
- package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +3 -3
- package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +2 -2
- package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +2 -2
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +1 -1
- package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +2 -2
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
- package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
- package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +2 -2
- package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +2 -2
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
- package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
- package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
- package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
- package/esm2022/lib/sections/footer/footer.component.mjs +1 -1
- package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +2 -2
- package/esm2022/lib/sections/header-section/header-section.component.mjs +2 -2
- package/esm2022/lib/sections/header-text/header-text.component.mjs +2 -2
- package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
- package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +2 -2
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
- package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
- package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
- package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +2 -2
- package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
- package/esm2022/lib/sections/moving-text/moving-text.component.mjs +3 -3
- package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +1 -1
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +2 -2
- package/esm2022/lib/sections/new-services/new-services.component.mjs +4 -4
- package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +4 -4
- package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
- package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
- package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +1 -1
- 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/pricing-section/pricing-section.modal.mjs +1 -1
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
- package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
- package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
- package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
- package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
- package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
- package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
- package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
- package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
- package/esm2022/lib/sections/registration-form/registration-form.component.mjs +3 -3
- package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
- package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
- package/esm2022/lib/sections/scheme-detail/scheme-detail.modal.mjs +1 -1
- package/esm2022/lib/sections/service-section/service-section.component.mjs +2 -2
- package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
- package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
- package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
- package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
- 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/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
- package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
- package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
- package/esm2022/lib/sections/video-section/video-section.component.mjs +1 -1
- package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1 -1
- package/esm2022/lib/services/analytics.service.mjs +160 -0
- package/esm2022/lib/services/cart.service.mjs +44 -5
- package/esm2022/lib/services/endUser.service.mjs +1 -1
- package/esm2022/lib/services/image-upload-service.service.mjs +1 -1
- package/esm2022/lib/services/rest.service.mjs +5 -1
- package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
- package/esm2022/lib/styles/index.mjs +2 -2
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/lib/tokens/api-token.mjs +1 -1
- package/fesm2022/simpo-component-library.mjs +1261 -461
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +11 -2
- package/lib/ecommerce/sections/book-appointment/book-appointment.component.d.ts +29 -21
- package/lib/ecommerce/sections/book-appointment/book-appointment.model.d.ts +38 -3
- 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/product-desc/product-desc.component.d.ts +107 -26
- package/lib/ecommerce/sections/product-desc/product-desc.modal.d.ts +27 -18
- package/lib/ecommerce/sections/product-list/product-list.component.d.ts +10 -2
- package/lib/elements/simpo-button/simpo-button.component.d.ts +4 -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/services/analytics.service.d.ts +33 -0
- package/lib/services/cart.service.d.ts +7 -1
- package/lib/services/rest.service.d.ts +1 -0
- package/lib/styles/index.d.ts +1 -1
- package/package.json +1 -1
- package/simpo-component-library-3.6.645.tgz +0 -0
- package/simpo-component-library-3.6.644.tgz +0 -0
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { Component, HostListener, Input } from '@angular/core';
|
|
3
3
|
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { MessageService } from 'primeng/api';
|
|
5
|
+
import { ToastModule } from 'primeng/toast';
|
|
6
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
7
|
+
import { SimpoElementsModule } from '../../../elements/index';
|
|
4
8
|
import BaseSection from '../../../sections/BaseSection';
|
|
5
9
|
import { AnimationDirective } from '../../../directive/animation-directive';
|
|
6
10
|
import { HoverDirective } from '../../../directive/hover-element-directive';
|
|
7
|
-
import { ImageEditorDirective } from '../../../directive/image-editor.directive';
|
|
8
11
|
import { SpacingHorizontalDirective } from '../../../directive/spacing-horizontal.directive';
|
|
9
|
-
import { ButtonEditorDirective } from '../../../directive/button-editor.directive';
|
|
10
12
|
import { ButtonDirectiveDirective } from '../../../directive/button-directive.directive';
|
|
11
13
|
import { BackgroundDirective } from '../../../directive/background-directive';
|
|
12
|
-
import { MessageService } from 'primeng/api';
|
|
13
|
-
import { ToastModule } from 'primeng/toast';
|
|
14
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
15
14
|
import { HoverElementsComponent } from '../../../components/hover-elements/hover-elements.component';
|
|
15
|
+
import { TextEditorComponent } from '../../../elements/text-editor/text-editor.component';
|
|
16
|
+
import { CornerDirective } from '../../../directive/corner-directive';
|
|
17
|
+
import { BorderDirective } from '../../../directive/border-directive';
|
|
16
18
|
import * as i0 from "@angular/core";
|
|
17
19
|
import * as i1 from "../../../services/storage.service";
|
|
18
20
|
import * as i2 from "../../../services/rest.service";
|
|
@@ -22,6 +24,7 @@ import * as i5 from "@angular/common";
|
|
|
22
24
|
import * as i6 from "@angular/forms";
|
|
23
25
|
import * as i7 from "primeng/toast";
|
|
24
26
|
import * as i8 from "@angular/material/progress-spinner";
|
|
27
|
+
import * as i9 from "../../../elements/simpo-button/simpo-button.component";
|
|
25
28
|
export class BookAppointmentComponent extends BaseSection {
|
|
26
29
|
constructor(storageService, restService, router, messageService) {
|
|
27
30
|
super();
|
|
@@ -29,7 +32,18 @@ export class BookAppointmentComponent extends BaseSection {
|
|
|
29
32
|
this.restService = restService;
|
|
30
33
|
this.router = router;
|
|
31
34
|
this.messageService = messageService;
|
|
32
|
-
this.
|
|
35
|
+
this.defaultTimeSlots = [
|
|
36
|
+
'10:00 AM',
|
|
37
|
+
'11:00 AM',
|
|
38
|
+
'12:00 PM',
|
|
39
|
+
'01:00 PM',
|
|
40
|
+
'02:00 PM',
|
|
41
|
+
'03:00 PM',
|
|
42
|
+
'04:00 PM',
|
|
43
|
+
'05:00 PM',
|
|
44
|
+
'06:00 PM'
|
|
45
|
+
];
|
|
46
|
+
this.timeSlots = [...this.defaultTimeSlots];
|
|
33
47
|
this.customerDetails = {
|
|
34
48
|
date: '',
|
|
35
49
|
time: '',
|
|
@@ -43,33 +57,123 @@ export class BookAppointmentComponent extends BaseSection {
|
|
|
43
57
|
zipCode: ''
|
|
44
58
|
},
|
|
45
59
|
userId: '',
|
|
46
|
-
businessId: localStorage.getItem('bId') ?? localStorage.getItem('businessId')
|
|
60
|
+
businessId: localStorage.getItem('bId') ?? localStorage.getItem('businessId') ?? ''
|
|
47
61
|
};
|
|
48
|
-
this.designs = [
|
|
49
|
-
{ id: 1, name: 'Design 1', price: '$100', selected: false },
|
|
50
|
-
{ id: 2, name: 'Design 2', price: '$150', selected: false }
|
|
51
|
-
];
|
|
52
62
|
this.weekDays = [];
|
|
53
63
|
this.trialCartItem = [];
|
|
54
64
|
this.loader = false;
|
|
65
|
+
this.screenWidth = 475;
|
|
66
|
+
this.getScreenSize();
|
|
55
67
|
}
|
|
56
68
|
ngOnInit() {
|
|
57
69
|
const user = this.storageService.getUser();
|
|
58
|
-
this.
|
|
59
|
-
this.customerDetails.addressDetails.receiverPhone = user?.addressDetailsList[0]?.receiverPhone ?? '';
|
|
60
|
-
this.customerDetails.addressDetails.receiverEmail = user?.addressDetailsList[0]?.receiverEmail ?? '';
|
|
61
|
-
this.customerDetails.addressDetails.addressLine1 = user?.addressDetailsList[0]?.addressLine1 ?? '';
|
|
62
|
-
this.customerDetails.addressDetails.stateName = user?.addressDetailsList[0]?.stateName ?? '';
|
|
63
|
-
this.customerDetails.addressDetails.cityName = user?.addressDetailsList[0]?.cityName ?? '';
|
|
64
|
-
this.customerDetails.addressDetails.zipCode = user?.addressDetailsList[0]?.zipCode ?? '';
|
|
65
|
-
this.customerDetails.userId = user?.userId ?? '';
|
|
70
|
+
this.content = this.data?.content;
|
|
66
71
|
this.styles = this.data?.styles;
|
|
72
|
+
this.ensureDefaultContent();
|
|
73
|
+
this.customerDetails.addressDetails.receiverName =
|
|
74
|
+
user?.addressDetailsList?.[0]?.receiverName ?? '';
|
|
75
|
+
this.customerDetails.addressDetails.receiverPhone =
|
|
76
|
+
user?.addressDetailsList?.[0]?.receiverPhone ?? '';
|
|
77
|
+
this.customerDetails.addressDetails.receiverEmail =
|
|
78
|
+
user?.addressDetailsList?.[0]?.receiverEmail ?? '';
|
|
79
|
+
this.customerDetails.addressDetails.addressLine1 =
|
|
80
|
+
user?.addressDetailsList?.[0]?.addressLine1 ?? '';
|
|
81
|
+
this.customerDetails.addressDetails.stateName =
|
|
82
|
+
user?.addressDetailsList?.[0]?.stateName ?? '';
|
|
83
|
+
this.customerDetails.addressDetails.cityName =
|
|
84
|
+
user?.addressDetailsList?.[0]?.cityName ?? '';
|
|
85
|
+
this.customerDetails.addressDetails.zipCode =
|
|
86
|
+
user?.addressDetailsList?.[0]?.zipCode ?? '';
|
|
87
|
+
this.customerDetails.userId = user?.userId ?? '';
|
|
88
|
+
this.syncFieldInputValuesFromCustomerDetails();
|
|
67
89
|
this.getNextSevenDays();
|
|
68
90
|
this.getTrialCart();
|
|
69
91
|
}
|
|
92
|
+
ensureDefaultContent() {
|
|
93
|
+
if (!this.content) {
|
|
94
|
+
this.content = {
|
|
95
|
+
inputText: [],
|
|
96
|
+
appointmentField: {
|
|
97
|
+
customLabel: true,
|
|
98
|
+
fields: []
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (!this.content.inputText) {
|
|
103
|
+
this.content.inputText = [];
|
|
104
|
+
}
|
|
105
|
+
if (!this.content.appointmentField) {
|
|
106
|
+
this.content.appointmentField = {
|
|
107
|
+
customLabel: true,
|
|
108
|
+
fields: []
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (!this.content.appointmentField.fields) {
|
|
112
|
+
this.content.appointmentField.fields = [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
syncFieldInputValuesFromCustomerDetails() {
|
|
116
|
+
this.content?.appointmentField?.fields?.forEach((field) => {
|
|
117
|
+
field.inputValue = this.getFieldValue(field.key);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
get stylesLayout() {
|
|
121
|
+
return { ...this.styles?.layout };
|
|
122
|
+
}
|
|
123
|
+
getScreenSize() {
|
|
124
|
+
if (typeof window !== 'undefined') {
|
|
125
|
+
this.screenWidth = window.innerWidth;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
get appointmentFields() {
|
|
129
|
+
return (this.content?.appointmentField?.fields ?? []).filter((field) => Object.hasOwn(field, 'status') ? field.status : true);
|
|
130
|
+
}
|
|
131
|
+
getTextByLabel(label, fallback = '') {
|
|
132
|
+
return this.content?.inputText?.find((item) => item.label === label)?.value ?? fallback;
|
|
133
|
+
}
|
|
134
|
+
setTextByLabel(label, value) {
|
|
135
|
+
if (!this.content?.inputText)
|
|
136
|
+
return;
|
|
137
|
+
const found = this.content.inputText.find((item) => item.label === label);
|
|
138
|
+
if (found) {
|
|
139
|
+
found.value = value;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.content.inputText.push({
|
|
143
|
+
label,
|
|
144
|
+
value,
|
|
145
|
+
isRTE: false
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
getFieldWidth(field) {
|
|
149
|
+
if (this.screenWidth <= 768)
|
|
150
|
+
return '100%';
|
|
151
|
+
return field?.width === 'full' || this.isTextarea(field) ? '100%' : 'calc(50% - 8px)';
|
|
152
|
+
}
|
|
153
|
+
getFieldValue(key) {
|
|
154
|
+
return this.customerDetails.addressDetails?.[key] ?? '';
|
|
155
|
+
}
|
|
156
|
+
updateFieldValue(field, value) {
|
|
157
|
+
this.customerDetails.addressDetails[field.key] = value;
|
|
158
|
+
field.inputValue = value;
|
|
159
|
+
}
|
|
160
|
+
isTextarea(field) {
|
|
161
|
+
if (!field?.type)
|
|
162
|
+
return false;
|
|
163
|
+
const textAreaTypes = ['textarea', 'desc'];
|
|
164
|
+
return textAreaTypes.includes(field.type.toLowerCase());
|
|
165
|
+
}
|
|
166
|
+
isDropdown(field) {
|
|
167
|
+
return field?.type === 'dropdown';
|
|
168
|
+
}
|
|
169
|
+
getVisibleOptions(field) {
|
|
170
|
+
return (field?.options ?? []).filter((option) => Object.hasOwn(option, 'status') ? option.status : true);
|
|
171
|
+
}
|
|
70
172
|
checkAvailability(day) {
|
|
71
173
|
this.customerDetails.date = day.dateWithMonth;
|
|
72
|
-
|
|
174
|
+
this.customerDetails.time = '';
|
|
175
|
+
this.timeSlots = [...this.defaultTimeSlots];
|
|
176
|
+
const selectedDate = new Date(this.customerDetails.date);
|
|
73
177
|
const today = new Date();
|
|
74
178
|
const tempSelectedDate = new Date(selectedDate);
|
|
75
179
|
const tempToday = new Date(today);
|
|
@@ -78,7 +182,7 @@ export class BookAppointmentComponent extends BaseSection {
|
|
|
78
182
|
if (tempSelectedDate.getTime() === tempToday.getTime()) {
|
|
79
183
|
const currentHour = today.getHours();
|
|
80
184
|
const currentMinutes = today.getMinutes();
|
|
81
|
-
this.timeSlots = this.
|
|
185
|
+
this.timeSlots = this.defaultTimeSlots.filter((slot) => {
|
|
82
186
|
const [time, period] = slot.split(' ');
|
|
83
187
|
const [hours, minutes] = time.split(':').map(Number);
|
|
84
188
|
let slotHour = hours;
|
|
@@ -88,18 +192,12 @@ export class BookAppointmentComponent extends BaseSection {
|
|
|
88
192
|
else if (period === 'AM' && hours === 12) {
|
|
89
193
|
slotHour = 0;
|
|
90
194
|
}
|
|
91
|
-
|
|
92
|
-
return slotHour > currentHour ||
|
|
93
|
-
(slotHour === currentHour && minutes > currentMinutes);
|
|
195
|
+
return slotHour > currentHour || (slotHour === currentHour && minutes > currentMinutes);
|
|
94
196
|
});
|
|
95
197
|
}
|
|
96
|
-
else {
|
|
97
|
-
// Reset to all time slots for future dates
|
|
98
|
-
this.timeSlots = ['10:00 AM', '11:00 AM', '12:00 PM', '01:00 PM', '02:00 PM', '03:00 PM', '04:00 PM', '05:00 PM', '06:00 PM'];
|
|
99
|
-
}
|
|
100
198
|
}
|
|
101
199
|
getTrialCart() {
|
|
102
|
-
|
|
200
|
+
const user = this.storageService.getUser();
|
|
103
201
|
if (user) {
|
|
104
202
|
this.restService.getUserItems(user.userId, 'TRIAL_CART').subscribe((res) => {
|
|
105
203
|
this.trialCartItem = res?.data?.[0]?.orderedItems ?? [];
|
|
@@ -112,79 +210,86 @@ export class BookAppointmentComponent extends BaseSection {
|
|
|
112
210
|
getTrialCartIndexDBData() {
|
|
113
211
|
this.storageService.getTrialCart().then((response) => {
|
|
114
212
|
response.onsuccess = (userTrialCartResponse) => {
|
|
115
|
-
this.trialCartItem = userTrialCartResponse.target.result;
|
|
213
|
+
this.trialCartItem = userTrialCartResponse.target.result ?? [];
|
|
116
214
|
};
|
|
117
215
|
});
|
|
118
216
|
}
|
|
119
217
|
getNextSevenDays() {
|
|
218
|
+
this.weekDays = [];
|
|
120
219
|
const today = new Date();
|
|
121
220
|
for (let i = 0; i < 7; i++) {
|
|
122
221
|
const date = new Date(today);
|
|
123
222
|
date.setDate(today.getDate() + i);
|
|
124
|
-
const formattedDate = date.toISOString().split('T')[0];
|
|
125
|
-
const dayName = date.toLocaleDateString('en-US', { weekday: 'long' });
|
|
126
|
-
this.weekDays.push({
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (design) {
|
|
132
|
-
if (!design.selected && this.getSelectedDesigns().length >= 4)
|
|
133
|
-
return;
|
|
134
|
-
design.selected = !design.selected;
|
|
223
|
+
const formattedDate = date.toISOString().split('T')[0];
|
|
224
|
+
const dayName = date.toLocaleDateString('en-US', { weekday: 'long' });
|
|
225
|
+
this.weekDays.push({
|
|
226
|
+
dateWithMonth: formattedDate,
|
|
227
|
+
day: dayName,
|
|
228
|
+
date: date.getDate()
|
|
229
|
+
});
|
|
135
230
|
}
|
|
136
231
|
}
|
|
137
|
-
getSelectedDesigns() {
|
|
138
|
-
return this.designs.filter(d => d.selected);
|
|
139
|
-
}
|
|
140
232
|
get isValid() {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
233
|
+
for (const field of this.appointmentFields) {
|
|
234
|
+
const fieldValue = this.getFieldValue(field.key);
|
|
235
|
+
if (field?.required && !String(fieldValue ?? '').trim()) {
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
return !this.customerDetails.date || !this.customerDetails.time;
|
|
145
240
|
}
|
|
146
241
|
bookAppointment() {
|
|
147
242
|
this.loader = true;
|
|
148
|
-
this.restService.bookAppointment(this.customerDetails).subscribe((
|
|
243
|
+
this.restService.bookAppointment(this.customerDetails).subscribe(() => {
|
|
149
244
|
this.loader = false;
|
|
150
|
-
this.messageService.add({
|
|
245
|
+
this.messageService.add({
|
|
246
|
+
severity: 'success',
|
|
247
|
+
summary: 'Appointment',
|
|
248
|
+
detail: this.content?.appointmentField?.successMessage || 'Appointment Booked successfully'
|
|
249
|
+
});
|
|
151
250
|
this.router.navigate(['/profile'], { queryParams: { tab: 'try_at_home' } });
|
|
152
251
|
}, () => {
|
|
153
|
-
this.messageService.add({ severity: 'error', summary: 'Appointment', detail: 'Appointment not booked' });
|
|
154
252
|
this.loader = false;
|
|
253
|
+
this.messageService.add({
|
|
254
|
+
severity: 'error',
|
|
255
|
+
summary: 'Appointment',
|
|
256
|
+
detail: 'Appointment not booked'
|
|
257
|
+
});
|
|
155
258
|
});
|
|
156
259
|
}
|
|
157
260
|
selectTime(time) {
|
|
158
261
|
this.customerDetails.time = time;
|
|
159
262
|
}
|
|
160
263
|
getKeys(object) {
|
|
161
|
-
|
|
162
|
-
return Object.keys(object);
|
|
163
|
-
return [];
|
|
264
|
+
return object ? Object.keys(object) : [];
|
|
164
265
|
}
|
|
165
266
|
addMoreDesign() {
|
|
166
267
|
this.router.navigate(['/list']);
|
|
167
268
|
}
|
|
168
269
|
get isMobile() {
|
|
169
|
-
return window.innerWidth <= 475;
|
|
270
|
+
return typeof window !== 'undefined' ? window.innerWidth <= 475 : false;
|
|
170
271
|
}
|
|
171
272
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookAppointmentComponent, deps: [{ token: i1.StorageServiceService }, { token: i2.RestService }, { token: i3.Router }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
172
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BookAppointmentComponent, isStandalone: true, selector: "simpo-book-appointment", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div class=\"container\">\n <div class=\"content-grid\">\n <!-- Left Form Section -->\n <div class=\"form-section\">\n <!-- Service Description -->\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\n <h2 class=\"section-title\">Try at Home Service</h2>\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\n </div>\n\n <!-- Pincode Section -->\n <!-- <div class=\"card\">\n <h3 class=\"section-title\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\n </svg>\n Service Location\n </h3>\n <div class=\"form-group\">\n <label class=\"form-label\">Enter your pincode</label>\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\n maxlength=\"6\" />\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\n \u2713 Service available in your area\n </div>\n </div>\n </div> -->\n\n <!-- Date Selection -->\n <div class=\"card\">\n <h3 class=\"section-title\">Select a Date</h3>\n <div class=\"date-grid\">\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\n <div class=\"time\">\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\n <div class=\"date\">{{day.date}}</div>\n </div>\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\n Designs</div>\n </div>\n </div>\n </div>\n\n <!-- Time Selection -->\n <div class=\"card\" *ngIf=\"customerDetails.date\">\n <div class=\"section\">\n <h2 class=\"section-title\">Select a Time</h2>\n <div class=\"time-grid\">\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots ?? []\" (click)=\"selectTime(time)\"\n [ngClass]=\"{'selected': time === customerDetails.time}\">\n <div class=\"more-slot-badge\">More Slot Left</div>\n <div class=\"time-text\">{{time}}</div>\n </div>\n <div *ngIf=\"timeSlots?.length == 0\">No slots available</div>\n </div>\n </div>\n </div>\n\n <!-- Customer Details -->\n <div class=\"card\">\n <h3 class=\"section-title\">Contact Details</h3>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">Full Name *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Phone Number *</label>\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\n placeholder=\"Enter your phone number\" />\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">Email *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">City *</label>\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\n placeholder=\"Enter your city\" />\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">State *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Pincode *</label>\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\n placeholder=\"Enter your phone number\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Complete Address *</label>\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\n placeholder=\"Enter your complete address\"></textarea>\n </div>\n\n </div>\n </div>\n\n <!-- Sidebar -->\n <div class=\"sidebar\">\n <div class=\"card\">\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\n\n <div class=\"design-parent\">\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\n <div class=\"design-content\">\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\n alt=\"\">\n <!-- <div class=\"\">Design Image</div> -->\n\n <div class=\"design-info\">\n <h3 class=\"item-title\">{{item.itemName}}</h3>\n <div class=\"item-price\">\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\n number:\n '1.0-2'}}</span>\n </div>\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\n item.itemVariant.properties[varient] | uppercase }}</span>\n </div>\n </div>\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\n {{ design.selected ? 'Selected' : 'Select' }}\n </button> -->\n </div>\n </div>\n </div>\n\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n Add More Designs\n </button>\n\n <div class=\"summary\">\n <!-- <div class=\"summary-row\">\n <span class=\"summary-label\">Selected Designs:</span>\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\n </div> -->\n <div class=\"summary-row\">\n <span class=\"summary-label\">Service:</span>\n <span class=\"summary-value free-service\">FREE</span>\n </div>\n </div>\n\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\n </button>\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\n </div>\n </div>\n </div>\n </div>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\n [isEcommerce]=\"true\"></simpo-hover-elements>\n </div>\n</main>\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
|
|
273
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BookAppointmentComponent, isStandalone: true, selector: "simpo-book-appointment", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, host: { listeners: { "window:resize": "getScreenSize($event)" } }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\">\r\n</p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\" [simpoAnimation]=\"styles?.animation\"\r\n [spacingHorizontal]=\"stylesLayout\" [simpoBorder]=\"styles?.border\">\r\n\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\"\r\n [simpoCorner]=\"styles?.corners\">\r\n\r\n <div class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Heading', 'Try at Home Service')\"\r\n (valueChange)=\"setTextByLabel('Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </div>\r\n\r\n <div class=\"service-subtext editor-reset\">\r\n <simpo-text-editor\r\n [value]=\"getTextByLabel('Subtext', 'Our Try at Home consultant will visit your location to show you the designs at your convenience.')\"\r\n (valueChange)=\"setTextByLabel('Subtext', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Date Section Heading', 'Select a Date')\"\r\n (valueChange)=\"setTextByLabel('Date Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [simpoCorner]=\"styles?.corners\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n\r\n <div class=\"time\">\r\n <div class=\"day\">{{ day.day.substring(0, 3) }}</div>\r\n <div class=\"date\">{{ day.date }}</div>\r\n </div>\r\n\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n {{ trialCartItem?.length ?? 0 }} Designs\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\" *ngIf=\"customerDetails.date\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"section\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Time Section Heading', 'Select a Time')\"\r\n (valueChange)=\"setTextByLabel('Time Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots ?? []\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{ selected: time === customerDetails.time }\">\r\n\r\n <div class=\"more-slot-badge\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n {{ getTextByLabel('Slot Badge', 'More Slot Left') }}\r\n </div>\r\n\r\n <div class=\"time-text\">{{ time }}</div>\r\n </div>\r\n\r\n <div *ngIf=\"timeSlots?.length === 0\">\r\n {{ getTextByLabel('No Slot Text', 'No slots available') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Contact Section Heading', 'Contact Details')\"\r\n (valueChange)=\"setTextByLabel('Contact Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"appointment-form\">\r\n <div class=\"form-group\" *ngFor=\"let field of appointmentFields\" [style.width]=\"getFieldWidth(field)\">\r\n\r\n <label class=\"form-label\">\r\n {{ field.label }}<span *ngIf=\"field.required\"> *</span>\r\n </label>\r\n\r\n <!-- dropdown -->\r\n <ng-container *ngIf=\"isDropdown(field); else normalField\">\r\n <select class=\"form-input\" [ngModel]=\"getFieldValue(field.key)\"\r\n (ngModelChange)=\"updateFieldValue(field, $event)\">\r\n <option value=\"\">{{ field.placeholder || ('Select ' + field.label) }}</option>\r\n <option *ngFor=\"let option of getVisibleOptions(field)\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </ng-container>\r\n\r\n <!-- input / textarea -->\r\n <ng-template #normalField>\r\n <ng-container *ngIf=\"!isTextarea(field); else textareaField\">\r\n <input [type]=\"field.type || 'text'\" class=\"form-input\" [placeholder]=\"field.placeholder\"\r\n [ngModel]=\"getFieldValue(field.key)\" (ngModelChange)=\"updateFieldValue(field, $event)\" />\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #textareaField>\r\n <textarea class=\"form-input form-textarea\" [placeholder]=\"field.placeholder\"\r\n [ngModel]=\"getFieldValue(field.key)\" (ngModelChange)=\"updateFieldValue(field, $event)\">\r\n </textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"designs-header editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Sidebar Heading', 'Your Shortlisted Designs')\"\r\n (valueChange)=\"setTextByLabel('Sidebar Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" />\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{ item.itemName }}</h3>\r\n\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{ item.discountedPrice | number: '1.0-2' }}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\r\n \u20B9{{ item.sellingPrice | number: '1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">\r\n {{ varient }}: {{ item.itemVariant.properties[varient] | uppercase }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n {{ getTextByLabel('Add More Button Text', 'Add More Designs') }}\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">{{ getTextByLabel('Service Label', 'Service:') }}</span>\r\n <span class=\"summary-value free-service\">{{ getTextByLabel('Service Value', 'FREE') }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loader\" class=\"book-button\">\r\n <app-button-element (click)=\"bookAppointment()\" [buttonContent]=\"data?.action?.buttons?.[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\" [buttonId]=\"data?.action?.buttons?.[0]?.id || 'btn1'\"\r\n [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"styles?.background\" [edit]=\"edit\" [isFullWidth]=\"true\">\r\n </app-button-element>\r\n </div>\r\n\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\" [backgroundInfo]=\"styles?.background\">\r\n <mat-spinner></mat-spinner>\r\n Booking\r\n </button>\r\n\r\n <p class=\"disclaimer editor-reset\">\r\n <simpo-text-editor\r\n [value]=\"getTextByLabel('Disclaimer', 'Our consultant will contact you to confirm the appointment')\"\r\n (valueChange)=\"setTextByLabel('Disclaimer', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\" [isEcommerce]=\"true\">\r\n </simpo-hover-elements>\r\n </div>\r\n</main>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.service-description p,.service-subtext{line-height:1.6}.editor-reset ::ng-deep p,.editor-reset ::ng-deep h1,.editor-reset ::ng-deep h2,.editor-reset ::ng-deep h3,.editor-reset ::ng-deep h4,.editor-reset ::ng-deep h5,.editor-reset ::ng-deep h6{margin:0!important}.appointment-form{display:flex;flex-wrap:wrap;gap:16px}.form-group{margin-bottom:0}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;background:#fff}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;min-height:100px}.date-grid{display:flex;gap:12px}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0;object-fit:cover}.design-info{flex:1}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%!important;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button app-button-element{width:100%;display:block}::ng-deep .book-button .button.w-full{width:100%!important}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px;flex-wrap:wrap}.design-parent{max-height:250px;overflow:auto}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}@media (max-width: 768px){.content-grid{grid-template-columns:1fr}.appointment-form{flex-direction:column}.form-group{width:100%!important}.time-grid{gap:12px}}@media screen and (max-width: 475px){.date-grid{overflow-x:auto;max-width:274px;width:100%}.single-date{min-width:72px;width:auto;flex:0 0 auto}}.form-input,select.form-input,textarea.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;background:#fff;box-sizing:border-box}select.form-input{appearance:none;-webkit-appearance:none;-moz-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label", "type"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i9.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "isFullWidth", "disabled", "loading"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }] }); }
|
|
173
274
|
}
|
|
174
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookAppointmentComponent, decorators: [{
|
|
175
276
|
type: Component,
|
|
176
|
-
args: [{ selector: 'simpo-book-appointment', standalone: true, imports: [
|
|
277
|
+
args: [{ selector: 'simpo-book-appointment', standalone: true, imports: [
|
|
278
|
+
CommonModule,
|
|
279
|
+
FormsModule,
|
|
177
280
|
ButtonDirectiveDirective,
|
|
178
281
|
AnimationDirective,
|
|
179
282
|
HoverDirective,
|
|
180
|
-
ImageEditorDirective,
|
|
181
283
|
SpacingHorizontalDirective,
|
|
182
|
-
ButtonEditorDirective,
|
|
183
284
|
BackgroundDirective,
|
|
184
285
|
ToastModule,
|
|
185
286
|
MatProgressSpinnerModule,
|
|
186
|
-
HoverElementsComponent
|
|
187
|
-
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\n\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\n <div class=\"container\">\n <div class=\"content-grid\">\n <!-- Left Form Section -->\n <div class=\"form-section\">\n <!-- Service Description -->\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\n <h2 class=\"section-title\">Try at Home Service</h2>\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\n </div>\n\n <!-- Pincode Section -->\n <!-- <div class=\"card\">\n <h3 class=\"section-title\">\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\n <path\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\n </svg>\n Service Location\n </h3>\n <div class=\"form-group\">\n <label class=\"form-label\">Enter your pincode</label>\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\n maxlength=\"6\" />\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\n \u2713 Service available in your area\n </div>\n </div>\n </div> -->\n\n <!-- Date Selection -->\n <div class=\"card\">\n <h3 class=\"section-title\">Select a Date</h3>\n <div class=\"date-grid\">\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\n <div class=\"time\">\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\n <div class=\"date\">{{day.date}}</div>\n </div>\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\n Designs</div>\n </div>\n </div>\n </div>\n\n <!-- Time Selection -->\n <div class=\"card\" *ngIf=\"customerDetails.date\">\n <div class=\"section\">\n <h2 class=\"section-title\">Select a Time</h2>\n <div class=\"time-grid\">\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots ?? []\" (click)=\"selectTime(time)\"\n [ngClass]=\"{'selected': time === customerDetails.time}\">\n <div class=\"more-slot-badge\">More Slot Left</div>\n <div class=\"time-text\">{{time}}</div>\n </div>\n <div *ngIf=\"timeSlots?.length == 0\">No slots available</div>\n </div>\n </div>\n </div>\n\n <!-- Customer Details -->\n <div class=\"card\">\n <h3 class=\"section-title\">Contact Details</h3>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">Full Name *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Phone Number *</label>\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\n placeholder=\"Enter your phone number\" />\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">Email *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">City *</label>\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\n placeholder=\"Enter your city\" />\n </div>\n </div>\n <div class=\"form-row\">\n <div class=\"form-group\">\n <label class=\"form-label\">State *</label>\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\n placeholder=\"Enter your full name\" />\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Pincode *</label>\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\n placeholder=\"Enter your phone number\" />\n </div>\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">Complete Address *</label>\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\n placeholder=\"Enter your complete address\"></textarea>\n </div>\n\n </div>\n </div>\n\n <!-- Sidebar -->\n <div class=\"sidebar\">\n <div class=\"card\">\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\n\n <div class=\"design-parent\">\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\n <div class=\"design-content\">\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\n alt=\"\">\n <!-- <div class=\"\">Design Image</div> -->\n\n <div class=\"design-info\">\n <h3 class=\"item-title\">{{item.itemName}}</h3>\n <div class=\"item-price\">\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\n number:\n '1.0-2'}}</span>\n </div>\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\n item.itemVariant.properties[varient] | uppercase }}</span>\n </div>\n </div>\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\n {{ design.selected ? 'Selected' : 'Select' }}\n </button> -->\n </div>\n </div>\n </div>\n\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n </svg>\n Add More Designs\n </button>\n\n <div class=\"summary\">\n <!-- <div class=\"summary-row\">\n <span class=\"summary-label\">Selected Designs:</span>\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\n </div> -->\n <div class=\"summary-row\">\n <span class=\"summary-label\">Service:</span>\n <span class=\"summary-value free-service\">FREE</span>\n </div>\n </div>\n\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\n </button>\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\n </div>\n </div>\n </div>\n </div>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\n [isEcommerce]=\"true\"></simpo-hover-elements>\n </div>\n</main>\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"] }]
|
|
287
|
+
HoverElementsComponent,
|
|
288
|
+
TextEditorComponent,
|
|
289
|
+
SimpoElementsModule,
|
|
290
|
+
CornerDirective,
|
|
291
|
+
BorderDirective
|
|
292
|
+
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\">\r\n</p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\" [simpoAnimation]=\"styles?.animation\"\r\n [spacingHorizontal]=\"stylesLayout\" [simpoBorder]=\"styles?.border\">\r\n\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\"\r\n [simpoCorner]=\"styles?.corners\">\r\n\r\n <div class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Heading', 'Try at Home Service')\"\r\n (valueChange)=\"setTextByLabel('Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </div>\r\n\r\n <div class=\"service-subtext editor-reset\">\r\n <simpo-text-editor\r\n [value]=\"getTextByLabel('Subtext', 'Our Try at Home consultant will visit your location to show you the designs at your convenience.')\"\r\n (valueChange)=\"setTextByLabel('Subtext', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Date Section Heading', 'Select a Date')\"\r\n (valueChange)=\"setTextByLabel('Date Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [simpoCorner]=\"styles?.corners\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n\r\n <div class=\"time\">\r\n <div class=\"day\">{{ day.day.substring(0, 3) }}</div>\r\n <div class=\"date\">{{ day.date }}</div>\r\n </div>\r\n\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n {{ trialCartItem?.length ?? 0 }} Designs\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\" *ngIf=\"customerDetails.date\" [simpoCorner]=\"styles?.corners\">\r\n <div class=\"section\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Time Section Heading', 'Select a Time')\"\r\n (valueChange)=\"setTextByLabel('Time Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots ?? []\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{ selected: time === customerDetails.time }\">\r\n\r\n <div class=\"more-slot-badge\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n {{ getTextByLabel('Slot Badge', 'More Slot Left') }}\r\n </div>\r\n\r\n <div class=\"time-text\">{{ time }}</div>\r\n </div>\r\n\r\n <div *ngIf=\"timeSlots?.length === 0\">\r\n {{ getTextByLabel('No Slot Text', 'No slots available') }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"section-title editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Contact Section Heading', 'Contact Details')\"\r\n (valueChange)=\"setTextByLabel('Contact Section Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"appointment-form\">\r\n <div class=\"form-group\" *ngFor=\"let field of appointmentFields\" [style.width]=\"getFieldWidth(field)\">\r\n\r\n <label class=\"form-label\">\r\n {{ field.label }}<span *ngIf=\"field.required\"> *</span>\r\n </label>\r\n\r\n <!-- dropdown -->\r\n <ng-container *ngIf=\"isDropdown(field); else normalField\">\r\n <select class=\"form-input\" [ngModel]=\"getFieldValue(field.key)\"\r\n (ngModelChange)=\"updateFieldValue(field, $event)\">\r\n <option value=\"\">{{ field.placeholder || ('Select ' + field.label) }}</option>\r\n <option *ngFor=\"let option of getVisibleOptions(field)\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </ng-container>\r\n\r\n <!-- input / textarea -->\r\n <ng-template #normalField>\r\n <ng-container *ngIf=\"!isTextarea(field); else textareaField\">\r\n <input [type]=\"field.type || 'text'\" class=\"form-input\" [placeholder]=\"field.placeholder\"\r\n [ngModel]=\"getFieldValue(field.key)\" (ngModelChange)=\"updateFieldValue(field, $event)\" />\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #textareaField>\r\n <textarea class=\"form-input form-textarea\" [placeholder]=\"field.placeholder\"\r\n [ngModel]=\"getFieldValue(field.key)\" (ngModelChange)=\"updateFieldValue(field, $event)\">\r\n </textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\" [simpoCorner]=\"styles?.corners\">\r\n <h3 class=\"designs-header editor-reset\">\r\n <simpo-text-editor [value]=\"getTextByLabel('Sidebar Heading', 'Your Shortlisted Designs')\"\r\n (valueChange)=\"setTextByLabel('Sidebar Heading', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </h3>\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\" />\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{ item.itemName }}</h3>\r\n\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{ item.discountedPrice | number: '1.0-2' }}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\r\n \u20B9{{ item.sellingPrice | number: '1.0-2' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">\r\n {{ varient }}: {{ item.itemVariant.properties[varient] | uppercase }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n {{ getTextByLabel('Add More Button Text', 'Add More Designs') }}\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">{{ getTextByLabel('Service Label', 'Service:') }}</span>\r\n <span class=\"summary-value free-service\">{{ getTextByLabel('Service Value', 'FREE') }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loader\" class=\"book-button\">\r\n <app-button-element (click)=\"bookAppointment()\" [buttonContent]=\"data?.action?.buttons?.[0]?.content\"\r\n [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\" [buttonId]=\"data?.action?.buttons?.[0]?.id || 'btn1'\"\r\n [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"styles?.background\" [edit]=\"edit\" [isFullWidth]=\"true\">\r\n </app-button-element>\r\n </div>\r\n\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\" [backgroundInfo]=\"styles?.background\">\r\n <mat-spinner></mat-spinner>\r\n Booking\r\n </button>\r\n\r\n <p class=\"disclaimer editor-reset\">\r\n <simpo-text-editor\r\n [value]=\"getTextByLabel('Disclaimer', 'Our consultant will contact you to confirm the appointment')\"\r\n (valueChange)=\"setTextByLabel('Disclaimer', $event)\" [editable]=\"edit || false\">\r\n </simpo-text-editor>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\" [isEcommerce]=\"true\">\r\n </simpo-hover-elements>\r\n </div>\r\n</main>", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.service-description p,.service-subtext{line-height:1.6}.editor-reset ::ng-deep p,.editor-reset ::ng-deep h1,.editor-reset ::ng-deep h2,.editor-reset ::ng-deep h3,.editor-reset ::ng-deep h4,.editor-reset ::ng-deep h5,.editor-reset ::ng-deep h6{margin:0!important}.appointment-form{display:flex;flex-wrap:wrap;gap:16px}.form-group{margin-bottom:0}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;background:#fff}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;min-height:100px}.date-grid{display:flex;gap:12px}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0;object-fit:cover}.design-info{flex:1}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%!important;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button app-button-element{width:100%;display:block}::ng-deep .book-button .button.w-full{width:100%!important}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px;flex-wrap:wrap}.design-parent{max-height:250px;overflow:auto}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}@media (max-width: 768px){.content-grid{grid-template-columns:1fr}.appointment-form{flex-direction:column}.form-group{width:100%!important}.time-grid{gap:12px}}@media screen and (max-width: 475px){.date-grid{overflow-x:auto;max-width:274px;width:100%}.single-date{min-width:72px;width:auto;flex:0 0 auto}}.form-input,select.form-input,textarea.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s;background:#fff;box-sizing:border-box}select.form-input{appearance:none;-webkit-appearance:none;-moz-appearance:none}\n"] }]
|
|
188
293
|
}], ctorParameters: () => [{ type: i1.StorageServiceService }, { type: i2.RestService }, { type: i3.Router }, { type: i4.MessageService }], propDecorators: { data: [{
|
|
189
294
|
type: Input
|
|
190
295
|
}], index: [{
|
|
@@ -195,5 +300,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
195
300
|
type: Input
|
|
196
301
|
}], customClass: [{
|
|
197
302
|
type: Input
|
|
303
|
+
}], getScreenSize: [{
|
|
304
|
+
type: HostListener,
|
|
305
|
+
args: ['window:resize', ['$event']]
|
|
198
306
|
}] } });
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9ib29rLWFwcG9pbnRtZW50L2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYm9vay1hcHBvaW50bWVudC9ib29rLWFwcG9pbnRtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTdDLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7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QUFPLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7K0dBM0tVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDJLQUp4QixDQUFDLGNBQWMsQ0FBQyxpRENwQzdCLG8yUkFxTEEsNC9LRDdKWSxZQUFZLGtkQUFFLFdBQVcsK21CQUNqQyx3QkFBd0Isc0lBRXhCLGNBQWMsZ0ZBSWQsbUJBQW1CLHlHQUNuQixXQUFXLHVXQUNYLHdCQUF3QixtT0FDeEIsc0JBQXNCOzs0RkFNYix3QkFBd0I7a0JBbkJwQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVzt3QkFDakMsd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQiwwQkFBMEI7d0JBQzFCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN2QixhQUNVLENBQUMsY0FBYyxDQUFDO3NLQU1sQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQm9va0FwcG9pbnRtZW50U2VjdGlvbk1vZGFsLCBCb29rQXBwb2ludG1lbnRTdHlsZXNNb2RlbCB9IGZyb20gJy4vYm9vay1hcHBvaW50bWVudC5tb2RlbCc7XG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSW1hZ2VFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEhvdmVyRWxlbWVudHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2hvdmVyLWVsZW1lbnRzL2hvdmVyLWVsZW1lbnRzLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWJvb2stYXBwb2ludG1lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSxcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIEltYWdlRWRpdG9yRGlyZWN0aXZlLFxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSxcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIFRvYXN0TW9kdWxlLFxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICBIb3ZlckVsZW1lbnRzQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBCb29rQXBwb2ludG1lbnRDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgZGF0YT86IEJvb2tBcHBvaW50bWVudFNlY3Rpb25Nb2RhbDtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcblxuICB0aW1lU2xvdHM6IHN0cmluZ1tdID0gWycxMDowMCBBTScsICcxMTowMCBBTScsICcxMjowMCBQTScsICcwMTowMCBQTScsICcwMjowMCBQTScsICcwMzowMCBQTScsICcwNDowMCBQTScsICcwNTowMCBQTScsICcwNjowMCBQTSddO1xuICBjdXN0b21lckRldGFpbHMgPSB7XG4gICAgZGF0ZTogJycsXG4gICAgdGltZTogJycsXG4gICAgYWRkcmVzc0RldGFpbHM6IHtcbiAgICAgIHJlY2VpdmVyTmFtZTogJycsXG4gICAgICByZWNlaXZlclBob25lOiAnJyxcbiAgICAgIHJlY2VpdmVyRW1haWw6ICcnLFxuICAgICAgYWRkcmVzc0xpbmUxOiAnJyxcbiAgICAgIHN0YXRlTmFtZTogJycsXG4gICAgICBjaXR5TmFtZTogJycsXG4gICAgICB6aXBDb2RlOiAnJ1xuICAgIH0sXG4gICAgdXNlcklkOiAnJyxcbiAgICBidXNpbmVzc0lkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKVxuICB9O1xuXG4gIGRlc2lnbnMgPSBbXG4gICAgeyBpZDogMSwgbmFtZTogJ0Rlc2lnbiAxJywgcHJpY2U6ICckMTAwJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXG4gICAgeyBpZDogMiwgbmFtZTogJ0Rlc2lnbiAyJywgcHJpY2U6ICckMTUwJywgc2VsZWN0ZWQ6IGZhbHNlIH1cbiAgXTtcbiAgd2Vla0RheXM6IHsgZGF0ZVdpdGhNb250aDogc3RyaW5nOyBkYXk6IHN0cmluZzsgZGF0ZTogbnVtYmVyIH1bXSA9IFtdO1xuICB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdXG4gIHN0eWxlcz86IEJvb2tBcHBvaW50bWVudFN0eWxlc01vZGVsO1xuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCk7XG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJOYW1lID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy5yZWNlaXZlck5hbWUgPz8gJydcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5yZWNlaXZlclBob25lID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy5yZWNlaXZlclBob25lID8/ICcnXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJFbWFpbCA9IHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdFswXT8ucmVjZWl2ZXJFbWFpbCA/PyAnJ1xuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lMSA9IHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdFswXT8uYWRkcmVzc0xpbmUxID8/ICcnXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuc3RhdGVOYW1lID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy5zdGF0ZU5hbWUgPz8gJydcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5jaXR5TmFtZSA9IHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdFswXT8uY2l0eU5hbWUgPz8gJydcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy56aXBDb2RlID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy56aXBDb2RlID8/ICcnXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMudXNlcklkID0gdXNlcj8udXNlcklkID8/ICcnXG5cbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuXG4gICAgdGhpcy5nZXROZXh0U2V2ZW5EYXlzKCk7XG4gICAgdGhpcy5nZXRUcmlhbENhcnQoKVxuICB9XG4gIGNoZWNrQXZhaWxhYmlsaXR5KGRheTogYW55KSB7XG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuZGF0ZSA9IGRheS5kYXRlV2l0aE1vbnRoO1xuICAgIGxldCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1c3RvbWVyRGV0YWlscy5kYXRlKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHNlbGVjdGVkRGF0ZSk7XG4gICAgY29uc3QgdGVtcFRvZGF5ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIHRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgdGVtcFRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGlmICh0ZW1wU2VsZWN0ZWREYXRlLmdldFRpbWUoKSA9PT0gdGVtcFRvZGF5LmdldFRpbWUoKSkge1xuICAgICAgY29uc3QgY3VycmVudEhvdXIgPSB0b2RheS5nZXRIb3VycygpO1xuICAgICAgY29uc3QgY3VycmVudE1pbnV0ZXMgPSB0b2RheS5nZXRNaW51dGVzKCk7XG5cbiAgICAgIHRoaXMudGltZVNsb3RzID0gdGhpcy50aW1lU2xvdHMuZmlsdGVyKHNsb3QgPT4ge1xuICAgICAgICBjb25zdCBbdGltZSwgcGVyaW9kXSA9IHNsb3Quc3BsaXQoJyAnKTtcbiAgICAgICAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcblxuICAgICAgICBsZXQgc2xvdEhvdXIgPSBob3VycztcbiAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ1BNJyAmJiBob3VycyAhPT0gMTIpIHtcbiAgICAgICAgICBzbG90SG91ciArPSAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICdBTScgJiYgaG91cnMgPT09IDEyKSB7XG4gICAgICAgICAgc2xvdEhvdXIgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgc2xvdCB0aW1lIGlzIGluIHRoZSBmdXR1cmVcbiAgICAgICAgcmV0dXJuIHNsb3RIb3VyID4gY3VycmVudEhvdXIgfHxcbiAgICAgICAgICAoc2xvdEhvdXIgPT09IGN1cnJlbnRIb3VyICYmIG1pbnV0ZXMgPiBjdXJyZW50TWludXRlcyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzZXQgdG8gYWxsIHRpbWUgc2xvdHMgZm9yIGZ1dHVyZSBkYXRlc1xuICAgICAgdGhpcy50aW1lU2xvdHMgPSBbJzEwOjAwIEFNJywgJzExOjAwIEFNJywgJzEyOjAwIFBNJywgJzAxOjAwIFBNJywgJzAyOjAwIFBNJywgJzAzOjAwIFBNJywgJzA0OjAwIFBNJywgJzA1OjAwIFBNJywgJzA2OjAwIFBNJ107XG4gICAgfVxuICB9XG4gIGdldFRyaWFsQ2FydCgpIHtcbiAgICBsZXQgdXNlcjogVXNlciB8IG51bGwgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKVxuICAgIGlmICh1c2VyKSB7XG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldFVzZXJJdGVtcyh1c2VyLnVzZXJJZCwgJ1RSSUFMX0NBUlQnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudHJpYWxDYXJ0SXRlbSA9IHJlcz8uZGF0YT8uWzBdPy5vcmRlcmVkSXRlbXMgPz8gW11cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0VHJpYWxDYXJ0SW5kZXhEQkRhdGEoKTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmlhbENhcnRJbmRleERCRGF0YSgpIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFRyaWFsQ2FydCgpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICByZXNwb25zZS5vbnN1Y2Nlc3MgPSAodXNlclRyaWFsQ2FydFJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmlhbENhcnRJdGVtID0gdXNlclRyaWFsQ2FydFJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldE5leHRTZXZlbkRheXMoKSB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICBkYXRlLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgaSk7XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTsgLy8gWVlZWS1NTS1ERFxuICAgICAgY29uc3QgZGF5TmFtZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgd2Vla2RheTogJ2xvbmcnIH0pOyAvLyBlLmcuLCBNb25kYXlcblxuICAgICAgdGhpcy53ZWVrRGF5cy5wdXNoKHsgZGF0ZVdpdGhNb250aDogZm9ybWF0dGVkRGF0ZSwgZGF5OiBkYXlOYW1lLCBkYXRlOiBkYXRlLmdldERhdGUoKSB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEZXNpZ24oaWQ6IG51bWJlcikge1xuICAgIGNvbnN0IGRlc2lnbiA9IHRoaXMuZGVzaWducy5maW5kKGQgPT4gZC5pZCA9PT0gaWQpO1xuICAgIGlmIChkZXNpZ24pIHtcbiAgICAgIGlmICghZGVzaWduLnNlbGVjdGVkICYmIHRoaXMuZ2V0U2VsZWN0ZWREZXNpZ25zKCkubGVuZ3RoID49IDQpIHJldHVybjtcbiAgICAgIGRlc2lnbi5zZWxlY3RlZCA9ICFkZXNpZ24uc2VsZWN0ZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0ZWREZXNpZ25zKCkge1xuICAgIHJldHVybiB0aGlzLmRlc2lnbnMuZmlsdGVyKGQgPT4gZC5zZWxlY3RlZCk7XG4gIH1cblxuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8ucmVjZWl2ZXJOYW1lIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyUGhvbmUgfHxcbiAgICAgICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyRW1haWwgfHwgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8uc3RhdGVOYW1lIHx8XG4gICAgICAhdGhpcy5jdXN0b21lckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzPy5jaXR5TmFtZSB8fCAhdGhpcy5jdXN0b21lckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzPy56aXBDb2RlIHx8XG4gICAgICAhdGhpcy5jdXN0b21lckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzPy5hZGRyZXNzTGluZTEgfHwgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5kYXRlIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8udGltZVxuICB9XG5cbiAgYm9va0FwcG9pbnRtZW50KCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxuXG4gICAgdGhpcy5yZXN0U2VydmljZS5ib29rQXBwb2ludG1lbnQodGhpcy5jdXN0b21lckRldGFpbHMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0FwcG9pbnRtZW50JywgZGV0YWlsOiAnQXBwb2ludG1lbnQgQm9va2VkIHN1Y2Nlc3NmdWxseScgfSk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcm9maWxlJ10sIHsgcXVlcnlQYXJhbXM6IHsgdGFiOiAndHJ5X2F0X2hvbWUnfSB9KTtcbiAgICB9LCAoKSA9PiB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnQXBwb2ludG1lbnQnLCBkZXRhaWw6ICdBcHBvaW50bWVudCBub3QgYm9va2VkJyB9KTtcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcbiAgICB9KVxuICB9XG5cbiAgc2VsZWN0VGltZSh0aW1lOiBhbnkpIHtcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy50aW1lID0gdGltZVxuICB9XG5cbiAgZ2V0S2V5cyhvYmplY3Q6IE9iamVjdCk6IHN0cmluZ1tdIHtcbiAgICBpZiAob2JqZWN0KVxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWRkTW9yZURlc2lnbigpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9saXN0J10pXG4gIH1cblxuICBnZXQgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcbiAgfVxuXG59XG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiXG4gIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cblxuPG1haW4gY2xhc3M9XCJtYWluLWNvbnRlbnRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZ3JpZFwiPlxuICAgICAgPCEtLSBMZWZ0IEZvcm0gU2VjdGlvbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgPCEtLSBTZXJ2aWNlIERlc2NyaXB0aW9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBzZXJ2aWNlLWRlc2NyaXB0aW9uXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+VHJ5IGF0IEhvbWUgU2VydmljZTwvaDI+XG4gICAgICAgICAgPHA+T3VyIFRyeSBhdCBIb21lIGNvbnN1bHRhbnQgd2lsbCB2aXNpdCB5b3VyIGxvY2F0aW9uIHRvIHNob3cgeW91IHRoZSBkZXNpZ25zIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFBpbmNvZGUgU2VjdGlvbiAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMTIgMkM4LjEzIDIgNSA1LjEzIDUgOWMwIDUuMjUgNyAxMyA3IDEzczctNy43NSA3LTEzYzAtMy44Ny0zLjEzLTctNy03em0wIDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgU2VydmljZSBMb2NhdGlvblxuICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5FbnRlciB5b3VyIHBpbmNvZGU8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJFbnRlciA2LWRpZ2l0IHBpbmNvZGVcIlxuICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaW5jb2RlLXN1Y2Nlc3NcIiAqbmdJZj1cInBpbmNvZGUubGVuZ3RoID09PSA2XCI+XG4gICAgICAgICAgICAgIOKckyBTZXJ2aWNlIGF2YWlsYWJsZSBpbiB5b3VyIGFyZWFcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBEYXRlIFNlbGVjdGlvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2VsZWN0IGEgRGF0ZTwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtZ3JpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1kYXRlXCIgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrRGF5c1wiIChjbGljayk9XCJjaGVja0F2YWlsYWJpbGl0eShkYXkpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJkYXkuZGF0ZVdpdGhNb250aCA9PT0gY3VzdG9tZXJEZXRhaWxzLmRhdGUgPyAnMnB4IHNvbGlkICcgKyBzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yIDogJ25vbmUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRheVwiPnt7ZGF5LmRheS5zdWJzdHJpbmcoMCwzKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVcIj57e2RheS5kYXRlfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25cIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPnt7dHJpYWxDYXJ0SXRlbT8ubGVuZ3RoID8/IDB9fVxuICAgICAgICAgICAgICAgIERlc2lnbnM8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRpbWUgU2VsZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiICpuZ0lmPVwiY3VzdG9tZXJEZXRhaWxzLmRhdGVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlNlbGVjdCBhIFRpbWU8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtZ3JpZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1zbG90XCIgKm5nRm9yPVwibGV0IHRpbWUgb2YgdGltZVNsb3RzID8/IFtdXCIgKGNsaWNrKT1cInNlbGVjdFRpbWUodGltZSlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiB0aW1lID09PSBjdXN0b21lckRldGFpbHMudGltZX1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9yZS1zbG90LWJhZGdlXCI+TW9yZSBTbG90IExlZnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS10ZXh0XCI+e3t0aW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aW1lU2xvdHM/Lmxlbmd0aCA9PSAwXCI+Tm8gc2xvdHMgYXZhaWxhYmxlPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDdXN0b21lciBEZXRhaWxzIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Db250YWN0IERldGFpbHM8L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZ1bGwgTmFtZSAqPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJOYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBob25lIE51bWJlciAqPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5yZWNlaXZlclBob25lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgcGhvbmUgbnVtYmVyXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVtYWlsICo8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5yZWNlaXZlckVtYWlsXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNpdHkgKjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2l0eVwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmNpdHlOYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY2l0eVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdGF0ZSAqPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuc3RhdGVOYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbmNvZGUgKjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGVsXCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuemlwQ29kZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIHBob25lIG51bWJlclwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbXBsZXRlIEFkZHJlc3MgKjwvbGFiZWw+XG4gICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWlucHV0IGZvcm0tdGV4dGFyZWFcIiBbKG5nTW9kZWwpXT1cImN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5hZGRyZXNzTGluZTFcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY29tcGxldGUgYWRkcmVzc1wiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTaWRlYmFyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJkZXNpZ25zLWhlYWRlclwiPllvdXIgU2hvcnRsaXN0ZWQgRGVzaWduczwvaDM+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZGVzaWducy1jb3VudFwiPnt7IGdldFNlbGVjdGVkRGVzaWducygpLmxlbmd0aCB9fS80IFNFTEVDVEVEPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbi1wYXJlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRyaWFsQ2FydEl0ZW1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImRlc2lnbi1pbWFnZVwiIFtzcmNdPVwiaXRlbS5pbWdVcmwgPz8gJ2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIlwiPkRlc2lnbiBJbWFnZTwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taW5mb1wiPlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaXRlbS10aXRsZVwiPnt7aXRlbS5pdGVtTmFtZX19PC9oMz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wcmljZVwiPuKCuXt7aXRlbS5kaXNjb3VudGVkUHJpY2UgfCBudW1iZXI6ICcxLjAtMid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmlnaW5hbC1wcmljZVwiICpuZ0lmPVwiaXRlbS5zZWxsaW5nUHJpY2UgPiBpdGVtLmRpc2NvdW50ZWRQcmljZVwiPuKCuXt7aXRlbS5zZWxsaW5nUHJpY2UgfFxuICAgICAgICAgICAgICAgICAgICAgIG51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgICAnMS4wLTInfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW9wdGlvbnNcIiAqbmdJZj1cIml0ZW0uaXRlbVZhcmlhbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhcmllbnQgb2YgZ2V0S2V5cyhpdGVtLml0ZW1WYXJpYW50LnByb3BlcnRpZXMpXCI+e3sgdmFyaWVudCB9fToge3tcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLml0ZW1WYXJpYW50LnByb3BlcnRpZXNbdmFyaWVudF0gfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJkZXNpZ24tc2VsZWN0XCIgW2NsYXNzLnNlbGVjdGVkXT1cImRlc2lnbi5zZWxlY3RlZFwiIChjbGljayk9XCJ0b2dnbGVEZXNpZ24oZGVzaWduLmlkKVwiPlxuICAgICAgICAgICAgICAgIHt7IGRlc2lnbi5zZWxlY3RlZCA/ICdTZWxlY3RlZCcgOiAnU2VsZWN0JyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWRlc2lnblwiIChjbGljayk9XCJhZGRNb3JlRGVzaWduKClcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgQWRkIE1vcmUgRGVzaWduc1xuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPlNlbGVjdGVkIERlc2lnbnM6PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj57eyBnZXRTZWxlY3RlZERlc2lnbnMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS1yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+U2VydmljZTo8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS12YWx1ZSBmcmVlLXNlcnZpY2VcIj5GUkVFPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYm9vay1idXR0b25cIiAoY2xpY2spPVwiYm9va0FwcG9pbnRtZW50KClcIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSAqbmdJZj1cIiFsb2FkZXJcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVmFsaWRcIiBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LnN0eWxlc1wiXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIj5cbiAgICAgICAgICAgIHt7ZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMV0/LmNvbnRlbnQ/LmxhYmVsID8/ICdCb29rIFRyeSBhdCBIb21lIEFwcG9pbnRtZW50J319XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2stYnV0dG9uIGxvYWRlci1idG5cIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LnN0eWxlc1wiXG4gICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiICpuZ0lmPVwibG9hZGVyXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIj48bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj4gQm9va2luZzwvYnV0dG9uPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGlzY2xhaW1lclwiPk91ciBjb25zdWx0YW50IHdpbGwgY29udGFjdCB5b3UgdG8gY29uZmlybSB0aGUgYXBwb2ludG1lbnQ8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XG4gICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiXG4gICAgICBbaXNFY29tbWVyY2VdPVwidHJ1ZVwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XG4gIDwvZGl2PlxuPC9tYWluPlxuIl19
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9ib29rLWFwcG9pbnRtZW50L2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYm9vay1hcHBvaW50bWVudC9ib29rLWFwcG9pbnRtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQVk5RCxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDekYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFckcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7QUF5QnRFLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxXQUFXO0lBNkN2RCxZQUNtQixjQUFxQyxFQUNyQyxXQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBOEI7UUFFL0MsS0FBSyxFQUFFLENBQUM7UUFMUyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXZDakQscUJBQWdCLEdBQWE7WUFDM0IsVUFBVTtZQUNWLFVBQVU7WUFDVixVQUFVO1lBQ1YsVUFBVTtZQUNWLFVBQVU7WUFDVixVQUFVO1lBQ1YsVUFBVTtZQUNWLFVBQVU7WUFDVixVQUFVO1NBQ1gsQ0FBQztRQUVGLGNBQVMsR0FBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFakQsb0JBQWUsR0FBRztZQUNoQixJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxFQUFFO1lBQ1IsY0FBYyxFQUFFO2dCQUNkLFlBQVksRUFBRSxFQUFFO2dCQUNoQixhQUFhLEVBQUUsRUFBRTtnQkFDakIsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLFlBQVksRUFBRSxFQUFFO2dCQUNoQixTQUFTLEVBQUUsRUFBRTtnQkFDYixRQUFRLEVBQUUsRUFBRTtnQkFDWixPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7U0FDcEYsQ0FBQztRQUVGLGFBQVEsR0FBMkQsRUFBRSxDQUFDO1FBQ3RFLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBQzFCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQVNoQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUVoQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZO1lBQzlDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsYUFBYTtZQUMvQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGFBQWE7WUFDL0MsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxZQUFZO1lBQzlDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUztZQUMzQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLFFBQVE7WUFDMUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxPQUFPO1lBQ3pDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFakQsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHO2dCQUNiLFNBQVMsRUFBRSxFQUFFO2dCQUNiLGdCQUFnQixFQUFFO29CQUNoQixXQUFXLEVBQUUsSUFBSTtvQkFDakIsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHO2dCQUM5QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsTUFBTSxFQUFFLEVBQUU7YUFDWCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELHVDQUF1QztRQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4RCxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFpQixDQUFDO0lBQ25ELENBQUM7SUFHRCxhQUFhO1FBQ1gsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYSxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxRQUFRLENBQUM7SUFDL0YsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTO1lBQUUsT0FBTztRQUVyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDL0UsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUs7WUFDTCxLQUFLO1lBQ0wsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQTRCO1FBQ3hDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxHQUFHO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDM0MsT0FBTyxLQUFLLEVBQUUsS0FBSyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hGLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBVztRQUN2QixPQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBc0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBNEIsRUFBRSxLQUFhO1FBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBc0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBNEI7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFL0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQTRCO1FBQ3JDLE9BQU8sS0FBSyxFQUFFLElBQUksS0FBSyxVQUFVLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQTRCO1FBQzVDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU1QyxNQUFNLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUvQixJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFFMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JELE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFckQsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNwQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNqQixDQUFDO3FCQUFNLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzNDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztnQkFFRCxPQUFPLFFBQVEsR0FBRyxXQUFXLElBQUksQ0FBQyxRQUFRLEtBQUssV0FBVyxJQUFJLE9BQU8sR0FBRyxjQUFjLENBQUMsQ0FBQztZQUMxRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sSUFBSSxHQUFnQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXhELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUM5RSxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25ELFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxxQkFBMEIsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ2pFLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRWxDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBRXRFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNqQixhQUFhLEVBQUUsYUFBYTtnQkFDNUIsR0FBRyxFQUFFLE9BQU87Z0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELElBQUksS0FBSyxFQUFFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDeEQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFNBQVMsQ0FDOUQsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixPQUFPLEVBQUUsYUFBYTtnQkFDdEIsTUFBTSxFQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxJQUFJLGlDQUFpQzthQUN0RixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixPQUFPLEVBQUUsYUFBYTtnQkFDdEIsTUFBTSxFQUFFLHdCQUF3QjthQUNqQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBWTtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFXO1FBQ2pCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFFLENBQUM7K0dBcFRVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDhPQUp4QixDQUFDLGNBQWMsQ0FBQyxpRENwRDdCLDQ4VEEyTU8sazRKRHRLSCxZQUFZLGtkQUNaLFdBQVcsMGdDQUNYLHdCQUF3QixzSUFDeEIsa0JBQWtCLHlGQUNsQixjQUFjLGdGQUNkLDBCQUEwQiwyR0FDMUIsbUJBQW1CLHlHQUNuQixXQUFXLHVXQUNYLHdCQUF3QixtT0FDeEIsc0JBQXNCLHlKQUN0QixtQkFBbUIsb0pBQ25CLG1CQUFtQixpUUFDbkIsZUFBZSxtRkFDZixlQUFlOzs0RkFNTix3QkFBd0I7a0JBdkJwQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLDBCQUEwQjt3QkFDMUIsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3FCQUNoQixhQUNVLENBQUMsY0FBYyxDQUFDO3NLQUtsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFxSE4sYUFBYTtzQkFEWixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xyXG5cclxuaW1wb3J0IHsgU2ltcG9FbGVtZW50c01vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uLy4uL2Vjb21tZXJjZS9zdHlsZXMvdXNlci5tb2RhbCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXBwb2ludG1lbnRGaWVsZE1vZGVsLFxyXG4gIEJvb2tBcHBvaW50bWVudENvbnRlbnRNb2RlbCxcclxuICBCb29rQXBwb2ludG1lbnRTZWN0aW9uTW9kYWwsXHJcbiAgQm9va0FwcG9pbnRtZW50U3R5bGVzTW9kZWxcclxufSBmcm9tICcuL2Jvb2stYXBwb2ludG1lbnQubW9kZWwnO1xyXG5cclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYnV0dG9uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJFbGVtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaG92ZXItZWxlbWVudHMvaG92ZXItZWxlbWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGF5T3V0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZWxlbWVudHMvdGV4dC1lZGl0b3IvdGV4dC1lZGl0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLWJvb2stYXBwb2ludG1lbnQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIFRvYXN0TW9kdWxlLFxyXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxyXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcclxuICAgIFRleHRFZGl0b3JDb21wb25lbnQsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgQm9yZGVyRGlyZWN0aXZlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9ib29rLWFwcG9pbnRtZW50LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCb29rQXBwb2ludG1lbnRDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YT86IEJvb2tBcHBvaW50bWVudFNlY3Rpb25Nb2RhbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG5cclxuICBjb250ZW50PzogQm9va0FwcG9pbnRtZW50Q29udGVudE1vZGVsO1xyXG4gIHN0eWxlcz86IEJvb2tBcHBvaW50bWVudFN0eWxlc01vZGVsO1xyXG5cclxuICBkZWZhdWx0VGltZVNsb3RzOiBzdHJpbmdbXSA9IFtcclxuICAgICcxMDowMCBBTScsXHJcbiAgICAnMTE6MDAgQU0nLFxyXG4gICAgJzEyOjAwIFBNJyxcclxuICAgICcwMTowMCBQTScsXHJcbiAgICAnMDI6MDAgUE0nLFxyXG4gICAgJzAzOjAwIFBNJyxcclxuICAgICcwNDowMCBQTScsXHJcbiAgICAnMDU6MDAgUE0nLFxyXG4gICAgJzA2OjAwIFBNJ1xyXG4gIF07XHJcblxyXG4gIHRpbWVTbG90czogc3RyaW5nW10gPSBbLi4udGhpcy5kZWZhdWx0VGltZVNsb3RzXTtcclxuXHJcbiAgY3VzdG9tZXJEZXRhaWxzID0ge1xyXG4gICAgZGF0ZTogJycsXHJcbiAgICB0aW1lOiAnJyxcclxuICAgIGFkZHJlc3NEZXRhaWxzOiB7XHJcbiAgICAgIHJlY2VpdmVyTmFtZTogJycsXHJcbiAgICAgIHJlY2VpdmVyUGhvbmU6ICcnLFxyXG4gICAgICByZWNlaXZlckVtYWlsOiAnJyxcclxuICAgICAgYWRkcmVzc0xpbmUxOiAnJyxcclxuICAgICAgc3RhdGVOYW1lOiAnJyxcclxuICAgICAgY2l0eU5hbWU6ICcnLFxyXG4gICAgICB6aXBDb2RlOiAnJ1xyXG4gICAgfSxcclxuICAgIHVzZXJJZDogJycsXHJcbiAgICBidXNpbmVzc0lkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJ1xyXG4gIH07XHJcblxyXG4gIHdlZWtEYXlzOiB7IGRhdGVXaXRoTW9udGg6IHN0cmluZzsgZGF5OiBzdHJpbmc7IGRhdGU6IG51bWJlciB9W10gPSBbXTtcclxuICB0cmlhbENhcnRJdGVtOiBhbnlbXSA9IFtdO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHNjcmVlbldpZHRoID0gNDc1O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5nZXRTY3JlZW5TaXplKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG5cclxuICAgIHRoaXMuZW5zdXJlRGVmYXVsdENvbnRlbnQoKTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5yZWNlaXZlck5hbWUgPVxyXG4gICAgICB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3Q/LlswXT8ucmVjZWl2ZXJOYW1lID8/ICcnO1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJQaG9uZSA9XHJcbiAgICAgIHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdD8uWzBdPy5yZWNlaXZlclBob25lID8/ICcnO1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJFbWFpbCA9XHJcbiAgICAgIHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdD8uWzBdPy5yZWNlaXZlckVtYWlsID8/ICcnO1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuYWRkcmVzc0xpbmUxID1cclxuICAgICAgdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0Py5bMF0/LmFkZHJlc3NMaW5lMSA/PyAnJztcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnN0YXRlTmFtZSA9XHJcbiAgICAgIHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdD8uWzBdPy5zdGF0ZU5hbWUgPz8gJyc7XHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5jaXR5TmFtZSA9XHJcbiAgICAgIHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdD8uWzBdPy5jaXR5TmFtZSA/PyAnJztcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnppcENvZGUgPVxyXG4gICAgICB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3Q/LlswXT8uemlwQ29kZSA/PyAnJztcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLnVzZXJJZCA9IHVzZXI/LnVzZXJJZCA/PyAnJztcclxuXHJcbiAgICB0aGlzLnN5bmNGaWVsZElucHV0VmFsdWVzRnJvbUN1c3RvbWVyRGV0YWlscygpO1xyXG4gICAgdGhpcy5nZXROZXh0U2V2ZW5EYXlzKCk7XHJcbiAgICB0aGlzLmdldFRyaWFsQ2FydCgpO1xyXG4gIH1cclxuXHJcbiAgZW5zdXJlRGVmYXVsdENvbnRlbnQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudCkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQgPSB7XHJcbiAgICAgICAgaW5wdXRUZXh0OiBbXSxcclxuICAgICAgICBhcHBvaW50bWVudEZpZWxkOiB7XHJcbiAgICAgICAgICBjdXN0b21MYWJlbDogdHJ1ZSxcclxuICAgICAgICAgIGZpZWxkczogW11cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbnRlbnQuaW5wdXRUZXh0KSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5pbnB1dFRleHQgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29udGVudC5hcHBvaW50bWVudEZpZWxkKSB7XHJcbiAgICAgIHRoaXMuY29udGVudC5hcHBvaW50bWVudEZpZWxkID0ge1xyXG4gICAgICAgIGN1c3RvbUxhYmVsOiB0cnVlLFxyXG4gICAgICAgIGZpZWxkczogW11cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29udGVudC5hcHBvaW50bWVudEZpZWxkLmZpZWxkcykge1xyXG4gICAgICB0aGlzLmNvbnRlbnQuYXBwb2ludG1lbnRGaWVsZC5maWVsZHMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN5bmNGaWVsZElucHV0VmFsdWVzRnJvbUN1c3RvbWVyRGV0YWlscygpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udGVudD8uYXBwb2ludG1lbnRGaWVsZD8uZmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICBmaWVsZC5pbnB1dFZhbHVlID0gdGhpcy5nZXRGaWVsZFZhbHVlKGZpZWxkLmtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBzdHlsZXNMYXlvdXQoKTogTGF5T3V0TW9kZWwge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgZ2V0U2NyZWVuU2l6ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICB0aGlzLnNjcmVlbldpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXBwb2ludG1lbnRGaWVsZHMoKTogQXBwb2ludG1lbnRGaWVsZE1vZGVsW10ge1xyXG4gICAgcmV0dXJuICh0aGlzLmNvbnRlbnQ/LmFwcG9pbnRtZW50RmllbGQ/LmZpZWxkcyA/PyBbXSkuZmlsdGVyKChmaWVsZCkgPT5cclxuICAgICAgT2JqZWN0Lmhhc093bihmaWVsZCwgJ3N0YXR1cycpID8gZmllbGQuc3RhdHVzIDogdHJ1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFRleHRCeUxhYmVsKGxhYmVsOiBzdHJpbmcsIGZhbGxiYWNrID0gJycpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGVudD8uaW5wdXRUZXh0Py5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ubGFiZWwgPT09IGxhYmVsKT8udmFsdWUgPz8gZmFsbGJhY2s7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0QnlMYWJlbChsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudD8uaW5wdXRUZXh0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmNvbnRlbnQuaW5wdXRUZXh0LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCA9PT0gbGFiZWwpO1xyXG4gICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgIGZvdW5kLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbnRlbnQuaW5wdXRUZXh0LnB1c2goe1xyXG4gICAgICBsYWJlbCxcclxuICAgICAgdmFsdWUsXHJcbiAgICAgIGlzUlRFOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZFdpZHRoKGZpZWxkOiBBcHBvaW50bWVudEZpZWxkTW9kZWwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuc2NyZWVuV2lkdGggPD0gNzY4KSByZXR1cm4gJzEwMCUnO1xyXG4gICAgcmV0dXJuIGZpZWxkPy53aWR0aCA9PT0gJ2Z1bGwnIHx8IHRoaXMuaXNUZXh0YXJlYShmaWVsZCkgPyAnMTAwJScgOiAnY2FsYyg1MCUgLSA4cHgpJztcclxuICB9XHJcblxyXG4gIGdldEZpZWxkVmFsdWUoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscyBhcyBhbnkpPy5ba2V5XSA/PyAnJztcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkVmFsdWUoZmllbGQ6IEFwcG9pbnRtZW50RmllbGRNb2RlbCwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgKHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzIGFzIGFueSlbZmllbGQua2V5XSA9IHZhbHVlO1xyXG4gICAgZmllbGQuaW5wdXRWYWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgaXNUZXh0YXJlYShmaWVsZDogQXBwb2ludG1lbnRGaWVsZE1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWZpZWxkPy50eXBlKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdGV4dEFyZWFUeXBlcyA9IFsndGV4dGFyZWEnLCAnZGVzYyddO1xyXG4gICAgcmV0dXJuIHRleHRBcmVhVHlwZXMuaW5jbHVkZXMoZmllbGQudHlwZS50b0xvd2VyQ2FzZSgpKTtcclxuICB9XHJcblxyXG4gIGlzRHJvcGRvd24oZmllbGQ6IEFwcG9pbnRtZW50RmllbGRNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZpZWxkPy50eXBlID09PSAnZHJvcGRvd24nO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmlzaWJsZU9wdGlvbnMoZmllbGQ6IEFwcG9pbnRtZW50RmllbGRNb2RlbCkge1xyXG4gICAgcmV0dXJuIChmaWVsZD8ub3B0aW9ucyA/PyBbXSkuZmlsdGVyKChvcHRpb24pID0+XHJcbiAgICAgIE9iamVjdC5oYXNPd24ob3B0aW9uLCAnc3RhdHVzJykgPyBvcHRpb24uc3RhdHVzIDogdHJ1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQXZhaWxhYmlsaXR5KGRheTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5kYXRlID0gZGF5LmRhdGVXaXRoTW9udGg7XHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy50aW1lID0gJyc7XHJcbiAgICB0aGlzLnRpbWVTbG90cyA9IFsuLi50aGlzLmRlZmF1bHRUaW1lU2xvdHNdO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VzdG9tZXJEZXRhaWxzLmRhdGUpO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IHRlbXBTZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShzZWxlY3RlZERhdGUpO1xyXG4gICAgY29uc3QgdGVtcFRvZGF5ID0gbmV3IERhdGUodG9kYXkpO1xyXG5cclxuICAgIHRlbXBTZWxlY3RlZERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICB0ZW1wVG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgaWYgKHRlbXBTZWxlY3RlZERhdGUuZ2V0VGltZSgpID09PSB0ZW1wVG9kYXkuZ2V0VGltZSgpKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTtcclxuICAgICAgY29uc3QgY3VycmVudE1pbnV0ZXMgPSB0b2RheS5nZXRNaW51dGVzKCk7XHJcblxyXG4gICAgICB0aGlzLnRpbWVTbG90cyA9IHRoaXMuZGVmYXVsdFRpbWVTbG90cy5maWx0ZXIoKHNsb3QpID0+IHtcclxuICAgICAgICBjb25zdCBbdGltZSwgcGVyaW9kXSA9IHNsb3Quc3BsaXQoJyAnKTtcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG5cclxuICAgICAgICBsZXQgc2xvdEhvdXIgPSBob3VycztcclxuICAgICAgICBpZiAocGVyaW9kID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikge1xyXG4gICAgICAgICAgc2xvdEhvdXIgKz0gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICdBTScgJiYgaG91cnMgPT09IDEyKSB7XHJcbiAgICAgICAgICBzbG90SG91ciA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2xvdEhvdXIgPiBjdXJyZW50SG91ciB8fCAoc2xvdEhvdXIgPT09IGN1cnJlbnRIb3VyICYmIG1pbnV0ZXMgPiBjdXJyZW50TWludXRlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHJpYWxDYXJ0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgdXNlcjogVXNlciB8IG51bGwgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKTtcclxuXHJcbiAgICBpZiAodXNlcikge1xyXG4gICAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldFVzZXJJdGVtcyh1c2VyLnVzZXJJZCwgJ1RSSUFMX0NBUlQnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlhbENhcnRJdGVtID0gcmVzPy5kYXRhPy5bMF0/Lm9yZGVyZWRJdGVtcyA/PyBbXTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRyaWFsQ2FydEluZGV4REJEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmlhbENhcnRJbmRleERCRGF0YSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VHJpYWxDYXJ0KCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlhbENhcnRJdGVtID0gdXNlclRyaWFsQ2FydFJlc3BvbnNlLnRhcmdldC5yZXN1bHQgPz8gW107XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE5leHRTZXZlbkRheXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLndlZWtEYXlzID0gW107XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRvZGF5KTtcclxuICAgICAgZGF0ZS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIGkpO1xyXG5cclxuICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGRhdGUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgICBjb25zdCBkYXlOYW1lID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XHJcblxyXG4gICAgICB0aGlzLndlZWtEYXlzLnB1c2goe1xyXG4gICAgICAgIGRhdGVXaXRoTW9udGg6IGZvcm1hdHRlZERhdGUsXHJcbiAgICAgICAgZGF5OiBkYXlOYW1lLFxyXG4gICAgICAgIGRhdGU6IGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHRoaXMuYXBwb2ludG1lbnRGaWVsZHMpIHtcclxuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShmaWVsZC5rZXkpO1xyXG4gICAgICBpZiAoZmllbGQ/LnJlcXVpcmVkICYmICFTdHJpbmcoZmllbGRWYWx1ZSA/PyAnJykudHJpbSgpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gIXRoaXMuY3VzdG9tZXJEZXRhaWxzLmRhdGUgfHwgIXRoaXMuY3VzdG9tZXJEZXRhaWxzLnRpbWU7XHJcbiAgfVxyXG5cclxuICBib29rQXBwb2ludG1lbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5ib29rQXBwb2ludG1lbnQodGhpcy5jdXN0b21lckRldGFpbHMpLnN1YnNjcmliZShcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG4gICAgICAgICAgc2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdBcHBvaW50bWVudCcsXHJcbiAgICAgICAgICBkZXRhaWw6XHJcbiAgICAgICAgICAgIHRoaXMuY29udGVudD8uYXBwb2ludG1lbnRGaWVsZD8uc3VjY2Vzc01lc3NhZ2UgfHwgJ0FwcG9pbnRtZW50IEJvb2tlZCBzdWNjZXNzZnVsbHknXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddLCB7IHF1ZXJ5UGFyYW1zOiB7IHRhYjogJ3RyeV9hdF9ob21lJyB9IH0pO1xyXG4gICAgICB9LFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcclxuICAgICAgICAgIHN1bW1hcnk6ICdBcHBvaW50bWVudCcsXHJcbiAgICAgICAgICBkZXRhaWw6ICdBcHBvaW50bWVudCBub3QgYm9va2VkJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VGltZSh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLnRpbWUgPSB0aW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0S2V5cyhvYmplY3Q6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBvYmplY3QgPyBPYmplY3Qua2V5cyhvYmplY3QpIDogW107XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlRGVzaWduKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddKTtcclxuICB9XHJcblxyXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSA6IGZhbHNlO1xyXG4gIH1cclxufSIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj5cclxuPC9wLXRvYXN0PlxyXG5cclxuPG1haW4gY2xhc3M9XCJtYWluLWNvbnRlbnRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiXHJcbiAgW3NwYWNpbmdIb3Jpem9udGFsXT1cInN0eWxlc0xheW91dFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1ncmlkXCI+XHJcbiAgICAgIDwhLS0gTGVmdCBGb3JtIFNlY3Rpb24gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlY3Rpb25cIj5cclxuICAgICAgICA8IS0tIFNlcnZpY2UgRGVzY3JpcHRpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgc2VydmljZS1kZXNjcmlwdGlvblwiIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBlZGl0b3ItcmVzZXRcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFt2YWx1ZV09XCJnZXRUZXh0QnlMYWJlbCgnSGVhZGluZycsICdUcnkgYXQgSG9tZSBTZXJ2aWNlJylcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZXRUZXh0QnlMYWJlbCgnSGVhZGluZycsICRldmVudClcIiBbZWRpdGFibGVdPVwiZWRpdCB8fCBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlcnZpY2Utc3VidGV4dCBlZGl0b3ItcmVzZXRcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFRleHRCeUxhYmVsKCdTdWJ0ZXh0JywgJ091ciBUcnkgYXQgSG9tZSBjb25zdWx0YW50IHdpbGwgdmlzaXQgeW91ciBsb2NhdGlvbiB0byBzaG93IHlvdSB0aGUgZGVzaWducyBhdCB5b3VyIGNvbnZlbmllbmNlLicpXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2V0VGV4dEJ5TGFiZWwoJ1N1YnRleHQnLCAkZXZlbnQpXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj5cclxuICAgICAgICAgICAgPC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERhdGUgU2VsZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZSBlZGl0b3ItcmVzZXRcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFt2YWx1ZV09XCJnZXRUZXh0QnlMYWJlbCgnRGF0ZSBTZWN0aW9uIEhlYWRpbmcnLCAnU2VsZWN0IGEgRGF0ZScpXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2V0VGV4dEJ5TGFiZWwoJ0RhdGUgU2VjdGlvbiBIZWFkaW5nJywgJGV2ZW50KVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvc2ltcG8tdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLWdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS1kYXRlXCIgKm5nRm9yPVwibGV0IGRheSBvZiB3ZWVrRGF5c1wiIChjbGljayk9XCJjaGVja0F2YWlsYWJpbGl0eShkYXkpXCJcclxuICAgICAgICAgICAgICBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCJcclxuICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cImRheS5kYXRlV2l0aE1vbnRoID09PSBjdXN0b21lckRldGFpbHMuZGF0ZSA/ICcycHggc29saWQgJyArIHN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IgOiAnbm9uZSdcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXlcIj57eyBkYXkuZGF5LnN1YnN0cmluZygwLCAzKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVcIj57eyBkYXkuZGF0ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIj5cclxuICAgICAgICAgICAgICAgIHt7IHRyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA/PyAwIH19IERlc2lnbnNcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUaW1lIFNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiICpuZ0lmPVwiY3VzdG9tZXJEZXRhaWxzLmRhdGVcIiBbc2ltcG9Db3JuZXJdPVwic3R5bGVzPy5jb3JuZXJzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlIGVkaXRvci1yZXNldFwiPlxyXG4gICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciBbdmFsdWVdPVwiZ2V0VGV4dEJ5TGFiZWwoJ1RpbWUgU2VjdGlvbiBIZWFkaW5nJywgJ1NlbGVjdCBhIFRpbWUnKVwiXHJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2V0VGV4dEJ5TGFiZWwoJ1RpbWUgU2VjdGlvbiBIZWFkaW5nJywgJGV2ZW50KVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgICAgPC9oMz5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWdyaWRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1zbG90XCIgKm5nRm9yPVwibGV0IHRpbWUgb2YgdGltZVNsb3RzID8/IFtdXCIgKGNsaWNrKT1cInNlbGVjdFRpbWUodGltZSlcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogdGltZSA9PT0gY3VzdG9tZXJEZXRhaWxzLnRpbWUgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3JlLXNsb3QtYmFkZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBnZXRUZXh0QnlMYWJlbCgnU2xvdCBCYWRnZScsICdNb3JlIFNsb3QgTGVmdCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS10ZXh0XCI+e3sgdGltZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGltZVNsb3RzPy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIHt7IGdldFRleHRCeUxhYmVsKCdObyBTbG90IFRleHQnLCAnTm8gc2xvdHMgYXZhaWxhYmxlJykgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBDdXN0b21lciBEZXRhaWxzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZSBlZGl0b3ItcmVzZXRcIj5cclxuICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFt2YWx1ZV09XCJnZXRUZXh0QnlMYWJlbCgnQ29udGFjdCBTZWN0aW9uIEhlYWRpbmcnLCAnQ29udGFjdCBEZXRhaWxzJylcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZXRUZXh0QnlMYWJlbCgnQ29udGFjdCBTZWN0aW9uIEhlYWRpbmcnLCAkZXZlbnQpXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIj5cclxuICAgICAgICAgICAgPC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFwcG9pbnRtZW50LWZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgYXBwb2ludG1lbnRGaWVsZHNcIiBbc3R5bGUud2lkdGhdPVwiZ2V0RmllbGRXaWR0aChmaWVsZClcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAge3sgZmllbGQubGFiZWwgfX08c3BhbiAqbmdJZj1cImZpZWxkLnJlcXVpcmVkXCI+ICo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBkcm9wZG93biAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEcm9wZG93bihmaWVsZCk7IGVsc2Ugbm9ybWFsRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWlucHV0XCIgW25nTW9kZWxdPVwiZ2V0RmllbGRWYWx1ZShmaWVsZC5rZXkpXCJcclxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmllbGRWYWx1ZShmaWVsZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgZmllbGQucGxhY2Vob2xkZXIgfHwgKCdTZWxlY3QgJyArIGZpZWxkLmxhYmVsKSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0VmlzaWJsZU9wdGlvbnMoZmllbGQpXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIGlucHV0IC8gdGV4dGFyZWEgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxGaWVsZD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZXh0YXJlYShmaWVsZCk7IGVsc2UgdGV4dGFyZWFGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgW3R5cGVdPVwiZmllbGQudHlwZSB8fCAndGV4dCdcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldEZpZWxkVmFsdWUoZmllbGQua2V5KVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpZWxkVmFsdWUoZmllbGQsICRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0YXJlYUZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1pbnB1dCBmb3JtLXRleHRhcmVhXCIgW3BsYWNlaG9sZGVyXT1cImZpZWxkLnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0RmllbGRWYWx1ZShmaWVsZC5rZXkpXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmllbGRWYWx1ZShmaWVsZCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2lkZWJhciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIj5cclxuICAgICAgICAgIDxoMyBjbGFzcz1cImRlc2lnbnMtaGVhZGVyIGVkaXRvci1yZXNldFwiPlxyXG4gICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgW3ZhbHVlXT1cImdldFRleHRCeUxhYmVsKCdTaWRlYmFyIEhlYWRpbmcnLCAnWW91ciBTaG9ydGxpc3RlZCBEZXNpZ25zJylcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZXRUZXh0QnlMYWJlbCgnU2lkZWJhciBIZWFkaW5nJywgJGV2ZW50KVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDwvc2ltcG8tdGV4dC1lZGl0b3I+XHJcbiAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24tcGFyZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRyaWFsQ2FydEl0ZW1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkZXNpZ24taW1hZ2VcIiBbc3JjXT1cIml0ZW0uaW1nVXJsID8/ICdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbi1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIml0ZW0tdGl0bGVcIj57eyBpdGVtLml0ZW1OYW1lIH19PC9oMz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXByaWNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LXByaWNlXCI+4oK5e3sgaXRlbS5kaXNjb3VudGVkUHJpY2UgfCBudW1iZXI6ICcxLjAtMicgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmlnaW5hbC1wcmljZVwiICpuZ0lmPVwiaXRlbS5zZWxsaW5nUHJpY2UgPiBpdGVtLmRpc2NvdW50ZWRQcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAg4oK5e3sgaXRlbS5zZWxsaW5nUHJpY2UgfCBudW1iZXI6ICcxLjAtMicgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tb3B0aW9uc1wiICpuZ0lmPVwiaXRlbS5pdGVtVmFyaWFudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB2YXJpZW50IG9mIGdldEtleXMoaXRlbS5pdGVtVmFyaWFudC5wcm9wZXJ0aWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgdmFyaWVudCB9fToge3sgaXRlbS5pdGVtVmFyaWFudC5wcm9wZXJ0aWVzW3ZhcmllbnRdIHwgdXBwZXJjYXNlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtZGVzaWduXCIgKGNsaWNrKT1cImFkZE1vcmVEZXNpZ24oKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIHt7IGdldFRleHRCeUxhYmVsKCdBZGQgTW9yZSBCdXR0b24gVGV4dCcsICdBZGQgTW9yZSBEZXNpZ25zJykgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXJvd1wiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1sYWJlbFwiPnt7IGdldFRleHRCeUxhYmVsKCdTZXJ2aWNlIExhYmVsJywgJ1NlcnZpY2U6JykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlIGZyZWUtc2VydmljZVwiPnt7IGdldFRleHRCeUxhYmVsKCdTZXJ2aWNlIFZhbHVlJywgJ0ZSRUUnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRlclwiIGNsYXNzPVwiYm9vay1idXR0b25cIj5cclxuICAgICAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCAoY2xpY2spPVwiYm9va0FwcG9pbnRtZW50KClcIiBbYnV0dG9uQ29udGVudF09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnM/LlswXT8uY29udGVudFwiXHJcbiAgICAgICAgICAgICAgW2J1dHRvblN0eWxlXT1cImRhdGE/LmFjdGlvbj8uYnV0dG9ucz8uWzBdPy5zdHlsZXNcIiBbYnV0dG9uSWRdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LmlkIHx8ICdidG4xJ1wiXHJcbiAgICAgICAgICAgICAgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCJcclxuICAgICAgICAgICAgICBbYmFja2dyb3VuZEluZm9dPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW2VkaXRdPVwiZWRpdFwiIFtpc0Z1bGxXaWR0aF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWJ1dHRvbi1lbGVtZW50PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2stYnV0dG9uIGxvYWRlci1idG5cIiBzaW1wb0J1dHRvbkRpcmVjdGl2ZSBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LnN0eWxlc1wiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgKm5nSWY9XCJsb2FkZXJcIiBbYmFja2dyb3VuZEluZm9dPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICBCb29raW5nXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8cCBjbGFzcz1cImRpc2NsYWltZXIgZWRpdG9yLXJlc2V0XCI+XHJcbiAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvclxyXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRUZXh0QnlMYWJlbCgnRGlzY2xhaW1lcicsICdPdXIgY29uc3VsdGFudCB3aWxsIGNvbnRhY3QgeW91IHRvIGNvbmZpcm0gdGhlIGFwcG9pbnRtZW50JylcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZXRUZXh0QnlMYWJlbCgnRGlzY2xhaW1lcicsICRldmVudClcIiBbZWRpdGFibGVdPVwiZWRpdCB8fCBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8L3NpbXBvLXRleHQtZWRpdG9yPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgaG92ZXJfZWZmZWN0OiBlZGl0IH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCIgW2lzRWNvbW1lcmNlXT1cInRydWVcIj5cclxuICAgIDwvc2ltcG8taG92ZXItZWxlbWVudHM+XHJcbiAgPC9kaXY+XHJcbjwvbWFpbj4iXX0=
|