simpo-component-library 3.3.1 → 3.3.5
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 +5 -5
- package/esm2022/lib/components/document/document.component.mjs +5 -5
- package/esm2022/lib/components/hover-elements/hover-elements.component.mjs +4 -4
- package/esm2022/lib/components/image-loading/image-loading.component.mjs +5 -5
- package/esm2022/lib/components/index.mjs +5 -5
- package/esm2022/lib/components/input-fields/input-fields.component.mjs +4 -4
- package/esm2022/lib/components/payment-details/payment-details.component.mjs +5 -5
- package/esm2022/lib/constants/business.constant.mjs +1 -1
- package/esm2022/lib/directive/animation-directive.mjs +4 -4
- package/esm2022/lib/directive/background-directive.mjs +4 -4
- package/esm2022/lib/directive/banner-content-fit-directive.mjs +4 -4
- package/esm2022/lib/directive/blur-content.directive.mjs +4 -4
- package/esm2022/lib/directive/border-directive.mjs +4 -4
- package/esm2022/lib/directive/borderlessImage.directive.mjs +4 -4
- package/esm2022/lib/directive/button-directive.directive.mjs +4 -4
- package/esm2022/lib/directive/button-editor.directive.mjs +4 -4
- package/esm2022/lib/directive/color.directive.mjs +4 -4
- package/esm2022/lib/directive/column-directive.directive.mjs +4 -4
- package/esm2022/lib/directive/container-alignment.directive.mjs +4 -4
- package/esm2022/lib/directive/container-fir.directive.mjs +4 -4
- package/esm2022/lib/directive/content-alignment-directive.mjs +4 -4
- package/esm2022/lib/directive/content-fit-directive.mjs +4 -4
- package/esm2022/lib/directive/content-title-spacing.directive.mjs +4 -4
- package/esm2022/lib/directive/contenteditable.directive.mjs +4 -4
- package/esm2022/lib/directive/corner-directive.mjs +4 -4
- package/esm2022/lib/directive/footer-layout-directive.mjs +4 -4
- package/esm2022/lib/directive/hover-element-directive.mjs +4 -4
- package/esm2022/lib/directive/hoverborder.directive.mjs +4 -4
- package/esm2022/lib/directive/image-container.directive.mjs +4 -4
- package/esm2022/lib/directive/image-directive.directive.mjs +4 -4
- package/esm2022/lib/directive/image-editor.directive.mjs +4 -4
- package/esm2022/lib/directive/image-position.directive.mjs +4 -4
- package/esm2022/lib/directive/overlay-directive.mjs +4 -4
- package/esm2022/lib/directive/position-layout-directive.directive.mjs +4 -4
- package/esm2022/lib/directive/removeCarousel-directive.mjs +4 -4
- package/esm2022/lib/directive/spacing-around.directive.mjs +4 -4
- package/esm2022/lib/directive/spacing-horizontal.directive.mjs +4 -4
- package/esm2022/lib/directive/sticky-directive.mjs +4 -4
- package/esm2022/lib/directive/text-background-directive.directive.mjs +4 -4
- package/esm2022/lib/directive/text-size.directive.mjs +4 -4
- package/esm2022/lib/directive/wrap-containers.directive.mjs +4 -4
- package/esm2022/lib/ecommerce/sections/address/address.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +5 -5
- 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 +5 -5
- package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +6 -6
- package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +5 -5
- package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
- package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +5 -5
- 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 +5 -5
- package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +5 -5
- package/esm2022/lib/elements/button/button.component.mjs +5 -5
- package/esm2022/lib/elements/button/button.model.mjs +1 -1
- package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +5 -5
- package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +5 -5
- package/esm2022/lib/elements/editor-service.service.mjs +4 -4
- package/esm2022/lib/elements/heading-element/heading-element.component.mjs +5 -5
- package/esm2022/lib/elements/image-editor/image-editor.component.mjs +5 -5
- package/esm2022/lib/elements/index.mjs +5 -5
- package/esm2022/lib/elements/link-editor/link-editor.component.mjs +5 -5
- package/esm2022/lib/elements/media-selector/media-selector.component.mjs +5 -5
- package/esm2022/lib/elements/navbar-button-element/navbar-button-element.component.mjs +4 -4
- package/esm2022/lib/elements/portfolio/portfolio.component.mjs +5 -5
- package/esm2022/lib/elements/property/property.component.mjs +5 -5
- package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -5
- package/esm2022/lib/elements/socia-icons/socia-icons.component.mjs +4 -4
- package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +5 -5
- package/esm2022/lib/elements/text/text.component.mjs +5 -5
- package/esm2022/lib/elements/text-editor/text-editor.component.mjs +40 -40
- package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +5 -5
- package/esm2022/lib/pipes/amount.pipe.mjs +4 -4
- package/esm2022/lib/pipes/gender.pipe.mjs +4 -4
- package/esm2022/lib/sections/BaseSection.mjs +1 -1
- package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +5 -5
- package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +5 -5
- package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
- package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +5 -5
- package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
- package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +5 -5
- package/esm2022/lib/sections/banner-section/banner-section.component.mjs +4 -4
- package/esm2022/lib/sections/blog-list/blog-list.component.mjs +5 -5
- package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
- package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +4 -4
- package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +5 -5
- package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
- package/esm2022/lib/sections/contact-us/contact-us.component.mjs +4 -4
- package/esm2022/lib/sections/faq-section/faq-section.component.mjs +5 -5
- package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
- package/esm2022/lib/sections/features-section/features-section.component.mjs +5 -5
- package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
- package/esm2022/lib/sections/footer/footer.component.mjs +5 -5
- package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
- package/esm2022/lib/sections/footer-section/footer-section.component.mjs +4 -4
- package/esm2022/lib/sections/header-section/header-section.component.mjs +5 -5
- package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
- package/esm2022/lib/sections/header-text/header-text.component.mjs +5 -5
- package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
- package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +5 -5
- 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 +5 -5
- package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
- package/esm2022/lib/sections/image-section/image-section.component.mjs +5 -5
- package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
- package/esm2022/lib/sections/location-section/location-section.component.mjs +5 -5
- package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
- package/esm2022/lib/sections/logo-gallery/logo-gallery.component.mjs +4 -4
- package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +5 -5
- package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
- package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +4 -4
- package/esm2022/lib/sections/new-services/new-services.component.mjs +5 -5
- package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
- package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +5 -5
- package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
- package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +5 -5
- package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
- package/esm2022/lib/sections/process-modern/process-modern.component.mjs +5 -5
- package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
- package/esm2022/lib/sections/process-section/process-section.component.mjs +5 -5
- package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
- package/esm2022/lib/sections/property-component/property-component.component.mjs +5 -5
- package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
- package/esm2022/lib/sections/property-list/property-list.component.mjs +5 -5
- 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 +5 -5
- 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 +6 -6
- package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
- package/esm2022/lib/sections/service-section/service-section.component.mjs +5 -5
- package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
- package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +5 -5
- package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +5 -5
- package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +5 -5
- package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +5 -5
- package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
- package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +5 -5
- package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
- package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +4 -4
- package/esm2022/lib/sections/text-section/text-section.component.mjs +4 -4
- package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
- package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +5 -5
- package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
- package/esm2022/lib/sections/video-section/video-section.component.mjs +5 -5
- package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
- package/esm2022/lib/sections/view-blog/view-blog.component.mjs +5 -5
- package/esm2022/lib/services/cart.service.mjs +4 -4
- package/esm2022/lib/services/endUser.service.mjs +4 -4
- package/esm2022/lib/services/events.service.mjs +4 -4
- package/esm2022/lib/services/image-upload-service.service.mjs +15 -10
- package/esm2022/lib/services/rest.service.mjs +4 -4
- package/esm2022/lib/services/sanitizeHtml.mjs +4 -4
- package/esm2022/lib/services/storage.service.mjs +4 -4
- package/esm2022/lib/styles/index.mjs +1 -1
- package/esm2022/lib/styles/style.model.mjs +1 -1
- package/esm2022/lib/styles/types.mjs +1 -1
- package/esm2022/lib/tokens/api-token.mjs +2 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/simpo-component-library.mjs +517 -512
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/elements/text-editor/text-editor.component.d.ts +4 -1
- package/lib/services/image-upload-service.service.d.ts +2 -2
- package/lib/tokens/api-token.d.ts +1 -0
- package/package.json +1 -1
- package/simpo-component-library-3.3.5.tgz +0 -0
- package/src/lib/styles/global-styles.css +191 -191
- package/simpo-component-library-3.3.1.tgz +0 -0
@@ -539,12 +539,12 @@ export class AppointmentFormComponent extends BaseSection {
|
|
539
539
|
this.CreateData.scheduledDate !== '' &&
|
540
540
|
this.CreateData.scheduledTime !== '';
|
541
541
|
}
|
542
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
543
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AppointmentFormComponent, isStandalone: true, selector: "simpo-appointment-form", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor" }, host: { listeners: { "window: resize": "getScreenSize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div [id]=\"data?.id\"\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\n [simpoContainerAlignment]=\"stylesLayout\">\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\n </div>\n <div class=\"d-flex flex-column justify-content-start gap-15 content-side\"\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\n <div *ngFor=\"let item of content?.inputText\">\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div> -->\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\n </div>\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\n <div class=\"card_wrapper\">\n <div class=\"container_card visible\">\n <div class=\"card-section\">\n <div class=\"second-part-card\">\n\n </div>\n <div class=\"first-part-card\"\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\n <img loading=\"lazy\" class=\"tick-img\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\n alt=\"something\" />\n\n {{ item.inputText[0].value }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\n [simpoContainerAlignment]=\"stylesLayout\">\n <div *ngFor=\"let button of data?.action?.buttons\">\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\"[backgroundInfo]=\"data?.styles?.background\"></app-button-element>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <!-- <div style=\" width: 100%; height: 500px;\">\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\n </div> -->\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n</div>\n<ng-template #ImageSection>\n <div class=\"col-10 col-sm-8 col-lg-6\"\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\n [simpoBorderless]=\"getPositionLayout\">\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\n </div>\n</ng-template>\n\n\n<!-- Dialog template -->\n<ng-template #dialogBox class=\"dialogbox\">\n <div class=\"appointment-form\">\n <div class=\"header-section\">\n <div class=\"header-left-side\">\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\n </div>\n <div class=\"header-right-side\">\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\n </div>\n </div>\n\n <form>\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Name</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n\n <div class=\"sfull-width\">\n <div class=\"input-text\">Mobile Number</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Location</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" (ngModelChange)=\"changeLocation()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let location of locationData\">\n <mat-option [value]=\"location.id\">\n {{ location.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"sfull-width\">\n <div class=\"input-text\">Service</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" [(ngModel)]=\"selectedServices\" (ngModelChange)=\"getAllStaff()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let service of serviceData\">\n <mat-option [value]=\"service.id\">\n {{ service.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Staff</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Staff\" [(ngModel)]=\"selectedStaff\" (ngModelChange)=\"getAvailableSlots()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let staff of staffData\">\n <mat-option [value]=\"staff.id\">\n {{ staff.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Date</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"changeDate()\" [min]=\"minDate\"\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div class=\"sfull-width\">\n <div class=\"input-text\">Time</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.scheduledTime\" [ngModelOptions]=\"{standalone: true}\">\n <mat-option *ngFor=\"let time of locationTiming\" [value]=\"time\" [disabled]=\"bookedSlots.has(time)\">\n {{ time }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n\n <div class=\"full-message-section\">\n <div class=\"business-field-section\">\n <div class=\"input-text\">Message</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"bottom-section\">\n <div class=\"button-section\">\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"createAppointment()\">\n Book Appointment\n </button>\n </div>\n </div>\n\n\n </form>\n </div>\n</ng-template>\n", styles: [".btn-primary{border:none}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:65vw;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}.button-section{width:100%!important}.appointment-form{width:100vw}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-75px;padding-top:75px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\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: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i6.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo"] }, { kind: "component", type: i7.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i8.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i9.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i10.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i14.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i14.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i14.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label"], outputs: ["valueChange"] }, { kind: "directive", type:
|
542
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AppointmentFormComponent, deps: [{ token: i1.EventsService }, { token: i2.MatDialog }, { token: i3.RestService }, { token: i4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
543
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.4", type: AppointmentFormComponent, isStandalone: true, selector: "simpo-appointment-form", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor" }, host: { listeners: { "window: resize": "getScreenSize($event)" } }, usesInheritance: true, ngImport: i0, template: "<div [id]=\"data?.id\"\r\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\r\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\r\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\r\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\r\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\r\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\r\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\r\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n <div class=\"d-flex flex-column justify-content-start gap-15 content-side\"\r\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\r\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\r\n <div class=\"card_wrapper\">\r\n <div class=\"container_card visible\">\r\n <div class=\"card-section\">\r\n <div class=\"second-part-card\">\r\n\r\n </div>\r\n <div class=\"first-part-card\"\r\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n <img loading=\"lazy\" class=\"tick-img\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\r\n alt=\"something\" />\r\n\r\n {{ item.inputText[0].value }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\r\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\"[backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div style=\" width: 100%; height: 500px;\">\r\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\r\n </div> -->\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>\r\n<ng-template #ImageSection>\r\n <div class=\"col-10 col-sm-8 col-lg-6\"\r\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\r\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\r\n [simpoBorderless]=\"getPositionLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Dialog template -->\r\n<ng-template #dialogBox class=\"dialogbox\">\r\n <div class=\"appointment-form\">\r\n <div class=\"header-section\">\r\n <div class=\"header-left-side\">\r\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\r\n </div>\r\n <div class=\"header-right-side\">\r\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <form>\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Name</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Mobile Number</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\r\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\r\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Location</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" (ngModelChange)=\"changeLocation()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let location of locationData\">\r\n <mat-option [value]=\"location.id\">\r\n {{ location.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Service</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" [(ngModel)]=\"selectedServices\" (ngModelChange)=\"getAllStaff()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let service of serviceData\">\r\n <mat-option [value]=\"service.id\">\r\n {{ service.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Staff</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Staff\" [(ngModel)]=\"selectedStaff\" (ngModelChange)=\"getAvailableSlots()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <mat-option [value]=\"staff.id\">\r\n {{ staff.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Date</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\r\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"changeDate()\" [min]=\"minDate\"\r\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Time</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.scheduledTime\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-option *ngFor=\"let time of locationTiming\" [value]=\"time\" [disabled]=\"bookedSlots.has(time)\">\r\n {{ time }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"full-message-section\">\r\n <div class=\"business-field-section\">\r\n <div class=\"input-text\">Message</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"bottom-section\">\r\n <div class=\"button-section\">\r\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"createAppointment()\">\r\n Book Appointment\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </div>\r\n</ng-template>\r\n", styles: [".btn-primary{border:none}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:65vw;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}.button-section{width:100%!important}.appointment-form{width:100vw}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-75px;padding-top:75px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\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: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i6.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo"] }, { kind: "component", type: i7.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i8.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i9.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: MatGridListModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i10.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i14.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i14.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i14.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "sectionId", "label"], outputs: ["valueChange"] }, { kind: "directive", type:
|
544
544
|
//directive
|
545
545
|
SimpoBorderlessDirective, selector: "[simpoBorderless]", inputs: ["simpoBorderless"] }, { kind: "directive", type: SimpoContainerAligment, selector: "[simpoContainerAlignment]", inputs: ["simpoContainerAlignment"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: simpoConetenAlignmentDirective, selector: "[simpoContentAlignment]", inputs: ["simpoContentAlignment"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: PositionLayoutDirectiveDirective, selector: "[simpoPositionLayoutDirective]", inputs: ["simpoPositionLayoutDirective"] }, { kind: "directive", type: ObjectPositionDirective, selector: "[simpoObjectPosition]", inputs: ["simpoObjectPosition"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }] }); }
|
546
546
|
}
|
547
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
547
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: AppointmentFormComponent, decorators: [{
|
548
548
|
type: Component,
|
549
549
|
args: [{ selector: 'simpo-appointment-form', standalone: true, imports: [
|
550
550
|
CommonModule,
|
@@ -588,7 +588,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
588
588
|
TextSizeDirective,
|
589
589
|
SanitizeHtmlPipe,
|
590
590
|
SpacingHorizontalDirective
|
591
|
-
], template: "<div [id]=\"data?.id\"\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\" [spacingHorizontal]=\"stylesLayout\">\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\n [simpoContainerAlignment]=\"stylesLayout\">\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\n </div>\n <div class=\"d-flex flex-column justify-content-start gap-15 content-side\"\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\n <div *ngFor=\"let item of content?.inputText\">\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div> -->\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\n </div>\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\n <div class=\"card_wrapper\">\n <div class=\"container_card visible\">\n <div class=\"card-section\">\n <div class=\"second-part-card\">\n\n </div>\n <div class=\"first-part-card\"\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\n <img loading=\"lazy\" class=\"tick-img\"\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\n alt=\"something\" />\n\n {{ item.inputText[0].value }}\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\n [simpoContainerAlignment]=\"stylesLayout\">\n <div *ngFor=\"let button of data?.action?.buttons\">\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\"[backgroundInfo]=\"data?.styles?.background\"></app-button-element>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <!-- <div style=\" width: 100%; height: 500px;\">\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\n </div> -->\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n</div>\n<ng-template #ImageSection>\n <div class=\"col-10 col-sm-8 col-lg-6\"\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\n [simpoBorderless]=\"getPositionLayout\">\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\n </div>\n</ng-template>\n\n\n<!-- Dialog template -->\n<ng-template #dialogBox class=\"dialogbox\">\n <div class=\"appointment-form\">\n <div class=\"header-section\">\n <div class=\"header-left-side\">\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\n </div>\n <div class=\"header-right-side\">\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\n </div>\n </div>\n\n <form>\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Name</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n\n <div class=\"sfull-width\">\n <div class=\"input-text\">Mobile Number</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Location</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" (ngModelChange)=\"changeLocation()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let location of locationData\">\n <mat-option [value]=\"location.id\">\n {{ location.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"sfull-width\">\n <div class=\"input-text\">Service</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" [(ngModel)]=\"selectedServices\" (ngModelChange)=\"getAllStaff()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let service of serviceData\">\n <mat-option [value]=\"service.id\">\n {{ service.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Staff</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Staff\" [(ngModel)]=\"selectedStaff\" (ngModelChange)=\"getAvailableSlots()\" [ngModelOptions]=\"{standalone: true}\">\n <ng-container *ngFor=\"let staff of staffData\">\n <mat-option [value]=\"staff.id\">\n {{ staff.name }}\n </mat-option>\n </ng-container>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"name-mobile\">\n <div class=\"sfull-width\">\n <div class=\"input-text\">Date</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"changeDate()\" [min]=\"minDate\"\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n\n <div class=\"sfull-width\">\n <div class=\"input-text\">Time</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.scheduledTime\" [ngModelOptions]=\"{standalone: true}\">\n <mat-option *ngFor=\"let time of locationTiming\" [value]=\"time\" [disabled]=\"bookedSlots.has(time)\">\n {{ time }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n\n <div class=\"full-message-section\">\n <div class=\"business-field-section\">\n <div class=\"input-text\">Message</div>\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"bottom-section\">\n <div class=\"button-section\">\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"createAppointment()\">\n Book Appointment\n </button>\n </div>\n </div>\n\n\n </form>\n </div>\n</ng-template>\n", styles: [".btn-primary{border:none}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:65vw;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}.button-section{width:100%!important}.appointment-form{width:100vw}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-75px;padding-top:75px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\n"] }]
|
591
|
+
], template: "<div [id]=\"data?.id\"\r\n [ngClass]=\"{'mergeNavbar': canMergeNavbar && index == 1, 'justify-content-between d-flex': isBorderlessImage}\"\r\n [simpoBackground]=\"styles?.background\" class=\"total-container\" style=\"overflow-x: hidden;\" simpoHover\r\n (hovering)=\"showEditTabs($event)\" [attr.style]=\"customClass\">\r\n <ng-container *ngTemplateOutlet=\"ImageSection\"></ng-container>\r\n <div class=\"px-4 py-5\" [ngClass]=\"{'col-lg-6 col-xxl-6': isBorderlessImage, 'w-100 col-xxl-8': !isBorderlessImage}\"\r\n [id]=\"data?.id\" #mainContainer [simpoOverlay]=\"styles?.background\" [simpoBorder]=\"styles?.border\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"row g-5 justify-content-start\" [id]=\"data?.id\" [simpoAnimation]=\"styles?.animation\"\r\n [simpoLayout]=\"styles?.layout\" [simpoPositionLayoutDirective]=\"styles?.positionLayout\"\r\n [ngClass]=\"{ 'align-items-stretch': styles?.positionLayout?.value === 'left' || styles?.positionLayout?.value === 'right', 'flex-lg-row': true }\">\r\n <div class=\"col-10 col-sm-8 col-lg-6\" *ngIf=\"content?.image?.showImage && !isBorderlessImage\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" [simpoImageDirective]=\"styles?.image\" [id]=\"data?.id\"\r\n [simpoObjectPosition]=\"content?.image?.position\" [simpoCorner]=\"styles?.corners\"\r\n [class]=\"data?.id+(content?.image?.id || '')\" class=\"d-block w-100 insideImg\" style=\"object-fit: cover;\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n <div class=\"d-flex flex-column justify-content-start gap-15 content-side\"\r\n [ngClass]=\"{'col-lg-12': isBorderlessImage, 'col-lg-6': !isBorderlessImage}\"\r\n [simpoContainerAlignment]=\"stylesLayout\" [id]=\"data?.id\" [simpoContentAlignment]=\"styles?.contentAlignment\">\r\n <div *ngFor=\"let item of content?.inputText\">\r\n <!-- <div [innerHTML]=\"item.value | sanitizeHtml\" class=\"text-element\"\r\n [ngClass]=\"item.label === 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\"></div> -->\r\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\"></simpo-text-editor>\r\n </div>\r\n <div *ngFor=\"let item of content?.listItem?.data\" class=\"carder\">\r\n <div class=\"card_wrapper\">\r\n <div class=\"container_card visible\">\r\n <div class=\"card-section\">\r\n <div class=\"second-part-card\">\r\n\r\n </div>\r\n <div class=\"first-part-card\"\r\n [ngClass]=\"item.inputText[0].label=== 'Heading' ? 'heading-large lh-2 mb-3' : 'body-large'\">\r\n <img loading=\"lazy\" class=\"tick-img\"\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/933997c1718790303127907598c1696063061900green_verified_image.png\"\r\n alt=\"something\" />\r\n\r\n {{ item.inputText[0].value }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"data?.action && data?.action?.display\" class=\"button-display\"\r\n [simpoContainerAlignment]=\"stylesLayout\">\r\n <div *ngFor=\"let button of data?.action?.buttons\">\r\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\" [buttonId]=\"button.id\"\r\n (click)=\"opendailogbox(dialogBox)\" [sectionId]=\"data?.id\"\r\n [color]=\"data?.styles?.background?.accentColor\"[backgroundInfo]=\"data?.styles?.background\"></app-button-element>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div style=\" width: 100%; height: 500px;\">\r\n <img loading=\"lazy\" src=\"../../assets/divider.svg\" style=\"clip-path: polygon(0 55%, 100% 0, 100% 100%, 0% 100%); background-color: red;\">\r\n </div> -->\r\n <ng-container *ngIf=\"styles?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit && false }\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isMerged]=\"styles?.merge ?? false\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</div>\r\n<ng-template #ImageSection>\r\n <div class=\"col-10 col-sm-8 col-lg-6\"\r\n [ngStyle]=\"{'width': styles?.positionLayout?.value === 'right' ? 'fit-content' : ''}\"\r\n style=\"padding: 0px !important;\" *ngIf=\"content?.image?.showImage && isBorderlessImage;\"\r\n [simpoBorderless]=\"getPositionLayout\">\r\n <img loading=\"lazy\" [src]=\"content?.image?.url\" class=\"d-block img-fluid h-100 w-100\"\r\n [alt]=\"content?.image?.altText\" width=\"700\" height=\"500\" loading=\"lazy\" />\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Dialog template -->\r\n<ng-template #dialogBox class=\"dialogbox\">\r\n <div class=\"appointment-form\">\r\n <div class=\"header-section\">\r\n <div class=\"header-left-side\">\r\n <h2 style=\"text-align: left;\">Book an Appointment</h2>\r\n </div>\r\n <div class=\"header-right-side\">\r\n <mat-icon (click)=\"closeDialog()\">close</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <form>\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Name</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.clientName\" (ngModelChange)=\"onUserNameChange($event)\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Mobile Number</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input type=\"text\" class=\"inputStyle\" matInput placeholder=\"Enter Your Mobile Number\"\r\n pattern=\"^[0-9]{10,15}$\" maxlength=\"15\" (focus)=\"onFocus()\" (keypress)=\"restrictNonNumeric($event)\"\r\n [(ngModel)]=\"CreateData.mobile\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Location</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"selectedLocation\" (ngModelChange)=\"changeLocation()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let location of locationData\">\r\n <mat-option [value]=\"location.id\">\r\n {{ location.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Service</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Service\" [(ngModel)]=\"selectedServices\" (ngModelChange)=\"getAllStaff()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let service of serviceData\">\r\n <mat-option [value]=\"service.id\">\r\n {{ service.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Staff</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Staff\" [(ngModel)]=\"selectedStaff\" (ngModelChange)=\"getAvailableSlots()\" [ngModelOptions]=\"{standalone: true}\">\r\n <ng-container *ngFor=\"let staff of staffData\">\r\n <mat-option [value]=\"staff.id\">\r\n {{ staff.name }}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"name-mobile\">\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Date</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput [matDatepicker]=\"picker\" placeholder=\"Select Date\"\r\n [(ngModel)]=\"CreateData.scheduledDate\" (ngModelChange)=\"changeDate()\" [min]=\"minDate\"\r\n [matDatepickerFilter]=\"dateFilter\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"sfull-width\">\r\n <div class=\"input-text\">Time</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <mat-select class=\"inputStyle\" placeholder=\"Select Location\" [(ngModel)]=\"CreateData.scheduledTime\" [ngModelOptions]=\"{standalone: true}\">\r\n <mat-option *ngFor=\"let time of locationTiming\" [value]=\"time\" [disabled]=\"bookedSlots.has(time)\">\r\n {{ time }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"full-message-section\">\r\n <div class=\"business-field-section\">\r\n <div class=\"input-text\">Message</div>\r\n <mat-form-field class=\"full-width\" appearance=\"outline\">\r\n <input class=\"inputStyle\" matInput placeholder=\"Enter Your Name\" pattern=\"[a-zA-Z ]*\"\r\n [(ngModel)]=\"CreateData.message\" [ngModelOptions]=\"{standalone: true}\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"bottom-section\">\r\n <div class=\"button-section\">\r\n <button class=\"booking-button\" [disabled]=\"!isFormValid()\" (click)=\"createAppointment()\">\r\n Book Appointment\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n </div>\r\n</ng-template>\r\n", styles: [".btn-primary{border:none}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.total-container{position:relative;height:auto}.button-display{display:flex;gap:10px}.gap-15{gap:15px}.appointment-form{width:65vw;background-color:#fff;border-radius:8px;padding:20px;box-shadow:0 4px 8px #0000001a}h2{text-align:center;margin-bottom:20px}.form-group{display:flex;flex-direction:column;margin-bottom:15px;width:100%}label{font-weight:700;margin-bottom:5px}input,select,textarea{padding:8px;border:1px solid #ccc;border-radius:4px;font-size:14px}input::placeholder,textarea::placeholder{color:#888}.name-mobile,.date-time{display:flex;justify-content:space-between}textarea{resize:vertical}.book-btn{width:100%;background-color:#007bff;color:#fff;border:none;padding:10px;border-radius:4px;font-size:16px;cursor:pointer}.book-btn:hover{background-color:#0056b3}@media only screen and (max-width: 475px){.col-10{width:100%;max-width:100%;flex-basis:100%;height:32vh;padding-right:13px;padding-left:13px}.total-container{flex-direction:column}.insideImg{height:100%!important}.button-section{width:100%!important}.appointment-form{width:100vw}}.text-element{inline-size:100%;overflow-wrap:break-word}.mergeNavbar{margin-top:-75px;padding-top:75px}.container_card .card-section{align-items:center;gap:20px;padding-top:5px;padding-bottom:5px;width:100%;border-radius:10px;opacity:0;transform:translateY(150px);transition:2s all ease}.card_wrapper{display:flex;flex-direction:column;gap:20px}.visible{visibility:visible!important}.visible .card-section{opacity:1;transform:translateY(0)}.first-part-card{min-width:fit-content}.first-part-card .body-large{font-size:1.1rem;font-weight:700}.second-part-card{width:2px;height:2px;border-radius:50%;display:flex;justify-content:center;align-items:center}.third-part-card .heading-large{font-size:1.1rem;font-weight:700}.third-part-card .body-large{font-size:12px;font-weight:400;line-height:15px}.tick-img{width:25px;height:25px;border-radius:50%}.third-part-card{display:flex;flex-direction:column;gap:10px}.sfull-width{width:49%;height:75px}.input-text{margin-bottom:5px}.full-width{width:100%}.bottom-section{width:100%;display:flex;justify-content:right}.button-section{width:30%}.booking-button{background:#0496ff;color:#fff;border:1px solid#0496FF;border-radius:10px;padding:7px 5px}.header-section{display:flex;width:100%;justify-content:space-between}.header-left-side{width:50%}.header-right-side{width:5%;cursor:pointer}\n"] }]
|
592
592
|
}], ctorParameters: () => [{ type: i1.EventsService }, { type: i2.MatDialog }, { type: i3.RestService }, { type: i4.MatSnackBar }], propDecorators: { data: [{
|
593
593
|
type: Input
|
594
594
|
}], index: [{
|
@@ -605,4 +605,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
605
605
|
type: HostListener,
|
606
606
|
args: ["window: resize", ["$event"]]
|
607
607
|
}] } });
|
608
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlELE1BQU0sZUFBZSxDQUFDO0FBRTFILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRD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d0JBQ2QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEpBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQWlCTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFja2dyb3VuZE1vZGVsLCBCYW5uZXJTdHlsZXNNb2RlbCwgTGF5T3V0TW9kZWwsIFBvc2l0aW9uTGF5b3V0TW9kYWwgfSBmcm9tICcuLi8uLi9zdHlsZXMvc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgU2ltcG9FbGVtZW50c01vZHVsZSB9IGZyb20gJy4vLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNpbXBvQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbmRleCc7XG5pbXBvcnQgeyBNYXRHcmlkTGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2dyaWQtbGlzdCc7XG5pbXBvcnQgeyBTaW1wb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3NpbXBvLWJ1dHRvbi9zaW1wby1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEFuaW1hdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9hbmltYXRpb24tZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFubmVyQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYW5uZXItY29udGVudC1maXQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29sdW1uLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGFpbmVyRml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1maXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWFsaWdubWVudC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Nvcm5lci1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvZm9vdGVyLWxheW91dC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSW1hZ2VEaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaW1hZ2UtZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtYmFja2dyb3VuZC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi9CYXNlU2VjdGlvbic7XG5pbXBvcnQgeyBTaW1wb0NvbnRhaW5lckFsaWdtZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2NvbnRhaW5lci1hbGlnbm1lbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbG9yRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRTaXplRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3RleHQtc2l6ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Cb3JkZXJsZXNzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JvcmRlcmxlc3NJbWFnZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Ib3ZlckJvcmRlckRpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmUvaG92ZXJib3JkZXIuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBTYW5pdGl6ZUh0bWxQaXBlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FuaXRpemVIdG1sJztcbmltcG9ydCB7IEJhbm5lckNvbnRlbnRNb2RlbCwgQmFubmVyU2VjdGlvbk1vZGVsIH0gZnJvbSAnLi9hcHBvaW50bWVudC1mb3JtLm1vZGVsJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdE5hdGl2ZURhdGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyLCBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvc3BhY2luZy1ob3Jpem9udGFsLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWFwcG9pbnRtZW50LWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFNpbXBvRWxlbWVudHNNb2R1bGUsXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXG4gICAgTWF0R3JpZExpc3RNb2R1bGUsXG4gICAgU2ltcG9CdXR0b25Db21wb25lbnQsXG4gICAgU2ltcG9Ib3ZlckJvcmRlckRpcmVjdGl2ZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFNuYWNrQmFyTW9kdWxlLFxuICAgIFRleHRFZGl0b3JDb21wb25lbnQsXG5cbiAgICAvL2RpcmVjdGl2ZVxuICAgIFNpbXBvQm9yZGVybGVzc0RpcmVjdGl2ZSxcbiAgICBTaW1wb0NvbnRhaW5lckFsaWdtZW50LFxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUsXG4gICAgQm9yZGVyRGlyZWN0aXZlLFxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXG4gICAgQ29udGFpbmVyRml0RGlyZWN0aXZlLFxuICAgIHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSxcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxuICAgIENvcm5lckRpcmVjdGl2ZSxcbiAgICBTaW1wb0Zvb3RlckxheW91dERpcmVjdGl2ZSxcbiAgICBIb3ZlckRpcmVjdGl2ZSxcbiAgICBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSxcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxuICAgIFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIFRleHRCYWNrZ3JvdW5kRGlyZWN0aXZlRGlyZWN0aXZlLFxuICAgIE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlLFxuICAgIENvbG9yRGlyZWN0aXZlLFxuICAgIFRleHRTaXplRGlyZWN0aXZlLFxuICAgIFNhbml0aXplSHRtbFBpcGUsXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcG9pbnRtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHBvaW50bWVudEZvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlU2VjdGlvbiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgZGF0YT86IEJhbm5lclNlY3Rpb25Nb2RlbDtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIGNvbnRlbnQ/OiBCYW5uZXJDb250ZW50TW9kZWw7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgbmV4dENvbXBvbmVudENvbG9yPzogQmFja2dyb3VuZE1vZGVsO1xuICBzdHlsZXM/OiBCYW5uZXJTdHlsZXNNb2RlbDtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgYXBwb2ludG1lbnRTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBNYXRTbmFja0JhclxuXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5nZXRTY3JlZW5TaXplKClcbiAgfVxuXG4gIHNjcmVlbldpZHRoOiBudW1iZXIgPSAwO1xuICBASG9zdExpc3RlbmVyKFwid2luZG93OiByZXNpemVcIiwgW1wiJGV2ZW50XCJdKVxuICBnZXRTY3JlZW5TaXplKCkge1xuICAgIHRoaXMuc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgfVxuXG5cbiAgYnVzaW5lc3NJZDogYW55O1xuICBidXNpbmVzc05hbWU6IGFueTtcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGVTZWxlY3RlZCA9IHRoaXMuZGVsZXRlXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gICAgaWYgKCF0aGlzLnN0eWxlcyB8fCAhdGhpcy5jb250ZW50KSByZXR1cm47XG4gICAgdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxuICAgICAgdGhpcy5idXNpbmVzc05hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJOYW1lXCIpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVzaW5lc3NOYW1lXCIpXG5cblxuICAgIC8vIHRoaXMuZ2V0QWxsU2VydmljZXMoKTtcbiAgICAvLyB0aGlzLnN0eWxlcy5sYXlvdXQuYmFubmVySW1hZ2VEaXNwbGF5ID0gdGhpcy5jb250ZW50LmltYWdlLnNob3dJbWFnZTtcbiAgICB0aGlzLmdldEFsbExvY2F0aW9ucygpO1xuXG4gIH1cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0eWxlcz8ubGF5b3V0IH0gYXMgTGF5T3V0TW9kZWw7XG4gIH1cbiAgZ2V0IGdldEp1c3RpZnlDb250ZW50KCkge1xuICAgIHJldHVybiBcImp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XCI7XG4gIH1cbiAgZ2V0IGNhbk1lcmdlTmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlcz8ubWVyZ2U7XG4gIH1cbiAgZ2V0IGlzQm9yZGVybGVzc0ltYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlcz8uYm9yZGVyTGVzc0ltYWdlICYmICh0aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQudmFsdWUgPT0gXCJsZWZ0XCIgfHwgdGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0LnZhbHVlID09IFwicmlnaHRcIik7XG4gIH1cbiAgZ2V0IGdldFBvc2l0aW9uTGF5b3V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dCB9IGFzIFBvc2l0aW9uTGF5b3V0TW9kYWw7XG4gIH1cblxuICBlZGl0U2VjdGlvbigpIHtcblxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHsgZGF0YTogdGhpcy5kYXRhIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgc3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBhbnkpIHtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgb3BlbmRhaWxvZ2JveCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KTogdm9pZCB7XG4gICAgaWYodGhpcy5zY3JlZW5XaWR0aCA+IDQ3NSkge1xuICAgICAgdGhpcy5tYXREaWFsb2cub3Blbih0ZW1wbGF0ZSxcbiAgICAgICAgLy8gIHt3aWR0aDonNTAwcHgnfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXREaWFsb2cub3Blbih0ZW1wbGF0ZSxcbiAgICAgICAgIHsgIHdpZHRoOiAnMTAwdncnLCAvLyBGdWxsIHZpZXdwb3J0IHdpZHRoXG4gICAgICAgICAgaGVpZ2h0OiAnMTAwdmgnLCAvLyBGdWxsIHZpZXdwb3J0IGhlaWdodFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgfVxuICB9XG5cblxuICBjbG9zZURpYWxvZygpIHtcbiAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xuICB9XG5cblxuXG5cbiAgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XG4gIH1cblxuICByZXN0cmljdE5vbk51bWVyaWMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlO1xuICAgIGlmIChjaGFyQ29kZSAhPSAwKSB7XG4gICAgICAvLyBBbGxvdyBvbmx5IG51bWJlcnNcbiAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIG9uVXNlck5hbWVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aXFxzXSokLztcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XG4gICAgICB0aGlzLkNyZWF0ZURhdGEuY2xpZW50TmFtZSA9IHZhbHVlLnJlcGxhY2UoL1teYS16QS1aXFxzXS9nLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdGhpcy50b1RpdGxlQ2FzZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdG9UaXRsZUNhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbiAodHh0KSB7XG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VydmljZURhdGE6IGFueTtcbiAgc3RhZmZEYXRhOiBhbnk7XG5cbiAgY2hhbmdlTG9jYXRpb24oKSB7XG4gICAgdGhpcy5nZXRBbGxTZXJ2aWNlcygpO1xuICAgIHRoaXMuZ2V0QWxsU3RhZmYoKVxuICAgIHRoaXMudXBkYXRlTG9jYXRpb25UaW1pbmcoKTtcbiAgfVxuXG4gIHVwZGF0ZUxvY2F0aW9uVGltaW5nKCkge1xuICAgIHRoaXMubG9jYXRpb25UaW1pbmcgPSBbXTtcbiAgICBjb25zdCBkYXkgPSB0aGlzLmdldERheSgpO1xuICAgIGZvciAobGV0IGxvY2F0aW9uIG9mIHRoaXMubG9jYXRpb25EYXRhKSB7XG4gICAgICBpZiAobG9jYXRpb24uaWQgPT09IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbikge1xuICAgICAgICBsZXQgZGF0YSA9IGxvY2F0aW9uLnN0b3JlVGltaW5nc1tkYXkudG9VcHBlckNhc2UoKV07XG4gICAgICAgIGlmICghZGF0YS5kYXlUeXBlKSB7XG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKCdPcHBzIHNob3AgaXMgY2xvc2VkIG9uIHNlbGVjdGVkIGRhdGUnLCAnY2xvc2UnLCB7ZHVyYXRpb246IDIwMDB9KVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9jYXRpb25UaW1pbmcgPSB0aGlzLmdlbmVyYXRlVGltZVNsb3RzKGRhdGEuc3RhcnRUaW1lLCBkYXRhLmVuZFRpbWUpIHx8IFtdO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgZ2V0RGF5KCkge1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXTtcbiAgICByZXR1cm4gZGF5c09mV2Vla1t0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZS5nZXREYXkoKV07XG4gIH1cblxuICBnZXRBbGxTZXJ2aWNlcygpIHtcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMgPSAnJ1xuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFNlcnZpY2UodGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwLCB0aGlzLnNlbGVjdGVkTG9jYXRpb24pLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xuICAgICAgICAgIHRoaXMuc2VydmljZURhdGEgPSByZXMuZGF0YS5kYXRhLmZpbHRlcigoc2VydmljZTogYW55KSA9PiBzZXJ2aWNlLnN0YXR1cyA9PT0gJ0FDVElWRScpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZURhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICAgIGBObyBhY3RpdmUgc2VydmljZXMgYXZhaWxhYmxlIGZvciB0aGlzIGJ1c2luZXNzLmAsXG4gICAgICAgICAgICAgICdDbG9zZScsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICBgU2VydmljZSBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcbiAgICAgICAgICAgICdDbG9zZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTdGFmZigpIHtcbiAgICB0aGlzLnNlbGVjdGVkU3RhZmYgPSAnJ1xuICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWRUaW1lID0gJydcbiAgICB0aGlzLmdldEF2YWlsYWJsZVNsb3RzKCk7XG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsU3RhZmZCeUxvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCwgdGhpcy5zZWxlY3RlZExvY2F0aW9uLCB0aGlzLnNlbGVjdGVkU2VydmljZXMpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xuICAgICAgICAgIHRoaXMuc3RhZmZEYXRhID0gcmVzLmRhdGEuZGF0YS5maWx0ZXIoKHN0YWZmOiBhbnkpID0+IHN0YWZmLnN0YXR1cyA9PT0gJ0FDVElWRScpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3RhZmZEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICAgICBgTm8gYWN0aXZlIHN0YWZmIGF2YWlsYWJsZSBmb3IgdGhpcyBidXNpbmVzcy5gLFxuICAgICAgICAgICAgICAnQ2xvc2UnLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICAgYFN0YWZmIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxuICAgICAgICAgICAgJ0Nsb3NlJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG1pbkRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBib29rZWRTbG90cyA9IG5ldyBTZXQoKTtcbiAgbG9jYXRpb25UaW1pbmc6IHN0cmluZ1tdID0gW107XG5cbiAgY2hhbmdlRGF0ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZUxvY2F0aW9uVGltaW5nKCk7XG4gICAgdGhpcy5nZXRBdmFpbGFibGVTbG90cygpO1xuICB9XG5cbiAgZ2V0QXZhaWxhYmxlU2xvdHMoKSB7XG4gICAgdGhpcy5ib29rZWRTbG90cyA9IG5ldyBTZXQoKVxuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgXCJsb2NhdGlvbklkXCI6IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbixcbiAgICAgIFwic2VydmljZUlkXCI6IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcyxcbiAgICAgIFwic3RhZmZJZFwiOiB0aGlzLnNlbGVjdGVkU3RhZmYsXG4gICAgICBcImJ1c2luZXNzSWRcIjogdGhpcy5idXNpbmVzc0lkLFxuICAgICAgXCJhcHBvaW50bWVudERhdGVcIjogdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGVcbiAgICB9XG5cbiAgICB0aGlzLmFwcG9pbnRtZW50U2VydmljZS5nZXRBdmFpbGFibGVTbG90cyhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAvLyBsZXQgc2VsZWN0ZWREYXRlID0gbW9tZW50KHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKTs7XG4gICAgICAvLyBmb3IgKGxldCBzdGFmZiBvZiByZXMuZGF0YSkge1xuICAgICAgLy8gICBpZighc3RhZmYuYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKXtcbiAgICAgIC8vICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xuICAgICAgLy8gICAgIGJyZWFrO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIGlmIChzdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKSB7XG4gICAgICAvLyAgICAgZm9yIChsZXQgYXBwcG9pbnRtZW50IG9mIHN0YWZmPy5ib29rZWRTbG90cz8uW3NlbGVjdGVkRGF0ZV0pIHtcbiAgICAgIC8vICAgICAgIGNvbnN0IHRpbWVTbG90cyA9IHRoaXMuZ2V0VGltZShhcHBwb2ludG1lbnQuYXBwb2ludG1lbnRTdGFydFRpbWUsIGFwcHBvaW50bWVudC5hcHBvaW50bWVudEVuZFRpbWUsIDE1KTtcbiAgICAgIC8vICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgLy8gICAgICAgdGltZVNsb3RzPy5mb3JFYWNoKHNsb3QgPT4gdGhpcy5ib29rZWRTbG90cy5hZGQoc2xvdCkpO1xuICAgICAgLy8gICAgICAgLy8gdGhpcy5ib29rZWRTbG90cyA9IG5ldyBTZXQodGltZVNsb3RzKTtcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMuZ2V0Qm9va2VkU2xvdHMocmVzKTtcbiAgICAgIHRoaXMuZ2V0Qm9va2VkU2xvdHMocmVzKTtcbiAgICB9KVxuXG4gIH1cblxuICBnZXRCb29rZWRTbG90cyhyZXM6IGFueSkge1xuICAgIGxldCBzZWxlY3RlZERhdGUgPSBtb21lbnQodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xuXG4gICAgbGV0IHNsb3RzOiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IHN0YWZmIG9mIHJlcy5kYXRhKSB7XG4gICAgICBpZiAoIXN0YWZmLmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSkge1xuICAgICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNsb3RzLnB1c2goLi4uc3RhZmY/LmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSk7XG4gICAgfVxuXG4gICAgc2xvdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZShhLmFwcG9pbnRtZW50U3RhcnRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuYXBwb2ludG1lbnRTdGFydFRpbWUpLmdldFRpbWUoKTtcbiAgICAgIHJldHVybiBkYXRlQSAtIGRhdGVCOyAvLyBBc2NlbmRpbmcgb3JkZXJcbiAgICB9KTtcblxuXG4gICAgbGV0IHN0YXJ0VGltZTogRGF0ZSA9IG5ldyBEYXRlKHNsb3RzWzBdLmFwcG9pbnRtZW50U3RhcnRUaW1lKTtcbiAgICBsZXQgZW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKHNsb3RzWzBdLmFwcG9pbnRtZW50RW5kVGltZSk7XG5cbiAgICBmb3IgKGxldCBhcHBwb2ludG1lbnQgb2Ygc2xvdHMpIHtcblxuICAgICAgbGV0IGN1cnJlbnRTdGFydFRpbWU6IERhdGUgPSBuZXcgRGF0ZShhcHBwb2ludG1lbnQuYXBwb2ludG1lbnRTdGFydFRpbWUpO1xuICAgICAgbGV0IGN1cnJlbnRFbmRUaW1lOiBEYXRlID0gbmV3IERhdGUoYXBwcG9pbnRtZW50LmFwcG9pbnRtZW50RW5kVGltZSk7XG5cbiAgICAgIGlmIChjdXJyZW50U3RhcnRUaW1lLmdldFRpbWUoKSA8IGVuZFRpbWUuZ2V0VGltZSgpKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRTdGFydFRpbWUuZ2V0VGltZSgpID4gc3RhcnRUaW1lLmdldFRpbWUoKSA/IGN1cnJlbnRTdGFydFRpbWUgOiBzdGFydFRpbWU7XG4gICAgICAgIGVuZFRpbWUgPSBjdXJyZW50RW5kVGltZS5nZXRUaW1lKCkgPCBlbmRUaW1lLmdldFRpbWUoKSA/IGN1cnJlbnRFbmRUaW1lIDogZW5kVGltZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRpbWVTbG90cyA9IHRoaXMuZ2V0VGltZShzdGFydFRpbWUudG9TdHJpbmcoKSwgZW5kVGltZS50b1N0cmluZygpLCAxNSk7XG4gICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XG5cbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFN0YXJ0VGltZTtcbiAgICAgICAgZW5kVGltZSA9IGN1cnJlbnRFbmRUaW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRpbWVTbG90cyA9IHRoaXMuZ2V0VGltZShzdGFydFRpbWUudG9TdHJpbmcoKSwgZW5kVGltZS50b1N0cmluZygpLCAxNSk7XG4gICAgdGltZVNsb3RzLnNwbGljZSh0aW1lU2xvdHMubGVuZ3RoIC0gMSwgMSk7XG4gICAgdGltZVNsb3RzPy5mb3JFYWNoKHNsb3QgPT4gdGhpcy5ib29rZWRTbG90cy5hZGQoc2xvdCkpO1xuXG4gIH1cblxuICBnZXRUaW1lKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nLCBpbnRlcnZhbE1pbnV0ZXM6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydCk7XG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGVuZCk7XG4gICAgY29uc3Qgc2xvdHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB3aGlsZSAoc3RhcnREYXRlIDw9IGVuZERhdGUpIHtcbiAgICAgIC8vIEZvcm1hdCB0aGUgdGltZSBhcyBuZWVkZWQgKGUuZy4sIFwiMDU6MTUgUE1cIilcbiAgICAgIGxldCBob3VycyA9IHN0YXJ0RGF0ZS5nZXRIb3VycygpO1xuICAgICAgY29uc3QgbWludXRlcyA9IHN0YXJ0RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuXG4gICAgICAvLyBDb252ZXJ0IGhvdXJzIHRvIDEyLWhvdXIgZm9ybWF0IGFuZCBwYWQgd2l0aCAnMCcgaWYgbmVlZGVkXG4gICAgICBob3VycyA9ICgoaG91cnMgKyAxMSkgJSAxMikgKyAxO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gYCR7Zm9ybWF0dGVkSG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWA7XG5cbiAgICAgIHNsb3RzLnB1c2goZm9ybWF0dGVkVGltZSk7XG5cbiAgICAgIC8vIEluY3JlbWVudCB0aW1lIGJ5IHRoZSBpbnRlcnZhbFxuICAgICAgc3RhcnREYXRlLnNldE1pbnV0ZXMoc3RhcnREYXRlLmdldE1pbnV0ZXMoKSArIGludGVydmFsTWludXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNsb3RzO1xuICB9XG5cbiAgZ2VuZXJhdGVUaW1lU2xvdHMoc3RhcnRUaW1lOiBzdHJpbmcsIGVuZFRpbWU6IHN0cmluZykge1xuXG4gICAgdGhpcy5hdmFpbGFibGVUaW1lcyA9IFtdOyAvLyBDbGVhciBwcmV2aW91cyB0aW1lc1xuXG4gICAgaWYgKCFzdGFydFRpbWUgfHwgIWVuZFRpbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIGNvbnN0IFtzdGFydEhvdXIsIHN0YXJ0TWludXRlLCBzdGFydFBlcmlvZF0gPSB0aGlzLnBhcnNlVGltZShzdGFydFRpbWUpO1xuICAgIGNvbnN0IFtlbmRIb3VyLCBlbmRNaW51dGUsIGVuZFBlcmlvZF0gPSB0aGlzLnBhcnNlVGltZShlbmRUaW1lKTtcblxuICAgIGxldCBjdXJyZW50SG91cjogbnVtYmVyID0gc3RhcnRIb3VyO1xuICAgIGxldCBjdXJyZW50TWludXRlOiBudW1iZXIgPSBzdGFydE1pbnV0ZTtcbiAgICBsZXQgY3VycmVudFBlcmlvZCA9IHN0YXJ0UGVyaW9kO1xuXG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91ciA9IHRoaXMucGFkWmVybyhjdXJyZW50SG91ciA9PT0gMCA/IDEyIDogY3VycmVudEhvdXIpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkTWludXRlID0gdGhpcy5wYWRaZXJvKGN1cnJlbnRNaW51dGUpO1xuICAgICAgY29uc3QgdGltZVN0cmluZyA9IGAke2Zvcm1hdHRlZEhvdXJ9OiR7Zm9ybWF0dGVkTWludXRlfSAke2N1cnJlbnRQZXJpb2R9YDtcblxuICAgICAgdGhpcy5hdmFpbGFibGVUaW1lcy5wdXNoKHRpbWVTdHJpbmcpO1xuXG4gICAgICAvLyBJbmNyZW1lbnQgdGltZSBieSAxNSBtaW51dGVzXG4gICAgICBjdXJyZW50TWludXRlICs9IDE1O1xuICAgICAgaWYgKGN1cnJlbnRNaW51dGUgPT09IDYwKSB7XG4gICAgICAgIGN1cnJlbnRNaW51dGUgPSAwO1xuICAgICAgICBjdXJyZW50SG91ciA9IChjdXJyZW50SG91ciAlIDEyKSArIDE7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xuICAgICAgICAgIGN1cnJlbnRQZXJpb2QgPSBjdXJyZW50UGVyaW9kID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB0aGUgbG9vcCB3aGVuIHJlYWNoaW5nIHRoZSBlbmQgdGltZVxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50SG91ciA9PT0gZW5kSG91ciAmJlxuICAgICAgICBjdXJyZW50TWludXRlID09PSBlbmRNaW51dGUgJiZcbiAgICAgICAgY3VycmVudFBlcmlvZCA9PT0gZW5kUGVyaW9kXG4gICAgICApIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZVRpbWVzO1xuICB9XG5cbiAgcGFyc2VUaW1lKHRpbWU6IHN0cmluZyk6IFtudW1iZXIsIG51bWJlciwgc3RyaW5nXSB7XG4gICAgaWYgKCF0aW1lKSB7XG4gICAgICByZXR1cm4gWzAsIDAsICdBTSddOyAvLyBEZWZhdWx0IG9yIGZhbGxiYWNrIHZhbHVlc1xuICAgIH1cblxuICAgIGNvbnN0IFt0aW1lU3RyaW5nLCBwZXJpb2RdID0gdGltZS5zcGxpdChcIiBcIik7XG4gICAgY29uc3QgW2hvdXIsIG1pbnV0ZV0gPSB0aW1lU3RyaW5nLnNwbGl0KFwiOlwiKS5tYXAobnVtID0+IHBhcnNlSW50KG51bSwgMTApKTsgLy8gRW5zdXJlcyBwYXJzZWQgYXMgbnVtYmVyc1xuICAgIHJldHVybiBbaG91ciAlIDEyLCBtaW51dGUsIHBlcmlvZF07XG4gIH1cblxuXG4gIGxvY2F0aW9uRGF0YTogYW55O1xuICBzZWxlY3RlZExvY2F0aW9uOiBzdHJpbmcgPSBcIlwiO1xuICBnZXRBbGxMb2NhdGlvbnMoKSB7XG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsTG9jYXRpb24odGhpcy5idXNpbmVzc0lkLCAxMDAwLCAwKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMubG9jYXRpb25EYXRhID0gcmVzLmRhdGEuZGF0YS5maWx0ZXIoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5zdGF0dXMgPT09ICdBQ1RJVkUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICBgTG9jYXRpb24gaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXG4gICAgICAgICAgICAnQ2xvc2UnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMTUwMFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XG4gIH1cblxuICAvLyBWYXJpYWJsZXNcbiAgZm9ybWF0dGVkRGF0ZTogYW55O1xuICB0aW1lU2xvdHNEYXRhOiBhbnk7XG4gIGZvcm1hdHRlZFRpbWVJbnRlcnZhbHM6IHsgc3RhcnRUaW1lOiBzdHJpbmcgfVtdID0gW107XG5cbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRpbWUgc2xvdHNcbiAgZ2V0VGltZVNsb3RzKCkge1xuICAgIHRoaXMuZm9ybWF0dGVkRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkpO1xuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFRpbWVTbG90cyh0aGlzLnNlbGVjdGVkTG9jYXRpb24sIHRoaXMuZm9ybWF0dGVkRGF0ZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB0aGlzLnRpbWVTbG90c0RhdGEgPSByZXM7XG4gICAgICAgICAgdGhpcy5mb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzID0gdGhpcy50aW1lU2xvdHNEYXRhLm1hcCgoaW50ZXJ2YWw6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIHN0YXJ0VGltZTogaW50ZXJ2YWwuc3RhcnRUaW1lLnNsaWNlKDAsIDUpLCAvLyBHZXQgSEg6TU1cbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJUaW1lU2xvdHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICBgTG9jYXRpb24gaXMgbm90IGNyZWF0ZWQgeWV0IHdpdGggdGhpcyBidXNpbmVzc2AsXG4gICAgICAgICAgICAnQ2xvc2UnLFxuICAgICAgICAgICAgeyBkdXJhdGlvbjogMTUwMCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBmaWx0ZXIgdGltZSBzbG90c1xuICBmaWx0ZXJUaW1lU2xvdHMoKSB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyB0b2RheVxuICAgIGlmIChzZWxlY3RlZERhdGUudG9EYXRlU3RyaW5nKCkgPT09IG5vdy50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cuZ2V0SG91cnMoKSAqIDYwICsgbm93LmdldE1pbnV0ZXMoKTtcblxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdGltZSBzbG90cyB0aGF0IGFyZSBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZVxuICAgICAgdGhpcy5mb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzID0gdGhpcy5mb3JtYXR0ZWRUaW1lSW50ZXJ2YWxzLmZpbHRlcih0aW1lU2xvdCA9PiB7XG4gICAgICAgIGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lU2xvdC5zdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKTtcbiAgICAgICAgY29uc3Qgc2xvdFRpbWUgPSBob3VycyAqIDYwICsgbWludXRlczsgLy8gQ29udmVydCBzbG90IHRpbWUgdG8gdG90YWwgbWludXRlc1xuICAgICAgICByZXR1cm4gc2xvdFRpbWUgPiBjdXJyZW50VGltZTsgLy8gT25seSBzaG93IHNsb3RzIGFmdGVyIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVGaWx0ZXIgPSAoZGF0ZTogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBkYXkgPSBkYXRlPy5nZXREYXkoKTtcbiAgICAvLyBEaXNhYmxlIFN1bmRheXNcbiAgICByZXR1cm4gZGF5ICE9PSAwO1xuICB9O1xuXG4gIHNlbGVjdGVkU2VydmljZXM6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZFN0YWZmOiBzdHJpbmcgPSAnJztcblxuICBDcmVhdGVEYXRhOiBhbnkgPSB7XG4gICAgLy9hcHBvaW50bWVudElkOiBcIlwiLFxuICAgIGJ1c2luZXNzOiB7XG4gICAgICBpZDogXCJcIixcbiAgICAgIG5hbWU6IFwiXCJcbiAgICB9LFxuICAgIGNsaWVudE5hbWU6IFwiXCIsXG4gICAgbW9iaWxlOiBcIlwiLFxuICAgIHNjaGVkdWxlZERhdGU6IG5ldyBEYXRlKCksXG4gICAgc2VydmljZXM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIG5hbWU6IFwiXCJcbiAgICAgIH1cbiAgICBdLFxuICAgIHN0YWZmOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiBcIlwiLFxuICAgICAgICBuYW1lOiBcIlwiXG4gICAgICB9XG4gICAgXSxcbiAgICBsb2NhdGlvbjpcbiAgICB7XG4gICAgICBpZDogXCJcIixcbiAgICAgIG5hbWU6IFwiXCJcbiAgICB9XG4gICAgLFxuICAgIHNjaGVkdWxlZFRpbWU6IFwiXCIsXG4gICAgbWVzc2FnZTogXCJcIlxuICB9XG5cbiAgcHJlcGFyZUNyZWF0ZURhdGEoKSB7XG4gICAgdGhpcy5DcmVhdGVEYXRhLnNlcnZpY2VzID0gW107XG4gICAgdGhpcy5DcmVhdGVEYXRhLnN0YWZmID0gW107XG4gICAgdGhpcy5zZXJ2aWNlRGF0YS5mb3JFYWNoKChzZXJ2aWNlOiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZXMuaW5jbHVkZXMoc2VydmljZS5pZCkpIHtcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLnNlcnZpY2VzLnB1c2goe1xuICAgICAgICAgIGlkOiBzZXJ2aWNlLmlkLFxuICAgICAgICAgIG5hbWU6IHNlcnZpY2UubmFtZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3RhZmZEYXRhLmZvckVhY2goKHN0YWZmOiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RhZmYuaW5jbHVkZXMoc3RhZmYuaWQpKSB7XG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zdGFmZi5wdXNoKHtcbiAgICAgICAgICBpZDogc3RhZmYuaWQsXG4gICAgICAgICAgbmFtZTogc3RhZmYubmFtZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJlcGFyZUxvY2F0aW9uRGF0YSgpIHtcblxuICAgIHRoaXMubG9jYXRpb25EYXRhLmZvckVhY2goKGxvY2F0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkTG9jYXRpb24gPT0gbG9jYXRpb24uaWQpIHtcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9uLmlkID0gbG9jYXRpb24uaWRcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9uLm5hbWUgPSBsb2NhdGlvbi5uYW1lXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNyZWF0ZUxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhdmFpbGFibGVUaW1lczogc3RyaW5nW10gPSBbXTtcblxuICBwYWRaZXJvKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xuICB9XG4gIGlzVGltZUdyZWF0ZXJUaGFuQ3VycmVudCh0aW1lOiBzdHJpbmcsIGN1cnJlbnRIb3VyOiBudW1iZXIsIGN1cnJlbnRNaW51dGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtob3VyLCBtaW51dGVdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xuICAgIHJldHVybiAoaG91ciA+IGN1cnJlbnRIb3VyKSB8fCAoaG91ciA9PT0gY3VycmVudEhvdXIgJiYgbWludXRlID49IGN1cnJlbnRNaW51dGUpO1xuICB9XG5cbiAgY3JlYXRlQXBwb2ludG1lbnQoKSB7XG4gICAgdGhpcy5wcmVwYXJlQ3JlYXRlRGF0YSgpO1xuICAgIHRoaXMucHJlcGFyZUxvY2F0aW9uRGF0YSgpO1xuICAgIHRoaXMuQ3JlYXRlRGF0YS5idXNpbmVzcy5pZCA9IHRoaXMuYnVzaW5lc3NJZDtcbiAgICB0aGlzLkNyZWF0ZURhdGEuYnVzaW5lc3MubmFtZSA9IHRoaXMuYnVzaW5lc3NOYW1lO1xuXG4gICAgaWYgKHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKSB7XG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSA9IG1vbWVudCh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gICAgfVxuICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWRUaW1lID0gdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUudG9Mb3dlckNhc2UoKVxuICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFwcG9pbnRtZW50U2VydmljZS5jcmVhdGVBcHBvaW50bWVudCh0aGlzLkNyZWF0ZURhdGEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpO1xuICAgICAgICB0aGlzLnJlRmlsdGVyRGF0YSgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgYENvbmdyYXR1bGF0aW9ucyB5b3VyIEFwcG9pbnRtZW50IGhhcyBCb29rZWRgLFxuICAgICAgICAgICdDbG9zZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDBcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdGVMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxuICAgICAgICAgIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JgLFxuICAgICAgICAgICdDbG9zZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICApO1xuXG4gIH1cblxuICByZUZpbHRlckRhdGEoKSB7XG4gICAgdGhpcy5DcmVhdGVEYXRhID0ge1xuICAgICAgLy9hcHBvaW50bWVudElkOiBcIlwiLFxuICAgICAgYnVzaW5lc3M6IHtcbiAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgIG5hbWU6IFwiXCJcbiAgICAgIH0sXG4gICAgICBjbGllbnROYW1lOiBcIlwiLFxuICAgICAgbW9iaWxlOiBcIlwiLFxuICAgICAgc2NoZWR1bGVkRGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHNlcnZpY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogXCJcIixcbiAgICAgICAgICBuYW1lOiBcIlwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGFmZjogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IFwiXCIsXG4gICAgICAgICAgbmFtZTogXCJcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgbG9jYXRpb246XG4gICAgICB7XG4gICAgICAgIGlkOiBcIlwiLFxuICAgICAgICBuYW1lOiBcIlwiXG4gICAgICB9XG4gICAgICAsXG4gICAgICBzY2hlZHVsZWRUaW1lOiBcIlwiLFxuICAgICAgbWVzc2FnZTogXCJcIlxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkU3RhZmYgPSAnJ1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lICE9PSAnJyAmJlxuICAgICAgdGhpcy5DcmVhdGVEYXRhLm1vYmlsZSAhPT0gJycgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gIT09ICcnICYmXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSAhPT0gJycgJiZcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWRUaW1lICE9PSAnJ1xuICB9XG59XG4iLCI8ZGl2IFtpZF09XCJkYXRhPy5pZFwiXG4gIFtuZ0NsYXNzXT1cInsnbWVyZ2VOYXZiYXInOiBjYW5NZXJnZU5hdmJhciAmJiBpbmRleCA9PSAxLCAnanVzdGlmeS1jb250ZW50LWJldHdlZW4gZC1mbGV4JzogaXNCb3JkZXJsZXNzSW1hZ2V9XCJcbiAgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBjbGFzcz1cInRvdGFsLWNvbnRhaW5lclwiIHN0eWxlPVwib3ZlcmZsb3cteDogaGlkZGVuO1wiIHNpbXBvSG92ZXJcbiAgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkltYWdlU2VjdGlvblwiPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwicHgtNCBweS01XCIgW25nQ2xhc3NdPVwieydjb2wtbGctNiBjb2wteHhsLTYnOiBpc0JvcmRlcmxlc3NJbWFnZSwgJ3ctMTAwIGNvbC14eGwtOCc6ICFpc0JvcmRlcmxlc3NJbWFnZX1cIlxuICAgIFtpZF09XCJkYXRhPy5pZFwiICNtYWluQ29udGFpbmVyIFtzaW1wb092ZXJsYXldPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCIgW3NpbXBvQm9yZGVyXT1cInN0eWxlcz8uYm9yZGVyXCIgIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNSBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIlxuICAgICAgW3NpbXBvTGF5b3V0XT1cInN0eWxlcz8ubGF5b3V0XCIgW3NpbXBvUG9zaXRpb25MYXlvdXREaXJlY3RpdmVdPVwic3R5bGVzPy5wb3NpdGlvbkxheW91dFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdhbGlnbi1pdGVtcy1zdHJldGNoJzogc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdsZWZ0JyB8fCBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ3JpZ2h0JywgJ2ZsZXgtbGctcm93JzogdHJ1ZSB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGNvbC1zbS04IGNvbC1sZy02XCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlICYmICFpc0JvcmRlcmxlc3NJbWFnZVwiXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIj5cbiAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8uaW1hZ2U/LnVybFwiIFtzaW1wb0ltYWdlRGlyZWN0aXZlXT1cInN0eWxlcz8uaW1hZ2VcIiBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cImNvbnRlbnQ/LmltYWdlPy5wb3NpdGlvblwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxuICAgICAgICAgIFtjbGFzc109XCJkYXRhPy5pZCsoY29udGVudD8uaW1hZ2U/LmlkIHx8ICcnKVwiIGNsYXNzPVwiZC1ibG9jayB3LTEwMCBpbnNpZGVJbWdcIiBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyO1wiXG4gICAgICAgICAgW2FsdF09XCJjb250ZW50Py5pbWFnZT8uYWx0VGV4dFwiIHdpZHRoPVwiNzAwXCIgaGVpZ2h0PVwiNTAwXCIgbG9hZGluZz1cImxhenlcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtMTUgY29udGVudC1zaWRlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydjb2wtbGctMTInOiBpc0JvcmRlcmxlc3NJbWFnZSwgJ2NvbC1sZy02JzogIWlzQm9yZGVybGVzc0ltYWdlfVwiXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9Db250ZW50QWxpZ25tZW50XT1cInN0eWxlcz8uY29udGVudEFsaWdubWVudFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/LmlucHV0VGV4dFwiPlxuICAgICAgICAgIDwhLS0gPGRpdiBbaW5uZXJIVE1MXT1cIml0ZW0udmFsdWUgfCBzYW5pdGl6ZUh0bWxcIiBjbGFzcz1cInRleHQtZWxlbWVudFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmxhYmVsID09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+PC9kaXY+IC0tPlxuICAgICAgICAgICAgPHNpbXBvLXRleHQtZWRpdG9yIFsodmFsdWUpXT1cIml0ZW0udmFsdWVcIiBbZWRpdGFibGVdPVwiZWRpdCB8fCBmYWxzZVwiPjwvc2ltcG8tdGV4dC1lZGl0b3I+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhXCIgY2xhc3M9XCJjYXJkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZF93cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyX2NhcmQgdmlzaWJsZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY29uZC1wYXJ0LWNhcmRcIj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXJzdC1wYXJ0LWNhcmRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pbnB1dFRleHRbMF0ubGFiZWw9PT0gJ0hlYWRpbmcnID8gJ2hlYWRpbmctbGFyZ2UgbGgtMiBtYi0zJyA6ICdib2R5LWxhcmdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIGNsYXNzPVwidGljay1pbWdcIlxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzkzMzk5N2MxNzE4NzkwMzAzMTI3OTA3NTk4YzE2OTYwNjMwNjE5MDBncmVlbl92ZXJpZmllZF9pbWFnZS5wbmdcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJzb21ldGhpbmdcIiAvPlxuXG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmlucHV0VGV4dFswXS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LmFjdGlvbiAmJiBkYXRhPy5hY3Rpb24/LmRpc3BsYXlcIiBjbGFzcz1cImJ1dHRvbi1kaXNwbGF5XCJcbiAgICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzTGF5b3V0XCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGFwcC1idXR0b24tZWxlbWVudCBbYnV0dG9uQ29udGVudF09XCJidXR0b24uY29udGVudFwiIFtidXR0b25TdHlsZV09XCJidXR0b24uc3R5bGVzXCIgW2J1dHRvbklkXT1cImJ1dHRvbi5pZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuZGFpbG9nYm94KGRpYWxvZ0JveClcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIltiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSA8ZGl2IHN0eWxlPVwiIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDUwMHB4O1wiPlxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiAgc3JjPVwiLi4vLi4vYXNzZXRzL2RpdmlkZXIuc3ZnXCIgc3R5bGU9XCJjbGlwLXBhdGg6IHBvbHlnb24oMCA1NSUsIDEwMCUgMCwgMTAwJSAxMDAlLCAwJSAxMDAlKTsgYmFja2dyb3VuZC1jb2xvcjogcmVkO1wiPlxuICA8L2Rpdj4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHlsZXM/LmRldmlkZXI/LmRpc3BsYXlcIj5cbiAgICA8c2ltcG8tc3ZnLWRpdmlkZXIgW2RpdmlkZXJUeXBlXT1cInN0eWxlcz8uZGV2aWRlcj8uZGV2aWRlclR5cGVcIiBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdCAmJiBmYWxzZSB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIlxuICAgICAgW2lzTWVyZ2VkXT1cInN0eWxlcz8ubWVyZ2UgPz8gZmFsc2VcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI0ltYWdlU2VjdGlvbj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMCBjb2wtc20tOCBjb2wtbGctNlwiXG4gICAgW25nU3R5bGVdPVwieyd3aWR0aCc6IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAncmlnaHQnID8gJ2ZpdC1jb250ZW50JyA6ICcnfVwiXG4gICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggIWltcG9ydGFudDtcIiAqbmdJZj1cImNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2UgJiYgaXNCb3JkZXJsZXNzSW1hZ2U7XCJcbiAgICBbc2ltcG9Cb3JkZXJsZXNzXT1cImdldFBvc2l0aW9uTGF5b3V0XCI+XG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIFtzcmNdPVwiY29udGVudD8uaW1hZ2U/LnVybFwiIGNsYXNzPVwiZC1ibG9jayBpbWctZmx1aWQgaC0xMDAgdy0xMDBcIlxuICAgICAgW2FsdF09XCJjb250ZW50Py5pbWFnZT8uYWx0VGV4dFwiIHdpZHRoPVwiNzAwXCIgaGVpZ2h0PVwiNTAwXCIgbG9hZGluZz1cImxhenlcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuPCEtLSBEaWFsb2cgdGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RpYWxvZ0JveCBjbGFzcz1cImRpYWxvZ2JveFwiPlxuICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnQtZm9ybVwiPlxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0LXNpZGVcIj5cbiAgICAgICAgPGgyIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIj5Cb29rIGFuIEFwcG9pbnRtZW50PC9oMj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yaWdodC1zaWRlXCI+XG4gICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGZvcm0+XG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5OYW1lPC9kaXY+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE5hbWVcIiBwYXR0ZXJuPVwiW2EtekEtWiBdKlwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5jbGllbnROYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Vc2VyTmFtZUNoYW5nZSgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TW9iaWxlIE51bWJlcjwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE1vYmlsZSBOdW1iZXJcIlxuICAgICAgICAgICAgICBwYXR0ZXJuPVwiXlswLTldezEwLDE1fSRcIiBtYXhsZW5ndGg9XCIxNVwiIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoa2V5cHJlc3MpPVwicmVzdHJpY3ROb25OdW1lcmljKCRldmVudClcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEubW9iaWxlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPkxvY2F0aW9uPC9kaXY+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImlucHV0U3R5bGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBMb2NhdGlvblwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRMb2NhdGlvblwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvY2F0aW9uKClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9uRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJsb2NhdGlvbi5pZFwiPlxuICAgICAgICAgICAgICAgICAge3sgbG9jYXRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+U2VydmljZTwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU2VydmljZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZXJ2aWNlc1wiIChuZ01vZGVsQ2hhbmdlKT1cImdldEFsbFN0YWZmKClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZURhdGFcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwic2VydmljZS5pZFwiPlxuICAgICAgICAgICAgICAgICAge3sgc2VydmljZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5TdGFmZjwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU3RhZmZcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU3RhZmZcIiAgKG5nTW9kZWxDaGFuZ2UpPVwiZ2V0QXZhaWxhYmxlU2xvdHMoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhZmYgb2Ygc3RhZmZEYXRhXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInN0YWZmLmlkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBzdGFmZi5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5EYXRlPC9kaXY+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRGF0ZVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRGF0ZSgpXCIgW21pbl09XCJtaW5EYXRlXCJcbiAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0SWNvblN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPlRpbWU8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IExvY2F0aW9uXCIgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB0aW1lIG9mIGxvY2F0aW9uVGltaW5nXCIgW3ZhbHVlXT1cInRpbWVcIiBbZGlzYWJsZWRdPVwiYm9va2VkU2xvdHMuaGFzKHRpbWUpXCI+XG4gICAgICAgICAgICAgICAge3sgdGltZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZnVsbC1tZXNzYWdlLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1c2luZXNzLWZpZWxkLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPk1lc3NhZ2U8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTmFtZVwiIHBhdHRlcm49XCJbYS16QS1aIF0qXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLm1lc3NhZ2VcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tc2VjdGlvblwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJib29raW5nLWJ1dHRvblwiIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiIChjbGljayk9XCJjcmVhdGVBcHBvaW50bWVudCgpXCI+XG4gICAgICAgICAgICBCb29rIEFwcG9pbnRtZW50XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
608
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2FwcG9pbnRtZW50LWZvcm0vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWlELE1BQU0sZUFBZSxDQUFDO0FBRTFILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNENBQTRD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d0JBQ2QsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDM0I7OEpBTVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQWlCTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIEJhbm5lclN0eWxlc01vZGVsLCBMYXlPdXRNb2RlbCwgUG9zaXRpb25MYXlvdXRNb2RhbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNpbXBvRWxlbWVudHNNb2R1bGUgfSBmcm9tICcuLy4uLy4uL2VsZW1lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcclxuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xyXG5pbXBvcnQgeyBTaW1wb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnRzL3NpbXBvLWJ1dHRvbi9zaW1wby1idXR0b24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCYW5uZXJDb250ZW50Rml0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Jhbm5lci1jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBCb3JkZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvYm9yZGVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9idXR0b24tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb2x1bW4tZGlyZWN0aXZlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbnRhaW5lckZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250YWluZXItZmlyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IHNpbXBvQ29uZXRlbkFsaWdubWVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWFsaWdubWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBDb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvY29ybmVyLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvRm9vdGVyTGF5b3V0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL2Zvb3Rlci1sYXlvdXQtZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBJbWFnZURpcmVjdGl2ZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9pbWFnZS1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9vdmVybGF5LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3Bvc2l0aW9uLWxheW91dC1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvdGV4dC1iYWNrZ3JvdW5kLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IE9iamVjdFBvc2l0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi9kaXJlY3RpdmUvaW1hZ2UtcG9zaXRpb24uZGlyZWN0aXZlJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgU2ltcG9Db250YWluZXJBbGlnbWVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250YWluZXItYWxpZ25tZW50LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvbG9yRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi9kaXJlY3RpdmUvY29sb3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGV4dFNpemVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmUvdGV4dC1zaXplLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNpbXBvQm9yZGVybGVzc0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXJsZXNzSW1hZ2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2ltcG9Ib3ZlckJvcmRlckRpcmVjdGl2ZSB9IGZyb20gXCIuLi8uLi9kaXJlY3RpdmUvaG92ZXJib3JkZXIuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFNhbml0aXplSHRtbFBpcGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYW5pdGl6ZUh0bWwnO1xyXG5pbXBvcnQgeyBCYW5uZXJDb250ZW50TW9kZWwsIEJhbm5lclNlY3Rpb25Nb2RlbCB9IGZyb20gJy4vYXBwb2ludG1lbnQtZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIsIE1hdFNuYWNrQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXHJcbmltcG9ydCB7IFRleHRFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lbGVtZW50cy90ZXh0LWVkaXRvci90ZXh0LWVkaXRvci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tYXBwb2ludG1lbnQtZm9ybScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxyXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXHJcbiAgICBNYXRHcmlkTGlzdE1vZHVsZSxcclxuICAgIFNpbXBvQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgU2ltcG9Ib3ZlckJvcmRlckRpcmVjdGl2ZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgIE1hdERpYWxvZ01vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0U25hY2tCYXJNb2R1bGUsXHJcbiAgICBUZXh0RWRpdG9yQ29tcG9uZW50LFxyXG5cclxuICAgIC8vZGlyZWN0aXZlXHJcbiAgICBTaW1wb0JvcmRlcmxlc3NEaXJlY3RpdmUsXHJcbiAgICBTaW1wb0NvbnRhaW5lckFsaWdtZW50LFxyXG4gICAgQW5pbWF0aW9uRGlyZWN0aXZlLFxyXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcclxuICAgIEJhbm5lckNvbnRlbnRGaXREaXJlY3RpdmUsXHJcbiAgICBCb3JkZXJEaXJlY3RpdmUsXHJcbiAgICBCdXR0b25EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb2x1bW5EaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBDb250YWluZXJGaXREaXJlY3RpdmUsXHJcbiAgICBzaW1wb0NvbmV0ZW5BbGlnbm1lbnREaXJlY3RpdmUsXHJcbiAgICBDb250ZW50Rml0RGlyZWN0aXZlLFxyXG4gICAgQ29ybmVyRGlyZWN0aXZlLFxyXG4gICAgU2ltcG9Gb290ZXJMYXlvdXREaXJlY3RpdmUsXHJcbiAgICBIb3ZlckRpcmVjdGl2ZSxcclxuICAgIEltYWdlRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcclxuICAgIFBvc2l0aW9uTGF5b3V0RGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICAgVGV4dEJhY2tncm91bmREaXJlY3RpdmVEaXJlY3RpdmUsXHJcbiAgICBPYmplY3RQb3NpdGlvbkRpcmVjdGl2ZSxcclxuICAgIENvbG9yRGlyZWN0aXZlLFxyXG4gICAgVGV4dFNpemVEaXJlY3RpdmUsXHJcbiAgICBTYW5pdGl6ZUh0bWxQaXBlLFxyXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBvaW50bWVudC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXBwb2ludG1lbnQtZm9ybS5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwb2ludG1lbnRGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBkYXRhPzogQmFubmVyU2VjdGlvbk1vZGVsO1xyXG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xyXG4gIGNvbnRlbnQ/OiBCYW5uZXJDb250ZW50TW9kZWw7XHJcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XHJcbiAgc3R5bGVzPzogQmFubmVyU3R5bGVzTW9kZWw7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcclxuICAgIHByaXZhdGUgbWF0RGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGFwcG9pbnRtZW50U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrYmFyOiBNYXRTbmFja0JhclxyXG5cclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmdldFNjcmVlblNpemUoKVxyXG4gIH1cclxuXHJcbiAgc2NyZWVuV2lkdGg6IG51bWJlciA9IDA7XHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzogcmVzaXplXCIsIFtcIiRldmVudFwiXSlcclxuICBnZXRTY3JlZW5TaXplKCkge1xyXG4gICAgdGhpcy5zY3JlZW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gIH1cclxuXHJcblxyXG4gIGJ1c2luZXNzSWQ6IGFueTtcclxuICBidXNpbmVzc05hbWU6IGFueTtcclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQgPSB0aGlzLmRlbGV0ZVxyXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcclxuICAgIGlmICghdGhpcy5zdHlsZXMgfHwgIXRoaXMuY29udGVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5idXNpbmVzc0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJiSWRcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc0lkXCIpLFxyXG4gICAgICB0aGlzLmJ1c2luZXNzTmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYk5hbWVcIikgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidXNpbmVzc05hbWVcIilcclxuXHJcblxyXG4gICAgLy8gdGhpcy5nZXRBbGxTZXJ2aWNlcygpO1xyXG4gICAgLy8gdGhpcy5zdHlsZXMubGF5b3V0LmJhbm5lckltYWdlRGlzcGxheSA9IHRoaXMuY29udGVudC5pbWFnZS5zaG93SW1hZ2U7XHJcbiAgICB0aGlzLmdldEFsbExvY2F0aW9ucygpO1xyXG5cclxuICB9XHJcbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc3R5bGVzPy5sYXlvdXQgfSBhcyBMYXlPdXRNb2RlbDtcclxuICB9XHJcbiAgZ2V0IGdldEp1c3RpZnlDb250ZW50KCkge1xyXG4gICAgcmV0dXJuIFwianVzdGlmeS1jb250ZW50OiBjZW50ZXIgIWltcG9ydGFudDtcIjtcclxuICB9XHJcbiAgZ2V0IGNhbk1lcmdlTmF2YmFyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5tZXJnZTtcclxuICB9XHJcbiAgZ2V0IGlzQm9yZGVybGVzc0ltYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3R5bGVzPy5ib3JkZXJMZXNzSW1hZ2UgJiYgKHRoaXMuc3R5bGVzPy5wb3NpdGlvbkxheW91dC52YWx1ZSA9PSBcImxlZnRcIiB8fCB0aGlzLnN0eWxlcz8ucG9zaXRpb25MYXlvdXQudmFsdWUgPT0gXCJyaWdodFwiKTtcclxuICB9XHJcbiAgZ2V0IGdldFBvc2l0aW9uTGF5b3V0KCkge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LnBvc2l0aW9uTGF5b3V0IH0gYXMgUG9zaXRpb25MYXlvdXRNb2RhbDtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG5cclxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9ldmVudFNlcnZpY2UuZWRpdFNlY3Rpb24uZW1pdCh7IGRhdGE6IHRoaXMuZGF0YSB9KTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG4gIHN0b3BQcm9wYWdhdGlvbihldmVudDogYW55KSB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuZGFpbG9nYm94KHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRGl2RWxlbWVudD4pOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuc2NyZWVuV2lkdGggPiA0NzUpIHtcclxuICAgICAgdGhpcy5tYXREaWFsb2cub3Blbih0ZW1wbGF0ZSxcclxuICAgICAgICAvLyAge3dpZHRoOic1MDBweCd9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1hdERpYWxvZy5vcGVuKHRlbXBsYXRlLFxyXG4gICAgICAgICB7ICB3aWR0aDogJzEwMHZ3JywgLy8gRnVsbCB2aWV3cG9ydCB3aWR0aFxyXG4gICAgICAgICAgaGVpZ2h0OiAnMTAwdmgnLCAvLyBGdWxsIHZpZXdwb3J0IGhlaWdodFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLm1hdERpYWxvZy5jbG9zZUFsbCgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9uRm9jdXMoKSB7XHJcbiAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmVzdHJpY3ROb25OdW1lcmljKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBjaGFyQ29kZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgaWYgKGNoYXJDb2RlICE9IDApIHtcclxuICAgICAgLy8gQWxsb3cgb25seSBudW1iZXJzXHJcbiAgICAgIGlmIChjaGFyQ29kZSA8IDQ4IHx8IGNoYXJDb2RlID4gNTcpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Vc2VyTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eW2EtekEtWlxcc10qJC87XHJcbiAgICBpZiAoIXJlZ2V4LnRlc3QodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdmFsdWUucmVwbGFjZSgvW15hLXpBLVpcXHNdL2csICcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lID0gdGhpcy50b1RpdGxlQ2FzZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcd1xcUyovZywgZnVuY3Rpb24gKHR4dCkge1xyXG4gICAgICByZXR1cm4gdHh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXJ2aWNlRGF0YTogYW55O1xyXG4gIHN0YWZmRGF0YTogYW55O1xyXG5cclxuICBjaGFuZ2VMb2NhdGlvbigpIHtcclxuICAgIHRoaXMuZ2V0QWxsU2VydmljZXMoKTtcclxuICAgIHRoaXMuZ2V0QWxsU3RhZmYoKVxyXG4gICAgdGhpcy51cGRhdGVMb2NhdGlvblRpbWluZygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTG9jYXRpb25UaW1pbmcoKSB7XHJcbiAgICB0aGlzLmxvY2F0aW9uVGltaW5nID0gW107XHJcbiAgICBjb25zdCBkYXkgPSB0aGlzLmdldERheSgpO1xyXG4gICAgZm9yIChsZXQgbG9jYXRpb24gb2YgdGhpcy5sb2NhdGlvbkRhdGEpIHtcclxuICAgICAgaWYgKGxvY2F0aW9uLmlkID09PSB0aGlzLnNlbGVjdGVkTG9jYXRpb24pIHtcclxuICAgICAgICBsZXQgZGF0YSA9IGxvY2F0aW9uLnN0b3JlVGltaW5nc1tkYXkudG9VcHBlckNhc2UoKV07XHJcbiAgICAgICAgaWYgKCFkYXRhLmRheVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbignT3BwcyBzaG9wIGlzIGNsb3NlZCBvbiBzZWxlY3RlZCBkYXRlJywgJ2Nsb3NlJywge2R1cmF0aW9uOiAyMDAwfSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9jYXRpb25UaW1pbmcgPSB0aGlzLmdlbmVyYXRlVGltZVNsb3RzKGRhdGEuc3RhcnRUaW1lLCBkYXRhLmVuZFRpbWUpIHx8IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0RGF5KCkge1xyXG4gICAgY29uc3QgZGF5c09mV2VlayA9IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdO1xyXG4gICAgcmV0dXJuIGRheXNPZldlZWtbdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUuZ2V0RGF5KCldO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2VydmljZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMgPSAnJ1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsU2VydmljZSh0aGlzLmJ1c2luZXNzSWQsIDEwMDAsIDAsIHRoaXMuc2VsZWN0ZWRMb2NhdGlvbikuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzLmRhdGEuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyBGaWx0ZXIgc2VydmljZXMgdG8gb25seSBpbmNsdWRlIHRob3NlIHdpdGggc3RhdHVzICdBQ1RJVkUnXHJcbiAgICAgICAgICB0aGlzLnNlcnZpY2VEYXRhID0gcmVzLmRhdGEuZGF0YS5maWx0ZXIoKHNlcnZpY2U6IGFueSkgPT4gc2VydmljZS5zdGF0dXMgPT09ICdBQ1RJVkUnKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgICAgYE5vIGFjdGl2ZSBzZXJ2aWNlcyBhdmFpbGFibGUgZm9yIHRoaXMgYnVzaW5lc3MuYCxcclxuICAgICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAxNTAwXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBTZXJ2aWNlIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU3RhZmYoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RhZmYgPSAnJ1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUgPSAnJ1xyXG4gICAgdGhpcy5nZXRBdmFpbGFibGVTbG90cygpO1xyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QWxsU3RhZmZCeUxvY2F0aW9uKHRoaXMuYnVzaW5lc3NJZCwgMTAwMCwgMCwgdGhpcy5zZWxlY3RlZExvY2F0aW9uLCB0aGlzLnNlbGVjdGVkU2VydmljZXMpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gRmlsdGVyIHNlcnZpY2VzIHRvIG9ubHkgaW5jbHVkZSB0aG9zZSB3aXRoIHN0YXR1cyAnQUNUSVZFJ1xyXG4gICAgICAgICAgdGhpcy5zdGFmZkRhdGEgPSByZXMuZGF0YS5kYXRhLmZpbHRlcigoc3RhZmY6IGFueSkgPT4gc3RhZmYuc3RhdHVzID09PSAnQUNUSVZFJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc3RhZmZEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgICBgTm8gYWN0aXZlIHN0YWZmIGF2YWlsYWJsZSBmb3IgdGhpcyBidXNpbmVzcy5gLFxyXG4gICAgICAgICAgICAgICdDbG9zZScsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgYFN0YWZmIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbWluRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgYm9va2VkU2xvdHMgPSBuZXcgU2V0KCk7XHJcbiAgbG9jYXRpb25UaW1pbmc6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNoYW5nZURhdGUoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUxvY2F0aW9uVGltaW5nKCk7XHJcbiAgICB0aGlzLmdldEF2YWlsYWJsZVNsb3RzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBdmFpbGFibGVTbG90cygpIHtcclxuICAgIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KClcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBcImxvY2F0aW9uSWRcIjogdGhpcy5zZWxlY3RlZExvY2F0aW9uLFxyXG4gICAgICBcInNlcnZpY2VJZFwiOiB0aGlzLnNlbGVjdGVkU2VydmljZXMsXHJcbiAgICAgIFwic3RhZmZJZFwiOiB0aGlzLnNlbGVjdGVkU3RhZmYsXHJcbiAgICAgIFwiYnVzaW5lc3NJZFwiOiB0aGlzLmJ1c2luZXNzSWQsXHJcbiAgICAgIFwiYXBwb2ludG1lbnREYXRlXCI6IHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBvaW50bWVudFNlcnZpY2UuZ2V0QXZhaWxhYmxlU2xvdHMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyBsZXQgc2VsZWN0ZWREYXRlID0gbW9tZW50KHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlKS5mb3JtYXQoJ0RELU1NLVlZWVknKTs7XHJcbiAgICAgIC8vIGZvciAobGV0IHN0YWZmIG9mIHJlcy5kYXRhKSB7XHJcbiAgICAgIC8vICAgaWYoIXN0YWZmLmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSl7XHJcbiAgICAgIC8vICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmIChzdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBhcHBwb2ludG1lbnQgb2Ygc3RhZmY/LmJvb2tlZFNsb3RzPy5bc2VsZWN0ZWREYXRlXSkge1xyXG4gICAgICAvLyAgICAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoYXBwcG9pbnRtZW50LmFwcG9pbnRtZW50U3RhcnRUaW1lLCBhcHBwb2ludG1lbnQuYXBwb2ludG1lbnRFbmRUaW1lLCAxNSk7XHJcbiAgICAgIC8vICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAvLyAgICAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcbiAgICAgIC8vICAgICAgIC8vIHRoaXMuYm9va2VkU2xvdHMgPSBuZXcgU2V0KHRpbWVTbG90cyk7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIHRoaXMuZ2V0Qm9va2VkU2xvdHMocmVzKTtcclxuICAgICAgdGhpcy5nZXRCb29rZWRTbG90cyhyZXMpO1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBnZXRCb29rZWRTbG90cyhyZXM6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG1vbWVudCh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XHJcblxyXG4gICAgbGV0IHNsb3RzOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgc3RhZmYgb2YgcmVzLmRhdGEpIHtcclxuICAgICAgaWYgKCFzdGFmZi5ib29rZWRTbG90cz8uW3NlbGVjdGVkRGF0ZV0pIHtcclxuICAgICAgICB0aGlzLmJvb2tlZFNsb3RzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2xvdHMucHVzaCguLi5zdGFmZj8uYm9va2VkU2xvdHM/LltzZWxlY3RlZERhdGVdKTtcclxuICAgIH1cclxuXHJcbiAgICBzbG90cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUoYS5hcHBvaW50bWVudFN0YXJ0VGltZSkuZ2V0VGltZSgpO1xyXG4gICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKGIuYXBwb2ludG1lbnRTdGFydFRpbWUpLmdldFRpbWUoKTtcclxuICAgICAgcmV0dXJuIGRhdGVBIC0gZGF0ZUI7IC8vIEFzY2VuZGluZyBvcmRlclxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIGxldCBzdGFydFRpbWU6IERhdGUgPSBuZXcgRGF0ZShzbG90c1swXS5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICBsZXQgZW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKHNsb3RzWzBdLmFwcG9pbnRtZW50RW5kVGltZSk7XHJcblxyXG4gICAgZm9yIChsZXQgYXBwcG9pbnRtZW50IG9mIHNsb3RzKSB7XHJcblxyXG4gICAgICBsZXQgY3VycmVudFN0YXJ0VGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudFN0YXJ0VGltZSk7XHJcbiAgICAgIGxldCBjdXJyZW50RW5kVGltZTogRGF0ZSA9IG5ldyBEYXRlKGFwcHBvaW50bWVudC5hcHBvaW50bWVudEVuZFRpbWUpO1xyXG5cclxuICAgICAgaWYgKGN1cnJlbnRTdGFydFRpbWUuZ2V0VGltZSgpIDwgZW5kVGltZS5nZXRUaW1lKCkpIHtcclxuICAgICAgICBzdGFydFRpbWUgPSBjdXJyZW50U3RhcnRUaW1lLmdldFRpbWUoKSA+IHN0YXJ0VGltZS5nZXRUaW1lKCkgPyBjdXJyZW50U3RhcnRUaW1lIDogc3RhcnRUaW1lO1xyXG4gICAgICAgIGVuZFRpbWUgPSBjdXJyZW50RW5kVGltZS5nZXRUaW1lKCkgPCBlbmRUaW1lLmdldFRpbWUoKSA/IGN1cnJlbnRFbmRUaW1lIDogZW5kVGltZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCksIGVuZFRpbWUudG9TdHJpbmcoKSwgMTUpO1xyXG4gICAgICAgIHRpbWVTbG90cy5zcGxpY2UodGltZVNsb3RzLmxlbmd0aCAtIDEsIDEpO1xyXG4gICAgICAgIHRpbWVTbG90cz8uZm9yRWFjaChzbG90ID0+IHRoaXMuYm9va2VkU2xvdHMuYWRkKHNsb3QpKTtcclxuXHJcbiAgICAgICAgc3RhcnRUaW1lID0gY3VycmVudFN0YXJ0VGltZTtcclxuICAgICAgICBlbmRUaW1lID0gY3VycmVudEVuZFRpbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aW1lU2xvdHMgPSB0aGlzLmdldFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCksIGVuZFRpbWUudG9TdHJpbmcoKSwgMTUpO1xyXG4gICAgdGltZVNsb3RzLnNwbGljZSh0aW1lU2xvdHMubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB0aW1lU2xvdHM/LmZvckVhY2goc2xvdCA9PiB0aGlzLmJvb2tlZFNsb3RzLmFkZChzbG90KSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0VGltZShzdGFydDogc3RyaW5nLCBlbmQ6IHN0cmluZywgaW50ZXJ2YWxNaW51dGVzOiBudW1iZXIpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydCk7XHJcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoZW5kKTtcclxuICAgIGNvbnN0IHNsb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHdoaWxlIChzdGFydERhdGUgPD0gZW5kRGF0ZSkge1xyXG4gICAgICAvLyBGb3JtYXQgdGhlIHRpbWUgYXMgbmVlZGVkIChlLmcuLCBcIjA1OjE1IFBNXCIpXHJcbiAgICAgIGxldCBob3VycyA9IHN0YXJ0RGF0ZS5nZXRIb3VycygpO1xyXG4gICAgICBjb25zdCBtaW51dGVzID0gc3RhcnREYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgY29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcclxuXHJcbiAgICAgIC8vIENvbnZlcnQgaG91cnMgdG8gMTItaG91ciBmb3JtYXQgYW5kIHBhZCB3aXRoICcwJyBpZiBuZWVkZWRcclxuICAgICAgaG91cnMgPSAoKGhvdXJzICsgMTEpICUgMTIpICsgMTtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBgJHtmb3JtYXR0ZWRIb3Vyc306JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHtwZXJpb2R9YDtcclxuXHJcbiAgICAgIHNsb3RzLnB1c2goZm9ybWF0dGVkVGltZSk7XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGltZSBieSB0aGUgaW50ZXJ2YWxcclxuICAgICAgc3RhcnREYXRlLnNldE1pbnV0ZXMoc3RhcnREYXRlLmdldE1pbnV0ZXMoKSArIGludGVydmFsTWludXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNsb3RzO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVUaW1lU2xvdHMoc3RhcnRUaW1lOiBzdHJpbmcsIGVuZFRpbWU6IHN0cmluZykge1xyXG5cclxuICAgIHRoaXMuYXZhaWxhYmxlVGltZXMgPSBbXTsgLy8gQ2xlYXIgcHJldmlvdXMgdGltZXNcclxuXHJcbiAgICBpZiAoIXN0YXJ0VGltZSB8fCAhZW5kVGltZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IFtzdGFydEhvdXIsIHN0YXJ0TWludXRlLCBzdGFydFBlcmlvZF0gPSB0aGlzLnBhcnNlVGltZShzdGFydFRpbWUpO1xyXG4gICAgY29uc3QgW2VuZEhvdXIsIGVuZE1pbnV0ZSwgZW5kUGVyaW9kXSA9IHRoaXMucGFyc2VUaW1lKGVuZFRpbWUpO1xyXG5cclxuICAgIGxldCBjdXJyZW50SG91cjogbnVtYmVyID0gc3RhcnRIb3VyO1xyXG4gICAgbGV0IGN1cnJlbnRNaW51dGU6IG51bWJlciA9IHN0YXJ0TWludXRlO1xyXG4gICAgbGV0IGN1cnJlbnRQZXJpb2QgPSBzdGFydFBlcmlvZDtcclxuXHJcblxyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgY29uc3QgZm9ybWF0dGVkSG91ciA9IHRoaXMucGFkWmVybyhjdXJyZW50SG91ciA9PT0gMCA/IDEyIDogY3VycmVudEhvdXIpO1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRNaW51dGUgPSB0aGlzLnBhZFplcm8oY3VycmVudE1pbnV0ZSk7XHJcbiAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtmb3JtYXR0ZWRIb3VyfToke2Zvcm1hdHRlZE1pbnV0ZX0gJHtjdXJyZW50UGVyaW9kfWA7XHJcblxyXG4gICAgICB0aGlzLmF2YWlsYWJsZVRpbWVzLnB1c2godGltZVN0cmluZyk7XHJcblxyXG4gICAgICAvLyBJbmNyZW1lbnQgdGltZSBieSAxNSBtaW51dGVzXHJcbiAgICAgIGN1cnJlbnRNaW51dGUgKz0gMTU7XHJcbiAgICAgIGlmIChjdXJyZW50TWludXRlID09PSA2MCkge1xyXG4gICAgICAgIGN1cnJlbnRNaW51dGUgPSAwO1xyXG4gICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICUgMTIpICsgMTtcclxuXHJcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAxMikge1xyXG4gICAgICAgICAgY3VycmVudFBlcmlvZCA9IGN1cnJlbnRQZXJpb2QgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFN0b3AgdGhlIGxvb3Agd2hlbiByZWFjaGluZyB0aGUgZW5kIHRpbWVcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGN1cnJlbnRIb3VyID09PSBlbmRIb3VyICYmXHJcbiAgICAgICAgY3VycmVudE1pbnV0ZSA9PT0gZW5kTWludXRlICYmXHJcbiAgICAgICAgY3VycmVudFBlcmlvZCA9PT0gZW5kUGVyaW9kXHJcbiAgICAgICkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hdmFpbGFibGVUaW1lcztcclxuICB9XHJcblxyXG4gIHBhcnNlVGltZSh0aW1lOiBzdHJpbmcpOiBbbnVtYmVyLCBudW1iZXIsIHN0cmluZ10ge1xyXG4gICAgaWYgKCF0aW1lKSB7XHJcbiAgICAgIHJldHVybiBbMCwgMCwgJ0FNJ107IC8vIERlZmF1bHQgb3IgZmFsbGJhY2sgdmFsdWVzXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgW3RpbWVTdHJpbmcsIHBlcmlvZF0gPSB0aW1lLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IFtob3VyLCBtaW51dGVdID0gdGltZVN0cmluZy5zcGxpdChcIjpcIikubWFwKG51bSA9PiBwYXJzZUludChudW0sIDEwKSk7IC8vIEVuc3VyZXMgcGFyc2VkIGFzIG51bWJlcnNcclxuICAgIHJldHVybiBbaG91ciAlIDEyLCBtaW51dGUsIHBlcmlvZF07XHJcbiAgfVxyXG5cclxuXHJcbiAgbG9jYXRpb25EYXRhOiBhbnk7XHJcbiAgc2VsZWN0ZWRMb2NhdGlvbjogc3RyaW5nID0gXCJcIjtcclxuICBnZXRBbGxMb2NhdGlvbnMoKSB7XHJcbiAgICB0aGlzLmFwcG9pbnRtZW50U2VydmljZS5nZXRBbGxMb2NhdGlvbih0aGlzLmJ1c2luZXNzSWQsIDEwMDAsIDApLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkRhdGEgPSByZXMuZGF0YS5kYXRhLmZpbHRlcigoc2VydmljZTogYW55KSA9PiBzZXJ2aWNlLnN0YXR1cyA9PT0gJ0FDVElWRScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgICAgYExvY2F0aW9uIGlzIG5vdCBjcmVhdGVkIHlldCB3aXRoIHRoaXMgYnVzaW5lc3NgLFxyXG4gICAgICAgICAgICAnQ2xvc2UnLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICB9XHJcblxyXG4gIC8vIFZhcmlhYmxlc1xyXG4gIGZvcm1hdHRlZERhdGU6IGFueTtcclxuICB0aW1lU2xvdHNEYXRhOiBhbnk7XHJcbiAgZm9ybWF0dGVkVGltZUludGVydmFsczogeyBzdGFydFRpbWU6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IHRpbWUgc2xvdHNcclxuICBnZXRUaW1lU2xvdHMoKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZERhdGUgPSB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpKTtcclxuICAgIHRoaXMuYXBwb2ludG1lbnRTZXJ2aWNlLmdldEFsbFRpbWVTbG90cyh0aGlzLnNlbGVjdGVkTG9jYXRpb24sIHRoaXMuZm9ybWF0dGVkRGF0ZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnRpbWVTbG90c0RhdGEgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMgPSB0aGlzLnRpbWVTbG90c0RhdGEubWFwKChpbnRlcnZhbDogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBzdGFydFRpbWU6IGludGVydmFsLnN0YXJ0VGltZS5zbGljZSgwLCA1KSwgLy8gR2V0IEhIOk1NXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclRpbWVTbG90cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyLm9wZW4oXHJcbiAgICAgICAgICAgIGBMb2NhdGlvbiBpcyBub3QgY3JlYXRlZCB5ZXQgd2l0aCB0aGlzIGJ1c2luZXNzYCxcclxuICAgICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgICAgeyBkdXJhdGlvbjogMTUwMCB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBmaWx0ZXIgdGltZSBzbG90c1xyXG4gIGZpbHRlclRpbWVTbG90cygpIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBzZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkRGF0ZSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgdG9kYXlcclxuICAgIGlmIChzZWxlY3RlZERhdGUudG9EYXRlU3RyaW5nKCkgPT09IG5vdy50b0RhdGVTdHJpbmcoKSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdy5nZXRIb3VycygpICogNjAgKyBub3cuZ2V0TWludXRlcygpO1xyXG5cclxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdGltZSBzbG90cyB0aGF0IGFyZSBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMgPSB0aGlzLmZvcm1hdHRlZFRpbWVJbnRlcnZhbHMuZmlsdGVyKHRpbWVTbG90ID0+IHtcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZVNsb3Quc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcik7XHJcbiAgICAgICAgY29uc3Qgc2xvdFRpbWUgPSBob3VycyAqIDYwICsgbWludXRlczsgLy8gQ29udmVydCBzbG90IHRpbWUgdG8gdG90YWwgbWludXRlc1xyXG4gICAgICAgIHJldHVybiBzbG90VGltZSA+IGN1cnJlbnRUaW1lOyAvLyBPbmx5IHNob3cgc2xvdHMgYWZ0ZXIgdGhlIGN1cnJlbnQgdGltZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGVGaWx0ZXIgPSAoZGF0ZTogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGRheSA9IGRhdGU/LmdldERheSgpO1xyXG4gICAgLy8gRGlzYWJsZSBTdW5kYXlzXHJcbiAgICByZXR1cm4gZGF5ICE9PSAwO1xyXG4gIH07XHJcblxyXG4gIHNlbGVjdGVkU2VydmljZXM6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkU3RhZmY6IHN0cmluZyA9ICcnO1xyXG5cclxuICBDcmVhdGVEYXRhOiBhbnkgPSB7XHJcbiAgICAvL2FwcG9pbnRtZW50SWQ6IFwiXCIsXHJcbiAgICBidXNpbmVzczoge1xyXG4gICAgICBpZDogXCJcIixcclxuICAgICAgbmFtZTogXCJcIlxyXG4gICAgfSxcclxuICAgIGNsaWVudE5hbWU6IFwiXCIsXHJcbiAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICBzY2hlZHVsZWREYXRlOiBuZXcgRGF0ZSgpLFxyXG4gICAgc2VydmljZXM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgIG5hbWU6IFwiXCJcclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIHN0YWZmOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICBsb2NhdGlvbjpcclxuICAgIHtcclxuICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgIG5hbWU6IFwiXCJcclxuICAgIH1cclxuICAgICxcclxuICAgIHNjaGVkdWxlZFRpbWU6IFwiXCIsXHJcbiAgICBtZXNzYWdlOiBcIlwiXHJcbiAgfVxyXG5cclxuICBwcmVwYXJlQ3JlYXRlRGF0YSgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRGF0YS5zZXJ2aWNlcyA9IFtdO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnN0YWZmID0gW107XHJcbiAgICB0aGlzLnNlcnZpY2VEYXRhLmZvckVhY2goKHNlcnZpY2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2VzLmluY2x1ZGVzKHNlcnZpY2UuaWQpKSB7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLnNlcnZpY2VzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IHNlcnZpY2UuaWQsXHJcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWVcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3RhZmZEYXRhLmZvckVhY2goKHN0YWZmOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGFmZi5pbmNsdWRlcyhzdGFmZi5pZCkpIHtcclxuICAgICAgICB0aGlzLkNyZWF0ZURhdGEuc3RhZmYucHVzaCh7XHJcbiAgICAgICAgICBpZDogc3RhZmYuaWQsXHJcbiAgICAgICAgICBuYW1lOiBzdGFmZi5uYW1lXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcmVwYXJlTG9jYXRpb25EYXRhKCkge1xyXG5cclxuICAgIHRoaXMubG9jYXRpb25EYXRhLmZvckVhY2goKGxvY2F0aW9uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMb2NhdGlvbiA9PSBsb2NhdGlvbi5pZCkge1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlRGF0YS5sb2NhdGlvbi5pZCA9IGxvY2F0aW9uLmlkXHJcbiAgICAgICAgdGhpcy5DcmVhdGVEYXRhLmxvY2F0aW9uLm5hbWUgPSBsb2NhdGlvbi5uYW1lXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjcmVhdGVMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhdmFpbGFibGVUaW1lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcGFkWmVybyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xyXG4gIH1cclxuICBpc1RpbWVHcmVhdGVyVGhhbkN1cnJlbnQodGltZTogc3RyaW5nLCBjdXJyZW50SG91cjogbnVtYmVyLCBjdXJyZW50TWludXRlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFtob3VyLCBtaW51dGVdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChob3VyID4gY3VycmVudEhvdXIpIHx8IChob3VyID09PSBjdXJyZW50SG91ciAmJiBtaW51dGUgPj0gY3VycmVudE1pbnV0ZSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMucHJlcGFyZUNyZWF0ZURhdGEoKTtcclxuICAgIHRoaXMucHJlcGFyZUxvY2F0aW9uRGF0YSgpO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLmlkID0gdGhpcy5idXNpbmVzc0lkO1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhLmJ1c2luZXNzLm5hbWUgPSB0aGlzLmJ1c2luZXNzTmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpIHtcclxuICAgICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUgPSBtb21lbnQodGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZERhdGUpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5DcmVhdGVEYXRhLnNjaGVkdWxlZFRpbWUgPSB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZS50b0xvd2VyQ2FzZSgpXHJcbiAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFwcG9pbnRtZW50U2VydmljZS5jcmVhdGVBcHBvaW50bWVudCh0aGlzLkNyZWF0ZURhdGEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICAgICAgICB0aGlzLnJlRmlsdGVyRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhci5vcGVuKFxyXG4gICAgICAgICAgYENvbmdyYXR1bGF0aW9ucyB5b3VyIEFwcG9pbnRtZW50IGhhcyBCb29rZWRgLFxyXG4gICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDMwMDBcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXIub3BlbihcclxuICAgICAgICAgIGBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JgLFxyXG4gICAgICAgICAgJ0Nsb3NlJyxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDE1MDBcclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgcmVGaWx0ZXJEYXRhKCkge1xyXG4gICAgdGhpcy5DcmVhdGVEYXRhID0ge1xyXG4gICAgICAvL2FwcG9pbnRtZW50SWQ6IFwiXCIsXHJcbiAgICAgIGJ1c2luZXNzOiB7XHJcbiAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICB9LFxyXG4gICAgICBjbGllbnROYW1lOiBcIlwiLFxyXG4gICAgICBtb2JpbGU6IFwiXCIsXHJcbiAgICAgIHNjaGVkdWxlZERhdGU6IG5ldyBEYXRlKCksXHJcbiAgICAgIHNlcnZpY2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6IFwiXCIsXHJcbiAgICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICBzdGFmZjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlkOiBcIlwiLFxyXG4gICAgICAgICAgbmFtZTogXCJcIlxyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgbG9jYXRpb246XHJcbiAgICAgIHtcclxuICAgICAgICBpZDogXCJcIixcclxuICAgICAgICBuYW1lOiBcIlwiXHJcbiAgICAgIH1cclxuICAgICAgLFxyXG4gICAgICBzY2hlZHVsZWRUaW1lOiBcIlwiLFxyXG4gICAgICBtZXNzYWdlOiBcIlwiXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gPSAnJztcclxuICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlcyA9ICcnO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0YWZmID0gJydcclxuICB9XHJcblxyXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQ3JlYXRlRGF0YS5jbGllbnROYW1lICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEubW9iaWxlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VydmljZXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb24gIT09ICcnICYmXHJcbiAgICAgIHRoaXMuQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlICE9PSAnJyAmJlxyXG4gICAgICB0aGlzLkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZSAhPT0gJydcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbaWRdPVwiZGF0YT8uaWRcIlxyXG4gIFtuZ0NsYXNzXT1cInsnbWVyZ2VOYXZiYXInOiBjYW5NZXJnZU5hdmJhciAmJiBpbmRleCA9PSAxLCAnanVzdGlmeS1jb250ZW50LWJldHdlZW4gZC1mbGV4JzogaXNCb3JkZXJsZXNzSW1hZ2V9XCJcclxuICBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIGNsYXNzPVwidG90YWwtY29udGFpbmVyXCIgc3R5bGU9XCJvdmVyZmxvdy14OiBoaWRkZW47XCIgc2ltcG9Ib3ZlclxyXG4gIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkltYWdlU2VjdGlvblwiPjwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgY2xhc3M9XCJweC00IHB5LTVcIiBbbmdDbGFzc109XCJ7J2NvbC1sZy02IGNvbC14eGwtNic6IGlzQm9yZGVybGVzc0ltYWdlLCAndy0xMDAgY29sLXh4bC04JzogIWlzQm9yZGVybGVzc0ltYWdlfVwiXHJcbiAgICBbaWRdPVwiZGF0YT8uaWRcIiAjbWFpbkNvbnRhaW5lciBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0JvcmRlcl09XCJzdHlsZXM/LmJvcmRlclwiICBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGctNSBqdXN0aWZ5LWNvbnRlbnQtc3RhcnRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9BbmltYXRpb25dPVwic3R5bGVzPy5hbmltYXRpb25cIlxyXG4gICAgICBbc2ltcG9MYXlvdXRdPVwic3R5bGVzPy5sYXlvdXRcIiBbc2ltcG9Qb3NpdGlvbkxheW91dERpcmVjdGl2ZV09XCJzdHlsZXM/LnBvc2l0aW9uTGF5b3V0XCJcclxuICAgICAgW25nQ2xhc3NdPVwieyAnYWxpZ24taXRlbXMtc3RyZXRjaCc6IHN0eWxlcz8ucG9zaXRpb25MYXlvdXQ/LnZhbHVlID09PSAnbGVmdCcgfHwgc3R5bGVzPy5wb3NpdGlvbkxheW91dD8udmFsdWUgPT09ICdyaWdodCcsICdmbGV4LWxnLXJvdyc6IHRydWUgfVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGNvbC1zbS04IGNvbC1sZy02XCIgKm5nSWY9XCJjb250ZW50Py5pbWFnZT8uc2hvd0ltYWdlICYmICFpc0JvcmRlcmxlc3NJbWFnZVwiXHJcbiAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbnRlbnQ/LmltYWdlPy51cmxcIiBbc2ltcG9JbWFnZURpcmVjdGl2ZV09XCJzdHlsZXM/LmltYWdlXCIgW2lkXT1cImRhdGE/LmlkXCJcclxuICAgICAgICAgIFtzaW1wb09iamVjdFBvc2l0aW9uXT1cImNvbnRlbnQ/LmltYWdlPy5wb3NpdGlvblwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxyXG4gICAgICAgICAgW2NsYXNzXT1cImRhdGE/LmlkKyhjb250ZW50Py5pbWFnZT8uaWQgfHwgJycpXCIgY2xhc3M9XCJkLWJsb2NrIHctMTAwIGluc2lkZUltZ1wiIHN0eWxlPVwib2JqZWN0LWZpdDogY292ZXI7XCJcclxuICAgICAgICAgIFthbHRdPVwiY29udGVudD8uaW1hZ2U/LmFsdFRleHRcIiB3aWR0aD1cIjcwMFwiIGhlaWdodD1cIjUwMFwiIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC0xNSBjb250ZW50LXNpZGVcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnY29sLWxnLTEyJzogaXNCb3JkZXJsZXNzSW1hZ2UsICdjb2wtbGctNic6ICFpc0JvcmRlcmxlc3NJbWFnZX1cIlxyXG4gICAgICAgIFtzaW1wb0NvbnRhaW5lckFsaWdubWVudF09XCJzdHlsZXNMYXlvdXRcIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9Db250ZW50QWxpZ25tZW50XT1cInN0eWxlcz8uY29udGVudEFsaWdubWVudFwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8uaW5wdXRUZXh0XCI+XHJcbiAgICAgICAgICA8IS0tIDxkaXYgW2lubmVySFRNTF09XCJpdGVtLnZhbHVlIHwgc2FuaXRpemVIdG1sXCIgY2xhc3M9XCJ0ZXh0LWVsZW1lbnRcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmxhYmVsID09PSAnSGVhZGluZycgPyAnaGVhZGluZy1sYXJnZSBsaC0yIG1iLTMnIDogJ2JvZHktbGFyZ2UnXCI+PC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgWyh2YWx1ZSldPVwiaXRlbS52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnRlbnQ/Lmxpc3RJdGVtPy5kYXRhXCIgY2xhc3M9XCJjYXJkZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkX3dyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9jYXJkIHZpc2libGVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Vjb25kLXBhcnQtY2FyZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpcnN0LXBhcnQtY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uaW5wdXRUZXh0WzBdLmxhYmVsPT09ICdIZWFkaW5nJyA/ICdoZWFkaW5nLWxhcmdlIGxoLTIgbWItMycgOiAnYm9keS1sYXJnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIGNsYXNzPVwidGljay1pbWdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNyYz1cImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vcHJvZC1pbWFnZXMvOTMzOTk3YzE3MTg3OTAzMDMxMjc5MDc1OThjMTY5NjA2MzA2MTkwMGdyZWVuX3ZlcmlmaWVkX2ltYWdlLnBuZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwic29tZXRoaW5nXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uaW5wdXRUZXh0WzBdLnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YT8uYWN0aW9uICYmIGRhdGE/LmFjdGlvbj8uZGlzcGxheVwiIGNsYXNzPVwiYnV0dG9uLWRpc3BsYXlcIlxyXG4gICAgICAgICAgW3NpbXBvQ29udGFpbmVyQWxpZ25tZW50XT1cInN0eWxlc0xheW91dFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGRhdGE/LmFjdGlvbj8uYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIiBbYnV0dG9uSWRdPVwiYnV0dG9uLmlkXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbmRhaWxvZ2JveChkaWFsb2dCb3gpXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiXHJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIltiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgc3R5bGU9XCIgd2lkdGg6IDEwMCU7IGhlaWdodDogNTAwcHg7XCI+XHJcbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgIHNyYz1cIi4uLy4uL2Fzc2V0cy9kaXZpZGVyLnN2Z1wiIHN0eWxlPVwiY2xpcC1wYXRoOiBwb2x5Z29uKDAgNTUlLCAxMDAlIDAsIDEwMCUgMTAwJSwgMCUgMTAwJSk7IGJhY2tncm91bmQtY29sb3I6IHJlZDtcIj5cclxuICA8L2Rpdj4gLS0+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxyXG4gICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZXM/LmRldmlkZXI/LmRldmlkZXJUeXBlXCIgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0ICYmIGZhbHNlIH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCJcclxuICAgICAgW2lzTWVyZ2VkXT1cInN0eWxlcz8ubWVyZ2UgPz8gZmFsc2VcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XHJcbiAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI0ltYWdlU2VjdGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEwIGNvbC1zbS04IGNvbC1sZy02XCJcclxuICAgIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiBzdHlsZXM/LnBvc2l0aW9uTGF5b3V0Py52YWx1ZSA9PT0gJ3JpZ2h0JyA/ICdmaXQtY29udGVudCcgOiAnJ31cIlxyXG4gICAgc3R5bGU9XCJwYWRkaW5nOiAwcHggIWltcG9ydGFudDtcIiAqbmdJZj1cImNvbnRlbnQ/LmltYWdlPy5zaG93SW1hZ2UgJiYgaXNCb3JkZXJsZXNzSW1hZ2U7XCJcclxuICAgIFtzaW1wb0JvcmRlcmxlc3NdPVwiZ2V0UG9zaXRpb25MYXlvdXRcIj5cclxuICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cImNvbnRlbnQ/LmltYWdlPy51cmxcIiBjbGFzcz1cImQtYmxvY2sgaW1nLWZsdWlkIGgtMTAwIHctMTAwXCJcclxuICAgICAgW2FsdF09XCJjb250ZW50Py5pbWFnZT8uYWx0VGV4dFwiIHdpZHRoPVwiNzAwXCIgaGVpZ2h0PVwiNTAwXCIgbG9hZGluZz1cImxhenlcIiAvPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjwhLS0gRGlhbG9nIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2RpYWxvZ0JveCBjbGFzcz1cImRpYWxvZ2JveFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJhcHBvaW50bWVudC1mb3JtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXNlY3Rpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0LXNpZGVcIj5cclxuICAgICAgICA8aDIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0O1wiPkJvb2sgYW4gQXBwb2ludG1lbnQ8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yaWdodC1zaWRlXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJjbG9zZURpYWxvZygpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxmb3JtPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibmFtZS1tb2JpbGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TmFtZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTmFtZVwiIHBhdHRlcm49XCJbYS16QS1aIF0qXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuY2xpZW50TmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uVXNlck5hbWVDaGFuZ2UoJGV2ZW50KVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5Nb2JpbGUgTnVtYmVyPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dFN0eWxlXCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBZb3VyIE1vYmlsZSBOdW1iZXJcIlxyXG4gICAgICAgICAgICAgIHBhdHRlcm49XCJeWzAtOV17MTAsMTV9JFwiIG1heGxlbmd0aD1cIjE1XCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChrZXlwcmVzcyk9XCJyZXN0cmljdE5vbk51bWVyaWMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJDcmVhdGVEYXRhLm1vYmlsZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm5hbWUtbW9iaWxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtdGV4dFwiPkxvY2F0aW9uPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTG9jYXRpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTG9jYXRpb25cIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb2NhdGlvbigpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9uRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImxvY2F0aW9uLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGxvY2F0aW9uLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Z1bGwtd2lkdGhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+U2VydmljZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFNlcnZpY2VcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VydmljZXNcIiAobmdNb2RlbENoYW5nZSk9XCJnZXRBbGxTdGFmZigpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZURhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJzZXJ2aWNlLmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHNlcnZpY2UubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5TdGFmZjwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0YWZmXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFN0YWZmXCIgIChuZ01vZGVsQ2hhbmdlKT1cImdldEF2YWlsYWJsZVNsb3RzKClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhZmYgb2Ygc3RhZmZEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwic3RhZmYuaWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgc3RhZmYubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJuYW1lLW1vYmlsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5EYXRlPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wdXRTdHlsZVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGVcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiQ3JlYXRlRGF0YS5zY2hlZHVsZWREYXRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRGF0ZSgpXCIgW21pbl09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlRmlsdGVyXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdEljb25TdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRleHRcIj5UaW1lPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJpbnB1dFN0eWxlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgTG9jYXRpb25cIiBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEuc2NoZWR1bGVkVGltZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZSBvZiBsb2NhdGlvblRpbWluZ1wiIFt2YWx1ZV09XCJ0aW1lXCIgW2Rpc2FibGVkXT1cImJvb2tlZFNsb3RzLmhhcyh0aW1lKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgdGltZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZ1bGwtbWVzc2FnZS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1c2luZXNzLWZpZWxkLXNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10ZXh0XCI+TWVzc2FnZTwvZGl2PlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0U3R5bGVcIiBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIFlvdXIgTmFtZVwiIHBhdHRlcm49XCJbYS16QS1aIF0qXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIkNyZWF0ZURhdGEubWVzc2FnZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImJvdHRvbS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1zZWN0aW9uXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYm9va2luZy1idXR0b25cIiBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIiAoY2xpY2spPVwiY3JlYXRlQXBwb2ludG1lbnQoKVwiPlxyXG4gICAgICAgICAgICBCb29rIEFwcG9pbnRtZW50XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgIDwvZm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
@@ -1,2 +1,2 @@
|
|
1
1
|
export {};
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwb2ludG1lbnQtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvYXBwb2ludG1lbnQtZm9ybS9hcHBvaW50bWVudC1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb25Nb2RlbCwgQmFubmVyU3R5bGVzTW9kZWwsIEltYWdlLCBJbnB1dFRleHRNb2RlbCwgTGlzdEl0ZW1Nb2RhbCB9IGZyb20gJy4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyU2VjdGlvbk1vZGVsIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBzZWN0aW9uVHlwZTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbk5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnQ6IEJhbm5lckNvbnRlbnRNb2RlbDtcclxuICAgIHN0eWxlczogQmFubmVyU3R5bGVzTW9kZWw7XHJcbiAgICBhY3Rpb246IEFjdGlvbk1vZGVsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlTW9kZWwgZXh0ZW5kcyBJbWFnZXtcclxuICAgIHNob3dJbWFnZTpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgdGV4dE1vZGVse1xyXG4gICAgdmFsdWUgOiBzdHJpbmdcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJhbm5lckNvbnRlbnRNb2RlbCB7XHJcbiAgICBpbnB1dFRleHQ6IElucHV0VGV4dE1vZGVsW11cclxuICAgIGltYWdlOkltYWdlTW9kZWw7XHJcbiAgICBsaXN0SXRlbTogTGlzdEl0ZW1Nb2RhbDxCYW5uZXJMaXN0SXRlbT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFubmVyTGlzdEl0ZW0ge1xyXG4gIGlucHV0VGV4dDogSW5wdXRUZXh0TW9kZWxbXVxyXG59XHJcbiJdfQ==
|