@almatar/smart-booking-dashboard 0.0.1 → 0.0.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/action-card/action-card.component.mjs +3 -3
- package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +3 -3
- package/esm2022/lib/components/almatar-aside/aside-back-button.service.mjs +24 -0
- package/esm2022/lib/components/almatar-aside/aside.component.mjs +123 -0
- package/esm2022/lib/components/booking-input/booking-input.component.mjs +4 -3
- package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +53 -4
- package/esm2022/lib/components/data-search/data-search.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +544 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.mjs +43 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +296 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +88 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +242 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.mjs +48 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +129 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +321 -0
- package/esm2022/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.mjs +52 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.mjs +9 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.mjs +7 -0
- package/esm2022/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.mjs +2 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +448 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs +55 -0
- package/esm2022/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.mjs +48 -0
- package/esm2022/lib/components/result-panel/result-panel.component.mjs +3 -3
- package/esm2022/lib/components/shared/components/confirm-modal/confirm-modal.component.mjs +75 -0
- package/esm2022/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.mjs +46 -0
- package/esm2022/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.mjs +9 -0
- package/esm2022/lib/components/shared/interfaces/i-flight-refund-details.mjs +86 -0
- package/esm2022/lib/components/shared/models/cancel-hotel-booking.model.mjs +7 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.mjs +27 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.mjs +17 -0
- package/esm2022/lib/config/hotel-actions.config.mjs +21 -1
- package/esm2022/lib/models/booking.types.mjs +73 -2
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +25 -7
- package/esm2022/lib/services/booking.service.mjs +6 -2
- package/esm2022/lib/shared/components/currency-code-icon/currency-code-icon.component.mjs +35 -0
- package/esm2022/lib/shared/enums/brand-enums.enum.mjs +7 -0
- package/esm2022/lib/shared/environments/environment.mjs +10 -0
- package/esm2022/lib/shared/models/index.mjs +6 -0
- package/esm2022/lib/shared/modules/almatar-icon/almatar-icon.module.mjs +36 -0
- package/esm2022/lib/shared/modules/loader/loader.module.mjs +43 -0
- package/esm2022/lib/shared/pipes/exchange.pipe.mjs +49 -0
- package/esm2022/lib/shared/services/api.service.mjs +42 -0
- package/esm2022/lib/shared/services/shared.service.mjs +34 -0
- package/esm2022/lib/shared/services/translation.service.mjs +61 -0
- package/esm2022/lib/shared/services/webengage-tracking.service.mjs +28 -0
- package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +9 -0
- package/fesm2022/almatar-smart-booking-dashboard.mjs +3278 -180
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/almatar-aside/aside-back-button.service.d.ts +11 -0
- package/lib/components/almatar-aside/aside.component.d.ts +47 -0
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +7 -0
- package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +97 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.d.ts +25 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +91 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.d.ts +39 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.d.ts +44 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.d.ts +19 -0
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +38 -0
- package/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.d.ts +142 -0
- package/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.d.ts +23 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.d.ts +7 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.d.ts +5 -0
- package/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.d.ts +252 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +82 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.d.ts +21 -0
- package/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.d.ts +16 -0
- package/lib/components/shared/components/confirm-modal/confirm-modal.component.d.ts +17 -0
- package/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.d.ts +10 -0
- package/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.d.ts +7 -0
- package/lib/components/shared/interfaces/i-flight-refund-details.d.ts +73 -0
- package/lib/components/shared/models/cancel-hotel-booking.model.d.ts +6 -0
- package/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.d.ts +11 -0
- package/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.d.ts +7 -0
- package/lib/models/booking.types.d.ts +28 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +1 -0
- package/lib/shared/components/currency-code-icon/currency-code-icon.component.d.ts +13 -0
- package/lib/shared/enums/brand-enums.enum.d.ts +5 -0
- package/lib/shared/environments/environment.d.ts +7 -0
- package/lib/shared/models/index.d.ts +11 -0
- package/lib/shared/modules/almatar-icon/almatar-icon.module.d.ts +13 -0
- package/lib/shared/modules/loader/loader.module.d.ts +13 -0
- package/lib/shared/pipes/exchange.pipe.d.ts +17 -0
- package/lib/shared/services/api.service.d.ts +43 -0
- package/lib/shared/services/shared.service.d.ts +12 -0
- package/lib/shared/services/translation.service.d.ts +17 -0
- package/lib/shared/services/webengage-tracking.service.d.ts +8 -0
- package/lib/shared/store/selectors/currency.selectors.d.ts +2 -0
- package/package.json +2 -19
- package/LICENSE +0 -21
- package/README.md +0 -132
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy, DestroyRef, input, output, signal, computed, inject, effect, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { SharedService } from '../../../../shared/services/shared.service';
|
|
4
|
+
import moment from 'moment';
|
|
5
|
+
import { AlmatarHotelAutoCancellationRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component';
|
|
6
|
+
import { AlmatarHotelAutoCancellationNonRefundableRoomComponent } from './components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component';
|
|
7
|
+
import { AlmatarHotelAutoCancellationEndpointsService } from '../../services/almatar-hotel-auto-cancellation-endpoints.service';
|
|
8
|
+
import { AlmatarHotelAutoCancellationService } from '../../services/almatar-hotel-auto-cancellation.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class AlmatarHotelAutoCancellationSelectRoomsComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.sharedService = inject(SharedService);
|
|
13
|
+
this.endpointsService = inject(AlmatarHotelAutoCancellationEndpointsService);
|
|
14
|
+
this.autoCancellationService = inject(AlmatarHotelAutoCancellationService);
|
|
15
|
+
this.destroyRef = inject(DestroyRef);
|
|
16
|
+
this.packages = input.required();
|
|
17
|
+
this.isLoadingRefund = signal(false);
|
|
18
|
+
this.hotelInfo = input.required();
|
|
19
|
+
this.bookingId = input('');
|
|
20
|
+
this.hotelId = input('');
|
|
21
|
+
this.continueToCancel = output();
|
|
22
|
+
this.closeModal = output();
|
|
23
|
+
this.nonRefundableSubmitSuccess = output();
|
|
24
|
+
this.chatWithAgent = output();
|
|
25
|
+
this.currencyCode = input('SAR');
|
|
26
|
+
this.localPackages = signal([]);
|
|
27
|
+
this.displayPackages = computed(() => {
|
|
28
|
+
const local = this.localPackages();
|
|
29
|
+
return local.length > 0 ? local : this.packages();
|
|
30
|
+
});
|
|
31
|
+
this.selectedPackagesCount = computed(() => this.displayPackages().filter((pkg) => pkg.isSelected).length);
|
|
32
|
+
this.hasSelectedPackages = computed(() => this.selectedPackagesCount() > 0);
|
|
33
|
+
this.isSinglePackage = computed(() => this.packages().length === 1);
|
|
34
|
+
this.totalRoomsCount = computed(() => this.packages().reduce((acc, pkg) => acc + (pkg.rooms?.length || 0), 0));
|
|
35
|
+
this.allPackagesNonRefundable = computed(() => this.packages().every((pkg) => !pkg.isRefundable && !pkg.isCancelled));
|
|
36
|
+
effect(() => {
|
|
37
|
+
// get only un cancelled packages
|
|
38
|
+
const packagesList = this.packages().filter((pkg) => !pkg?.isCancelled);
|
|
39
|
+
if (packagesList.length === 1 && !packagesList[0].isSelected) {
|
|
40
|
+
const selectedPackage = { ...packagesList[0], isSelected: true };
|
|
41
|
+
this.localPackages.set([selectedPackage]);
|
|
42
|
+
}
|
|
43
|
+
}, { allowSignalWrites: true });
|
|
44
|
+
}
|
|
45
|
+
togglePackage(packageId) {
|
|
46
|
+
const currentPackages = this.displayPackages();
|
|
47
|
+
const updatedPackages = currentPackages.map((pkg) => pkg.packageId === packageId
|
|
48
|
+
? { ...pkg, isSelected: !pkg.isSelected }
|
|
49
|
+
: pkg);
|
|
50
|
+
this.localPackages.set(updatedPackages);
|
|
51
|
+
}
|
|
52
|
+
onContinue() {
|
|
53
|
+
if (this.hasSelectedPackages()) {
|
|
54
|
+
const selectedPackages = this.displayPackages().filter((pkg) => pkg.isSelected && !pkg.isCancelled);
|
|
55
|
+
this.continueToCancel.emit(selectedPackages);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
onClose() {
|
|
59
|
+
this.closeModal.emit();
|
|
60
|
+
}
|
|
61
|
+
onChatWithAgent() {
|
|
62
|
+
this.chatWithAgent.emit();
|
|
63
|
+
}
|
|
64
|
+
onNonRefundableSubmitSuccess(packageName) {
|
|
65
|
+
this.nonRefundableSubmitSuccess.emit(packageName);
|
|
66
|
+
}
|
|
67
|
+
formatDate(date) {
|
|
68
|
+
const lang = this.sharedService.getAppLanguage();
|
|
69
|
+
const m = moment(date).locale(lang);
|
|
70
|
+
return {
|
|
71
|
+
day: m.date(),
|
|
72
|
+
month: m.format('MMMM'),
|
|
73
|
+
year: m.year(),
|
|
74
|
+
dayName: m.format('dddd'),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationSelectRoomsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationSelectRoomsComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation-select-rooms", inputs: { packages: { classPropertyName: "packages", publicName: "packages", isSignal: true, isRequired: true, transformFunction: null }, hotelInfo: { classPropertyName: "hotelInfo", publicName: "hotelInfo", isSignal: true, isRequired: true, transformFunction: null }, bookingId: { classPropertyName: "bookingId", publicName: "bookingId", isSignal: true, isRequired: false, transformFunction: null }, hotelId: { classPropertyName: "hotelId", publicName: "hotelId", isSignal: true, isRequired: false, transformFunction: null }, currencyCode: { classPropertyName: "currencyCode", publicName: "currencyCode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { continueToCancel: "continueToCancel", closeModal: "closeModal", nonRefundableSubmitSuccess: "nonRefundableSubmitSuccess", chatWithAgent: "chatWithAgent" }, ngImport: i0, template: "<div class=\"select-rooms\">\n <div class=\"select-rooms__content\">\n @if (hotelInfo(); as hotel) {\n <div class=\"hotel-info-card\">\n <h3 class=\"hotel-info-card__name\">{{ hotel.hotelName }}</h3>\n\n <div class=\"hotel-info-card__content\">\n @if (hotel.hotelImage) {\n <div class=\"hotel-info-card__image\">\n <img [src]=\"hotel.hotelImage\" [alt]=\"hotel.hotelName\" />\n </div>\n }\n\n <div class=\"hotel-info-card__dates\">\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-IN</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkIn).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkIn).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkIn).dayName\n }}</span>\n <span class=\"date-box__time\"\n >From\n {{ hotel?.checkInTime }}</span\n >\n </div>\n\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-OUT</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkOut).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkOut).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkOut).dayName\n }}</span>\n <span class=\"date-box__time\"\n >Until\n {{ hotel?.checkOutTime }}</span\n >\n </div>\n </div>\n\n <div class=\"hotel-info-card__stats\">\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">Rooms</span>\n <span class=\"stat-box__value\">{{ totalRoomsCount() }}</span>\n </div>\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">NIGHTS</span>\n <span class=\"stat-box__value\">{{ hotel.nights }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"select-rooms__notice select-rooms__notice--default\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>\n Some rooms in each package, share one booking reference, so they will be cancelled together.</span\n >\n </div>\n\n <div class=\"rooms-list\">\n @for (package of displayPackages(); track $index) {\n @if (!package.manualRefundRequest) {\n <almatar-hotel-auto-cancellation-refundable-room\n [package]=\"package\"\n [hideCheckbox]=\"isSinglePackage()\"\n (togglePackage)=\"togglePackage($event)\"\n />\n } @else {\n <almatar-hotel-auto-cancellation-non-refundable-room\n [package]=\"package\"\n [allPackages]=\"displayPackages()\"\n [hotelInfo]=\"hotelInfo()\"\n [hotelId]=\"hotelId()\"\n [currencyCode]=\"currencyCode()\"\n [allPackagesNonRefundable]=\"allPackagesNonRefundable()\"\n (closeModal)=\"onClose()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n />\n }\n }\n </div>\n\n @if (allPackagesNonRefundable()) {\n <div class=\"select-rooms__notice select-rooms__notice--warning\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <!-- warning triangle icon -->\n <path\n d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>Sorry, we couldn't process your refund right now. Please chat with our Customer Service team for help.</span>\n </div>\n }\n </div>\n\n <div class=\"select-rooms__footer\">\n @if (allPackagesNonRefundable()) {\n <button\n class=\"main_btn main_btn--chat-with-us\"\n type=\"button\"\n (click)=\"onChatWithAgent()\"\n >\n Chat with customer service\n </button>\n } @else {\n @if (!hasSelectedPackages()) {\n <p class=\"select-rooms__hint\">\n Select at least one room to continue\n </p>\n }\n <button\n class=\"main_btn\"\n type=\"button\"\n [disabled]=\"!hasSelectedPackages()\"\n (click)=\"onContinue()\"\n >\n Continue to cancel\n </button>\n }\n </div>\n</div>\n", styles: [".select-rooms{display:flex;flex-direction:column;height:100%;background-color:#fff}.select-rooms__header{padding:16px;border-bottom:1px solid var(--almatar-neutral-border-default)}.select-rooms__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:8px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin:12px 0}.select-rooms__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.select-rooms__notice--info{background:var(--almatar-info-surface, #eaf2ff);border:1px solid var(--almatar-info-border, #b9d6ff);color:var(--almatar-info-text, #1a56db);border-radius:12px}.select-rooms__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.select-rooms__notice--default{background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f;border-radius:12px}.select-rooms__notice--default svg{color:#1b1a1f}.select-rooms__notice--warning{background:#faedcc;border:1px solid rgb(137,99,42);color:#89632a;border-radius:12px}.select-rooms__notice--warning svg{color:#89632a}.select-rooms__title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);margin-bottom:4px}.select-rooms__subtitle{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.select-rooms__content{flex:1;overflow-y:auto;padding:12px}.select-rooms__footer{padding:16px;background:var(--almatar-neutral-surface-card);border-top:1px solid rgb(217,217,222)}.select-rooms__hint{text-align:center;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);margin-bottom:12px}.hotel-info-card{background:var(--almatar-neutral-surface-card);border-radius:12px;padding:12px;margin-bottom:12px;border:1px solid rgb(217,217,222)}.hotel-info-card__name{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:var(--almatar-neutral-text-primary-static);margin-bottom:12px}.hotel-info-card__content{display:flex;align-items:stretch;gap:0}.hotel-info-card__image{width:120px;overflow:hidden;flex-shrink:0;padding-inline-end:12px;border-inline-end:1px solid rgb(217,217,222)}.hotel-info-card__image img{border-radius:5px;width:100%;height:100%;object-fit:cover;max-height:100px}.hotel-info-card__dates{display:flex;flex:1;border-inline-start:1px solid var(--almatar-neutral-border-default)}.hotel-info-card__stats{display:flex;flex-direction:column;justify-content:center;border-inline-start:1px solid var(--almatar-neutral-border-default);padding-inline-start:12px;margin-inline-start:0;min-width:70px}.date-box{display:flex;flex-direction:column;align-items:center;text-align:center;flex:1;padding:0 12px;border-inline-end:1px solid rgb(217,217,222);gap:4px}.date-box__label{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);text-transform:uppercase;letter-spacing:.5px}.date-box__day{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#491d95;line-height:1.2}.date-box__month{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static)}.date-box__day-name{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.date-box__time{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static)}.stat-box{display:flex;flex-direction:column;align-items:center;text-align:center;padding:4px 0;border-bottom:1px solid rgb(217,217,222)}.stat-box:last-child{border-bottom:none}.stat-box__label{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.stat-box__value{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:var(--almatar-neutral-text-primary-static);line-height:1.3;color:#491d95}.rooms-list{display:flex;flex-direction:column;gap:12px}.main_btn{font-weight:var(--almatar-font-weight-medium);padding:17.5px;border-radius:6px;display:block;width:100%}.main_btn:disabled{opacity:.5;cursor:not-allowed}.main_btn--chat-with-us{background-color:#fff;border:1px solid rgb(217,217,222);color:#1b1a1f}button[disabled],input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{background-color:#747583;color:#b8b9c1;border-radius:12px}.info-banner{display:flex;gap:8px;border:1px solid rgb(11,84,194);border-radius:12px;padding:14px;align-items:flex-start;transition:all .3s cubic-bezier(.4,0,.2,1)}.info-banner__icon{color:#0b54c2;flex-shrink:0;width:20px;height:20px}.info-banner__content{flex:1}.info-banner__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;margin:0 0 4px;font-weight:var(--almatar-font-weight-regular);line-height:16px}.info-banner__subtext{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;margin:0;line-height:1.4}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AlmatarHotelAutoCancellationRefundableRoomComponent, selector: "almatar-hotel-auto-cancellation-refundable-room", inputs: ["package", "hideCheckbox"], outputs: ["togglePackage"] }, { kind: "component", type: AlmatarHotelAutoCancellationNonRefundableRoomComponent, selector: "almatar-hotel-auto-cancellation-non-refundable-room", inputs: ["package", "allPackages", "hotelInfo", "hotelId", "currencyCode", "allPackagesNonRefundable"], outputs: ["closeModal", "nonRefundableSubmitSuccess"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationSelectRoomsComponent, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{ selector: 'almatar-hotel-auto-cancellation-select-rooms', standalone: true, imports: [
|
|
83
|
+
CommonModule,
|
|
84
|
+
AlmatarHotelAutoCancellationRefundableRoomComponent,
|
|
85
|
+
AlmatarHotelAutoCancellationNonRefundableRoomComponent,
|
|
86
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"select-rooms\">\n <div class=\"select-rooms__content\">\n @if (hotelInfo(); as hotel) {\n <div class=\"hotel-info-card\">\n <h3 class=\"hotel-info-card__name\">{{ hotel.hotelName }}</h3>\n\n <div class=\"hotel-info-card__content\">\n @if (hotel.hotelImage) {\n <div class=\"hotel-info-card__image\">\n <img [src]=\"hotel.hotelImage\" [alt]=\"hotel.hotelName\" />\n </div>\n }\n\n <div class=\"hotel-info-card__dates\">\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-IN</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkIn).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkIn).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkIn).dayName\n }}</span>\n <span class=\"date-box__time\"\n >From\n {{ hotel?.checkInTime }}</span\n >\n </div>\n\n <div class=\"date-box\">\n <span class=\"date-box__label\">CHECK-OUT</span>\n <span class=\"date-box__day\">{{\n formatDate(hotel.checkOut).day\n }}</span>\n <span class=\"date-box__month\">{{\n formatDate(hotel.checkOut).month\n }}</span>\n <span class=\"date-box__day-name\">{{\n formatDate(hotel.checkOut).dayName\n }}</span>\n <span class=\"date-box__time\"\n >Until\n {{ hotel?.checkOutTime }}</span\n >\n </div>\n </div>\n\n <div class=\"hotel-info-card__stats\">\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">Rooms</span>\n <span class=\"stat-box__value\">{{ totalRoomsCount() }}</span>\n </div>\n <div class=\"stat-box\">\n <span class=\"stat-box__label\">NIGHTS</span>\n <span class=\"stat-box__value\">{{ hotel.nights }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <div class=\"select-rooms__notice select-rooms__notice--default\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n />\n <path\n d=\"M12 11v5.5M12 8v.01\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span>\n Some rooms in each package, share one booking reference, so they will be cancelled together.</span\n >\n </div>\n\n <div class=\"rooms-list\">\n @for (package of displayPackages(); track $index) {\n @if (!package.manualRefundRequest) {\n <almatar-hotel-auto-cancellation-refundable-room\n [package]=\"package\"\n [hideCheckbox]=\"isSinglePackage()\"\n (togglePackage)=\"togglePackage($event)\"\n />\n } @else {\n <almatar-hotel-auto-cancellation-non-refundable-room\n [package]=\"package\"\n [allPackages]=\"displayPackages()\"\n [hotelInfo]=\"hotelInfo()\"\n [hotelId]=\"hotelId()\"\n [currencyCode]=\"currencyCode()\"\n [allPackagesNonRefundable]=\"allPackagesNonRefundable()\"\n (closeModal)=\"onClose()\"\n (nonRefundableSubmitSuccess)=\"onNonRefundableSubmitSuccess($event)\"\n />\n }\n }\n </div>\n\n @if (allPackagesNonRefundable()) {\n <div class=\"select-rooms__notice select-rooms__notice--warning\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <!-- warning triangle icon -->\n <path\n d=\"M12 9v4M12 17h.01M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"\n stroke=\"currentColor\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <span>Sorry, we couldn't process your refund right now. Please chat with our Customer Service team for help.</span>\n </div>\n }\n </div>\n\n <div class=\"select-rooms__footer\">\n @if (allPackagesNonRefundable()) {\n <button\n class=\"main_btn main_btn--chat-with-us\"\n type=\"button\"\n (click)=\"onChatWithAgent()\"\n >\n Chat with customer service\n </button>\n } @else {\n @if (!hasSelectedPackages()) {\n <p class=\"select-rooms__hint\">\n Select at least one room to continue\n </p>\n }\n <button\n class=\"main_btn\"\n type=\"button\"\n [disabled]=\"!hasSelectedPackages()\"\n (click)=\"onContinue()\"\n >\n Continue to cancel\n </button>\n }\n </div>\n</div>\n", styles: [".select-rooms{display:flex;flex-direction:column;height:100%;background-color:#fff}.select-rooms__header{padding:16px;border-bottom:1px solid var(--almatar-neutral-border-default)}.select-rooms__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:8px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin:12px 0}.select-rooms__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.select-rooms__notice--info{background:var(--almatar-info-surface, #eaf2ff);border:1px solid var(--almatar-info-border, #b9d6ff);color:var(--almatar-info-text, #1a56db);border-radius:12px}.select-rooms__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.select-rooms__notice--default{background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f;border-radius:12px}.select-rooms__notice--default svg{color:#1b1a1f}.select-rooms__notice--warning{background:#faedcc;border:1px solid rgb(137,99,42);color:#89632a;border-radius:12px}.select-rooms__notice--warning svg{color:#89632a}.select-rooms__title{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:var(--almatar-neutral-text-primary-static);margin-bottom:4px}.select-rooms__subtitle{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static)}.select-rooms__content{flex:1;overflow-y:auto;padding:12px}.select-rooms__footer{padding:16px;background:var(--almatar-neutral-surface-card);border-top:1px solid rgb(217,217,222)}.select-rooms__hint{text-align:center;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);margin-bottom:12px}.hotel-info-card{background:var(--almatar-neutral-surface-card);border-radius:12px;padding:12px;margin-bottom:12px;border:1px solid rgb(217,217,222)}.hotel-info-card__name{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:var(--almatar-neutral-text-primary-static);margin-bottom:12px}.hotel-info-card__content{display:flex;align-items:stretch;gap:0}.hotel-info-card__image{width:120px;overflow:hidden;flex-shrink:0;padding-inline-end:12px;border-inline-end:1px solid rgb(217,217,222)}.hotel-info-card__image img{border-radius:5px;width:100%;height:100%;object-fit:cover;max-height:100px}.hotel-info-card__dates{display:flex;flex:1;border-inline-start:1px solid var(--almatar-neutral-border-default)}.hotel-info-card__stats{display:flex;flex-direction:column;justify-content:center;border-inline-start:1px solid var(--almatar-neutral-border-default);padding-inline-start:12px;margin-inline-start:0;min-width:70px}.date-box{display:flex;flex-direction:column;align-items:center;text-align:center;flex:1;padding:0 12px;border-inline-end:1px solid rgb(217,217,222);gap:4px}.date-box__label{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);text-transform:uppercase;letter-spacing:.5px}.date-box__day{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#491d95;line-height:1.2}.date-box__month{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static)}.date-box__day-name{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.date-box__time{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:var(--almatar-neutral-text-primary-static)}.stat-box{display:flex;flex-direction:column;align-items:center;text-align:center;padding:4px 0;border-bottom:1px solid rgb(217,217,222)}.stat-box:last-child{border-bottom:none}.stat-box__label{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);color:var(--almatar-neutral-text-secondary-static);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.stat-box__value{font-size:calc(18 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:var(--almatar-neutral-text-primary-static);line-height:1.3;color:#491d95}.rooms-list{display:flex;flex-direction:column;gap:12px}.main_btn{font-weight:var(--almatar-font-weight-medium);padding:17.5px;border-radius:6px;display:block;width:100%}.main_btn:disabled{opacity:.5;cursor:not-allowed}.main_btn--chat-with-us{background-color:#fff;border:1px solid rgb(217,217,222);color:#1b1a1f}button[disabled],input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{background-color:#747583;color:#b8b9c1;border-radius:12px}.info-banner{display:flex;gap:8px;border:1px solid rgb(11,84,194);border-radius:12px;padding:14px;align-items:flex-start;transition:all .3s cubic-bezier(.4,0,.2,1)}.info-banner__icon{color:#0b54c2;flex-shrink:0;width:20px;height:20px}.info-banner__content{flex:1}.info-banner__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;margin:0 0 4px;font-weight:var(--almatar-font-weight-regular);line-height:16px}.info-banner__subtext{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;margin:0;line-height:1.4}\n"] }]
|
|
87
|
+
}], ctorParameters: () => [] });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zZWxlY3Qtcm9vbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUzRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFLNUIsT0FBTyxFQUFFLG1EQUFtRCxFQUFFLE1BQU0sd0hBQXdILENBQUM7QUFDN0wsT0FBTyxFQUFFLHNEQUFzRCxFQUFFLE1BQU0sZ0lBQWdJLENBQUM7QUFDeE0sT0FBTyxFQUFFLDRDQUE0QyxFQUFF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QUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELDRCQUE0QixDQUFDLFdBQW1CO1FBQzlDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBTWxCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwQyxPQUFPO1lBQ0wsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDYixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDdkIsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDZCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDMUIsQ0FBQztJQUNKLENBQUM7K0dBcEhVLGdEQUFnRDttR0FBaEQsZ0RBQWdELDY2QkNwQzdELG9rS0FzSkEsNHBLRDFISSxZQUFZLCtCQUNaLG1EQUFtRCw2SkFDbkQsc0RBQXNEOzs0RkFNN0MsZ0RBQWdEO2tCQVo1RCxTQUFTOytCQUNFLDhDQUE4QyxjQUM1QyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtREFBbUQ7d0JBQ25ELHNEQUFzRDtxQkFDdkQsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBEZXN0cm95UmVmLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGVmZmVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge1xuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2UsXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZGFibGVSb29tQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uTm9uUmVmdW5kYWJsZVJvb21Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zZWxlY3Qtcm9vbXMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRhYmxlUm9vbUNvbXBvbmVudCxcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uTm9uUmVmdW5kYWJsZVJvb21Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VsZWN0Um9vbXNDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHNoYXJlZFNlcnZpY2UgPSBpbmplY3QoU2hhcmVkU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzU2VydmljZSA9IGluamVjdChcbiAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzU2VydmljZSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlID0gaW5qZWN0KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TZXJ2aWNlLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICByZWFkb25seSBwYWNrYWdlcyA9IGlucHV0LnJlcXVpcmVkPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPigpO1xuICByZWFkb25seSBpc0xvYWRpbmdSZWZ1bmQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gZ2V0IG9ubHkgdW4gY2FuY2VsbGVkIHBhY2thZ2VzXG4gICAgICAgIGNvbnN0IHBhY2thZ2VzTGlzdCA9IHRoaXMucGFja2FnZXMoKS5maWx0ZXIoXG4gICAgICAgICAgKHBrZzogYW55KSA9PiAhcGtnPy5pc0NhbmNlbGxlZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBhY2thZ2VzTGlzdC5sZW5ndGggPT09IDEgJiYgIXBhY2thZ2VzTGlzdFswXS5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYWNrYWdlID0geyAuLi5wYWNrYWdlc0xpc3RbMF0sIGlzU2VsZWN0ZWQ6IHRydWUgfTtcbiAgICAgICAgICB0aGlzLmxvY2FsUGFja2FnZXMuc2V0KFtzZWxlY3RlZFBhY2thZ2VdKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgcmVhZG9ubHkgaG90ZWxJbmZvID1cbiAgICBpbnB1dC5yZXF1aXJlZDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KCk7XG5cbiAgcmVhZG9ubHkgYm9va2luZ0lkID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyPignJyk7XG5cbiAgcmVhZG9ubHkgaG90ZWxJZCA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oJycpO1xuXG4gIHJlYWRvbmx5IGNvbnRpbnVlVG9DYW5jZWwgPSBvdXRwdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlW10+KCk7XG4gIHJlYWRvbmx5IGNsb3NlTW9kYWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBjaGF0V2l0aEFnZW50ID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgY3VycmVuY3lDb2RlID0gaW5wdXQ8c3RyaW5nPignU0FSJyk7XG5cbiAgcmVhZG9ubHkgbG9jYWxQYWNrYWdlcyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2VbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGRpc3BsYXlQYWNrYWdlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHRoaXMubG9jYWxQYWNrYWdlcygpO1xuICAgIHJldHVybiBsb2NhbC5sZW5ndGggPiAwID8gbG9jYWwgOiB0aGlzLnBhY2thZ2VzKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkUGFja2FnZXNDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuZGlzcGxheVBhY2thZ2VzKCkuZmlsdGVyKChwa2cpID0+IHBrZy5pc1NlbGVjdGVkKS5sZW5ndGgsXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzU2VsZWN0ZWRQYWNrYWdlcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VsZWN0ZWRQYWNrYWdlc0NvdW50KCkgPiAwLFxuICApO1xuXG4gIHJlYWRvbmx5IGlzU2luZ2xlUGFja2FnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFja2FnZXMoKS5sZW5ndGggPT09IDEpO1xuXG4gIHJlYWRvbmx5IHRvdGFsUm9vbXNDb3VudCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5wYWNrYWdlcygpLnJlZHVjZSgoYWNjLCBwa2cpID0+IGFjYyArIChwa2cucm9vbXM/Lmxlbmd0aCB8fCAwKSwgMCksXG4gICk7XG5cbiAgcmVhZG9ubHkgYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnBhY2thZ2VzKCkuZXZlcnkoKHBrZykgPT4gIXBrZy5pc1JlZnVuZGFibGUgJiYgIXBrZy5pc0NhbmNlbGxlZCksXG4gICk7XG5cbiAgdG9nZ2xlUGFja2FnZShwYWNrYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRQYWNrYWdlcyA9IHRoaXMuZGlzcGxheVBhY2thZ2VzKCk7XG4gICAgY29uc3QgdXBkYXRlZFBhY2thZ2VzID0gY3VycmVudFBhY2thZ2VzLm1hcCgocGtnKSA9PlxuICAgICAgcGtnLnBhY2thZ2VJZCA9PT0gcGFja2FnZUlkXG4gICAgICAgID8geyAuLi5wa2csIGlzU2VsZWN0ZWQ6ICFwa2cuaXNTZWxlY3RlZCB9XG4gICAgICAgIDogcGtnLFxuICAgICk7XG4gICAgdGhpcy5sb2NhbFBhY2thZ2VzLnNldCh1cGRhdGVkUGFja2FnZXMpO1xuICB9XG5cbiAgb25Db250aW51ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNTZWxlY3RlZFBhY2thZ2VzKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGFja2FnZXMgPSB0aGlzLmRpc3BsYXlQYWNrYWdlcygpLmZpbHRlcihcbiAgICAgICAgKHBrZykgPT4gcGtnLmlzU2VsZWN0ZWQgJiYgIXBrZy5pc0NhbmNlbGxlZCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbnRpbnVlVG9DYW5jZWwuZW1pdChzZWxlY3RlZFBhY2thZ2VzKTtcbiAgICB9XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBvbkNoYXRXaXRoQWdlbnQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGF0V2l0aEFnZW50LmVtaXQoKTtcbiAgfVxuXG4gIG9uTm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MocGFja2FnZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MuZW1pdChwYWNrYWdlTmFtZSk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IGFueSk6IHtcbiAgICBkYXk6IG51bWJlcjtcbiAgICBtb250aDogc3RyaW5nO1xuICAgIHllYXI6IG51bWJlcjtcbiAgICBkYXlOYW1lOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0QXBwTGFuZ3VhZ2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KGRhdGUpLmxvY2FsZShsYW5nKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IG0uZGF0ZSgpLFxuICAgICAgbW9udGg6IG0uZm9ybWF0KCdNTU1NJyksXG4gICAgICB5ZWFyOiBtLnllYXIoKSxcbiAgICAgIGRheU5hbWU6IG0uZm9ybWF0KCdkZGRkJyksXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNlbGVjdC1yb29tc1wiPlxuICA8ZGl2IGNsYXNzPVwic2VsZWN0LXJvb21zX19jb250ZW50XCI+XG4gICAgQGlmIChob3RlbEluZm8oKTsgYXMgaG90ZWwpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJob3RlbC1pbmZvLWNhcmRcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiaG90ZWwtaW5mby1jYXJkX19uYW1lXCI+e3sgaG90ZWwuaG90ZWxOYW1lIH19PC9oMz5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG90ZWwtaW5mby1jYXJkX19jb250ZW50XCI+XG4gICAgICAgICAgQGlmIChob3RlbC5ob3RlbEltYWdlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90ZWwtaW5mby1jYXJkX19pbWFnZVwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaG90ZWwuaG90ZWxJbWFnZVwiIFthbHRdPVwiaG90ZWwuaG90ZWxOYW1lXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RlbC1pbmZvLWNhcmRfX2RhdGVzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1ib3hcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlLWJveF9fbGFiZWxcIj5DSEVDSy1JTjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlLWJveF9fZGF5XCI+e3tcbiAgICAgICAgICAgICAgICBmb3JtYXREYXRlKGhvdGVsLmNoZWNrSW4pLmRheVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlLWJveF9fbW9udGhcIj57e1xuICAgICAgICAgICAgICAgIGZvcm1hdERhdGUoaG90ZWwuY2hlY2tJbikubW9udGhcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZS1ib3hfX2RheS1uYW1lXCI+e3tcbiAgICAgICAgICAgICAgICBmb3JtYXREYXRlKGhvdGVsLmNoZWNrSW4pLmRheU5hbWVcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZS1ib3hfX3RpbWVcIlxuICAgICAgICAgICAgICAgID5Gcm9tXG4gICAgICAgICAgICAgICAge3sgaG90ZWw/LmNoZWNrSW5UaW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1ib3hcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRlLWJveF9fbGFiZWxcIj5DSEVDSy1PVVQ8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZS1ib3hfX2RheVwiPnt7XG4gICAgICAgICAgICAgICAgZm9ybWF0RGF0ZShob3RlbC5jaGVja091dCkuZGF5XG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGUtYm94X19tb250aFwiPnt7XG4gICAgICAgICAgICAgICAgZm9ybWF0RGF0ZShob3RlbC5jaGVja091dCkubW9udGhcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0ZS1ib3hfX2RheS1uYW1lXCI+e3tcbiAgICAgICAgICAgICAgICBmb3JtYXREYXRlKGhvdGVsLmNoZWNrT3V0KS5kYXlOYW1lXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRhdGUtYm94X190aW1lXCJcbiAgICAgICAgICAgICAgICA+VW50aWxcbiAgICAgICAgICAgICAgICB7eyBob3RlbD8uY2hlY2tPdXRUaW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGVsLWluZm8tY2FyZF9fc3RhdHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0LWJveFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXQtYm94X19sYWJlbFwiPlJvb21zPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXQtYm94X192YWx1ZVwiPnt7IHRvdGFsUm9vbXNDb3VudCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdC1ib3hcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0LWJveF9fbGFiZWxcIj5OSUdIVFM8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdC1ib3hfX3ZhbHVlXCI+e3sgaG90ZWwubmlnaHRzIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1yb29tc19fbm90aWNlIHNlbGVjdC1yb29tc19fbm90aWNlLS1kZWZhdWx0XCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgY3g9XCIxMlwiXG4gICAgICAgICAgY3k9XCIxMlwiXG4gICAgICAgICAgcj1cIjlcIlxuICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42XCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTEyIDExdjUuNU0xMiA4di4wMVwiXG4gICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjZcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAvPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3Bhbj5cbiAgICAgICAgU29tZSByb29tcyBpbiBlYWNoIHBhY2thZ2UsIHNoYXJlIG9uZSBib29raW5nIHJlZmVyZW5jZSwgc28gdGhleSB3aWxsIGJlIGNhbmNlbGxlZCB0b2dldGhlci48L3NwYW5cbiAgICAgID5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb29tcy1saXN0XCI+XG4gICAgICBAZm9yIChwYWNrYWdlIG9mIGRpc3BsYXlQYWNrYWdlcygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgQGlmICghcGFja2FnZS5tYW51YWxSZWZ1bmRSZXF1ZXN0KSB7XG4gICAgICAgICAgPGFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kYWJsZS1yb29tXG4gICAgICAgICAgICBbcGFja2FnZV09XCJwYWNrYWdlXCJcbiAgICAgICAgICAgIFtoaWRlQ2hlY2tib3hdPVwiaXNTaW5nbGVQYWNrYWdlKClcIlxuICAgICAgICAgICAgKHRvZ2dsZVBhY2thZ2UpPVwidG9nZ2xlUGFja2FnZSgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8YWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tXG4gICAgICAgICAgICBbcGFja2FnZV09XCJwYWNrYWdlXCJcbiAgICAgICAgICAgIFthbGxQYWNrYWdlc109XCJkaXNwbGF5UGFja2FnZXMoKVwiXG4gICAgICAgICAgICBbaG90ZWxJbmZvXT1cImhvdGVsSW5mbygpXCJcbiAgICAgICAgICAgIFtob3RlbElkXT1cImhvdGVsSWQoKVwiXG4gICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cImN1cnJlbmN5Q29kZSgpXCJcbiAgICAgICAgICAgIFthbGxQYWNrYWdlc05vblJlZnVuZGFibGVdPVwiYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlKClcIlxuICAgICAgICAgICAgKGNsb3NlTW9kYWwpPVwib25DbG9zZSgpXCJcbiAgICAgICAgICAgIChub25SZWZ1bmRhYmxlU3VibWl0U3VjY2Vzcyk9XCJvbk5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtcm9vbXNfX25vdGljZSBzZWxlY3Qtcm9vbXNfX25vdGljZS0td2FybmluZ1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgIDwhLS0gd2FybmluZyB0cmlhbmdsZSBpY29uIC0tPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTEyIDl2NE0xMiAxN2guMDFNMTAuMjkgMy44NkwxLjgyIDE4YTIgMiAwIDAwMS43MSAzaDE2Ljk0YTIgMiAwIDAwMS43MS0zTDEzLjcxIDMuODZhMiAyIDAgMDAtMy40MiAwelwiXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42XCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3Bhbj5Tb3JyeSwgd2UgY291bGRuJ3QgcHJvY2VzcyB5b3VyIHJlZnVuZCByaWdodCBub3cuIFBsZWFzZSBjaGF0IHdpdGggb3VyIEN1c3RvbWVyIFNlcnZpY2UgdGVhbSBmb3IgaGVscC48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Qtcm9vbXNfX2Zvb3RlclwiPlxuICAgIEBpZiAoYWxsUGFja2FnZXNOb25SZWZ1bmRhYmxlKCkpIHtcbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJtYWluX2J0biBtYWluX2J0bi0tY2hhdC13aXRoLXVzXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvbkNoYXRXaXRoQWdlbnQoKVwiXG4gICAgICA+XG4gICAgICAgIENoYXQgd2l0aCBjdXN0b21lciBzZXJ2aWNlXG4gICAgICA8L2J1dHRvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpZiAoIWhhc1NlbGVjdGVkUGFja2FnZXMoKSkge1xuICAgICAgICA8cCBjbGFzcz1cInNlbGVjdC1yb29tc19faGludFwiPlxuICAgICAgICAgIFNlbGVjdCBhdCBsZWFzdCBvbmUgcm9vbSB0byBjb250aW51ZVxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwibWFpbl9idG5cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZFBhY2thZ2VzKClcIlxuICAgICAgICAoY2xpY2spPVwib25Db250aW51ZSgpXCJcbiAgICAgID5cbiAgICAgICAgQ29udGludWUgdG8gY2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy, input, output, signal, inject, DestroyRef, computed, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { TranslationService } from '../../../../../../shared/services/translation.service';
|
|
4
|
+
import { HttpClient, HttpEventType, HttpRequest } from '@angular/common/http';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { AlmatarIconModule } from '../../../../../../shared/modules/almatar-icon/almatar-icon.module';
|
|
7
|
+
import { AlmatarHotelAutoCancellationEndpointsEnum } from '../../../../enums/almatar-hotel-auto-cancellation-endpoints.enum';
|
|
8
|
+
import { AlmatarHotelAutoCancellationEndpointsService } from '../../../../services/almatar-hotel-auto-cancellation-endpoints.service';
|
|
9
|
+
import { DialogService } from 'primeng/dynamicdialog';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../../../../../shared/modules/almatar-icon/almatar-icon.module";
|
|
12
|
+
export class AlmatarHotelAutoCancellationNonRefundableRoomComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.http = inject(HttpClient);
|
|
15
|
+
this.destroyRef = inject(DestroyRef);
|
|
16
|
+
this.endpointsService = inject(AlmatarHotelAutoCancellationEndpointsService);
|
|
17
|
+
this.translateService = inject(TranslationService);
|
|
18
|
+
this.dialogService = inject(DialogService);
|
|
19
|
+
this.package = input.required();
|
|
20
|
+
this.allPackages = input([]);
|
|
21
|
+
this.hotelInfo = input(null);
|
|
22
|
+
// constructor(){effect(() => {
|
|
23
|
+
// console.log(this.package())
|
|
24
|
+
// })}
|
|
25
|
+
this.hotelId = input('');
|
|
26
|
+
this.currencyCode = input('SAR');
|
|
27
|
+
this.allPackagesNonRefundable = input(false);
|
|
28
|
+
this.useLocalCancellationPolicies = true;
|
|
29
|
+
this.closeModal = output();
|
|
30
|
+
this.nonRefundableSubmitSuccess = output();
|
|
31
|
+
this.uploadedFile = signal(null);
|
|
32
|
+
this.uploadedFileUrl = signal(null);
|
|
33
|
+
this.filePicked = signal(null);
|
|
34
|
+
this.uploadSuccess = signal(false);
|
|
35
|
+
this.uploadProgress = signal(0);
|
|
36
|
+
this.isUploading = signal(false);
|
|
37
|
+
this.isSubmitting = signal(false);
|
|
38
|
+
this.submitSuccess = signal(false);
|
|
39
|
+
this.submitError = signal(null);
|
|
40
|
+
this.groupedRooms = computed(() => {
|
|
41
|
+
const rooms = this.package()?.rooms || [];
|
|
42
|
+
const groupMap = new Map();
|
|
43
|
+
for (const room of rooms) {
|
|
44
|
+
// const bedTypeOrRoomType = room.bedType || room.roomType || '';
|
|
45
|
+
const bedTypeOrRoomType = room?.roomName;
|
|
46
|
+
const roomBasis = room.roomBasis || '';
|
|
47
|
+
const key = `${bedTypeOrRoomType}|||${roomBasis}`;
|
|
48
|
+
if (groupMap.has(key)) {
|
|
49
|
+
const group = groupMap.get(key);
|
|
50
|
+
group.count++;
|
|
51
|
+
group.rooms.push(room);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
groupMap.set(key, {
|
|
55
|
+
key,
|
|
56
|
+
bedTypeOrRoomType,
|
|
57
|
+
roomBasis,
|
|
58
|
+
count: 1,
|
|
59
|
+
rooms: [room],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return Array.from(groupMap.values());
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
onFileSelected(event) {
|
|
67
|
+
const input = event.target;
|
|
68
|
+
if (input.files && input.files.length > 0) {
|
|
69
|
+
const file = input.files[0];
|
|
70
|
+
this.filePicked.set(file);
|
|
71
|
+
this.uploadFile(file);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
uploadFile(file) {
|
|
75
|
+
this.isUploading.set(true);
|
|
76
|
+
this.uploadProgress.set(0);
|
|
77
|
+
this.uploadSuccess.set(false);
|
|
78
|
+
this.uploadedFileUrl.set(null);
|
|
79
|
+
const formData = new FormData();
|
|
80
|
+
formData.append('file', file);
|
|
81
|
+
const req = new HttpRequest('POST', AlmatarHotelAutoCancellationEndpointsEnum.uploadAttachment, formData, {
|
|
82
|
+
reportProgress: true,
|
|
83
|
+
responseType: 'json',
|
|
84
|
+
});
|
|
85
|
+
this.http
|
|
86
|
+
.request(req)
|
|
87
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
88
|
+
.subscribe({
|
|
89
|
+
next: (event) => {
|
|
90
|
+
if (event.type === HttpEventType.UploadProgress && event.total) {
|
|
91
|
+
const progress = Math.round((100 * event.loaded) / event.total);
|
|
92
|
+
this.uploadProgress.set(progress);
|
|
93
|
+
}
|
|
94
|
+
else if (event.type === HttpEventType.Response) {
|
|
95
|
+
this.uploadProgress.set(100);
|
|
96
|
+
this.isUploading.set(false);
|
|
97
|
+
this.uploadSuccess.set(true);
|
|
98
|
+
this.uploadedFile.set(file);
|
|
99
|
+
this.uploadedFileUrl.set(event.body?.data?.url ?? null);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
error: () => {
|
|
103
|
+
this.isUploading.set(false);
|
|
104
|
+
this.uploadProgress.set(0);
|
|
105
|
+
this.uploadSuccess.set(false);
|
|
106
|
+
this.filePicked.set(null);
|
|
107
|
+
this.uploadedFileUrl.set(null);
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
onSubmitRequest() {
|
|
112
|
+
const url = this.uploadedFileUrl();
|
|
113
|
+
if (!url) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
this.isSubmitting.set(true);
|
|
117
|
+
this.submitError.set(null);
|
|
118
|
+
this.submitSuccess.set(false);
|
|
119
|
+
const language = 'en';
|
|
120
|
+
this.endpointsService
|
|
121
|
+
.processNonRefundableCancellation(this.package().packageId, url, language)
|
|
122
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
123
|
+
.subscribe({
|
|
124
|
+
next: () => {
|
|
125
|
+
this.isSubmitting.set(false);
|
|
126
|
+
this.submitSuccess.set(true);
|
|
127
|
+
this.nonRefundableSubmitSuccess.emit(this.package().packageName);
|
|
128
|
+
},
|
|
129
|
+
error: (error) => {
|
|
130
|
+
this.isSubmitting.set(false);
|
|
131
|
+
this.submitError.set(error?.message || 'Failed to submit request');
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
onRetry() {
|
|
136
|
+
this.submitError.set(null);
|
|
137
|
+
this.onSubmitRequest();
|
|
138
|
+
}
|
|
139
|
+
onOpenCancellationPolicy() {
|
|
140
|
+
const hotelInfoData = this.hotelInfo();
|
|
141
|
+
const currencyCode = this.currencyCode();
|
|
142
|
+
// Use all packages if available, otherwise fall back to current package
|
|
143
|
+
const packagesToShow = this.allPackages().length > 0 ? this.allPackages() : [this.package()];
|
|
144
|
+
// Transform all packages with their cancellation policies
|
|
145
|
+
const packagesForPopup = packagesToShow.map((pkg) => {
|
|
146
|
+
// Transform cancellation policies to the format expected by mapCancellationPolicies
|
|
147
|
+
const rawCancellationPolicies = (pkg.cancellationPolicies || []).map((policy) => ({
|
|
148
|
+
dateFrom: policy.fromDate,
|
|
149
|
+
dateTo: policy.toDate,
|
|
150
|
+
currencyIsoCode: currencyCode,
|
|
151
|
+
finalPrice: policy.penaltyValue,
|
|
152
|
+
refundabilityType: policy.penaltyType === 'FullRefunded'
|
|
153
|
+
? 'FullRefunded'
|
|
154
|
+
: policy.penaltyType === 'Percentage' ||
|
|
155
|
+
policy.penaltyType === 'Amount'
|
|
156
|
+
? 'PartialRefunded'
|
|
157
|
+
: 'NonRefunded',
|
|
158
|
+
}));
|
|
159
|
+
// Ensure at least one policy exists
|
|
160
|
+
if (rawCancellationPolicies.length === 0) {
|
|
161
|
+
rawCancellationPolicies.push({
|
|
162
|
+
dateFrom: hotelInfoData?.checkIn,
|
|
163
|
+
dateTo: hotelInfoData?.checkOut,
|
|
164
|
+
currencyIsoCode: currencyCode,
|
|
165
|
+
finalPrice: pkg.cancellationFee || 0,
|
|
166
|
+
refundabilityType: pkg.isRefundable ? 'Refundable' : 'NonRefunded',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Build package data with all required fields
|
|
170
|
+
const remarks = pkg?.cancellationPoliciesRemarks ??
|
|
171
|
+
pkg?.CancellationPoliciesRemarks;
|
|
172
|
+
return {
|
|
173
|
+
...pkg,
|
|
174
|
+
cancellationPolicies: rawCancellationPolicies,
|
|
175
|
+
isRefundable: pkg.isRefundable ?? pkg.refundability ?? false,
|
|
176
|
+
refundableUntil: pkg.refundableUntil,
|
|
177
|
+
currency: currencyCode,
|
|
178
|
+
finalPrice: pkg.roomAmount,
|
|
179
|
+
bookingRemarks: remarks,
|
|
180
|
+
cancellationPoliciesRemarks: remarks,
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
const cartInfo = {
|
|
184
|
+
packages: packagesForPopup,
|
|
185
|
+
fromDate: hotelInfoData?.checkIn,
|
|
186
|
+
date_from: hotelInfoData?.checkIn,
|
|
187
|
+
toDate: hotelInfoData?.checkOut,
|
|
188
|
+
date_to: hotelInfoData?.checkOut,
|
|
189
|
+
almtaarHotelId: this.hotelId(),
|
|
190
|
+
};
|
|
191
|
+
const lang = 'en';
|
|
192
|
+
const formatDate = lang === 'en'
|
|
193
|
+
? 'dddd Do of MMMM YYYY - hh:mm A [GMT]'
|
|
194
|
+
: 'dddd , DD MMMM YYYY - hh:mm A [GMT]';
|
|
195
|
+
// TODO: Fix import path for CancellationPolicyPopupComponent
|
|
196
|
+
// import('libs/features/src/lib/features/hotels/shared/modules/hotel-booking-information/components/booking-summary/components/cancellation-policy-popup/cancellation-policy.popup.component').then(
|
|
197
|
+
// ({ CancellationPolicyPopupComponent }) => {
|
|
198
|
+
const header = this.translateService.instant('HOTEL.cancellation-policy');
|
|
199
|
+
console.warn('CancellationPolicyPopupComponent not available - import path needs to be fixed');
|
|
200
|
+
// this.dialogService.open(CancellationPolicyPopupComponent, {
|
|
201
|
+
// header,
|
|
202
|
+
// data: {
|
|
203
|
+
// cartInfo,
|
|
204
|
+
// currentCurrencyObj: {
|
|
205
|
+
// code: currencyCode,
|
|
206
|
+
// currency: currencyCode,
|
|
207
|
+
// },
|
|
208
|
+
// formatDate,
|
|
209
|
+
// hotelDetails: {
|
|
210
|
+
// hotelName: hotelInfoData?.hotelName,
|
|
211
|
+
// paymentOption: null,
|
|
212
|
+
// },
|
|
213
|
+
// },
|
|
214
|
+
// styleClass: 'cancellation-policy-dialog',
|
|
215
|
+
// contentStyle: { overflow: 'auto' },
|
|
216
|
+
// baseZIndex: 10000,
|
|
217
|
+
// maximizable: false,
|
|
218
|
+
// style: { width: '600px', maxWidth: '90%' },
|
|
219
|
+
// });
|
|
220
|
+
//},
|
|
221
|
+
//);
|
|
222
|
+
}
|
|
223
|
+
formatFileSize(bytes) {
|
|
224
|
+
if (!bytes) {
|
|
225
|
+
return '';
|
|
226
|
+
}
|
|
227
|
+
if (bytes < 1024) {
|
|
228
|
+
return `${bytes} B`;
|
|
229
|
+
}
|
|
230
|
+
if (bytes < 1024 * 1024) {
|
|
231
|
+
return `${Math.round(bytes / 1024)} KB`;
|
|
232
|
+
}
|
|
233
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
234
|
+
}
|
|
235
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationNonRefundableRoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
236
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationNonRefundableRoomComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation-non-refundable-room", inputs: { package: { classPropertyName: "package", publicName: "package", isSignal: true, isRequired: true, transformFunction: null }, allPackages: { classPropertyName: "allPackages", publicName: "allPackages", isSignal: true, isRequired: false, transformFunction: null }, hotelInfo: { classPropertyName: "hotelInfo", publicName: "hotelInfo", isSignal: true, isRequired: false, transformFunction: null }, hotelId: { classPropertyName: "hotelId", publicName: "hotelId", isSignal: true, isRequired: false, transformFunction: null }, currencyCode: { classPropertyName: "currencyCode", publicName: "currencyCode", isSignal: true, isRequired: false, transformFunction: null }, allPackagesNonRefundable: { classPropertyName: "allPackagesNonRefundable", publicName: "allPackagesNonRefundable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closeModal: "closeModal", nonRefundableSubmitSuccess: "nonRefundableSubmitSuccess" }, providers: [DialogService], ngImport: i0, template: "@if (!package().isCancelled) {\n <div class=\"package-item package-item--non-refundable\">\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n @if (\n allPackagesNonRefundable() ||\n (!package()?.isRefundable && !package()?.isCancelled)\n ) {\n NON-REFUNDABLE\n }\n @if (package()?.isCancelled) {\n PREVIOUS CANCELLATION\n }\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">\u2022</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class="info-message__link">cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} \u2022\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n </div>\n}\n", styles: [".package-item{display:flex;flex-direction:column;gap:12px;padding:12px;background:#fff;border:1px solid rgb(217,217,222);border-radius:16px;transition:border-color .2s ease,background-color .2s ease}.package-item--non-refundable{cursor:default}.package-item__header{display:flex;align-items:flex-start;gap:8px;width:100%}.package-item__content{flex:1;display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.package-item__info{display:flex;flex-direction:column;gap:4px}.package-item__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;margin:0}.package-item__board-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__refund-badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);text-transform:uppercase;padding:6px 8px;flex-shrink:0;border-radius:999px}.package-item__refund-badge--refundable{color:#15803c;background:#f0fdf5}.package-item__refund-badge--non-refundable{color:#6b7280;background:#f3f4f6}.package-item__rooms{display:flex;flex-direction:column;gap:8px}.package-item__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222)}.package-item__room-name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center;gap:0;margin:0}.package-item__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-item__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__non-refundable-content{display:flex;flex-direction:column;gap:8px;width:100%}.info-message{display:flex;gap:8px;padding:12px;background:#f7f7f8;border:1px solid rgb(217,217,222);border-radius:12px;align-items:center}.info-message__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.info-message__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;line-height:15.6px;margin:0;cursor:pointer}.info-message__text ::ng-deep a{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__text ::ng-deep a:focus,.info-message__text ::ng-deep a:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline!important;cursor:pointer}.info-message__link{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__link:focus,.info-message__link:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.upload-success{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-success__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.upload-success__info{flex:1;min-width:0}.upload-success__filename{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-success__meta{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0}.upload-success__change-btn{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-success__change-btn:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-success__change-btn:disabled{opacity:.5;cursor:not-allowed}.upload-section{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-section__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.upload-section__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px}.upload-section__subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0;line-height:1.4}.upload-section__button{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-section__button:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-section__button:disabled{opacity:.5;cursor:not-allowed}.upload-section__filename{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:8px 0 0;font-weight:var(--almatar-font-weight-medium)}.upload-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.upload-progress__bar{flex:1;height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.upload-progress__fill{height:100%;background:#7c3aed;border-radius:3px;transition:width .2s ease}.upload-progress__text{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#7c3aed;min-width:36px;text-align:right}.submit-request-btn{width:100%;padding:8px 0;background:#f7f7f8;border:none;border-radius:12px;color:#7c3aed;cursor:pointer;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);transition:all .2s ease;letter-spacing:.2px}.submit-request-btn:disabled{background:#f7f7f8;color:#b8b9c1;cursor:not-allowed}.submit-request-btn:disabled:hover{background:#f7f7f8;color:#b8b9c1}.submit-request-btn:hover{background:#f7f7f8;color:#7c3aed}.submit-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px}.submit-result--error{background:#fef2f2;border:1px solid rgba(220,38,38,.2);flex-wrap:wrap}.submit-result--error almatar-icon{color:#dc2626}.submit-result__text{flex:1;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;line-height:1.4;color:#dc2626}.submit-result__retry-btn{width:100%;margin-top:8px;padding:8px 16px;background:#dc2626;border:none;border-radius:8px;color:#fff;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease}.submit-result__retry-btn:hover{background:#b91c1c}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: i1.AlmatarIconComponent, selector: "almatar-icon", inputs: ["name", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
237
|
+
}
|
|
238
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationNonRefundableRoomComponent, decorators: [{
|
|
239
|
+
type: Component,
|
|
240
|
+
args: [{ selector: 'almatar-hotel-auto-cancellation-non-refundable-room', standalone: true, imports: [CommonModule, AlmatarIconModule], providers: [DialogService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!package().isCancelled) {\n <div class=\"package-item package-item--non-refundable\">\n <div class=\"package-item__header\">\n <div class=\"package-item__content\">\n <div class=\"package-item__info\">\n <h4 class=\"package-item__name\">{{ package().packageName }}</h4>\n @if (package().boardBasis) {\n <span class=\"package-item__board-basis\">{{\n package().boardBasis\n }}</span>\n }\n </div>\n\n <span\n class=\"package-item__refund-badge package-item__refund-badge--non-refundable\"\n >\n @if (\n allPackagesNonRefundable() ||\n (!package()?.isRefundable && !package()?.isCancelled)\n ) {\n NON-REFUNDABLE\n }\n @if (package()?.isCancelled) {\n PREVIOUS CANCELLATION\n }\n </span>\n </div>\n </div>\n\n @if (groupedRooms().length) {\n <div class=\"package-item__rooms\">\n @for (group of groupedRooms(); track i; let i = $index) {\n <div class=\"package-item__room\">\n <h5 class=\"package-item__room-name\">\n @if (group.count > 1) {\n {{ group.count }}x\n @if (group.bedTypeOrRoomType) {\n {{ group.bedTypeOrRoomType }}\n }\n } @else {\n Room\n {{ i + 1 }}\n @if (group.bedTypeOrRoomType) {\n <span class=\"package-item__separator\">\u2022</span>\n {{ group.bedTypeOrRoomType }}\n }\n }\n </h5>\n @if (group.roomBasis) {\n <span class=\"package-item__room-basis\">{{\n group.roomBasis\n }}</span>\n }\n </div>\n }\n </div>\n }\n\n @if (!package()?.isCancelled && !allPackagesNonRefundable()) {\n <div class=\"package-item__non-refundable-content\">\n <div class=\"info-message\">\n <almatar-icon [name]=\"'exclamation-circle'\"> </almatar-icon>\n <p\n class=\"info-message__text\"\n (click)=\"$event.preventDefault(); onOpenCancellationPolicy()\"\n [innerHTML]=\"\n 'We can\\'t process automatic cancellation with this room. Check the <a class="info-message__link">cancellation policy</a> for details'\n \"\n ></p>\n </div>\n\n @if (uploadSuccess()) {\n <div class=\"upload-success\">\n <span class=\"upload-success__icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.4697 8.20112C13.7626 7.90822 14.2373 7.90822 14.5302 8.20112C14.8231 8.49401 14.8231 8.96877 14.5302 9.26166L7.53022 16.2617C7.23732 16.5546 6.76256 16.5546 6.46967 16.2617L3.46967 13.2617C3.17678 12.9688 3.17678 12.494 3.46967 12.2011C3.74427 11.9265 4.17899 11.909 4.47358 12.1494L4.53022 12.2011L6.99994 14.6708L13.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n <path\n d=\"M19.4697 8.20112C19.7626 7.90822 20.2373 7.90822 20.5302 8.20112C20.8231 8.49401 20.8231 8.96877 20.5302 9.26166L13.5302 16.2617C13.2639 16.5279 12.8415 16.5556 12.5429 16.3261L11.5429 15.5576L11.4843 15.5078C11.2079 15.2468 11.1686 14.8137 11.4052 14.5058C11.6418 14.198 12.0703 14.1245 12.3935 14.3242L12.457 14.3681L12.9345 14.7353L19.4697 8.20112Z\"\n fill=\"#1B1A1F\"\n />\n </svg>\n </span>\n <div class=\"upload-success__info\">\n <p class=\"upload-success__filename\">{{ filePicked()?.name }}</p>\n <p class=\"upload-success__meta\">\n {{ formatFileSize(filePicked()?.size) }} \u2022\n Uploaded\n </p>\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-success__change-btn\"\n (click)=\"fileInput.click()\"\n >\n Change\n </button>\n </div>\n } @else {\n <div class=\"upload-section\">\n <almatar-icon [name]=\"'arrow-up-on-square'\"></almatar-icon>\n <div style=\"flex: 1\">\n <h5 class=\"upload-section__title\">\n Upload a document to support your request\n </h5>\n <p class=\"upload-section__subtitle\">\n Required to submit and track your request\n </p>\n @if (filePicked() && !uploadSuccess()) {\n <p class=\"upload-section__filename\">\n {{ filePicked()?.name }}\n </p>\n }\n @if (isUploading()) {\n <div class=\"upload-progress\">\n <div class=\"upload-progress__bar\">\n <div\n class=\"upload-progress__fill\"\n [style.width.%]=\"uploadProgress()\"\n ></div>\n </div>\n <span class=\"upload-progress__text\"\n >{{ uploadProgress() }}%</span\n >\n </div>\n }\n </div>\n <input\n type=\"file\"\n #fileInput\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".pdf,.jpg,.jpeg,.png,.doc,.docx\"\n />\n <button\n type=\"button\"\n class=\"upload-section__button\"\n [disabled]=\"isUploading()\"\n (click)=\"fileInput.click()\"\n >\n Upload file\n </button>\n </div>\n }\n\n @if (submitError()) {\n <div class=\"submit-result submit-result--error\">\n <almatar-icon [name]=\"'exclamation-circle'\"></almatar-icon>\n <p class=\"submit-result__text\">{{ submitError() }}</p>\n <button\n type=\"button\"\n class=\"submit-result__retry-btn\"\n (click)=\"onRetry()\"\n >\n Try Again\n </button>\n </div>\n } @else if (!submitSuccess()) {\n <button\n type=\"button\"\n class=\"submit-request-btn\"\n [disabled]=\"!uploadSuccess() || isSubmitting()\"\n (click)=\"onSubmitRequest()\"\n >\n @if (isSubmitting()) {\n Submitting...\n } @else {\n Submit my request\n }\n </button>\n }\n </div>\n }\n </div>\n}\n", styles: [".package-item{display:flex;flex-direction:column;gap:12px;padding:12px;background:#fff;border:1px solid rgb(217,217,222);border-radius:16px;transition:border-color .2s ease,background-color .2s ease}.package-item--non-refundable{cursor:default}.package-item__header{display:flex;align-items:flex-start;gap:8px;width:100%}.package-item__content{flex:1;display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.package-item__info{display:flex;flex-direction:column;gap:4px}.package-item__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;margin:0}.package-item__board-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__refund-badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);text-transform:uppercase;padding:6px 8px;flex-shrink:0;border-radius:999px}.package-item__refund-badge--refundable{color:#15803c;background:#f0fdf5}.package-item__refund-badge--non-refundable{color:#6b7280;background:#f3f4f6}.package-item__rooms{display:flex;flex-direction:column;gap:8px}.package-item__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222)}.package-item__room-name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center;gap:0;margin:0}.package-item__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-item__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583}.package-item__non-refundable-content{display:flex;flex-direction:column;gap:8px;width:100%}.info-message{display:flex;gap:8px;padding:12px;background:#f7f7f8;border:1px solid rgb(217,217,222);border-radius:12px;align-items:center}.info-message__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.info-message__text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;line-height:15.6px;margin:0;cursor:pointer}.info-message__text ::ng-deep a{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__text ::ng-deep a:focus,.info-message__text ::ng-deep a:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline!important;cursor:pointer}.info-message__link{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.info-message__link:focus,.info-message__link:hover{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f;text-decoration:underline;cursor:pointer}.upload-success{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-success__icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.upload-success__info{flex:1;min-width:0}.upload-success__filename{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.upload-success__meta{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0}.upload-success__change-btn{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-success__change-btn:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-success__change-btn:disabled{opacity:.5;cursor:not-allowed}.upload-section{display:flex;align-items:center;gap:12px;padding:12px;border:1px dashed rgb(217,217,222);border-radius:12px;background:#fff}.upload-section__icon{flex-shrink:0;width:24px;height:24px;color:#1b1a1f}.upload-section__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0 0 2px}.upload-section__subtitle{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:0;line-height:1.4}.upload-section__button{flex-shrink:0;padding:8px 14px;background:#fff;border:1.5px solid rgb(217,217,222);border-radius:8px;color:#7c3aed;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease;white-space:nowrap}.upload-section__button:hover:not(:disabled){background:#7c3aed;color:#fff}.upload-section__button:disabled{opacity:.5;cursor:not-allowed}.upload-section__filename{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;margin:8px 0 0;font-weight:var(--almatar-font-weight-medium)}.upload-progress{display:flex;align-items:center;gap:8px;margin-top:8px}.upload-progress__bar{flex:1;height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.upload-progress__fill{height:100%;background:#7c3aed;border-radius:3px;transition:width .2s ease}.upload-progress__text{font-size:calc(11 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#7c3aed;min-width:36px;text-align:right}.submit-request-btn{width:100%;padding:8px 0;background:#f7f7f8;border:none;border-radius:12px;color:#7c3aed;cursor:pointer;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);transition:all .2s ease;letter-spacing:.2px}.submit-request-btn:disabled{background:#f7f7f8;color:#b8b9c1;cursor:not-allowed}.submit-request-btn:disabled:hover{background:#f7f7f8;color:#b8b9c1}.submit-request-btn:hover{background:#f7f7f8;color:#7c3aed}.submit-result{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px}.submit-result--error{background:#fef2f2;border:1px solid rgba(220,38,38,.2);flex-wrap:wrap}.submit-result--error almatar-icon{color:#dc2626}.submit-result__text{flex:1;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);margin:0;line-height:1.4;color:#dc2626}.submit-result__retry-btn{width:100%;margin-top:8px;padding:8px 16px;background:#dc2626;border:none;border-radius:8px;color:#fff;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);cursor:pointer;transition:all .2s ease}.submit-result__retry-btn:hover{background:#b91c1c}\n"] }]
|
|
241
|
+
}] });
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXNlbGVjdC1yb29tcy9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLW5vbi1yZWZ1bmRhYmxlLXJvb20uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9jb21wb25lbnRzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tc2VsZWN0LXJvb21zL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tbm9uLXJlZnVuZGFibGUtcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENB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QUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUN4QixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDcEQsQ0FBQzsrR0F6UVUsc0RBQXNEO21HQUF0RCxzREFBc0Qsc2hDQVJ0RCxDQUFDLGFBQWEsQ0FBQywwQkNyQzVCLHUvTkE4TEEsMDhNRDFKWSxZQUFZLDhCQUFFLGlCQUFpQjs7NEZBUzlCLHNEQUFzRDtrQkFabEUsU0FBUzsrQkFDRSxxREFBcUQsY0FDbkQsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGFBQy9CLENBQUMsYUFBYSxDQUFDLG1CQU1ULHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIGluamVjdCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1xuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2UsXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblBhY2thZ2VSb29tLFxufSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWxtYXRhckljb25Nb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvbW9kdWxlcy9hbG1hdGFyLWljb24vYWxtYXRhci1pY29uLm1vZHVsZSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2VudW1zL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tZW5kcG9pbnRzLmVudW0nO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLWVuZHBvaW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuXG5pbnRlcmZhY2UgSUdyb3VwZWRQYWNrYWdlUm9vbSB7XG4gIGtleTogc3RyaW5nO1xuICBiZWRUeXBlT3JSb29tVHlwZTogc3RyaW5nO1xuICByb29tQmFzaXM6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgcm9vbXM6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVJvb21bXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQWxtYXRhckljb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlXSxcbiAgdGVtcGxhdGVVcmw6XG4gICAgJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1ub24tcmVmdW5kYWJsZS1yb29tLmNvbXBvbmVudC5zY3NzJyxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ob25SZWZ1bmRhYmxlUm9vbUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c1NlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c1NlcnZpY2UsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcblxuICByZWFkb25seSBwYWNrYWdlID0gaW5wdXQucmVxdWlyZWQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25QYWNrYWdlPigpO1xuICByZWFkb25seSBhbGxQYWNrYWdlcyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUGFja2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IGlucHV0PElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uSG90ZWxJbmZvIHwgbnVsbD4oXG4gICAgbnVsbCxcbiAgKTtcblxuICAvLyBjb25zdHJ1Y3Rvcigpe2VmZmVjdCgoKSA9PiB7XG4gIC8vICAgY29uc29sZS5sb2codGhpcy5wYWNrYWdlKCkpXG4gIC8vIH0pfVxuXG4gIHJlYWRvbmx5IGhvdGVsSWQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcbiAgcmVhZG9ubHkgY3VycmVuY3lDb2RlID0gaW5wdXQ8c3RyaW5nPignU0FSJyk7XG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzTm9uUmVmdW5kYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHVzZUxvY2FsQ2FuY2VsbGF0aW9uUG9saWNpZXMgPSB0cnVlO1xuXG4gIHJlYWRvbmx5IGNsb3NlTW9kYWwgPSBvdXRwdXQ8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbm9uUmVmdW5kYWJsZVN1Ym1pdFN1Y2Nlc3MgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZSA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZGVkRmlsZVVybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgZmlsZVBpY2tlZCA9IHNpZ25hbDxGaWxlIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHVwbG9hZFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1cGxvYWRQcm9ncmVzcyA9IHNpZ25hbDxudW1iZXI+KDApO1xuICByZWFkb25seSBpc1VwbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN1Ym1pdFN1Y2Nlc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzdWJtaXRFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBncm91cGVkUm9vbXMgPSBjb21wdXRlZDxJR3JvdXBlZFBhY2thZ2VSb29tW10+KCgpID0+IHtcbiAgICBjb25zdCByb29tcyA9IHRoaXMucGFja2FnZSgpPy5yb29tcyB8fCBbXTtcbiAgICBjb25zdCBncm91cE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJR3JvdXBlZFBhY2thZ2VSb29tPigpO1xuXG4gICAgZm9yIChjb25zdCByb29tIG9mIHJvb21zKSB7XG4gICAgICAvLyBjb25zdCBiZWRUeXBlT3JSb29tVHlwZSA9IHJvb20uYmVkVHlwZSB8fCByb29tLnJvb21UeXBlIHx8ICcnO1xuICAgICAgY29uc3QgYmVkVHlwZU9yUm9vbVR5cGUgPSByb29tPy5yb29tTmFtZTtcbiAgICAgIGNvbnN0IHJvb21CYXNpcyA9IHJvb20ucm9vbUJhc2lzIHx8ICcnO1xuICAgICAgY29uc3Qga2V5ID0gYCR7YmVkVHlwZU9yUm9vbVR5cGV9fHx8JHtyb29tQmFzaXN9YDtcblxuICAgICAgaWYgKGdyb3VwTWFwLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBNYXAuZ2V0KGtleSkhO1xuICAgICAgICBncm91cC5jb3VudCsrO1xuICAgICAgICBncm91cC5yb29tcy5wdXNoKHJvb20pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBNYXAuc2V0KGtleSwge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBiZWRUeXBlT3JSb29tVHlwZSxcbiAgICAgICAgICByb29tQmFzaXMsXG4gICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgcm9vbXM6IFtyb29tXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBNYXAudmFsdWVzKCkpO1xuICB9KTtcblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXNbMF07XG4gICAgICB0aGlzLmZpbGVQaWNrZWQuc2V0KGZpbGUpO1xuICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pc1VwbG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgdGhpcy51cGxvYWRlZEZpbGVVcmwuc2V0KG51bGwpO1xuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcblxuICAgIGNvbnN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdChcbiAgICAgICdQT1NUJyxcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLnVwbG9hZEF0dGFjaG1lbnQsXG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHtcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAucmVxdWVzdDx7IGRhdGE6IHsgdXJsOiBzdHJpbmcgfSB9PihyZXEpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcyAmJiBldmVudC50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCgxMDAgKiBldmVudC5sb2FkZWQpIC8gZXZlbnQudG90YWwpO1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQocHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMTAwKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudXBsb2FkU3VjY2Vzcy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZS5zZXQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQoZXZlbnQuYm9keT8uZGF0YT8udXJsID8/IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVXBsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5zZXQoMCk7XG4gICAgICAgICAgdGhpcy51cGxvYWRTdWNjZXNzLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5maWxlUGlja2VkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZVVybC5zZXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uU3VibWl0UmVxdWVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnVwbG9hZGVkRmlsZVVybCgpO1xuICAgIGlmICghdXJsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuc3VibWl0RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuc3VibWl0U3VjY2Vzcy5zZXQoZmFsc2UpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2UgPSAnZW4nO1xuXG4gICAgdGhpcy5lbmRwb2ludHNTZXJ2aWNlXG4gICAgICAucHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb24odGhpcy5wYWNrYWdlKCkucGFja2FnZUlkLCB1cmwsIGxhbmd1YWdlKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zdWJtaXRTdWNjZXNzLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLm5vblJlZnVuZGFibGVTdWJtaXRTdWNjZXNzLmVtaXQodGhpcy5wYWNrYWdlKCkucGFja2FnZU5hbWUpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdEVycm9yLnNldChlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHN1Ym1pdCByZXF1ZXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIG9uUmV0cnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5vblN1Ym1pdFJlcXVlc3QoKTtcbiAgfVxuXG4gIG9uT3BlbkNhbmNlbGxhdGlvblBvbGljeSgpOiB2b2lkIHtcbiAgICBjb25zdCBob3RlbEluZm9EYXRhID0gdGhpcy5ob3RlbEluZm8oKTtcbiAgICBjb25zdCBjdXJyZW5jeUNvZGUgPSB0aGlzLmN1cnJlbmN5Q29kZSgpO1xuXG4gICAgLy8gVXNlIGFsbCBwYWNrYWdlcyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3VycmVudCBwYWNrYWdlXG4gICAgY29uc3QgcGFja2FnZXNUb1Nob3cgPVxuICAgICAgdGhpcy5hbGxQYWNrYWdlcygpLmxlbmd0aCA+IDAgPyB0aGlzLmFsbFBhY2thZ2VzKCkgOiBbdGhpcy5wYWNrYWdlKCldO1xuXG4gICAgLy8gVHJhbnNmb3JtIGFsbCBwYWNrYWdlcyB3aXRoIHRoZWlyIGNhbmNlbGxhdGlvbiBwb2xpY2llc1xuICAgIGNvbnN0IHBhY2thZ2VzRm9yUG9wdXAgPSBwYWNrYWdlc1RvU2hvdy5tYXAoKHBrZykgPT4ge1xuICAgICAgLy8gVHJhbnNmb3JtIGNhbmNlbGxhdGlvbiBwb2xpY2llcyB0byB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IG1hcENhbmNlbGxhdGlvblBvbGljaWVzXG4gICAgICBjb25zdCByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyA9IChwa2cuY2FuY2VsbGF0aW9uUG9saWNpZXMgfHwgW10pLm1hcChcbiAgICAgICAgKHBvbGljeSkgPT4gKHtcbiAgICAgICAgICBkYXRlRnJvbTogcG9saWN5LmZyb21EYXRlLFxuICAgICAgICAgIGRhdGVUbzogcG9saWN5LnRvRGF0ZSxcbiAgICAgICAgICBjdXJyZW5jeUlzb0NvZGU6IGN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBmaW5hbFByaWNlOiBwb2xpY3kucGVuYWx0eVZhbHVlLFxuICAgICAgICAgIHJlZnVuZGFiaWxpdHlUeXBlOlxuICAgICAgICAgICAgcG9saWN5LnBlbmFsdHlUeXBlID09PSAnRnVsbFJlZnVuZGVkJ1xuICAgICAgICAgICAgICA/ICdGdWxsUmVmdW5kZWQnXG4gICAgICAgICAgICAgIDogcG9saWN5LnBlbmFsdHlUeXBlID09PSAnUGVyY2VudGFnZScgfHxcbiAgICAgICAgICAgICAgICAgIHBvbGljeS5wZW5hbHR5VHlwZSA9PT0gJ0Ftb3VudCdcbiAgICAgICAgICAgICAgICA/ICdQYXJ0aWFsUmVmdW5kZWQnXG4gICAgICAgICAgICAgICAgOiAnTm9uUmVmdW5kZWQnLFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEVuc3VyZSBhdCBsZWFzdCBvbmUgcG9saWN5IGV4aXN0c1xuICAgICAgaWYgKHJhd0NhbmNlbGxhdGlvblBvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdDYW5jZWxsYXRpb25Qb2xpY2llcy5wdXNoKHtcbiAgICAgICAgICBkYXRlRnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgICAgICBkYXRlVG86IGhvdGVsSW5mb0RhdGE/LmNoZWNrT3V0LFxuICAgICAgICAgIGN1cnJlbmN5SXNvQ29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAgIGZpbmFsUHJpY2U6IHBrZy5jYW5jZWxsYXRpb25GZWUgfHwgMCxcbiAgICAgICAgICByZWZ1bmRhYmlsaXR5VHlwZTogcGtnLmlzUmVmdW5kYWJsZSA/ICdSZWZ1bmRhYmxlJyA6ICdOb25SZWZ1bmRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCBwYWNrYWdlIGRhdGEgd2l0aCBhbGwgcmVxdWlyZWQgZmllbGRzXG4gICAgICBjb25zdCByZW1hcmtzID1cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5jYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3MgPz9cbiAgICAgICAgKHBrZyBhcyBhbnkpPy5DYW5jZWxsYXRpb25Qb2xpY2llc1JlbWFya3M7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wa2csXG4gICAgICAgIGNhbmNlbGxhdGlvblBvbGljaWVzOiByYXdDYW5jZWxsYXRpb25Qb2xpY2llcyxcbiAgICAgICAgaXNSZWZ1bmRhYmxlOiBwa2cuaXNSZWZ1bmRhYmxlID8/IHBrZy5yZWZ1bmRhYmlsaXR5ID8/IGZhbHNlLFxuICAgICAgICByZWZ1bmRhYmxlVW50aWw6IHBrZy5yZWZ1bmRhYmxlVW50aWwsXG4gICAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeUNvZGUsXG4gICAgICAgIGZpbmFsUHJpY2U6IHBrZy5yb29tQW1vdW50LFxuICAgICAgICBib29raW5nUmVtYXJrczogcmVtYXJrcyxcbiAgICAgICAgY2FuY2VsbGF0aW9uUG9saWNpZXNSZW1hcmtzOiByZW1hcmtzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNhcnRJbmZvID0ge1xuICAgICAgcGFja2FnZXM6IHBhY2thZ2VzRm9yUG9wdXAsXG4gICAgICBmcm9tRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIGRhdGVfZnJvbTogaG90ZWxJbmZvRGF0YT8uY2hlY2tJbixcbiAgICAgIHRvRGF0ZTogaG90ZWxJbmZvRGF0YT8uY2hlY2tPdXQsXG4gICAgICBkYXRlX3RvOiBob3RlbEluZm9EYXRhPy5jaGVja091dCxcbiAgICAgIGFsbXRhYXJIb3RlbElkOiB0aGlzLmhvdGVsSWQoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbGFuZyA9ICdlbic7XG4gICAgY29uc3QgZm9ybWF0RGF0ZSA9XG4gICAgICBsYW5nID09PSAnZW4nXG4gICAgICAgID8gJ2RkZGQgRG8gb2YgTU1NTSBZWVlZIC0gaGg6bW0gQSBbR01UXSdcbiAgICAgICAgOiAnZGRkZCAsIEREIE1NTU0gWVlZWSAtIGhoOm1tIEEgW0dNVF0nO1xuXG4gICAgLy8gVE9ETzogRml4IGltcG9ydCBwYXRoIGZvciBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudFxuICAgIC8vIGltcG9ydCgnbGlicy9mZWF0dXJlcy9zcmMvbGliL2ZlYXR1cmVzL2hvdGVscy9zaGFyZWQvbW9kdWxlcy9ob3RlbC1ib29raW5nLWluZm9ybWF0aW9uL2NvbXBvbmVudHMvYm9va2luZy1zdW1tYXJ5L2NvbXBvbmVudHMvY2FuY2VsbGF0aW9uLXBvbGljeS1wb3B1cC9jYW5jZWxsYXRpb24tcG9saWN5LnBvcHVwLmNvbXBvbmVudCcpLnRoZW4oXG4gICAgLy8gICAoeyBDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICdIT1RFTC5jYW5jZWxsYXRpb24tcG9saWN5JyxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdDYW5jZWxsYXRpb25Qb2xpY3lQb3B1cENvbXBvbmVudCBub3QgYXZhaWxhYmxlIC0gaW1wb3J0IHBhdGggbmVlZHMgdG8gYmUgZml4ZWQnKTtcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2FuY2VsbGF0aW9uUG9saWN5UG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgLy8gICBoZWFkZXIsXG4gICAgICAgIC8vICAgZGF0YToge1xuICAgICAgICAvLyAgICAgY2FydEluZm8sXG4gICAgICAgIC8vICAgICBjdXJyZW50Q3VycmVuY3lPYmo6IHtcbiAgICAgICAgLy8gICAgICAgY29kZTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgICBjdXJyZW5jeTogY3VycmVuY3lDb2RlLFxuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gICAgIGZvcm1hdERhdGUsXG4gICAgICAgIC8vICAgICBob3RlbERldGFpbHM6IHtcbiAgICAgICAgLy8gICAgICAgaG90ZWxOYW1lOiBob3RlbEluZm9EYXRhPy5ob3RlbE5hbWUsXG4gICAgICAgIC8vICAgICAgIHBheW1lbnRPcHRpb246IG51bGwsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vICAgc3R5bGVDbGFzczogJ2NhbmNlbGxhdGlvbi1wb2xpY3ktZGlhbG9nJyxcbiAgICAgICAgLy8gICBjb250ZW50U3R5bGU6IHsgb3ZlcmZsb3c6ICdhdXRvJyB9LFxuICAgICAgICAvLyAgIGJhc2VaSW5kZXg6IDEwMDAwLFxuICAgICAgICAvLyAgIG1heGltaXphYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICBzdHlsZTogeyB3aWR0aDogJzYwMHB4JywgbWF4V2lkdGg6ICc5MCUnIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgLy99LFxuICAgIC8vKTtcbiAgfVxuXG4gIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghYnl0ZXMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCkge1xuICAgICAgcmV0dXJuIGAke2J5dGVzfSBCYDtcbiAgICB9XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHtcbiAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKGJ5dGVzIC8gMTAyNCl9IEtCYDtcbiAgICB9XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9IE1CYDtcbiAgfVxufVxuIiwiQGlmICghcGFja2FnZSgpLmlzQ2FuY2VsbGVkKSB7XG4gIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW0gcGFja2FnZS1pdGVtLS1ub24tcmVmdW5kYWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX2hlYWRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19pbmZvXCI+XG4gICAgICAgICAgPGg0IGNsYXNzPVwicGFja2FnZS1pdGVtX19uYW1lXCI+e3sgcGFja2FnZSgpLnBhY2thZ2VOYW1lIH19PC9oND5cbiAgICAgICAgICBAaWYgKHBhY2thZ2UoKS5ib2FyZEJhc2lzKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fYm9hcmQtYmFzaXNcIj57e1xuICAgICAgICAgICAgICBwYWNrYWdlKCkuYm9hcmRCYXNpc1xuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UgcGFja2FnZS1pdGVtX19yZWZ1bmQtYmFkZ2UtLW5vbi1yZWZ1bmRhYmxlXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSB8fFxuICAgICAgICAgICAgKCFwYWNrYWdlKCk/LmlzUmVmdW5kYWJsZSAmJiAhcGFja2FnZSgpPy5pc0NhbmNlbGxlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIE5PTi1SRUZVTkRBQkxFXG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocGFja2FnZSgpPy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgUFJFVklPVVMgQ0FOQ0VMTEFUSU9OXG4gICAgICAgICAgfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoZ3JvdXBlZFJvb21zKCkubGVuZ3RoKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tc1wiPlxuICAgICAgICBAZm9yIChncm91cCBvZiBncm91cGVkUm9vbXMoKTsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1pdGVtX19yb29tXCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJwYWNrYWdlLWl0ZW1fX3Jvb20tbmFtZVwiPlxuICAgICAgICAgICAgICBAaWYgKGdyb3VwLmNvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgIHt7IGdyb3VwLmNvdW50IH19eFxuICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmJlZFR5cGVPclJvb21UeXBlIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBSb29tXG4gICAgICAgICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmJlZFR5cGVPclJvb21UeXBlKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fc2VwYXJhdG9yXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYmVkVHlwZU9yUm9vbVR5cGUgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDU+XG4gICAgICAgICAgICBAaWYgKGdyb3VwLnJvb21CYXNpcykge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fcm9vbS1iYXNpc1wiPnt7XG4gICAgICAgICAgICAgICAgZ3JvdXAucm9vbUJhc2lzXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKCFwYWNrYWdlKCk/LmlzQ2FuY2VsbGVkICYmICFhbGxQYWNrYWdlc05vblJlZnVuZGFibGUoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtaXRlbV9fbm9uLXJlZnVuZGFibGUtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1tZXNzYWdlXCI+XG4gICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInZXhjbGFtYXRpb24tY2lyY2xlJ1wiPiA8L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICA8cFxuICAgICAgICAgICAgY2xhc3M9XCJpbmZvLW1lc3NhZ2VfX3RleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvbk9wZW5DYW5jZWxsYXRpb25Qb2xpY3koKVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAnV2UgY2FuXFwndCBwcm9jZXNzIGF1dG9tYXRpYyBjYW5jZWxsYXRpb24gd2l0aCB0aGlzIHJvb20uIENoZWNrIHRoZSA8YSBjbGFzcz0mcXVvdDtpbmZvLW1lc3NhZ2VfX2xpbmsmcXVvdDs+Y2FuY2VsbGF0aW9uIHBvbGljeTwvYT4gZm9yIGRldGFpbHMnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAodXBsb2FkU3VjY2VzcygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19pY29uXCI+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTMuNDY5NyA4LjIwMTEyQzEzLjc2MjYgNy45MDgyMiAxNC4yMzczIDcuOTA4MjIgMTQuNTMwMiA4LjIwMTEyQzE0LjgyMzEgOC40OTQwMSAxNC44MjMxIDguOTY4NzcgMTQuNTMwMiA5LjI2MTY2TDcuNTMwMjIgMTYuMjYxN0M3LjIzNzMyIDE2LjU1NDYgNi43NjI1NiAxNi41NTQ2IDYuNDY5NjcgMTYuMjYxN0wzLjQ2OTY3IDEzLjI2MTdDMy4xNzY3OCAxMi45Njg4IDMuMTc2NzggMTIuNDk0IDMuNDY5NjcgMTIuMjAxMUMzLjc0NDI3IDExLjkyNjUgNC4xNzg5OSAxMS45MDkgNC40NzM1OCAxMi4xNDk0TDQuNTMwMjIgMTIuMjAxMUw2Ljk5OTk0IDE0LjY3MDhMMTMuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xOS40Njk3IDguMjAxMTJDMTkuNzYyNiA3LjkwODIyIDIwLjIzNzMgNy45MDgyMiAyMC41MzAyIDguMjAxMTJDMjAuODIzMSA4LjQ5NDAxIDIwLjgyMzEgOC45Njg3NyAyMC41MzAyIDkuMjYxNjZMMTMuNTMwMiAxNi4yNjE3QzEzLjI2MzkgMTYuNTI3OSAxMi44NDE1IDE2LjU1NTYgMTIuNTQyOSAxNi4zMjYxTDExLjU0MjkgMTUuNTU3NkwxMS40ODQzIDE1LjUwNzhDMTEuMjA3OSAxNS4yNDY4IDExLjE2ODYgMTQuODEzNyAxMS40MDUyIDE0LjUwNThDMTEuNjQxOCAxNC4xOTggMTIuMDcwMyAxNC4xMjQ1IDEyLjM5MzUgMTQuMzI0MkwxMi40NTcgMTQuMzY4MUwxMi45MzQ1IDE0LjczNTNMMTkuNDY5NyA4LjIwMTEyWlwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCMUExRlwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX2luZm9cIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtc3VjY2Vzc19fZmlsZW5hbWVcIj57eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXN1Y2Nlc3NfX21ldGFcIj5cbiAgICAgICAgICAgICAgICB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlUGlja2VkKCk/LnNpemUpIH19IOKAolxuICAgICAgICAgICAgICAgIFVwbG9hZGVkXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLC5qcGcsLmpwZWcsLnBuZywuZG9jLC5kb2N4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1zdWNjZXNzX19jaGFuZ2UtYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2hhbmdlXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIidhcnJvdy11cC1vbi1zcXVhcmUnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiPlxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbl9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICBVcGxvYWQgYSBkb2N1bWVudCB0byBzdXBwb3J0IHlvdXIgcmVxdWVzdFxuICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1zZWN0aW9uX19zdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIFJlcXVpcmVkIHRvIHN1Ym1pdCBhbmQgdHJhY2sgeW91ciByZXF1ZXN0XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgQGlmIChmaWxlUGlja2VkKCkgJiYgIXVwbG9hZFN1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2ZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWxlUGlja2VkKCk/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChpc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1wcm9ncmVzc19fZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwidXBsb2FkUHJvZ3Jlc3MoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWQtcHJvZ3Jlc3NfX3RleHRcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgdXBsb2FkUHJvZ3Jlc3MoKSB9fSU8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXG4gICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsLmpwZywuanBlZywucG5nLC5kb2MsLmRvY3hcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXNlY3Rpb25fX2J1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1VwbG9hZGluZygpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVXBsb2FkIGZpbGVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzdWJtaXRFcnJvcigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1Ym1pdC1yZXN1bHQgc3VibWl0LXJlc3VsdC0tZXJyb3JcIj5cbiAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2V4Y2xhbWF0aW9uLWNpcmNsZSdcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwic3VibWl0LXJlc3VsdF9fdGV4dFwiPnt7IHN1Ym1pdEVycm9yKCkgfX08L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXN1bHRfX3JldHJ5LWJ0blwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJldHJ5KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmICghc3VibWl0U3VjY2VzcygpKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInN1Ym1pdC1yZXF1ZXN0LWJ0blwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXVwbG9hZFN1Y2Nlc3MoKSB8fCBpc1N1Ym1pdHRpbmcoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXRSZXF1ZXN0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNTdWJtaXR0aW5nKCkpIHtcbiAgICAgICAgICAgICAgU3VibWl0dGluZy4uLlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIFN1Ym1pdCBteSByZXF1ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|