simpo-component-library 3.6.214 → 3.6.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +3 -3
- package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +2 -2
- package/esm2022/lib/elements/text-editor/text-editor.component.mjs +2 -4
- package/fesm2022/simpo-component-library.mjs +4 -6
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/sections/banner-carousel/banner-carousel.component.d.ts +1 -1
- package/package.json +1 -1
- package/simpo-component-library-3.6.215.tgz +0 -0
- package/simpo-component-library-3.6.214.tgz +0 -0
@@ -169,7 +169,7 @@ export class BookAppointmentComponent extends BaseSection {
|
|
169
169
|
return window.innerWidth <= 475;
|
170
170
|
}
|
171
171
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookAppointmentComponent, deps: [{ token: i1.StorageServiceService }, { token: i2.RestService }, { token: i3.Router }, { token: i4.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
172
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BookAppointmentComponent, isStandalone: true, selector: "simpo-book-appointment", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <h2 class=\"section-title\">Try at Home Service</h2>\r\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\r\n </div>\r\n\r\n <!-- Pincode Section -->\r\n <!-- <div class=\"card\">\r\n <h3 class=\"section-title\">\r\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n </svg>\r\n Service Location\r\n </h3>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Enter your pincode</label>\r\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\r\n maxlength=\"6\" />\r\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\r\n \u2713 Service available in your area\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Select a Date</h3>\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n <div class=\"time\">\r\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\r\n <div class=\"date\">{{day.date}}</div>\r\n </div>\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\r\n Designs</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\">\r\n <div class=\"section\">\r\n <h2 class=\"section-title\">Select a Time</h2>\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{'selected': time === customerDetails.time}\">\r\n <div class=\"more-slot-badge\">More Slot Left</div>\r\n <div class=\"time-text\">{{time}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Contact Details</h3>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Full Name *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Phone Number *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Email *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">City *</label>\r\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\r\n placeholder=\"Enter your city\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">State *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Pincode *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Complete Address *</label>\r\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\r\n placeholder=\"Enter your complete address\"></textarea>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\">\r\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\r\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\">\r\n <!-- <div class=\"\">Design Image</div> -->\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{item.itemName}}</h3>\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\r\n number:\r\n '1.0-2'}}</span>\r\n </div>\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\r\n item.itemVariant.properties[varient] | uppercase }}</span>\r\n </div>\r\n </div>\r\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\r\n {{ design.selected ? 'Selected' : 'Select' }}\r\n </button> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n Add More Designs\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <!-- <div class=\"summary-row\">\r\n <span class=\"summary-label\">Selected Designs:</span>\r\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\r\n </div> -->\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">Service:</span>\r\n <span class=\"summary-value free-service\">FREE</span>\r\n </div>\r\n </div>\r\n\r\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\r\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\r\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\r\n </button>\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\r\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\r\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isEcommerce]=\"true\"></simpo-hover-elements>\r\n </div>\r\n</main>\r\n", styles: ["*{font-family:var(--primary-font-family)!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
|
172
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BookAppointmentComponent, isStandalone: true, selector: "simpo-book-appointment", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass" }, providers: [MessageService], usesInheritance: true, ngImport: i0, template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <h2 class=\"section-title\">Try at Home Service</h2>\r\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\r\n </div>\r\n\r\n <!-- Pincode Section -->\r\n <!-- <div class=\"card\">\r\n <h3 class=\"section-title\">\r\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n </svg>\r\n Service Location\r\n </h3>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Enter your pincode</label>\r\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\r\n maxlength=\"6\" />\r\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\r\n \u2713 Service available in your area\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Select a Date</h3>\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n <div class=\"time\">\r\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\r\n <div class=\"date\">{{day.date}}</div>\r\n </div>\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\r\n Designs</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\">\r\n <div class=\"section\">\r\n <h2 class=\"section-title\">Select a Time</h2>\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{'selected': time === customerDetails.time}\">\r\n <div class=\"more-slot-badge\">More Slot Left</div>\r\n <div class=\"time-text\">{{time}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Contact Details</h3>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Full Name *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Phone Number *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Email *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">City *</label>\r\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\r\n placeholder=\"Enter your city\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">State *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Pincode *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Complete Address *</label>\r\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\r\n placeholder=\"Enter your complete address\"></textarea>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\">\r\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\r\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\">\r\n <!-- <div class=\"\">Design Image</div> -->\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{item.itemName}}</h3>\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\r\n number:\r\n '1.0-2'}}</span>\r\n </div>\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\r\n item.itemVariant.properties[varient] | uppercase }}</span>\r\n </div>\r\n </div>\r\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\r\n {{ design.selected ? 'Selected' : 'Select' }}\r\n </button> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n Add More Designs\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <!-- <div class=\"summary-row\">\r\n <span class=\"summary-label\">Selected Designs:</span>\r\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\r\n </div> -->\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">Service:</span>\r\n <span class=\"summary-value free-service\">FREE</span>\r\n </div>\r\n </div>\r\n\r\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\r\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\r\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\r\n </button>\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\r\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\r\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isEcommerce]=\"true\"></simpo-hover-elements>\r\n </div>\r\n</main>\r\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }] }); }
|
173
173
|
}
|
174
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookAppointmentComponent, decorators: [{
|
175
175
|
type: Component,
|
@@ -184,7 +184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
184
184
|
ToastModule,
|
185
185
|
MatProgressSpinnerModule,
|
186
186
|
HoverElementsComponent
|
187
|
-
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <h2 class=\"section-title\">Try at Home Service</h2>\r\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\r\n </div>\r\n\r\n <!-- Pincode Section -->\r\n <!-- <div class=\"card\">\r\n <h3 class=\"section-title\">\r\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n </svg>\r\n Service Location\r\n </h3>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Enter your pincode</label>\r\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\r\n maxlength=\"6\" />\r\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\r\n \u2713 Service available in your area\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Select a Date</h3>\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n <div class=\"time\">\r\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\r\n <div class=\"date\">{{day.date}}</div>\r\n </div>\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\r\n Designs</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\">\r\n <div class=\"section\">\r\n <h2 class=\"section-title\">Select a Time</h2>\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{'selected': time === customerDetails.time}\">\r\n <div class=\"more-slot-badge\">More Slot Left</div>\r\n <div class=\"time-text\">{{time}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Contact Details</h3>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Full Name *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Phone Number *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Email *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">City *</label>\r\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\r\n placeholder=\"Enter your city\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">State *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Pincode *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Complete Address *</label>\r\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\r\n placeholder=\"Enter your complete address\"></textarea>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\">\r\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\r\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\">\r\n <!-- <div class=\"\">Design Image</div> -->\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{item.itemName}}</h3>\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\r\n number:\r\n '1.0-2'}}</span>\r\n </div>\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\r\n item.itemVariant.properties[varient] | uppercase }}</span>\r\n </div>\r\n </div>\r\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\r\n {{ design.selected ? 'Selected' : 'Select' }}\r\n </button> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n Add More Designs\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <!-- <div class=\"summary-row\">\r\n <span class=\"summary-label\">Selected Designs:</span>\r\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\r\n </div> -->\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">Service:</span>\r\n <span class=\"summary-value free-service\">FREE</span>\r\n </div>\r\n </div>\r\n\r\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\r\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\r\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\r\n </button>\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\r\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\r\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isEcommerce]=\"true\"></simpo-hover-elements>\r\n </div>\r\n</main>\r\n", styles: ["*{font-family:var(--primary-font-family)!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"] }]
|
187
|
+
], providers: [MessageService], template: "<p-toast position=\"bottom-right\" [baseZIndex]=\"10000000000\" [autoZIndex]=\"true\"\r\n [showTransformOptions]=\"isMobile ? 'translateY(-100%)' : ''\"></p-toast>\r\n\r\n<main class=\"main-content\" simpoHover (hovering)=\"showEditTabs($event)\">\r\n <div class=\"container\">\r\n <div class=\"content-grid\">\r\n <!-- Left Form Section -->\r\n <div class=\"form-section\">\r\n <!-- Service Description -->\r\n <div class=\"card service-description\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">\r\n <h2 class=\"section-title\">Try at Home Service</h2>\r\n <p>Our Try at Home consultant will visit your location to show you the designs at your convenience.</p>\r\n </div>\r\n\r\n <!-- Pincode Section -->\r\n <!-- <div class=\"card\">\r\n <h3 class=\"section-title\">\r\n <svg class=\"icon\" viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\r\n </svg>\r\n Service Location\r\n </h3>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Enter your pincode</label>\r\n <input type=\"text\" class=\"form-input\" placeholder=\"Enter 6-digit pincode\"\r\n maxlength=\"6\" />\r\n <div class=\"pincode-success\" *ngIf=\"pincode.length === 6\">\r\n \u2713 Service available in your area\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Date Selection -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Select a Date</h3>\r\n <div class=\"date-grid\">\r\n <div class=\"single-date\" *ngFor=\"let day of weekDays\" (click)=\"checkAvailability(day)\"\r\n [style.border]=\"day.dateWithMonth === customerDetails.date ? '2px solid ' + styles?.background?.accentColor : 'none'\">\r\n <div class=\"time\">\r\n <div class=\"day\">{{day.day.substring(0,3)}}</div>\r\n <div class=\"date\">{{day.date}}</div>\r\n </div>\r\n <div class=\"design\" [id]=\"data?.id\" [simpoBackground]=\"styles?.background\">{{trialCartItem?.length ?? 0}}\r\n Designs</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time Selection -->\r\n <div class=\"card\">\r\n <div class=\"section\">\r\n <h2 class=\"section-title\">Select a Time</h2>\r\n <div class=\"time-grid\">\r\n <div class=\"time-slot\" *ngFor=\"let time of timeSlots\" (click)=\"selectTime(time)\"\r\n [ngClass]=\"{'selected': time === customerDetails.time}\">\r\n <div class=\"more-slot-badge\">More Slot Left</div>\r\n <div class=\"time-text\">{{time}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Customer Details -->\r\n <div class=\"card\">\r\n <h3 class=\"section-title\">Contact Details</h3>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Full Name *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Phone Number *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverPhone\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Email *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.receiverEmail\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">City *</label>\r\n <input type=\"city\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.cityName\"\r\n placeholder=\"Enter your city\" />\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">State *</label>\r\n <input type=\"text\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.stateName\"\r\n placeholder=\"Enter your full name\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Pincode *</label>\r\n <input type=\"tel\" class=\"form-input\" [(ngModel)]=\"customerDetails.addressDetails.zipCode\"\r\n placeholder=\"Enter your phone number\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"form-label\">Complete Address *</label>\r\n <textarea class=\"form-input form-textarea\" [(ngModel)]=\"customerDetails.addressDetails.addressLine1\"\r\n placeholder=\"Enter your complete address\"></textarea>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar -->\r\n <div class=\"sidebar\">\r\n <div class=\"card\">\r\n <h3 class=\"designs-header\">Your Shortlisted Designs</h3>\r\n <!-- <div class=\"designs-count\">{{ getSelectedDesigns().length }}/4 SELECTED</div> -->\r\n\r\n <div class=\"design-parent\">\r\n <div class=\"design-item\" *ngFor=\"let item of trialCartItem\">\r\n <div class=\"design-content\">\r\n <img class=\"design-image\" [src]=\"item.imgUrl ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\r\n alt=\"\">\r\n <!-- <div class=\"\">Design Image</div> -->\r\n\r\n <div class=\"design-info\">\r\n <h3 class=\"item-title\">{{item.itemName}}</h3>\r\n <div class=\"item-price\">\r\n <span class=\"current-price\">\u20B9{{item.discountedPrice | number: '1.0-2'}}</span>\r\n <span class=\"original-price\" *ngIf=\"item.sellingPrice > item.discountedPrice\">\u20B9{{item.sellingPrice |\r\n number:\r\n '1.0-2'}}</span>\r\n </div>\r\n <div class=\"item-options\" *ngIf=\"item.itemVariant\">\r\n <span *ngFor=\"let varient of getKeys(item.itemVariant.properties)\">{{ varient }}: {{\r\n item.itemVariant.properties[varient] | uppercase }}</span>\r\n </div>\r\n </div>\r\n <!-- <button class=\"design-select\" [class.selected]=\"design.selected\" (click)=\"toggleDesign(design.id)\">\r\n {{ design.selected ? 'Selected' : 'Select' }}\r\n </button> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button class=\"add-design\" (click)=\"addMoreDesign()\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\r\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\r\n </svg>\r\n Add More Designs\r\n </button>\r\n\r\n <div class=\"summary\">\r\n <!-- <div class=\"summary-row\">\r\n <span class=\"summary-label\">Selected Designs:</span>\r\n <span class=\"summary-value\">{{ getSelectedDesigns().length }}</span>\r\n </div> -->\r\n <div class=\"summary-row\">\r\n <span class=\"summary-label\">Service:</span>\r\n <span class=\"summary-value free-service\">FREE</span>\r\n </div>\r\n </div>\r\n\r\n <button class=\"book-button\" (click)=\"bookAppointment()\" simpoButtonDirective *ngIf=\"!loader\"\r\n [disabled]=\"isValid\" [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" [backgroundInfo]=\"styles?.background\">\r\n {{data?.action?.buttons?.[1]?.content?.label ?? 'Book Try at Home Appointment'}}\r\n </button>\r\n <button class=\"book-button loader-btn\" simpoButtonDirective [buttonStyle]=\"data?.action?.buttons?.[0]?.styles\"\r\n [color]=\"data?.styles?.background?.accentColor\" *ngIf=\"loader\"\r\n [backgroundInfo]=\"styles?.background\"><mat-spinner></mat-spinner> Booking</button>\r\n <p class=\"disclaimer\">Our consultant will contact you to confirm the appointment</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"\r\n [isEcommerce]=\"true\"></simpo-hover-elements>\r\n </div>\r\n</main>\r\n", styles: ["*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.main-content{padding:32px 0;position:relative}.content-grid{display:grid;grid-template-columns:2fr 1fr;gap:32px}.form-section{display:flex;flex-direction:column;gap:24px}.card{background:#fff;border-radius:12px;padding:24px;box-shadow:0 1px 3px #0000001a;border:1px solid #e2e8f0}.section-title{font-size:18px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;gap:12px}.icon{width:20px;height:20px;fill:#7c3aed}.service-description p{line-height:1.6}.form-group{margin-bottom:16px}.form-label{display:block;font-size:14px;font-weight:500;color:#374151;margin-bottom:8px}.form-input{width:100%;padding:12px 16px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;transition:all .2s}.form-input:focus{outline:none;border-color:#7c3aed;box-shadow:0 0 0 3px #7c3aed1a}.form-textarea{resize:vertical;height:80px}.pincode-success{background:#f0fdf4;border:1px solid #bbf7d0;color:#15803d;padding:12px;border-radius:8px;font-size:14px;font-weight:500;margin-top:8px}.date-grid{display:flex;gap:12px}.date-button,.time-button{padding:16px 12px;border:1px solid #d1d5db;border-radius:8px;background:#fff;cursor:pointer;text-align:center;transition:all .2s;font-size:14px}.date-button:hover,.time-button:hover{border-color:#7c3aed;background:#faf5ff}.date-button.selected,.time-button.selected{border-color:#7c3aed;background:#f3e8ff;color:#7c3aed;font-weight:600}.time-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}.sidebar{position:sticky;top:24px;height:fit-content}.designs-header{font-size:18px;font-weight:600;color:#1e293b;margin-bottom:16px}.designs-count{font-size:14px;color:#64748b;margin-bottom:16px}.design-item{border:1px solid #e2e8f0;border-radius:8px;padding:16px;margin-bottom:12px;transition:all .2s}.design-item:hover{border-color:#7c3aed}.design-content{display:flex;gap:12px;align-items:flex-start}.design-image{width:80px;height:80px;background:#f1f5f9;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#64748b;flex-shrink:0}.design-info{flex:1}.design-name{font-weight:500;color:#1e293b;margin-bottom:4px;font-size:14px}.design-price{color:#7c3aed;font-weight:600;font-size:14px}.design-select{padding:6px 12px;border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;border:1px solid;background:#fff}.design-select.selected{background:#f3e8ff;color:#7c3aed;border-color:#7c3aed}.design-select:not(.selected){color:#64748b;border-color:#d1d5db}.add-design{width:100%;padding:5px 3px;border:2px dashed #d1d5db;border-radius:8px;background:#fff;color:#64748b;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;gap:8px;font-size:1rem!important}.add-design:hover{border-color:#7c3aed;color:#7c3aed}.summary{margin-top:24px;padding-top:24px;border-top:1px solid #e2e8f0}.summary-row{display:flex;justify-content:space-between;margin-bottom:8px;font-size:14px}.summary-label{color:#64748b}.summary-value{font-weight:500}.free-service{color:#059669}.book-button{width:100%;padding:6px 10px;border:none;border-radius:8px;font-size:16px;font-weight:600;cursor:pointer;margin-top:24px;transition:all .2s;font-size:1rem!important}.book-button:hover:not(:disabled){background:linear-gradient(135deg,#6d28d9,#db2777)}.book-button:disabled{opacity:.5;cursor:not-allowed}.disclaimer{font-size:12px;color:#64748b;text-align:center;margin-top:12px}.slide-in{animation:slideIn .3s ease-out}.time-grid{display:flex;gap:16px;flex-wrap:wrap}.time-slot{position:relative;background:#fff;border:2px solid #e5e7eb;border-radius:10px;padding:5px 4px;cursor:pointer;transition:all .2s ease;min-width:120px;text-align:center}.time-slot:hover{border-color:#d1d5db;transform:translateY(-2px)}.time-slot.selected{border-color:#8b5cf6;background:#f3f4f6}.time-slot .time-text{font-size:14px;font-weight:600;color:#374151}.time-slot.selected .time-text{color:#8b5cf6}.more-slot-badge{position:absolute;top:-8px;left:50%;transform:translate(-50%);background:#f97316;color:#fff;font-size:9px;font-weight:600;padding:1px 8px;border-radius:12px;white-space:nowrap}.single-date{text-align:center;width:9%;background:#f6f3f9;cursor:pointer;border-radius:15px}.single-date .time{padding:10px 6px}.single-date .day{font-size:.8rem}.single-date .date{font-size:1rem;font-weight:700}.single-date .design{font-size:.7rem;padding:5px 6px;font-weight:700;border-bottom-left-radius:15px;border-bottom-right-radius:15px}.item-title{font-size:.9rem;font-weight:500;color:#111827;margin-bottom:8px}.item-price{display:flex;align-items:center;gap:8px;margin-bottom:8px}.current-price{font-size:1rem;font-weight:600;color:#111827}.original-price{font-size:1rem;color:#9ca3af;text-decoration:line-through}.discount{background:#fef3c7;color:#d97706;padding:2px 6px;border-radius:4px;font-size:12px;font-weight:500}.item-options{display:flex;gap:10px;font-size:14px;color:#6b7280;margin-bottom:12px}.design-parent{height:250px;overflow:scroll}.loader-btn{display:flex;align-items:center;justify-content:center;gap:15px}.loader-btn mat-spinner{height:20px!important;width:20px!important}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@media (max-width: 768px){.content-grid,.form-row,.time-grid{grid-template-columns:1fr}}@media screen and (max-width: 475px){.date-grid{overflow-x:scroll;max-width:274px;width:100%}.single-date{width:50%}}\n"] }]
|
188
188
|
}], ctorParameters: () => [{ type: i1.StorageServiceService }, { type: i2.RestService }, { type: i3.Router }, { type: i4.MessageService }], propDecorators: { data: [{
|
189
189
|
type: Input
|
190
190
|
}], index: [{
|
@@ -196,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
196
196
|
}], customClass: [{
|
197
197
|
type: Input
|
198
198
|
}] } });
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9ib29rLWFwcG9pbnRtZW50L2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYm9vay1hcHBvaW50bWVudC9ib29rLWFwcG9pbnRtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTdDLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7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QUFPLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7K0dBM0tVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDJLQUp4QixDQUFDLGNBQWMsQ0FBQyxpRENwQzdCLHlsU0FvTEEsdzlLRDVKWSxZQUFZLGtkQUFFLFdBQVcsK21CQUNqQyx3QkFBd0Isc0lBRXhCLGNBQWMsZ0ZBSWQsbUJBQW1CLHlHQUNuQixXQUFXLHVXQUNYLHdCQUF3QixtT0FDeEIsc0JBQXNCOzs0RkFNYix3QkFBd0I7a0JBbkJwQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVzt3QkFDakMsd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQiwwQkFBMEI7d0JBQzFCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN2QixhQUNVLENBQUMsY0FBYyxDQUFDO3NLQU1sQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCb29rQXBwb2ludG1lbnRTZWN0aW9uTW9kYWwsIEJvb2tBcHBvaW50bWVudFN0eWxlc01vZGVsIH0gZnJvbSAnLi9ib29rLWFwcG9pbnRtZW50Lm1vZGVsJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1lZGl0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgSG92ZXJFbGVtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaG92ZXItZWxlbWVudHMvaG92ZXItZWxlbWVudHMuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tYm9vay1hcHBvaW50bWVudCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvb2tBcHBvaW50bWVudENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YT86IEJvb2tBcHBvaW50bWVudFNlY3Rpb25Nb2RhbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG5cclxuICB0aW1lU2xvdHM6IHN0cmluZ1tdID0gWycxMDowMCBBTScsICcxMTowMCBBTScsICcxMjowMCBQTScsICcwMTowMCBQTScsICcwMjowMCBQTScsICcwMzowMCBQTScsICcwNDowMCBQTScsICcwNTowMCBQTScsICcwNjowMCBQTSddO1xyXG4gIGN1c3RvbWVyRGV0YWlscyA9IHtcclxuICAgIGRhdGU6ICcnLFxyXG4gICAgdGltZTogJycsXHJcbiAgICBhZGRyZXNzRGV0YWlsczoge1xyXG4gICAgICByZWNlaXZlck5hbWU6ICcnLFxyXG4gICAgICByZWNlaXZlclBob25lOiAnJyxcclxuICAgICAgcmVjZWl2ZXJFbWFpbDogJycsXHJcbiAgICAgIGFkZHJlc3NMaW5lMTogJycsXHJcbiAgICAgIHN0YXRlTmFtZTogJycsXHJcbiAgICAgIGNpdHlOYW1lOiAnJyxcclxuICAgICAgemlwQ29kZTogJydcclxuICAgIH0sXHJcbiAgICB1c2VySWQ6ICcnLFxyXG4gICAgYnVzaW5lc3NJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJylcclxuICB9O1xyXG5cclxuICBkZXNpZ25zID0gW1xyXG4gICAgeyBpZDogMSwgbmFtZTogJ0Rlc2lnbiAxJywgcHJpY2U6ICckMTAwJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGlkOiAyLCBuYW1lOiAnRGVzaWduIDInLCBwcmljZTogJyQxNTAnLCBzZWxlY3RlZDogZmFsc2UgfVxyXG4gIF07XHJcbiAgd2Vla0RheXM6IHsgZGF0ZVdpdGhNb250aDogc3RyaW5nOyBkYXk6IHN0cmluZzsgZGF0ZTogbnVtYmVyIH1bXSA9IFtdO1xyXG4gIHRyaWFsQ2FydEl0ZW06IGFueVtdID0gW11cclxuICBzdHlsZXM/OiBCb29rQXBwb2ludG1lbnRTdHlsZXNNb2RlbDtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJOYW1lID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy5yZWNlaXZlck5hbWUgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyUGhvbmUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnJlY2VpdmVyUGhvbmUgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyRW1haWwgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnJlY2VpdmVyRW1haWwgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lMSA9IHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdFswXT8uYWRkcmVzc0xpbmUxID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5zdGF0ZU5hbWUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnN0YXRlTmFtZSA/PyAnJ1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuY2l0eU5hbWUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LmNpdHlOYW1lID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy56aXBDb2RlID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy56aXBDb2RlID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy51c2VySWQgPSB1c2VyPy51c2VySWQgPz8gJydcclxuXHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG5cclxuICAgIHRoaXMuZ2V0TmV4dFNldmVuRGF5cygpO1xyXG4gICAgdGhpcy5nZXRUcmlhbENhcnQoKVxyXG4gIH1cclxuICBjaGVja0F2YWlsYWJpbGl0eShkYXk6IGFueSkge1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuZGF0ZSA9IGRheS5kYXRlV2l0aE1vbnRoO1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VzdG9tZXJEZXRhaWxzLmRhdGUpO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgdGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHNlbGVjdGVkRGF0ZSk7XHJcbiAgICBjb25zdCB0ZW1wVG9kYXkgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICB0ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgdGVtcFRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgaWYgKHRlbXBTZWxlY3RlZERhdGUuZ2V0VGltZSgpID09PSB0ZW1wVG9kYXkuZ2V0VGltZSgpKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTtcclxuICAgICAgY29uc3QgY3VycmVudE1pbnV0ZXMgPSB0b2RheS5nZXRNaW51dGVzKCk7XHJcblxyXG4gICAgICB0aGlzLnRpbWVTbG90cyA9IHRoaXMudGltZVNsb3RzLmZpbHRlcihzbG90ID0+IHtcclxuICAgICAgICBjb25zdCBbdGltZSwgcGVyaW9kXSA9IHNsb3Quc3BsaXQoJyAnKTtcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG5cclxuICAgICAgICBsZXQgc2xvdEhvdXIgPSBob3VycztcclxuICAgICAgICBpZiAocGVyaW9kID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikge1xyXG4gICAgICAgICAgc2xvdEhvdXIgKz0gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICdBTScgJiYgaG91cnMgPT09IDEyKSB7XHJcbiAgICAgICAgICBzbG90SG91ciA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiBzbG90IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZVxyXG4gICAgICAgIHJldHVybiBzbG90SG91ciA+IGN1cnJlbnRIb3VyIHx8XHJcbiAgICAgICAgICAoc2xvdEhvdXIgPT09IGN1cnJlbnRIb3VyICYmIG1pbnV0ZXMgPiBjdXJyZW50TWludXRlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVzZXQgdG8gYWxsIHRpbWUgc2xvdHMgZm9yIGZ1dHVyZSBkYXRlc1xyXG4gICAgICB0aGlzLnRpbWVTbG90cyA9IFsnMTA6MDAgQU0nLCAnMTE6MDAgQU0nLCAnMTI6MDAgUE0nLCAnMDE6MDAgUE0nLCAnMDI6MDAgUE0nLCAnMDM6MDAgUE0nLCAnMDQ6MDAgUE0nLCAnMDU6MDAgUE0nLCAnMDY6MDAgUE0nXTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0VHJpYWxDYXJ0KCkge1xyXG4gICAgbGV0IHVzZXI6IFVzZXIgfCBudWxsID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKClcclxuICAgIGlmICh1c2VyKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0VXNlckl0ZW1zKHVzZXIudXNlcklkLCAnVFJJQUxfQ0FSVCcpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRyaWFsQ2FydEl0ZW0gPSByZXM/LmRhdGE/LlswXT8ub3JkZXJlZEl0ZW1zID8/IFtdXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRyaWFsQ2FydEluZGV4REJEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmlhbENhcnRJbmRleERCRGF0YSgpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VHJpYWxDYXJ0KCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlhbENhcnRJdGVtID0gdXNlclRyaWFsQ2FydFJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXROZXh0U2V2ZW5EYXlzKCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICAgIGRhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgKyBpKTtcclxuXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTsgLy8gWVlZWS1NTS1ERFxyXG4gICAgICBjb25zdCBkYXlOYW1lID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyB3ZWVrZGF5OiAnbG9uZycgfSk7IC8vIGUuZy4sIE1vbmRheVxyXG5cclxuICAgICAgdGhpcy53ZWVrRGF5cy5wdXNoKHsgZGF0ZVdpdGhNb250aDogZm9ybWF0dGVkRGF0ZSwgZGF5OiBkYXlOYW1lLCBkYXRlOiBkYXRlLmdldERhdGUoKSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbihpZDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkZXNpZ24gPSB0aGlzLmRlc2lnbnMuZmluZChkID0+IGQuaWQgPT09IGlkKTtcclxuICAgIGlmIChkZXNpZ24pIHtcclxuICAgICAgaWYgKCFkZXNpZ24uc2VsZWN0ZWQgJiYgdGhpcy5nZXRTZWxlY3RlZERlc2lnbnMoKS5sZW5ndGggPj0gNCkgcmV0dXJuO1xyXG4gICAgICBkZXNpZ24uc2VsZWN0ZWQgPSAhZGVzaWduLnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWREZXNpZ25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzaWducy5maWx0ZXIoZCA9PiBkLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZhbGlkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyTmFtZSB8fCAhdGhpcy5jdXN0b21lckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzPy5yZWNlaXZlclBob25lIHx8XHJcbiAgICAgICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyRW1haWwgfHwgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8uc3RhdGVOYW1lIHx8XHJcbiAgICAgICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LmNpdHlOYW1lIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnppcENvZGUgfHxcclxuICAgICAgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8uYWRkcmVzc0xpbmUxIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uZGF0ZSB8fCAhdGhpcy5jdXN0b21lckRldGFpbHM/LnRpbWVcclxuICB9XHJcblxyXG4gIGJvb2tBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UuYm9va0FwcG9pbnRtZW50KHRoaXMuY3VzdG9tZXJEZXRhaWxzKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQXBwb2ludG1lbnQnLCBkZXRhaWw6ICdBcHBvaW50bWVudCBCb29rZWQgc3VjY2Vzc2Z1bGx5JyB9KTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddLCB7IHF1ZXJ5UGFyYW1zOiB7IHRhYjogJ3RyeV9hdF9ob21lJ30gfSk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdBcHBvaW50bWVudCcsIGRldGFpbDogJ0FwcG9pbnRtZW50IG5vdCBib29rZWQnIH0pO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0VGltZSh0aW1lOiBhbnkpIHtcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLnRpbWUgPSB0aW1lXHJcbiAgfVxyXG5cclxuICBnZXRLZXlzKG9iamVjdDogT2JqZWN0KTogc3RyaW5nW10ge1xyXG4gICAgaWYgKG9iamVjdClcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlRGVzaWduKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48bWFpbiBjbGFzcz1cIm1haW4tY29udGVudFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZ3JpZFwiPlxyXG4gICAgICA8IS0tIExlZnQgRm9ybSBTZWN0aW9uIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPCEtLSBTZXJ2aWNlIERlc2NyaXB0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHNlcnZpY2UtZGVzY3JpcHRpb25cIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlRyeSBhdCBIb21lIFNlcnZpY2U8L2gyPlxyXG4gICAgICAgICAgPHA+T3VyIFRyeSBhdCBIb21lIGNvbnN1bHRhbnQgd2lsbCB2aXNpdCB5b3VyIGxvY2F0aW9uIHRvIHNob3cgeW91IHRoZSBkZXNpZ25zIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFBpbmNvZGUgU2VjdGlvbiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTEyIDJDOC4xMyAyIDUgNS4xMyA1IDljMCA1LjI1IDcgMTMgNyAxM3M3LTcuNzUgNy0xM2MwLTMuODctMy4xMy03LTctN3ptMCA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41elwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICBTZXJ2aWNlIExvY2F0aW9uXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVudGVyIHlvdXIgcGluY29kZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgNi1kaWdpdCBwaW5jb2RlXCJcclxuICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2XCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbmNvZGUtc3VjY2Vzc1wiICpuZ0lmPVwicGluY29kZS5sZW5ndGggPT09IDZcIj5cclxuICAgICAgICAgICAgICDinJMgU2VydmljZSBhdmFpbGFibGUgaW4geW91ciBhcmVhXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8IS0tIERhdGUgU2VsZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2VsZWN0IGEgRGF0ZTwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZGF0ZVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIiAoY2xpY2spPVwiY2hlY2tBdmFpbGFiaWxpdHkoZGF5KVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJkYXkuZGF0ZVdpdGhNb250aCA9PT0gY3VzdG9tZXJEZXRhaWxzLmRhdGUgPyAnMnB4IHNvbGlkICcgKyBzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yIDogJ25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXlcIj57e2RheS5kYXkuc3Vic3RyaW5nKDAsMyl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVcIj57e2RheS5kYXRlfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIj57e3RyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA/PyAwfX1cclxuICAgICAgICAgICAgICAgIERlc2lnbnM8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUaW1lIFNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlNlbGVjdCBhIFRpbWU8L2gyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2xvdFwiICpuZ0Zvcj1cImxldCB0aW1lIG9mIHRpbWVTbG90c1wiIChjbGljayk9XCJzZWxlY3RUaW1lKHRpbWUpXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiB0aW1lID09PSBjdXN0b21lckRldGFpbHMudGltZX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3JlLXNsb3QtYmFkZ2VcIj5Nb3JlIFNsb3QgTGVmdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtdGV4dFwiPnt7dGltZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VzdG9tZXIgRGV0YWlscyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkNvbnRhY3QgRGV0YWlsczwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVsbCBOYW1lICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBob25lIE51bWJlciAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRlbFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyUGhvbmVcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIHBob25lIG51bWJlclwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1haWwgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJFbWFpbFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNpdHkgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuY2l0eU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGNpdHlcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0YXRlICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnN0YXRlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbmNvZGUgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy56aXBDb2RlXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBwaG9uZSBudW1iZXJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbXBsZXRlIEFkZHJlc3MgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0taW5wdXQgZm9ybS10ZXh0YXJlYVwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lMVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGNvbXBsZXRlIGFkZHJlc3NcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2lkZWJhciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwiZGVzaWducy1oZWFkZXJcIj5Zb3VyIFNob3J0bGlzdGVkIERlc2lnbnM8L2gzPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZGVzaWducy1jb3VudFwiPnt7IGdldFNlbGVjdGVkRGVzaWducygpLmxlbmd0aCB9fS80IFNFTEVDVEVEPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24tcGFyZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRyaWFsQ2FydEl0ZW1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkZXNpZ24taW1hZ2VcIiBbc3JjXT1cIml0ZW0uaW1nVXJsID8/ICdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiXCI+RGVzaWduIEltYWdlPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3tpdGVtLml0ZW1OYW1lfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1wcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wcmljZVwiPuKCuXt7aXRlbS5kaXNjb3VudGVkUHJpY2UgfCBudW1iZXI6ICcxLjAtMid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yaWdpbmFsLXByaWNlXCIgKm5nSWY9XCJpdGVtLnNlbGxpbmdQcmljZSA+IGl0ZW0uZGlzY291bnRlZFByaWNlXCI+4oK5e3tpdGVtLnNlbGxpbmdQcmljZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnMS4wLTInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1vcHRpb25zXCIgKm5nSWY9XCJpdGVtLml0ZW1WYXJpYW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhcmllbnQgb2YgZ2V0S2V5cyhpdGVtLml0ZW1WYXJpYW50LnByb3BlcnRpZXMpXCI+e3sgdmFyaWVudCB9fToge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXRlbVZhcmlhbnQucHJvcGVydGllc1t2YXJpZW50XSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImRlc2lnbi1zZWxlY3RcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiZGVzaWduLnNlbGVjdGVkXCIgKGNsaWNrKT1cInRvZ2dsZURlc2lnbihkZXNpZ24uaWQpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkZXNpZ24uc2VsZWN0ZWQgPyAnU2VsZWN0ZWQnIDogJ1NlbGVjdCcgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1kZXNpZ25cIiAoY2xpY2spPVwiYWRkTW9yZURlc2lnbigpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnpcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgQWRkIE1vcmUgRGVzaWduc1xyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3VtbWFyeS1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5TZWxlY3RlZCBEZXNpZ25zOjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj57eyBnZXRTZWxlY3RlZERlc2lnbnMoKS5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcm93XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+U2VydmljZTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlIGZyZWUtc2VydmljZVwiPkZSRUU8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2stYnV0dG9uXCIgKGNsaWNrKT1cImJvb2tBcHBvaW50bWVudCgpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgKm5nSWY9XCIhbG9hZGVyXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVmFsaWRcIiBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LnN0eWxlc1wiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGE/LmFjdGlvbj8uYnV0dG9ucz8uWzFdPy5jb250ZW50Py5sYWJlbCA/PyAnQm9vayBUcnkgYXQgSG9tZSBBcHBvaW50bWVudCd9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYm9vay1idXR0b24gbG9hZGVyLWJ0blwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnM/LlswXT8uc3R5bGVzXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImxvYWRlclwiXHJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIj48bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj4gQm9va2luZzwvYnV0dG9uPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJkaXNjbGFpbWVyXCI+T3VyIGNvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSB0byBjb25maXJtIHRoZSBhcHBvaW50bWVudDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCJcclxuICAgICAgW2lzRWNvbW1lcmNlXT1cInRydWVcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG48L21haW4+XHJcbiJdfQ==
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9ib29rLWFwcG9pbnRtZW50L2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvYm9vay1hcHBvaW50bWVudC9ib29rLWFwcG9pbnRtZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTdDLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7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QUFPLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7K0dBM0tVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDJLQUp4QixDQUFDLGNBQWMsQ0FBQyxpRENwQzdCLHlsU0FvTEEsNC9LRDVKWSxZQUFZLGtkQUFFLFdBQVcsK21CQUNqQyx3QkFBd0Isc0lBRXhCLGNBQWMsZ0ZBSWQsbUJBQW1CLHlHQUNuQixXQUFXLHVXQUNYLHdCQUF3QixtT0FDeEIsc0JBQXNCOzs0RkFNYix3QkFBd0I7a0JBbkJwQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVzt3QkFDakMsd0JBQXdCO3dCQUN4QixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQiwwQkFBMEI7d0JBQzFCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3FCQUN2QixhQUNVLENBQUMsY0FBYyxDQUFDO3NLQU1sQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vLi4vLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCb29rQXBwb2ludG1lbnRTZWN0aW9uTW9kYWwsIEJvb2tBcHBvaW50bWVudFN0eWxlc01vZGVsIH0gZnJvbSAnLi9ib29rLWFwcG9pbnRtZW50Lm1vZGVsJztcclxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uLy4uLy4uL3NlY3Rpb25zL0Jhc2VTZWN0aW9uJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FuaW1hdGlvbi1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEltYWdlRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2ltYWdlLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9zcGFjaW5nLWhvcml6b250YWwuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1lZGl0b3IuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQnV0dG9uRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2J1dHRvbi1kaXJlY3RpdmUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcclxuaW1wb3J0IHsgSG92ZXJFbGVtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaG92ZXItZWxlbWVudHMvaG92ZXItZWxlbWVudHMuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2ltcG8tYm9vay1hcHBvaW50bWVudCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSxcclxuICAgIEJ1dHRvbkRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIEFuaW1hdGlvbkRpcmVjdGl2ZSxcclxuICAgIEhvdmVyRGlyZWN0aXZlLFxyXG4gICAgSW1hZ2VFZGl0b3JEaXJlY3RpdmUsXHJcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcclxuICAgIEJ1dHRvbkVkaXRvckRpcmVjdGl2ZSxcclxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXHJcbiAgICBUb2FzdE1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIEhvdmVyRWxlbWVudHNDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYm9vay1hcHBvaW50bWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Jvb2stYXBwb2ludG1lbnQuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEJvb2tBcHBvaW50bWVudENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZGF0YT86IEJvb2tBcHBvaW50bWVudFNlY3Rpb25Nb2RhbDtcclxuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcclxuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xyXG5cclxuICB0aW1lU2xvdHM6IHN0cmluZ1tdID0gWycxMDowMCBBTScsICcxMTowMCBBTScsICcxMjowMCBQTScsICcwMTowMCBQTScsICcwMjowMCBQTScsICcwMzowMCBQTScsICcwNDowMCBQTScsICcwNTowMCBQTScsICcwNjowMCBQTSddO1xyXG4gIGN1c3RvbWVyRGV0YWlscyA9IHtcclxuICAgIGRhdGU6ICcnLFxyXG4gICAgdGltZTogJycsXHJcbiAgICBhZGRyZXNzRGV0YWlsczoge1xyXG4gICAgICByZWNlaXZlck5hbWU6ICcnLFxyXG4gICAgICByZWNlaXZlclBob25lOiAnJyxcclxuICAgICAgcmVjZWl2ZXJFbWFpbDogJycsXHJcbiAgICAgIGFkZHJlc3NMaW5lMTogJycsXHJcbiAgICAgIHN0YXRlTmFtZTogJycsXHJcbiAgICAgIGNpdHlOYW1lOiAnJyxcclxuICAgICAgemlwQ29kZTogJydcclxuICAgIH0sXHJcbiAgICB1c2VySWQ6ICcnLFxyXG4gICAgYnVzaW5lc3NJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJylcclxuICB9O1xyXG5cclxuICBkZXNpZ25zID0gW1xyXG4gICAgeyBpZDogMSwgbmFtZTogJ0Rlc2lnbiAxJywgcHJpY2U6ICckMTAwJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGlkOiAyLCBuYW1lOiAnRGVzaWduIDInLCBwcmljZTogJyQxNTAnLCBzZWxlY3RlZDogZmFsc2UgfVxyXG4gIF07XHJcbiAgd2Vla0RheXM6IHsgZGF0ZVdpdGhNb250aDogc3RyaW5nOyBkYXk6IHN0cmluZzsgZGF0ZTogbnVtYmVyIH1bXSA9IFtdO1xyXG4gIHRyaWFsQ2FydEl0ZW06IGFueVtdID0gW11cclxuICBzdHlsZXM/OiBCb29rQXBwb2ludG1lbnRTdHlsZXNNb2RlbDtcclxuICBsb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgdXNlciA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpO1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJOYW1lID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy5yZWNlaXZlck5hbWUgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyUGhvbmUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnJlY2VpdmVyUGhvbmUgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyRW1haWwgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnJlY2VpdmVyRW1haWwgPz8gJydcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lMSA9IHVzZXI/LmFkZHJlc3NEZXRhaWxzTGlzdFswXT8uYWRkcmVzc0xpbmUxID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy5zdGF0ZU5hbWUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LnN0YXRlTmFtZSA/PyAnJ1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuY2l0eU5hbWUgPSB1c2VyPy5hZGRyZXNzRGV0YWlsc0xpc3RbMF0/LmNpdHlOYW1lID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy56aXBDb2RlID0gdXNlcj8uYWRkcmVzc0RldGFpbHNMaXN0WzBdPy56aXBDb2RlID8/ICcnXHJcbiAgICB0aGlzLmN1c3RvbWVyRGV0YWlscy51c2VySWQgPSB1c2VyPy51c2VySWQgPz8gJydcclxuXHJcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xyXG5cclxuICAgIHRoaXMuZ2V0TmV4dFNldmVuRGF5cygpO1xyXG4gICAgdGhpcy5nZXRUcmlhbENhcnQoKVxyXG4gIH1cclxuICBjaGVja0F2YWlsYWJpbGl0eShkYXk6IGFueSkge1xyXG4gICAgdGhpcy5jdXN0b21lckRldGFpbHMuZGF0ZSA9IGRheS5kYXRlV2l0aE1vbnRoO1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VzdG9tZXJEZXRhaWxzLmRhdGUpO1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgdGVtcFNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKHNlbGVjdGVkRGF0ZSk7XHJcbiAgICBjb25zdCB0ZW1wVG9kYXkgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICB0ZW1wU2VsZWN0ZWREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgdGVtcFRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgaWYgKHRlbXBTZWxlY3RlZERhdGUuZ2V0VGltZSgpID09PSB0ZW1wVG9kYXkuZ2V0VGltZSgpKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTtcclxuICAgICAgY29uc3QgY3VycmVudE1pbnV0ZXMgPSB0b2RheS5nZXRNaW51dGVzKCk7XHJcblxyXG4gICAgICB0aGlzLnRpbWVTbG90cyA9IHRoaXMudGltZVNsb3RzLmZpbHRlcihzbG90ID0+IHtcclxuICAgICAgICBjb25zdCBbdGltZSwgcGVyaW9kXSA9IHNsb3Quc3BsaXQoJyAnKTtcclxuICAgICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpO1xyXG5cclxuICAgICAgICBsZXQgc2xvdEhvdXIgPSBob3VycztcclxuICAgICAgICBpZiAocGVyaW9kID09PSAnUE0nICYmIGhvdXJzICE9PSAxMikge1xyXG4gICAgICAgICAgc2xvdEhvdXIgKz0gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICdBTScgJiYgaG91cnMgPT09IDEyKSB7XHJcbiAgICAgICAgICBzbG90SG91ciA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiBzbG90IHRpbWUgaXMgaW4gdGhlIGZ1dHVyZVxyXG4gICAgICAgIHJldHVybiBzbG90SG91ciA+IGN1cnJlbnRIb3VyIHx8XHJcbiAgICAgICAgICAoc2xvdEhvdXIgPT09IGN1cnJlbnRIb3VyICYmIG1pbnV0ZXMgPiBjdXJyZW50TWludXRlcyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVzZXQgdG8gYWxsIHRpbWUgc2xvdHMgZm9yIGZ1dHVyZSBkYXRlc1xyXG4gICAgICB0aGlzLnRpbWVTbG90cyA9IFsnMTA6MDAgQU0nLCAnMTE6MDAgQU0nLCAnMTI6MDAgUE0nLCAnMDE6MDAgUE0nLCAnMDI6MDAgUE0nLCAnMDM6MDAgUE0nLCAnMDQ6MDAgUE0nLCAnMDU6MDAgUE0nLCAnMDY6MDAgUE0nXTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0VHJpYWxDYXJ0KCkge1xyXG4gICAgbGV0IHVzZXI6IFVzZXIgfCBudWxsID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKClcclxuICAgIGlmICh1c2VyKSB7XHJcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0VXNlckl0ZW1zKHVzZXIudXNlcklkLCAnVFJJQUxfQ0FSVCcpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRyaWFsQ2FydEl0ZW0gPSByZXM/LmRhdGE/LlswXT8ub3JkZXJlZEl0ZW1zID8/IFtdXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFRyaWFsQ2FydEluZGV4REJEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUcmlhbENhcnRJbmRleERCRGF0YSgpIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VHJpYWxDYXJ0KCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgcmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJUcmlhbENhcnRSZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlhbENhcnRJdGVtID0gdXNlclRyaWFsQ2FydFJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXROZXh0U2V2ZW5EYXlzKCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheSk7XHJcbiAgICAgIGRhdGUuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgKyBpKTtcclxuXHJcbiAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBkYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTsgLy8gWVlZWS1NTS1ERFxyXG4gICAgICBjb25zdCBkYXlOYW1lID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyB3ZWVrZGF5OiAnbG9uZycgfSk7IC8vIGUuZy4sIE1vbmRheVxyXG5cclxuICAgICAgdGhpcy53ZWVrRGF5cy5wdXNoKHsgZGF0ZVdpdGhNb250aDogZm9ybWF0dGVkRGF0ZSwgZGF5OiBkYXlOYW1lLCBkYXRlOiBkYXRlLmdldERhdGUoKSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZURlc2lnbihpZDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkZXNpZ24gPSB0aGlzLmRlc2lnbnMuZmluZChkID0+IGQuaWQgPT09IGlkKTtcclxuICAgIGlmIChkZXNpZ24pIHtcclxuICAgICAgaWYgKCFkZXNpZ24uc2VsZWN0ZWQgJiYgdGhpcy5nZXRTZWxlY3RlZERlc2lnbnMoKS5sZW5ndGggPj0gNCkgcmV0dXJuO1xyXG4gICAgICBkZXNpZ24uc2VsZWN0ZWQgPSAhZGVzaWduLnNlbGVjdGVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWREZXNpZ25zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVzaWducy5maWx0ZXIoZCA9PiBkLnNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1ZhbGlkKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyTmFtZSB8fCAhdGhpcy5jdXN0b21lckRldGFpbHM/LmFkZHJlc3NEZXRhaWxzPy5yZWNlaXZlclBob25lIHx8XHJcbiAgICAgICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnJlY2VpdmVyRW1haWwgfHwgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8uc3RhdGVOYW1lIHx8XHJcbiAgICAgICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LmNpdHlOYW1lIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uYWRkcmVzc0RldGFpbHM/LnppcENvZGUgfHxcclxuICAgICAgIXRoaXMuY3VzdG9tZXJEZXRhaWxzPy5hZGRyZXNzRGV0YWlscz8uYWRkcmVzc0xpbmUxIHx8ICF0aGlzLmN1c3RvbWVyRGV0YWlscz8uZGF0ZSB8fCAhdGhpcy5jdXN0b21lckRldGFpbHM/LnRpbWVcclxuICB9XHJcblxyXG4gIGJvb2tBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UuYm9va0FwcG9pbnRtZW50KHRoaXMuY3VzdG9tZXJEZXRhaWxzKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2VcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQXBwb2ludG1lbnQnLCBkZXRhaWw6ICdBcHBvaW50bWVudCBCb29rZWQgc3VjY2Vzc2Z1bGx5JyB9KTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddLCB7IHF1ZXJ5UGFyYW1zOiB7IHRhYjogJ3RyeV9hdF9ob21lJ30gfSk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdBcHBvaW50bWVudCcsIGRldGFpbDogJ0FwcG9pbnRtZW50IG5vdCBib29rZWQnIH0pO1xyXG4gICAgICB0aGlzLmxvYWRlciA9IGZhbHNlXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0VGltZSh0aW1lOiBhbnkpIHtcclxuICAgIHRoaXMuY3VzdG9tZXJEZXRhaWxzLnRpbWUgPSB0aW1lXHJcbiAgfVxyXG5cclxuICBnZXRLZXlzKG9iamVjdDogT2JqZWN0KTogc3RyaW5nW10ge1xyXG4gICAgaWYgKG9iamVjdClcclxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhZGRNb3JlRGVzaWduKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddKVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTW9iaWxlKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxwLXRvYXN0IHBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCIgW2Jhc2VaSW5kZXhdPVwiMTAwMDAwMDAwMDBcIiBbYXV0b1pJbmRleF09XCJ0cnVlXCJcclxuICBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XHJcblxyXG48bWFpbiBjbGFzcz1cIm1haW4tY29udGVudFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZ3JpZFwiPlxyXG4gICAgICA8IS0tIExlZnQgRm9ybSBTZWN0aW9uIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1zZWN0aW9uXCI+XHJcbiAgICAgICAgPCEtLSBTZXJ2aWNlIERlc2NyaXB0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIHNlcnZpY2UtZGVzY3JpcHRpb25cIiBbaWRdPVwiZGF0YT8uaWRcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlRyeSBhdCBIb21lIFNlcnZpY2U8L2gyPlxyXG4gICAgICAgICAgPHA+T3VyIFRyeSBhdCBIb21lIGNvbnN1bHRhbnQgd2lsbCB2aXNpdCB5b3VyIGxvY2F0aW9uIHRvIHNob3cgeW91IHRoZSBkZXNpZ25zIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFBpbmNvZGUgU2VjdGlvbiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICBkPVwiTTEyIDJDOC4xMyAyIDUgNS4xMyA1IDljMCA1LjI1IDcgMTMgNyAxM3M3LTcuNzUgNy0xM2MwLTMuODctMy4xMy03LTctN3ptMCA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41elwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICBTZXJ2aWNlIExvY2F0aW9uXHJcbiAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVudGVyIHlvdXIgcGluY29kZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgNi1kaWdpdCBwaW5jb2RlXCJcclxuICAgICAgICAgICAgICBtYXhsZW5ndGg9XCI2XCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpbmNvZGUtc3VjY2Vzc1wiICpuZ0lmPVwicGluY29kZS5sZW5ndGggPT09IDZcIj5cclxuICAgICAgICAgICAgICDinJMgU2VydmljZSBhdmFpbGFibGUgaW4geW91ciBhcmVhXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICA8IS0tIERhdGUgU2VsZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+U2VsZWN0IGEgRGF0ZTwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW5nbGUtZGF0ZVwiICpuZ0Zvcj1cImxldCBkYXkgb2Ygd2Vla0RheXNcIiAoY2xpY2spPVwiY2hlY2tBdmFpbGFiaWxpdHkoZGF5KVwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJkYXkuZGF0ZVdpdGhNb250aCA9PT0gY3VzdG9tZXJEZXRhaWxzLmRhdGUgPyAnMnB4IHNvbGlkICcgKyBzdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yIDogJ25vbmUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXlcIj57e2RheS5kYXkuc3Vic3RyaW5nKDAsMyl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVcIj57e2RheS5kYXRlfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduXCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIj57e3RyaWFsQ2FydEl0ZW0/Lmxlbmd0aCA/PyAwfX1cclxuICAgICAgICAgICAgICAgIERlc2lnbnM8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBUaW1lIFNlbGVjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlNlbGVjdCBhIFRpbWU8L2gyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtc2xvdFwiICpuZ0Zvcj1cImxldCB0aW1lIG9mIHRpbWVTbG90c1wiIChjbGljayk9XCJzZWxlY3RUaW1lKHRpbWUpXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQnOiB0aW1lID09PSBjdXN0b21lckRldGFpbHMudGltZX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3JlLXNsb3QtYmFkZ2VcIj5Nb3JlIFNsb3QgTGVmdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtdGV4dFwiPnt7dGltZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQ3VzdG9tZXIgRGV0YWlscyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkNvbnRhY3QgRGV0YWlsczwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVsbCBOYW1lICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBob25lIE51bWJlciAqPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRlbFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnJlY2VpdmVyUGhvbmVcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIHBob25lIG51bWJlclwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW1haWwgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMucmVjZWl2ZXJFbWFpbFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNpdHkgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjdXN0b21lckRldGFpbHMuYWRkcmVzc0RldGFpbHMuY2l0eU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGNpdHlcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0YXRlICo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1pbnB1dFwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLnN0YXRlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZnVsbCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbmNvZGUgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZWxcIiBjbGFzcz1cImZvcm0taW5wdXRcIiBbKG5nTW9kZWwpXT1cImN1c3RvbWVyRGV0YWlscy5hZGRyZXNzRGV0YWlscy56aXBDb2RlXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBwaG9uZSBudW1iZXJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbXBsZXRlIEFkZHJlc3MgKjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0taW5wdXQgZm9ybS10ZXh0YXJlYVwiIFsobmdNb2RlbCldPVwiY3VzdG9tZXJEZXRhaWxzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NMaW5lMVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIGNvbXBsZXRlIGFkZHJlc3NcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gU2lkZWJhciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwiZGVzaWducy1oZWFkZXJcIj5Zb3VyIFNob3J0bGlzdGVkIERlc2lnbnM8L2gzPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZGVzaWducy1jb3VudFwiPnt7IGdldFNlbGVjdGVkRGVzaWducygpLmxlbmd0aCB9fS80IFNFTEVDVEVEPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24tcGFyZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taXRlbVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRyaWFsQ2FydEl0ZW1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJkZXNpZ24taW1hZ2VcIiBbc3JjXT1cIml0ZW0uaW1nVXJsID8/ICdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiXCI+RGVzaWduIEltYWdlPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ24taW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJpdGVtLXRpdGxlXCI+e3tpdGVtLml0ZW1OYW1lfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1wcmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wcmljZVwiPuKCuXt7aXRlbS5kaXNjb3VudGVkUHJpY2UgfCBudW1iZXI6ICcxLjAtMid9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yaWdpbmFsLXByaWNlXCIgKm5nSWY9XCJpdGVtLnNlbGxpbmdQcmljZSA+IGl0ZW0uZGlzY291bnRlZFByaWNlXCI+4oK5e3tpdGVtLnNlbGxpbmdQcmljZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAnMS4wLTInfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1vcHRpb25zXCIgKm5nSWY9XCJpdGVtLml0ZW1WYXJpYW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhcmllbnQgb2YgZ2V0S2V5cyhpdGVtLml0ZW1WYXJpYW50LnByb3BlcnRpZXMpXCI+e3sgdmFyaWVudCB9fToge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXRlbVZhcmlhbnQucHJvcGVydGllc1t2YXJpZW50XSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cImRlc2lnbi1zZWxlY3RcIiBbY2xhc3Muc2VsZWN0ZWRdPVwiZGVzaWduLnNlbGVjdGVkXCIgKGNsaWNrKT1cInRvZ2dsZURlc2lnbihkZXNpZ24uaWQpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkZXNpZ24uc2VsZWN0ZWQgPyAnU2VsZWN0ZWQnIDogJ1NlbGVjdCcgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1kZXNpZ25cIiAoY2xpY2spPVwiYWRkTW9yZURlc2lnbigpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnpcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgQWRkIE1vcmUgRGVzaWduc1xyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwic3VtbWFyeS1yb3dcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbGFiZWxcIj5TZWxlY3RlZCBEZXNpZ25zOjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktdmFsdWVcIj57eyBnZXRTZWxlY3RlZERlc2lnbnMoKS5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcm93XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWxhYmVsXCI+U2VydmljZTo8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LXZhbHVlIGZyZWUtc2VydmljZVwiPkZSRUU8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJvb2stYnV0dG9uXCIgKGNsaWNrKT1cImJvb2tBcHBvaW50bWVudCgpXCIgc2ltcG9CdXR0b25EaXJlY3RpdmUgKm5nSWY9XCIhbG9hZGVyXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVmFsaWRcIiBbYnV0dG9uU3R5bGVdPVwiZGF0YT8uYWN0aW9uPy5idXR0b25zPy5bMF0/LnN0eWxlc1wiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmQ/LmFjY2VudENvbG9yXCIgW2JhY2tncm91bmRJbmZvXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGE/LmFjdGlvbj8uYnV0dG9ucz8uWzFdPy5jb250ZW50Py5sYWJlbCA/PyAnQm9vayBUcnkgYXQgSG9tZSBBcHBvaW50bWVudCd9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYm9vay1idXR0b24gbG9hZGVyLWJ0blwiIHNpbXBvQnV0dG9uRGlyZWN0aXZlIFtidXR0b25TdHlsZV09XCJkYXRhPy5hY3Rpb24/LmJ1dHRvbnM/LlswXT8uc3R5bGVzXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGE/LnN0eWxlcz8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3JcIiAqbmdJZj1cImxvYWRlclwiXHJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJzdHlsZXM/LmJhY2tncm91bmRcIj48bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj4gQm9va2luZzwvYnV0dG9uPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJkaXNjbGFpbWVyXCI+T3VyIGNvbnN1bHRhbnQgd2lsbCBjb250YWN0IHlvdSB0byBjb25maXJtIHRoZSBhcHBvaW50bWVudDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XHJcbiAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCJcclxuICAgICAgW2lzRWNvbW1lcmNlXT1cInRydWVcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxyXG4gIDwvZGl2PlxyXG48L21haW4+XHJcbiJdfQ==
|