@almatar/smart-booking-dashboard 0.0.2-alpha.5 → 0.0.2-alpha.6
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/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +8 -9
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +9 -10
- package/fesm2022/almatar-smart-booking-dashboard.mjs +102 -105
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +3 -3
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +1 -1
- package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +1 -1
- package/lib/components/result-panel/result-panel.component.d.ts +1 -1
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -270,7 +270,7 @@ export class AlmatarHotelAutoCancellationRefundSummaryComponent {
|
|
|
270
270
|
return '';
|
|
271
271
|
}
|
|
272
272
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationRefundSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
273
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationRefundSummaryComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: { selectedRooms: { classPropertyName: "selectedRooms", publicName: "selectedRooms", 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 }, hotelInfo: { classPropertyName: "hotelInfo", publicName: "hotelInfo", isSignal: true, isRequired: false, transformFunction: null }, selectionSkipped: { classPropertyName: "selectionSkipped", publicName: "selectionSkipped", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keepRoom: "keepRoom", selectRefundOption: "selectRefundOption", closeModal: "closeModal" }, ngImport: i0, template: "<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary-skeleton />\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">•</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">•</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">•</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">•</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tabby within 3-5 business days.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tamara within 7-10 business days.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your loyalty points will be refunded instantly to your account.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (allPackagesCancelled()) {\n <div class=\"cancelled-status\">\n <div class=\"cancelled-status__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 <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M9 12L11 14L15 10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"cancelled-status__text\">\n <h4>All Rooms Cancelled</h4>\n <p>All packages in this booking have been cancelled</p>\n </div>\n </div>\n } @else {\n @if (totalRefund()) {\n <button\n class=\"btn btn--secondary\"\n type=\"button\"\n (click)=\"onKeepRoom()\"\n >\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n", styles: [".refund-summary{display:flex;flex-direction:column;height:100%}.refund-summary__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:8px;font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:16px}.refund-summary__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-summary__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}.refund-summary__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.refund-summary__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid rgb(229,231,235)}.refund-summary__header-text{flex:1;text-align:center}.refund-summary__header-title{font-size:calc(24 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0}.refund-summary__header-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:#7c3aed;padding:0}.refund-summary__header-btn svg{width:20px;height:20px}.refund-summary__header-btn:hover{opacity:.7}.refund-summary__content{flex:1;overflow-y:auto;padding:16px;background-color:#fff}.refund-summary__title{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin-bottom:16px}.refund-summary__error{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:linear-gradient(180deg,#fef2f280,#fff)}.refund-summary__error-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:32px 24px;background:#fff;border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #0000000f;max-width:320px;width:100%;animation:fadeInUp .4s ease-out}.refund-summary__error-icon-wrapper{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#fee2e2,#fecaca);display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#dc2626;animation:pulse 2s ease-in-out infinite}.refund-summary__error-title{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#374151;margin:0 0 24px;line-height:1.5}.refund-summary__error-btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff;border:none;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #7c3aed40}.refund-summary__error-btn:hover{transform:translateY(-2px);box-shadow:0 4px 16px #7c3aed59}.refund-summary__error-btn:active{transform:translateY(0)}.refund-summary__error-btn svg{transition:transform .3s ease}.refund-summary__error-btn:hover svg{transform:rotate(180deg)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.refund-summary__footer{display:flex;gap:12px;padding:16px 20px;background:#fff;border-top:1px solid rgb(229,231,235)}.package-cards{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.package-card{background:#fff;border:1px solid rgb(21,128,60);border-radius:12px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);padding:16px}.package-card__header{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer}.package-card__info{flex:1;min-width:0}.package-card__title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.package-card__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#000;line-height:20px;margin:0}.package-card__badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#15803c;background:#f0fdf5;padding:6px 8px;border-radius:999px;text-transform:uppercase;flex-shrink:0}.package-card__badge--cancelled{color:#92939e;background:#fff;border:1px solid rgb(217,217,222)}.package-card__header-expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center}.package-card__header-expand-icon.rotated{transform:rotate(180deg)}.package-card__expandable-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),margin-top .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-top:0}.package-card__expandable-content.expanded{opacity:1;max-height:1000px;transform:translateY(0);margin-top:12px}.package-card__rooms-container{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px}.package-card__rooms{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.package-card__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222);background:#fff}.package-card__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;flex-wrap:wrap;gap:0;margin:0}.package-card__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280}.package-card__room-summary{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;display:flex;align-items:center;flex-wrap:wrap;gap:0}.package-card__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-card__date{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280;margin-bottom:12px}.package-card__details{cursor:pointer;overflow:hidden}.package-card__expanded-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-bottom:0}.package-card__expanded-content.expanded{opacity:1;max-height:500px;transform:translateY(0);margin-bottom:0}.package-card__row{display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;margin-bottom:4px}.package-card__row--clickable{cursor:pointer}.package-card__row--total{margin-top:4px;font-weight:var(--almatar-font-weight-semibold);margin-bottom:0}.package-card__row:last-child{margin-bottom:0}.package-card__label{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;font-weight:var(--almatar-font-weight-regular)}.package-card__label--dark{color:#1b1a1f;font-weight:var(--almatar-font-weight-medium)}.package-card__label--dark-light{color:#1b1a1f}.package-card__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center}:host-context(#ltr) .package-card__value{flex-direction:row-reverse}.package-card__value{gap:2px}.package-card__value--gray{color:#747583}.package-card__value--highlight{font-weight:var(--almatar-font-weight-medium);font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f}.package-card__value--regular{font-weight:var(--almatar-font-weight-regular)}.package-card__expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:16px;height:16px}.package-card__expand-icon.rotated{transform:rotate(180deg)}.package-card--cancelled-before{border:1px solid transparent;background-color:#f7f7f8}.package-card--cancelled-before .package-card__label.package-card__label--dark,.package-card--cancelled-before .package-card__value.package-card__value--highlight{color:#15803c}.package-card--expanded .package-card__header{margin-bottom:0}.addons-refund{margin-bottom:4px}.addons-refund__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin:0 0 12px}.addons-refund__list{display:flex;flex-direction:column}.addons-refund__item{display:flex;justify-content:space-between;align-items:center}.addons-refund__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583}.addons-refund__value{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583;display:flex;align-items:center}:host-context(#ltr) .addons-refund__value{flex-direction:row-reverse}.addons-refund__value{gap:2px}.addons-refund__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:8px;background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f}.addons-refund__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px;color:#1b1a1f}.addons-refund__notice-text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0;line-height:1.5}.seperator{margin:12px 0;border:1px dashed rgb(217,217,222)}.total-summary{background:#f0f8ff;border-radius:12px;padding:16px;margin-bottom:16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.total-summary__row{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.total-summary__label{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;font-weight:var(--almatar-font-weight-regular)}.total-summary__label--highlight{font-weight:var(--almatar-font-weight-medium)}.total-summary__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#0b54c2;display:flex;align-items:center}:host-context(#ltr) .total-summary__value{flex-direction:row-reverse}.total-summary__value{gap:2px}.total-summary__value--highlight{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#0b54c2}.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}.btn{flex:1;padding:12px 20px;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);border:none;position:relative;overflow:hidden}.btn:before{content:\"\";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#fff3;transform:translate(-50%,-50%);transition:width .6s,height .6s}.btn:active:before{width:300px;height:300px}.btn--primary{background:#7c3aed;color:#fff}.btn--primary:hover{background:#6d28d9;transform:translateY(-1px);color:#fff;box-shadow:0 4px 12px #7c3aed4d}.btn--primary:active{transform:translateY(0)}.btn--secondary{background:#fff;color:#1b1a1f;border:1.5px solid rgb(229,231,235)}.btn--secondary:hover{background:#f9fafb;border-color:#d1d5db}.btn--secondary:active{background:#f3f4f6}.btn--danger{background:#fae3de;color:#dc2626;width:100%}.btn--danger:hover{color:#dc2626}.btn--danger:disabled{opacity:.7;cursor:not-allowed}.btn__spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cancelled-status{display:flex;align-items:center;gap:16px;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid rgba(21,128,60,.2);border-radius:12px;width:100%;animation:fadeInUp .4s ease-out}.cancelled-status__icon{width:48px;height:48px;border-radius:50%;background:#15803c;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cancelled-status__icon svg{width:24px;height:24px;stroke:#fff}.cancelled-status__text{flex:1}.cancelled-status__text h4{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#15803c;margin:0 0 4px}.cancelled-status__text p{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#166534;margin:0;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: i1.AlmatarIconComponent, selector: "almatar-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: ExchangePipeModule }, { kind: "pipe", type: i2.ExchangeRoundPipe, name: "exchange_round" }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummarySkeletonComponent, selector: "almatar-hotel-auto-cancellation-refund-summary-skeleton" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
273
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AlmatarHotelAutoCancellationRefundSummaryComponent, isStandalone: true, selector: "almatar-hotel-auto-cancellation-refund-summary", inputs: { selectedRooms: { classPropertyName: "selectedRooms", publicName: "selectedRooms", 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 }, hotelInfo: { classPropertyName: "hotelInfo", publicName: "hotelInfo", isSignal: true, isRequired: false, transformFunction: null }, selectionSkipped: { classPropertyName: "selectionSkipped", publicName: "selectionSkipped", isSignal: true, isRequired: false, transformFunction: null }, currency: { classPropertyName: "currency", publicName: "currency", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keepRoom: "keepRoom", selectRefundOption: "selectRefundOption", closeModal: "closeModal" }, ngImport: i0, template: "<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary-skeleton />\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">•</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">•</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">•</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">•</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, Tabby may take 5-7 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, Tamara may take up to 10 business days to reflect it.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your loyalty program may take some time to reflect it based on their policy.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (allPackagesCancelled()) {\n <div class=\"cancelled-status\">\n <div class=\"cancelled-status__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 <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M9 12L11 14L15 10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"cancelled-status__text\">\n <h4>All Rooms Cancelled</h4>\n <p>All packages in this booking have been cancelled</p>\n </div>\n </div>\n } @else {\n @if (totalRefund()) {\n <button\n class=\"btn btn--secondary\"\n type=\"button\"\n (click)=\"onKeepRoom()\"\n >\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n", styles: [".refund-summary{display:flex;flex-direction:column;height:100%}.refund-summary__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:8px;font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:16px}.refund-summary__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-summary__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}.refund-summary__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.refund-summary__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid rgb(229,231,235)}.refund-summary__header-text{flex:1;text-align:center}.refund-summary__header-title{font-size:calc(24 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0}.refund-summary__header-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:#7c3aed;padding:0}.refund-summary__header-btn svg{width:20px;height:20px}.refund-summary__header-btn:hover{opacity:.7}.refund-summary__content{flex:1;overflow-y:auto;padding:16px;background-color:#fff}.refund-summary__title{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin-bottom:16px}.refund-summary__error{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:linear-gradient(180deg,#fef2f280,#fff)}.refund-summary__error-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:32px 24px;background:#fff;border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #0000000f;max-width:320px;width:100%;animation:fadeInUp .4s ease-out}.refund-summary__error-icon-wrapper{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#fee2e2,#fecaca);display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#dc2626;animation:pulse 2s ease-in-out infinite}.refund-summary__error-title{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#374151;margin:0 0 24px;line-height:1.5}.refund-summary__error-btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff;border:none;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #7c3aed40}.refund-summary__error-btn:hover{transform:translateY(-2px);box-shadow:0 4px 16px #7c3aed59}.refund-summary__error-btn:active{transform:translateY(0)}.refund-summary__error-btn svg{transition:transform .3s ease}.refund-summary__error-btn:hover svg{transform:rotate(180deg)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.refund-summary__footer{display:flex;gap:12px;padding:16px 20px;background:#fff;border-top:1px solid rgb(229,231,235)}.package-cards{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.package-card{background:#fff;border:1px solid rgb(21,128,60);border-radius:12px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);padding:16px}.package-card__header{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer}.package-card__info{flex:1;min-width:0}.package-card__title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.package-card__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#000;line-height:20px;margin:0}.package-card__badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#15803c;background:#f0fdf5;padding:6px 8px;border-radius:999px;text-transform:uppercase;flex-shrink:0}.package-card__badge--cancelled{color:#92939e;background:#fff;border:1px solid rgb(217,217,222)}.package-card__header-expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center}.package-card__header-expand-icon.rotated{transform:rotate(180deg)}.package-card__expandable-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),margin-top .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-top:0}.package-card__expandable-content.expanded{opacity:1;max-height:1000px;transform:translateY(0);margin-top:12px}.package-card__rooms-container{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px}.package-card__rooms{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.package-card__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222);background:#fff}.package-card__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;flex-wrap:wrap;gap:0;margin:0}.package-card__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280}.package-card__room-summary{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;display:flex;align-items:center;flex-wrap:wrap;gap:0}.package-card__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-card__date{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280;margin-bottom:12px}.package-card__details{cursor:pointer;overflow:hidden}.package-card__expanded-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-bottom:0}.package-card__expanded-content.expanded{opacity:1;max-height:500px;transform:translateY(0);margin-bottom:0}.package-card__row{display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;margin-bottom:4px}.package-card__row--clickable{cursor:pointer}.package-card__row--total{margin-top:4px;font-weight:var(--almatar-font-weight-semibold);margin-bottom:0}.package-card__row:last-child{margin-bottom:0}.package-card__label{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;font-weight:var(--almatar-font-weight-regular)}.package-card__label--dark{color:#1b1a1f;font-weight:var(--almatar-font-weight-medium)}.package-card__label--dark-light{color:#1b1a1f}.package-card__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center}:host-context(#ltr) .package-card__value{flex-direction:row-reverse}.package-card__value{gap:2px}.package-card__value--gray{color:#747583}.package-card__value--highlight{font-weight:var(--almatar-font-weight-medium);font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f}.package-card__value--regular{font-weight:var(--almatar-font-weight-regular)}.package-card__expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:16px;height:16px}.package-card__expand-icon.rotated{transform:rotate(180deg)}.package-card--cancelled-before{border:1px solid transparent;background-color:#f7f7f8}.package-card--cancelled-before .package-card__label.package-card__label--dark,.package-card--cancelled-before .package-card__value.package-card__value--highlight{color:#15803c}.package-card--expanded .package-card__header{margin-bottom:0}.addons-refund{margin-bottom:4px}.addons-refund__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin:0 0 12px}.addons-refund__list{display:flex;flex-direction:column}.addons-refund__item{display:flex;justify-content:space-between;align-items:center}.addons-refund__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583}.addons-refund__value{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583;display:flex;align-items:center}:host-context(#ltr) .addons-refund__value{flex-direction:row-reverse}.addons-refund__value{gap:2px}.addons-refund__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:8px;background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f}.addons-refund__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px;color:#1b1a1f}.addons-refund__notice-text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0;line-height:1.5}.seperator{margin:12px 0;border:1px dashed rgb(217,217,222)}.total-summary{background:#f0f8ff;border-radius:12px;padding:16px;margin-bottom:16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.total-summary__row{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.total-summary__label{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;font-weight:var(--almatar-font-weight-regular)}.total-summary__label--highlight{font-weight:var(--almatar-font-weight-medium)}.total-summary__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#0b54c2;display:flex;align-items:center}:host-context(#ltr) .total-summary__value{flex-direction:row-reverse}.total-summary__value{gap:2px}.total-summary__value--highlight{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#0b54c2}.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}.btn{flex:1;padding:12px 20px;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);border:none;position:relative;overflow:hidden}.btn:before{content:\"\";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#fff3;transform:translate(-50%,-50%);transition:width .6s,height .6s}.btn:active:before{width:300px;height:300px}.btn--primary{background:#7c3aed;color:#fff}.btn--primary:hover{background:#6d28d9;transform:translateY(-1px);color:#fff;box-shadow:0 4px 12px #7c3aed4d}.btn--primary:active{transform:translateY(0)}.btn--secondary{background:#fff;color:#1b1a1f;border:1.5px solid rgb(229,231,235)}.btn--secondary:hover{background:#f9fafb;border-color:#d1d5db}.btn--secondary:active{background:#f3f4f6}.btn--danger{background:#fae3de;color:#dc2626;width:100%}.btn--danger:hover{color:#dc2626}.btn--danger:disabled{opacity:.7;cursor:not-allowed}.btn__spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cancelled-status{display:flex;align-items:center;gap:16px;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid rgba(21,128,60,.2);border-radius:12px;width:100%;animation:fadeInUp .4s ease-out}.cancelled-status__icon{width:48px;height:48px;border-radius:50%;background:#15803c;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cancelled-status__icon svg{width:24px;height:24px;stroke:#fff}.cancelled-status__text{flex:1}.cancelled-status__text h4{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#15803c;margin:0 0 4px}.cancelled-status__text p{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#166534;margin:0;line-height:1.5}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: AlmatarIconModule }, { kind: "component", type: i1.AlmatarIconComponent, selector: "almatar-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: ExchangePipeModule }, { kind: "pipe", type: i2.ExchangeRoundPipe, name: "exchange_round" }, { kind: "component", type: AlmatarHotelAutoCancellationRefundSummarySkeletonComponent, selector: "almatar-hotel-auto-cancellation-refund-summary-skeleton" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
274
274
|
}
|
|
275
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationRefundSummaryComponent, decorators: [{
|
|
276
276
|
type: Component,
|
|
@@ -283,6 +283,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
283
283
|
ConfirmModalComponent,
|
|
284
284
|
ManageBookingFailedModalComponent,
|
|
285
285
|
AlmatarHotelAutoCancellationRefundSummarySkeletonComponent,
|
|
286
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary-skeleton />\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">•</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">•</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">•</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">•</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tabby within 3-5 business days.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund will be processed to Tamara within 7-10 business days.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your loyalty points will be refunded instantly to your account.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (allPackagesCancelled()) {\n <div class=\"cancelled-status\">\n <div class=\"cancelled-status__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 <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M9 12L11 14L15 10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"cancelled-status__text\">\n <h4>All Rooms Cancelled</h4>\n <p>All packages in this booking have been cancelled</p>\n </div>\n </div>\n } @else {\n @if (totalRefund()) {\n <button\n class=\"btn btn--secondary\"\n type=\"button\"\n (click)=\"onKeepRoom()\"\n >\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n", styles: [".refund-summary{display:flex;flex-direction:column;height:100%}.refund-summary__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:8px;font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:16px}.refund-summary__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-summary__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}.refund-summary__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.refund-summary__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid rgb(229,231,235)}.refund-summary__header-text{flex:1;text-align:center}.refund-summary__header-title{font-size:calc(24 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0}.refund-summary__header-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:#7c3aed;padding:0}.refund-summary__header-btn svg{width:20px;height:20px}.refund-summary__header-btn:hover{opacity:.7}.refund-summary__content{flex:1;overflow-y:auto;padding:16px;background-color:#fff}.refund-summary__title{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin-bottom:16px}.refund-summary__error{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:linear-gradient(180deg,#fef2f280,#fff)}.refund-summary__error-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:32px 24px;background:#fff;border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #0000000f;max-width:320px;width:100%;animation:fadeInUp .4s ease-out}.refund-summary__error-icon-wrapper{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#fee2e2,#fecaca);display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#dc2626;animation:pulse 2s ease-in-out infinite}.refund-summary__error-title{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#374151;margin:0 0 24px;line-height:1.5}.refund-summary__error-btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff;border:none;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #7c3aed40}.refund-summary__error-btn:hover{transform:translateY(-2px);box-shadow:0 4px 16px #7c3aed59}.refund-summary__error-btn:active{transform:translateY(0)}.refund-summary__error-btn svg{transition:transform .3s ease}.refund-summary__error-btn:hover svg{transform:rotate(180deg)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.refund-summary__footer{display:flex;gap:12px;padding:16px 20px;background:#fff;border-top:1px solid rgb(229,231,235)}.package-cards{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.package-card{background:#fff;border:1px solid rgb(21,128,60);border-radius:12px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);padding:16px}.package-card__header{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer}.package-card__info{flex:1;min-width:0}.package-card__title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.package-card__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#000;line-height:20px;margin:0}.package-card__badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#15803c;background:#f0fdf5;padding:6px 8px;border-radius:999px;text-transform:uppercase;flex-shrink:0}.package-card__badge--cancelled{color:#92939e;background:#fff;border:1px solid rgb(217,217,222)}.package-card__header-expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center}.package-card__header-expand-icon.rotated{transform:rotate(180deg)}.package-card__expandable-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),margin-top .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-top:0}.package-card__expandable-content.expanded{opacity:1;max-height:1000px;transform:translateY(0);margin-top:12px}.package-card__rooms-container{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px}.package-card__rooms{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.package-card__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222);background:#fff}.package-card__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;flex-wrap:wrap;gap:0;margin:0}.package-card__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280}.package-card__room-summary{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;display:flex;align-items:center;flex-wrap:wrap;gap:0}.package-card__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-card__date{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280;margin-bottom:12px}.package-card__details{cursor:pointer;overflow:hidden}.package-card__expanded-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-bottom:0}.package-card__expanded-content.expanded{opacity:1;max-height:500px;transform:translateY(0);margin-bottom:0}.package-card__row{display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;margin-bottom:4px}.package-card__row--clickable{cursor:pointer}.package-card__row--total{margin-top:4px;font-weight:var(--almatar-font-weight-semibold);margin-bottom:0}.package-card__row:last-child{margin-bottom:0}.package-card__label{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;font-weight:var(--almatar-font-weight-regular)}.package-card__label--dark{color:#1b1a1f;font-weight:var(--almatar-font-weight-medium)}.package-card__label--dark-light{color:#1b1a1f}.package-card__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center}:host-context(#ltr) .package-card__value{flex-direction:row-reverse}.package-card__value{gap:2px}.package-card__value--gray{color:#747583}.package-card__value--highlight{font-weight:var(--almatar-font-weight-medium);font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f}.package-card__value--regular{font-weight:var(--almatar-font-weight-regular)}.package-card__expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:16px;height:16px}.package-card__expand-icon.rotated{transform:rotate(180deg)}.package-card--cancelled-before{border:1px solid transparent;background-color:#f7f7f8}.package-card--cancelled-before .package-card__label.package-card__label--dark,.package-card--cancelled-before .package-card__value.package-card__value--highlight{color:#15803c}.package-card--expanded .package-card__header{margin-bottom:0}.addons-refund{margin-bottom:4px}.addons-refund__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin:0 0 12px}.addons-refund__list{display:flex;flex-direction:column}.addons-refund__item{display:flex;justify-content:space-between;align-items:center}.addons-refund__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583}.addons-refund__value{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583;display:flex;align-items:center}:host-context(#ltr) .addons-refund__value{flex-direction:row-reverse}.addons-refund__value{gap:2px}.addons-refund__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:8px;background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f}.addons-refund__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px;color:#1b1a1f}.addons-refund__notice-text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0;line-height:1.5}.seperator{margin:12px 0;border:1px dashed rgb(217,217,222)}.total-summary{background:#f0f8ff;border-radius:12px;padding:16px;margin-bottom:16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.total-summary__row{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.total-summary__label{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;font-weight:var(--almatar-font-weight-regular)}.total-summary__label--highlight{font-weight:var(--almatar-font-weight-medium)}.total-summary__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#0b54c2;display:flex;align-items:center}:host-context(#ltr) .total-summary__value{flex-direction:row-reverse}.total-summary__value{gap:2px}.total-summary__value--highlight{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#0b54c2}.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}.btn{flex:1;padding:12px 20px;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);border:none;position:relative;overflow:hidden}.btn:before{content:\"\";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#fff3;transform:translate(-50%,-50%);transition:width .6s,height .6s}.btn:active:before{width:300px;height:300px}.btn--primary{background:#7c3aed;color:#fff}.btn--primary:hover{background:#6d28d9;transform:translateY(-1px);color:#fff;box-shadow:0 4px 12px #7c3aed4d}.btn--primary:active{transform:translateY(0)}.btn--secondary{background:#fff;color:#1b1a1f;border:1.5px solid rgb(229,231,235)}.btn--secondary:hover{background:#f9fafb;border-color:#d1d5db}.btn--secondary:active{background:#f3f4f6}.btn--danger{background:#fae3de;color:#dc2626;width:100%}.btn--danger:hover{color:#dc2626}.btn--danger:disabled{opacity:.7;cursor:not-allowed}.btn__spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cancelled-status{display:flex;align-items:center;gap:16px;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid rgba(21,128,60,.2);border-radius:12px;width:100%;animation:fadeInUp .4s ease-out}.cancelled-status__icon{width:48px;height:48px;border-radius:50%;background:#15803c;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cancelled-status__icon svg{width:24px;height:24px;stroke:#fff}.cancelled-status__text{flex:1}.cancelled-status__text h4{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#15803c;margin:0 0 4px}.cancelled-status__text p{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#166534;margin:0;line-height:1.5}\n"] }]
|
|
286
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"refund-summary\">\n <!-- Header -->\n <!-- <div class=\"refund-summary__header\">\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onKeepRoom()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"backArrow()\"></almatar-icon>\n </button>\n\n <div class=\"refund-summary__header-text\">\n <h3 class=\"refund-summary__header-title\">\n Cancel Booking Request\n </h3>\n </div>\n <button\n type=\"button\"\n class=\"refund-summary__header-btn\"\n (click)=\"onClose()\"\n aria-label=\"Close\"\n >\n <almatar-icon [name]=\"'x-mark'\"></almatar-icon>\n </button>\n </div> -->\n\n @if (isLoading()) {\n <almatar-hotel-auto-cancellation-refund-summary-skeleton />\n } @else if (error()) {\n <div class=\"refund-summary__error\">\n <div class=\"refund-summary__error-card\">\n <div class=\"refund-summary__error-icon-wrapper\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 8V12M12 16H12.01M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <h4 class=\"refund-summary__error-title\">\n Failed to load refund details. Please try again.\n </h4>\n <button\n class=\"refund-summary__error-btn\"\n type=\"button\"\n (click)=\"loadRefundDetails()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 4V10H7M23 20V14H17M20.49 9C19.9828 7.56678 19.1209 6.2854 17.9845 5.27542C16.8482 4.26543 15.4745 3.55976 13.9917 3.22426C12.5089 2.88875 10.9652 2.93434 9.50481 3.35677C8.04437 3.77921 6.71475 4.56471 5.64 5.64L1 10M23 14L18.36 18.36C17.2853 19.4353 15.9556 20.2208 14.4952 20.6432C13.0348 21.0657 11.4911 21.1112 10.0083 20.7757C8.52547 20.4402 7.1518 19.7346 6.01547 18.7246C4.87913 17.7146 4.01717 16.4332 3.51 15\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n Try Again\n </button>\n </div>\n </div>\n } @else {\n <div class=\"refund-summary__content\">\n <h3 class=\"refund-summary__title\">\n Refund summary\n </h3>\n\n <div class=\"package-cards\">\n @for (pkg of packages(); track i; let i = $index) {\n <div\n class=\"package-card\"\n [class.package-card--expanded]=\"isPackageExpanded(pkg.packageId)\"\n [class.package-card--cancelled-before]=\"pkg.cancelledBefore\"\n >\n <div\n class=\"package-card__header\"\n (click)=\"togglePackageExpand(pkg.packageId)\"\n >\n <div class=\"package-card__info\">\n <div class=\"package-card__title-row\">\n <h4 class=\"package-card__name\">{{ pkg.packageName }}</h4>\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__badge\">\n CURRENT CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n } @else {\n <span\n class=\"package-card__badge package-card__badge--cancelled\"\n >\n PREVIOUS CANCELLATION\n </span>\n <!-- <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span> -->\n }\n </div>\n </div>\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isPackageExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n </div>\n\n <!-- Rooms display -->\n @if (pkg.rooms?.length) {\n <div class=\"package-card__rooms-container\">\n @for (\n group of groupRoomsByName(pkg.rooms);\n track i;\n let i = $index\n ) {\n <div class=\"package-card__room-summary\">\n @if (group.count > 1) {\n <!-- Multiple rooms -->\n {{ group.count }}x {{ group.roomName }}\n } @else {\n <!-- Single room -->\n Room\n\n {{ i + 1 }}\n <span class=\"package-card__separator\">•</span>\n {{ group.roomName }}\n }\n @if (group.nights) {\n <span class=\"package-card__separator\">•</span>\n {{ group.nights }}\n @if (group.nights === 1) {\n night\n } @else {\n nights\n }\n }\n @if (group.adults) {\n <span class=\"package-card__separator\">•</span>\n {{ group.adults }}\n @if (group.adults === 1) {\n Adult\n } @else {\n Adults\n }\n }\n @if (group.children) {\n <span class=\"package-card__separator\">•</span>\n {{ group.children }}\n @if (group.children === 1) {\n Child\n } @else {\n Children\n }\n }\n </div>\n }\n </div>\n }\n\n @if (!pkg.cancelledBefore) {\n <span class=\"package-card__date\">\n Today on\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n } @else {\n <span class=\"package-card__date\">\n Cancellation date:\n {{ formatDate(pkg.cancellationDate) }}\n </span>\n }\n\n <!-- Room Amount Row with expand -->\n\n <!-- Expandable content: Rooms, Date, and Financial breakdown -->\n <div\n class=\"package-card__expandable-content\"\n [class.expanded]=\"isPackageExpanded(pkg.packageId)\"\n >\n <div\n class=\"package-card__row package-card__row--clickable\"\n (click)=\"\n toggleAmountExpand(pkg.packageId); $event.stopPropagation()\n \"\n >\n @if (pkg?.rooms?.length > 1) {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Rooms amount</span\n >\n } @else {\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >Room amount</span\n >\n }\n <span class=\"package-card__value package-card__value--regular\">\n @if (\n pkg.fee > 0 || pkg.serviceFee > 0 || surchargeAmount() > 0\n ) {\n <div\n class=\"package-card__expand-icon\"\n [class.rotated]=\"isAmountExpanded(pkg.packageId)\"\n >\n <almatar-icon [name]=\"'chevron-down'\"></almatar-icon>\n </div>\n }\n\n {{\n pkg.amount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n <!-- Expanded content: Cancellation fee and Service fee -->\n <div\n class=\"package-card__expanded-content\"\n [class.expanded]=\"\n isAmountExpanded(pkg.packageId) &&\n (pkg.fee > 0 || pkg.serviceFee > 0)\n \"\n >\n @if (pkg.fee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Cancellation fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.fee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (pkg.serviceFee > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">Service Fee</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n pkg.serviceFee | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n @if (surchargeAmount() > 0) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">\n Surcharge (2.5%)\n </span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n -\n {{\n surchargeAmount() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n <!-- Add-Ons Refund Section -->\n @if (giftsDetails().length > 0 && i === packages()?.length - 1) {\n <div class=\"addons-refund\">\n <span\n class=\"package-card__label package-card__label--dark-light\"\n >\n Add-Ons Refund\n </span>\n <div class=\"addons-refund__list\">\n @for (gift of giftsDetails(); track $index) {\n <div class=\"package-card__row\">\n <span class=\"package-card__label\">{{ gift.name }}</span>\n <span\n class=\"package-card__value package-card__value--gray package-card__value--regular\"\n >\n {{\n gift.toBeRefundedAmount | exchange_round\n }}\n {{ currentCurrency()?.code }}\n <!-- @if (!gift.refundable) {\n <span> - </span>\n } -->\n </span>\n </div>\n }\n </div>\n\n <!-- @if (giftsHasRefundableEntity()) {\n <div class=\"addons-refund__notice\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <path\n d=\"M10 9V14\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n <span class=\"addons-refund__notice-text\">\n Your add-on service/s refund will be processed separately by our Customer Service team shortly.\n </span>\n </div>\n } -->\n </div>\n }\n </div>\n <!-- End expandable content -->\n\n <!-- You will get back row - ALWAYS VISIBLE -->\n <div class=\"package-card__details\">\n @if (pkg.cancelledBefore) {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">Refunded amount</span>\n <span\n class=\"package-card__value package-card__value--highlight\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n } @else {\n <div class=\"package-card__row package-card__row--total\">\n <span class=\"package-card__label package-card__label--dark\">You will get back</span>\n <span\n class=\"package-card__value package-card__value--highlight package-card__value--regular\"\n >\n {{\n pkg.refund | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <hr class=\"seperator\" />\n\n <div class=\"total-summary\">\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Total paid</span>\n <span class=\"total-summary__value\">\n {{\n totalPaid() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n\n @if (alreadyRefunded()) {\n <div class=\"total-summary__row\">\n <span class=\"total-summary__label\">Rooms Refunded</span>\n <span class=\"total-summary__value\">\n {{\n alreadyRefunded() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n }\n\n <div class=\"total-summary__row total-summary__row--highlight\">\n <div class=\"total-summary__label total-summary__label--highlight\">\n <span>\n You'll get back for\n {{ currentRefundRoomsNumber() }}\n {{\n currentLang() !== 'ar'\n ? currentRefundRoomsNumber() > 1\n ? ('Rooms')\n : ('Room')\n : ''\n }}\n </span>\n </div>\n <span class=\"total-summary__value total-summary__value--highlight\">\n {{\n totalRefund() | exchange_round\n }}\n {{ currentCurrency()?.code }}\n </span>\n </div>\n </div>\n\n <div class=\"info-banner\">\n <div class=\"info-banner__icon\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 2L3 5V9C3 13.55 6.24 17.74 10 18.5C13.76 17.74 17 13.55 17 9V5L10 2Z\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7 10L9 12L13 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"info-banner__content\">\n @if (paymentMethod() === 'CH') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your bank may take up to 15 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TB') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, Tabby may take 5-7 business days to reflect it.\n </p>\n } @else if (paymentMethod() === 'TM') {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, Tamara may take up to 10 business days to reflect it.\n </p>\n } @else {\n <p class=\"info-banner__text\">\n Your refund is instant from our side, your loyalty program may take some time to reflect it based on their policy.\n </p>\n }\n\n <p class=\"info-banner__subtext\">\n You can select refund option in the next step\n </p>\n </div>\n </div>\n </div>\n\n <div class=\"refund-summary__footer\">\n @if (allPackagesCancelled()) {\n <div class=\"cancelled-status\">\n <div class=\"cancelled-status__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 <circle\n cx=\"12\"\n cy=\"12\"\n r=\"9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n />\n <path\n d=\"M9 12L11 14L15 10\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n <div class=\"cancelled-status__text\">\n <h4>All Rooms Cancelled</h4>\n <p>All packages in this booking have been cancelled</p>\n </div>\n </div>\n } @else {\n @if (totalRefund()) {\n <button\n class=\"btn btn--secondary\"\n type=\"button\"\n (click)=\"onKeepRoom()\"\n >\n Keep Room\n </button>\n <button\n class=\"btn btn--primary\"\n type=\"button\"\n (click)=\"onSelectRefundOption()\"\n >\n Select refund option\n </button>\n } @else {\n <button\n class=\"btn btn--danger\"\n type=\"button\"\n [disabled]=\"isCancelLoading()\"\n (click)=\"submitData()\"\n >\n @if (isCancelLoading()) {\n <span class=\"btn__spinner\"></span>\n } @else {\n Cancel Booking\n }\n </button>\n }\n }\n </div>\n }\n</div>\n\n<!-- Confirm Modal -->\n@if (showConfirmModalFlag()) {\n <div\n almatar-confirm-modal\n [Message]=\"'Your request has been submitted. Our customer service team will contact you shortly.'\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n\n<!-- Error Modal -->\n@if (showErrorModalFlag()) {\n <div\n almatar-manage-booking-failed-modal\n [errorMessage]=\"hotelManageError()\"\n (cancelEvent)=\"closeAllModals()\"\n (confirmEvent)=\"closeAllModals()\"\n ></div>\n}\n", styles: [".refund-summary{display:flex;flex-direction:column;height:100%}.refund-summary__notice{display:flex;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:8px;font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:16px}.refund-summary__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px}.refund-summary__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}.refund-summary__notice--info svg{color:var(--almatar-info-icon, #1a56db)}.refund-summary__header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background:#fff;border-bottom:1px solid rgb(229,231,235)}.refund-summary__header-text{flex:1;text-align:center}.refund-summary__header-title{font-size:calc(24 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0}.refund-summary__header-btn{display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;color:#7c3aed;padding:0}.refund-summary__header-btn svg{width:20px;height:20px}.refund-summary__header-btn:hover{opacity:.7}.refund-summary__content{flex:1;overflow-y:auto;padding:16px;background-color:#fff}.refund-summary__title{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin-bottom:16px}.refund-summary__error{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:linear-gradient(180deg,#fef2f280,#fff)}.refund-summary__error-card{display:flex;flex-direction:column;align-items:center;text-align:center;padding:32px 24px;background:#fff;border-radius:16px;box-shadow:0 1px 3px #0000000a,0 4px 12px #0000000f;max-width:320px;width:100%;animation:fadeInUp .4s ease-out}.refund-summary__error-icon-wrapper{width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#fee2e2,#fecaca);display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#dc2626;animation:pulse 2s ease-in-out infinite}.refund-summary__error-title{font-size:calc(15 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#374151;margin:0 0 24px;line-height:1.5}.refund-summary__error-btn{display:inline-flex;align-items:center;gap:8px;padding:12px 24px;background:linear-gradient(135deg,#7c3aed,#6d28d9);color:#fff;border:none;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 8px #7c3aed40}.refund-summary__error-btn:hover{transform:translateY(-2px);box-shadow:0 4px 16px #7c3aed59}.refund-summary__error-btn:active{transform:translateY(0)}.refund-summary__error-btn svg{transition:transform .3s ease}.refund-summary__error-btn:hover svg{transform:rotate(180deg)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.refund-summary__footer{display:flex;gap:12px;padding:16px 20px;background:#fff;border-top:1px solid rgb(229,231,235)}.package-cards{display:flex;flex-direction:column;gap:12px;margin-bottom:12px}.package-card{background:#fff;border:1px solid rgb(21,128,60);border-radius:12px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);padding:16px}.package-card__header{display:flex;justify-content:space-between;align-items:center;gap:12px;cursor:pointer}.package-card__info{flex:1;min-width:0}.package-card__title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.package-card__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#000;line-height:20px;margin:0}.package-card__badge{font-size:calc(10 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#15803c;background:#f0fdf5;padding:6px 8px;border-radius:999px;text-transform:uppercase;flex-shrink:0}.package-card__badge--cancelled{color:#92939e;background:#fff;border:1px solid rgb(217,217,222)}.package-card__header-expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center}.package-card__header-expand-icon.rotated{transform:rotate(180deg)}.package-card__expandable-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1),margin-top .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-top:0}.package-card__expandable-content.expanded{opacity:1;max-height:1000px;transform:translateY(0);margin-top:12px}.package-card__rooms-container{display:flex;flex-direction:column;gap:4px;margin:8px 0 4px}.package-card__rooms{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.package-card__room{display:flex;flex-direction:column;gap:4px;padding:12px;border-radius:16px;border:1px solid rgb(217,217,222);background:#fff}.package-card__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;flex-wrap:wrap;gap:0;margin:0}.package-card__room-basis{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280}.package-card__room-summary{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;display:flex;align-items:center;flex-wrap:wrap;gap:0}.package-card__separator{margin:0 4px;color:#1f2937;font-weight:var(--almatar-font-weight-regular)}.package-card__date{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#6b7280;margin-bottom:12px}.package-card__details{cursor:pointer;overflow:hidden}.package-card__expanded-content{opacity:0;max-height:0;transform:translateY(-10px);transition:opacity .3s cubic-bezier(.4,0,.2,1),max-height .3s cubic-bezier(.4,0,.2,1),transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden;margin-bottom:0}.package-card__expanded-content.expanded{opacity:1;max-height:500px;transform:translateY(0);margin-bottom:0}.package-card__row{display:flex;justify-content:space-between;align-items:center;transition:all .2s ease;margin-bottom:4px}.package-card__row--clickable{cursor:pointer}.package-card__row--total{margin-top:4px;font-weight:var(--almatar-font-weight-semibold);margin-bottom:0}.package-card__row:last-child{margin-bottom:0}.package-card__label{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);color:#747583;font-weight:var(--almatar-font-weight-regular)}.package-card__label--dark{color:#1b1a1f;font-weight:var(--almatar-font-weight-medium)}.package-card__label--dark-light{color:#1b1a1f}.package-card__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-medium);color:#1b1a1f;display:flex;align-items:center}:host-context(#ltr) .package-card__value{flex-direction:row-reverse}.package-card__value{gap:2px}.package-card__value--gray{color:#747583}.package-card__value--highlight{font-weight:var(--almatar-font-weight-medium);font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#1b1a1f}.package-card__value--regular{font-weight:var(--almatar-font-weight-regular)}.package-card__expand-icon{color:currentColor;transition:transform .3s cubic-bezier(.4,0,.2,1);flex-shrink:0;width:16px;height:16px}.package-card__expand-icon.rotated{transform:rotate(180deg)}.package-card--cancelled-before{border:1px solid transparent;background-color:#f7f7f8}.package-card--cancelled-before .package-card__label.package-card__label--dark,.package-card--cancelled-before .package-card__value.package-card__value--highlight{color:#15803c}.package-card--expanded .package-card__header{margin-bottom:0}.addons-refund{margin-bottom:4px}.addons-refund__title{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#1b1a1f;margin:0 0 12px}.addons-refund__list{display:flex;flex-direction:column}.addons-refund__item{display:flex;justify-content:space-between;align-items:center}.addons-refund__name{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583}.addons-refund__value{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#747583;display:flex;align-items:center}:host-context(#ltr) .addons-refund__value{flex-direction:row-reverse}.addons-refund__value{gap:2px}.addons-refund__notice{display:flex;align-items:center;gap:8px;padding:12px;border-radius:12px;font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:400;margin-top:8px;background:#f7f7f8;border:1px solid rgb(217,217,222);color:#1b1a1f}.addons-refund__notice svg{flex-shrink:0;width:18px;height:18px;margin-top:1px;color:#1b1a1f}.addons-refund__notice-text{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#1b1a1f;margin:0;line-height:1.5}.seperator{margin:12px 0;border:1px dashed rgb(217,217,222)}.total-summary{background:#f0f8ff;border-radius:12px;padding:16px;margin-bottom:16px;transition:all .3s cubic-bezier(.4,0,.2,1)}.total-summary__row{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.total-summary__label{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);color:#0b54c2;font-weight:var(--almatar-font-weight-regular)}.total-summary__label--highlight{font-weight:var(--almatar-font-weight-medium)}.total-summary__value{font-size:calc(13 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#0b54c2;display:flex;align-items:center}:host-context(#ltr) .total-summary__value{flex-direction:row-reverse}.total-summary__value{gap:2px}.total-summary__value--highlight{font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-bold);color:#0b54c2}.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}.btn{flex:1;padding:12px 20px;border-radius:10px;font-size:calc(14 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);border:none;position:relative;overflow:hidden}.btn:before{content:\"\";position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:#fff3;transform:translate(-50%,-50%);transition:width .6s,height .6s}.btn:active:before{width:300px;height:300px}.btn--primary{background:#7c3aed;color:#fff}.btn--primary:hover{background:#6d28d9;transform:translateY(-1px);color:#fff;box-shadow:0 4px 12px #7c3aed4d}.btn--primary:active{transform:translateY(0)}.btn--secondary{background:#fff;color:#1b1a1f;border:1.5px solid rgb(229,231,235)}.btn--secondary:hover{background:#f9fafb;border-color:#d1d5db}.btn--secondary:active{background:#f3f4f6}.btn--danger{background:#fae3de;color:#dc2626;width:100%}.btn--danger:hover{color:#dc2626}.btn--danger:disabled{opacity:.7;cursor:not-allowed}.btn__spinner{display:inline-block;width:18px;height:18px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cancelled-status{display:flex;align-items:center;gap:16px;padding:20px;background:linear-gradient(135deg,#f0fdf5,#dcfce7);border:1px solid rgba(21,128,60,.2);border-radius:12px;width:100%;animation:fadeInUp .4s ease-out}.cancelled-status__icon{width:48px;height:48px;border-radius:50%;background:#15803c;display:flex;align-items:center;justify-content:center;flex-shrink:0}.cancelled-status__icon svg{width:24px;height:24px;stroke:#fff}.cancelled-status__text{flex:1}.cancelled-status__text h4{font-size:calc(16 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-semibold);color:#15803c;margin:0 0 4px}.cancelled-status__text p{font-size:calc(12 * var(--almatar-font-size-ratio, 1) * 1px);font-weight:var(--almatar-font-weight-regular);color:#166534;margin:0;line-height:1.5}\n"] }]
|
|
287
287
|
}], ctorParameters: () => [] });
|
|
288
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFTL0UsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDaEksT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDN0csT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDaEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0VBQStFLENBQUM7QUFDMUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGdHQUFnRyxDQUFDO0FBQ3BKLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRFQUE0RSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSw4RkFBOEYsQ0FBQztBQUNqSixPQUFPLEVBQUUsMERBQTBELEVBQUUsTUFBTSw4SEFBOEgsQ0FBQzs7OztBQXNCMU0sTUFBTSxPQUFPLGtEQUFrRDtJQW1CN0Q7UUFsQmlCLHFCQUFnQixHQUFHLE1BQU0sQ0FDeEMsNENBQTRDLENBQzdDLENBQUM7UUFFZSw0QkFBdUIsR0FBRyxNQUFNLENBQy9DLG1DQUFtQyxDQUNwQyxDQUFDO1FBRWUsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5Qyx3Q0FBbUMsR0FBRyxNQUFNLENBQzNELGtDQUFrQyxDQUNuQyxDQUFDO1FBRWUsOEJBQXlCLEdBQUcsTUFBTSxDQUNqRCx5QkFBeUIsQ0FDMUIsQ0FBQztRQVlGLFdBQVc7UUFDRixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsb0JBQWUsR0FBRyxNQUFNLENBQU0sSUFBSSxDQUFDLENBQUM7UUFFcEMsa0JBQWEsR0FBRyxNQUFNLENBQU0sSUFBSSxDQUFDLENBQUM7UUFFM0MsV0FBVztRQUNGLGdCQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLGtCQUFhLEdBQ3BCLEtBQUssQ0FBQyxRQUFRLEVBQXVDLENBQUM7UUFFL0MsY0FBUyxHQUFHLEtBQUssQ0FBa0IsRUFBRSxDQUFDLENBQUM7UUFFdkMsWUFBTyxHQUFHLEtBQUssQ0FBa0IsRUFBRSxDQUFDLENBQUM7UUFFckMsY0FBUyxHQUFHLEtBQUssQ0FDeEIsSUFBSSxDQUNMLENBQUM7UUFFTyxxQkFBZ0IsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFekMsYUFBUSxHQUFHLEtBQUssQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUU1QixhQUFRLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFDMUIsdUJBQWtCLEdBQUcsTUFBTSxFQUtoQyxDQUFDO1FBRUksZUFBVSxHQUFHLE1BQU0sRUFBUSxDQUFDO1FBRTVCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpDLGNBQWM7UUFDTCx5QkFBb0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLHFCQUFnQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUUvQyxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QixPQUFPLFlBQVksQ0FBQyxDQUFDLHlCQUF5QjtRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVNLHVCQUFrQixHQUFHLE1BQU0sQ0FBYyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsTUFBTSxDQUFjLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRCxjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLGtCQUFhLEdBQ3BCLE1BQU0sQ0FBb0QsSUFBSSxDQUFDLENBQUM7UUFFekQsVUFBSyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDcEMsaUJBQVksR0FBRyxNQUFNLENBQWEsSUFBSSxDQUFDLENBQUM7UUFFeEMsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBNkMxRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFaEUseUJBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDeEMsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRU0sNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsT0FBTyxRQUFRO2lCQUNaLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO2lCQUNyQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVNLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRSxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLG9CQUFlLEdBQUcsUUFBUSxDQUNqQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxJQUFJLENBQUMsQ0FDMUMsQ0FBQztRQUVPLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRSxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUQsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUNuRCxDQUFDO1FBRU8sdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUMxQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3hFLENBQUM7UUFFRiw4QkFBOEI7UUFDckIsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRSxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkUsaUJBQVksR0FBRyxRQUFRLENBQzlCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxZQUFZLElBQUksRUFBRSxDQUMvQyxDQUFDO1FBRU8sNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzNELENBQUM7UUFFTyxxQkFBZ0IsR0FBRyxRQUFRLENBQ2xDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxVQUFVLElBQUksQ0FBQyxDQUM1QyxDQUFDO1FBRU8sb0JBQWUsR0FBRyxRQUFRLENBQ2pDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUMzQyxDQUFDO1FBRU8saUJBQVksR0FBRyxRQUFRLENBQzlCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxVQUFVLElBQUksS0FBSyxDQUNoRCxDQUFDO1FBRU8sZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3pELGtCQUFhLEdBQUcsUUFBUSxDQUMvQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FDaEQsQ0FBQztRQUVGLDRDQUE0QztRQUNuQyxrQkFBYSxHQUFHLFFBQVEsQ0FDL0IsR0FBRyxFQUFFLENBQ0gsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQztZQUMzQixJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUM3QixDQUFDO1FBOUtBLDBCQUEwQjtRQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUEwREQsZ0JBQWdCLENBQUMsS0FBdUQ7UUFRdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBU3BCLENBQUM7UUFFSixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN0QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRSxDQUFDO2dCQUNwQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUNoQixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLE1BQU07b0JBQ04sUUFBUTtvQkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxRQUFRO1lBQ1IsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBc0VELFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7YUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FDakUsUUFBUSxDQUFDLElBQUksQ0FDZCxDQUFDO29CQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRWhDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsc0JBQXNCLENBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQzVCLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLENBQzdCLENBQ0YsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksK0JBQStCLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDJCQUEyQixDQUMvRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFpQjtRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWlCO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QixDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUI7UUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1DQUFtQzthQUNyQyxvQkFBb0IsQ0FBQyxJQUFJLHlCQUF5QixFQUFFLENBQUM7YUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO3dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDN0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMseUJBQXlCLENBQUMsaUJBQWlCLENBQzlDLDhCQUE4QixDQUFDLGFBQWEsQ0FDN0MsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUF3QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQVcsRUFBRSxNQUFXO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxRQUFRO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUztRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU87UUFDdEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzsrR0E5V1Usa0RBQWtEO21HQUFsRCxrREFBa0QsNGdDQzNEL0QsK3JvQkFxakJBLGttWkQxZ0JJLFlBQVksOEJBQ1osWUFBWSw4QkFDWixpQkFBaUIsd0lBQ2pCLGtCQUFrQixxR0FJbEIsMERBQTBEOzs0RkFTakQsa0RBQWtEO2tCQXBCOUQsU0FBUzsrQkFDRSxnREFBZ0QsY0FDOUMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIseUJBQXlCO3dCQUN6QixxQkFBcUI7d0JBQ3JCLGlDQUFpQzt3QkFDakMsMERBQTBEO3FCQUMzRCxtQkFNZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2xvYWRlci9sb2FkZXIubW9kdWxlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2VSb29tLFxuICBJR2lmdCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbG1hdGFySWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2FsbWF0YXItaWNvbi9hbG1hdGFyLWljb24ubW9kdWxlJztcbmltcG9ydCB7IEV4Y2hhbmdlUGlwZU1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9waXBlcy9leGNoYW5nZS5waXBlJztcbmltcG9ydCB7IEN1cnJlbmN5Q29kZUljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9jdXJyZW5jeS1jb2RlLWljb24vY3VycmVuY3ktY29kZS1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdFbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nLWVuZHBvaW50cy9ob3RlbC1tYW5hZ2UtYm9va2luZy1lbmRwb2ludHMuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nL2hvdGVsLW1hbmFnZS1ib29raW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FuY2VsSG90ZWxCb29raW5nUGF5bG9hZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvY2FuY2VsLWhvdGVsLWJvb2tpbmcubW9kZWwnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL2hvdGVsLW1hbmFnZS1ib29raW5nLWFzaWRlLXRhYi5lbnVtJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29uZmlybU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS1tb2RhbC9jb25maXJtLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9tYW5hZ2UtYm9va2luZy1mYWlsZWQtbW9kYWwvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS1za2VsZXRvbi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LXNrZWxldG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBbG1hdGFySWNvbk1vZHVsZSxcbiAgICBFeGNoYW5nZVBpcGVNb2R1bGUsXG4gICAgQ3VycmVuY3lDb2RlSWNvbkNvbXBvbmVudCxcbiAgICBDb25maXJtTW9kYWxDb21wb25lbnQsXG4gICAgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5U2tlbGV0b25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOlxuICAgICcuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJyxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNTZXJ2aWNlID0gaW5qZWN0KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBob3RlbE1hbmFnZUJvb2tpbmdzRW5kcG9pbnRzU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdFbmRwb2ludHNTZXJ2aWNlLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgLy8gU2V0IGN1cnJlbmN5IGZyb20gaW5wdXRcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRDdXJyZW5jeSA9IHRoaXMuY3VycmVuY3koKTtcbiAgICAgIGlmIChpbnB1dEN1cnJlbmN5KSB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5LnNldChpbnB1dEN1cnJlbmN5KTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgLy8gQ3VycmVuY3lcbiAgcmVhZG9ubHkgYmFzZUN1cnJlbmN5Q29kZSA9IHNpZ25hbCgnU0FSJyk7XG4gIHJlYWRvbmx5IGN1cnJlbnRDdXJyZW5jeSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHBheW1lbnRNZXRob2QgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAvLyBMYW5ndWFnZVxuICByZWFkb25seSBjdXJyZW50TGFuZyA9IHNpZ25hbCgnZW4nKTtcblxuICByZWFkb25seSBzZWxlY3RlZFJvb21zID1cbiAgICBpbnB1dC5yZXF1aXJlZDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXT4oKTtcblxuICByZWFkb25seSBib29raW5nSWQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcblxuICByZWFkb25seSBob3RlbElkID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyPignJyk7XG5cbiAgcmVhZG9ubHkgaG90ZWxJbmZvID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8gfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblNraXBwZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgY3VycmVuY3kgPSBpbnB1dDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGtlZXBSb29tID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdFJlZnVuZE9wdGlvbiA9IG91dHB1dDx7XG4gICAgcGFja2FnZUlkczogc3RyaW5nW107XG4gICAgcGF5b3V0OiBhbnk7XG4gICAgdG90YWxSZWZ1bmQ6IG51bWJlcjtcbiAgICByZXNwb25zZURhdGE6IGFueTtcbiAgfT4oKTtcblxuICByZWFkb25seSBjbG9zZU1vZGFsID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgaXNDYW5jZWxMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBNb2RhbCBzdGF0ZVxuICByZWFkb25seSBzaG93Q29uZmlybU1vZGFsRmxhZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dFcnJvck1vZGFsRmxhZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhvdGVsTWFuYWdlRXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgYmFja0Fycm93ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAnYXJyb3ctbGVmdCc7IC8vIEFsd2F5cyBMVFIgZm9yIEVuZ2xpc2hcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZXhwYW5kZWRQYWNrYWdlSWRzID0gc2lnbmFsPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICByZWFkb25seSBleHBhbmRlZEFtb3VudElkcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSByZWZ1bmRTdW1tYXJ5ID1cbiAgICBzaWduYWw8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnkgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSByb29tcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5yb29tcyA/PyBbXSk7XG5cbiAgZ3JvdXBSb29tc0J5TmFtZShyb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlUm9vbVtdKToge1xuICAgIHJvb21OYW1lOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBuaWdodHM/OiBudW1iZXI7XG4gICAgYWR1bHRzPzogbnVtYmVyO1xuICAgIGNoaWxkcmVuPzogbnVtYmVyO1xuICAgIGJhc2lzPzogc3RyaW5nO1xuICB9W10ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAge1xuICAgICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgICBuaWdodHM/OiBudW1iZXI7XG4gICAgICAgIGFkdWx0cz86IG51bWJlcjtcbiAgICAgICAgY2hpbGRyZW4/OiBudW1iZXI7XG4gICAgICAgIGJhc2lzPzogc3RyaW5nO1xuICAgICAgfVxuICAgID4oKTtcblxuICAgIHJvb21zLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByb29tLnJvb21OYW1lIHx8ICdSb29tJztcbiAgICAgIGNvbnN0IGFkdWx0cyA9IHJvb20ucGF4Py5hZHVsdHMgPz8gcm9vbS5hZHVsdHM7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb20ucGF4Py5jaGlsZHJlbiA/PyByb29tLmNoaWxkcmVuO1xuICAgICAgaWYgKGdyb3VwZWQuaGFzKG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBlZC5nZXQobmFtZSkhO1xuICAgICAgICBleGlzdGluZy5jb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBlZC5zZXQobmFtZSwge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHMsXG4gICAgICAgICAgYWR1bHRzLFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWQuZW50cmllcygpKS5tYXAoKFtyb29tTmFtZSwgZGF0YV0pID0+ICh7XG4gICAgICByb29tTmFtZSxcbiAgICAgIC4uLmRhdGEsXG4gICAgfSkpO1xuICB9XG5cbiAgcmVhZG9ubHkgcGFja2FnZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGFja2FnZXMgPz8gW10pO1xuXG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzQ2FuY2VsbGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHBhY2thZ2VzID0gdGhpcy5wYWNrYWdlcygpO1xuICAgIGlmIChwYWNrYWdlcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gcGFja2FnZXMuZXZlcnkoKHBrZykgPT4gcGtnLmNhbmNlbGxlZEJlZm9yZSA9PT0gdHJ1ZSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRSZWZ1bmRSb29tc051bWJlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXNcbiAgICAgIC5maWx0ZXIoKHBrZykgPT4gIXBrZy5jYW5jZWxsZWRCZWZvcmUpXG4gICAgICAucmVkdWNlKChhY2MsIHBrZykgPT4gYWNjICsgKHBrZy5yb29tcz8ubGVuZ3RoIHx8IDApLCAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG90YWxQYWlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk/LnRvdGFsUGFpZCA/PyAwKTtcbiAgcmVhZG9ubHkgdG90YWxSZWZ1bmQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8udG90YWxSZWZ1bmQgPz8gMCk7XG4gIHJlYWRvbmx5IGFscmVhZHlSZWZ1bmRlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucGF5b3V0KCk/LmFscmVhZHlSZWZ1bmRlZCA/PyAwLFxuICApO1xuXG4gIHJlYWRvbmx5IHN1bW1hcmllcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5zdW1tYXJpZXMgPz8gW10pO1xuICByZWFkb25seSBwYXlvdXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGF5b3V0ID8/IG51bGwpO1xuICByZWFkb25seSBwYWNrYWdlSWRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMoKS5tYXAoKHJvb20pID0+IHJvb20ucGFja2FnZUlkKSxcbiAgKTtcblxuICByZWFkb25seSB0b3RhbFBhY2thZ2VzQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMucGFja2FnZXMoKS5yZWR1Y2UoKGFjYywgcGtnKSA9PiBhY2MgKyAocGtnLnJvb21zPy5sZW5ndGggfHwgMCksIDApLFxuICApO1xuXG4gIC8vIEFkZGl0aW9uYWwgYnJlYWtkb3duIGZpZWxkc1xuICByZWFkb25seSBjb3Vwb25BbW91bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uY291cG9uID8/IDApO1xuICByZWFkb25seSBnaWZ0c1RvdGFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk/LmdpZnRzVG90YWwgPz8gMCk7XG4gIHJlYWRvbmx5IGdpZnRzRGV0YWlscyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5naWZ0c0RldGFpbHMgPz8gW10sXG4gICk7XG5cbiAgcmVhZG9ubHkgZ2lmdHNIYXNSZWZ1bmRhYmxlRW50aXR5ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmdpZnRzRGV0YWlscygpLnNvbWUoKGdpZnQ6IElHaWZ0KSA9PiBnaWZ0LnJlZnVuZGFibGUpLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlcnZpY2VGZWVBbW91bnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uc2VydmljZUZlZSA/PyAwLFxuICApO1xuXG4gIHJlYWRvbmx5IHN1cmNoYXJnZUFtb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5zdXJjaGFyZ2UgPz8gMCxcbiAgKTtcblxuICByZWFkb25seSBpc0dvbGRlbkdpZnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uZ29sZGVuR2lmdCA/PyBmYWxzZSxcbiAgKTtcblxuICByZWFkb25seSBwYXlvdXROb3RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYXlvdXQoKT8ubm90ZSA/PyBudWxsKTtcbiAgcmVhZG9ubHkgcHJldmlvdXNSb29tcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5wcmV2aW91c1Jvb21zID8/IFtdLFxuICApO1xuXG4gIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkdWN0aW9ucyB0byBzaG93XG4gIHJlYWRvbmx5IGhhc0RlZHVjdGlvbnMgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5jb3Vwb25BbW91bnQoKSA+IDAgfHxcbiAgICAgIHRoaXMuZ2lmdHNUb3RhbCgpID4gMCB8fFxuICAgICAgdGhpcy5zZXJ2aWNlRmVlQW1vdW50KCkgPiAwIHx8XG4gICAgICB0aGlzLnN1cmNoYXJnZUFtb3VudCgpID4gMCxcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRSZWZ1bmREZXRhaWxzKCk7XG4gICAgdGhpcy5pbml0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIC8vIExhbmd1YWdlIGlzIGZpeGVkIHRvIEVuZ2xpc2hcbiAgICB0aGlzLmN1cnJlbnRMYW5nLnNldCgnZW4nKTtcbiAgfVxuXG4gIGxvYWRSZWZ1bmREZXRhaWxzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VJZHMgPSB0aGlzLnBhY2thZ2VJZHMoKTtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG5cbiAgICB0aGlzLmVuZHBvaW50c1NlcnZpY2VcbiAgICAgIC5nZXRSZWZ1bmREZXRhaWxzKHBhY2thZ2VJZHMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmVuZHBvaW50c1NlcnZpY2UubWFwQXBpUmVzcG9uc2VUb1JlZnVuZFN1bW1hcnkoXG4gICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5zZXQocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVmdW5kU3VtbWFyeS5zZXQoc3VtbWFyeSk7XG5cbiAgICAgICAgICAgIHRoaXMucGF5bWVudE1ldGhvZC5zZXQoXG4gICAgICAgICAgICAgIHRoaXMuZGV0ZXJtaW5lUGF5bWVudE1ldGhvZChcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGF5b3V0LFxuICAgICAgICAgICAgICAgIHRoaXMucmVmdW5kU3VtbWFyeSgpPy50b3RhbHMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KCk7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCByZWZ1bmQgZGV0YWlscycpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmVuZHBvaW50c1NlcnZpY2UuY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KFxuICAgICAgdGhpcy5zZWxlY3RlZFJvb21zKCkubWFwKChyb29tKSA9PiAoeyAuLi5yb29tLCBpc1NlbGVjdGVkOiB0cnVlIH0pKSxcbiAgICApO1xuICAgIHRoaXMucmVmdW5kU3VtbWFyeS5zZXQoc3VtbWFyeSk7XG4gIH1cblxuICB0b2dnbGVQYWNrYWdlRXhwYW5kKHBhY2thZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFBhY2thZ2VJZHMudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KGN1cnJlbnQpO1xuICAgICAgaWYgKG5ld1NldC5oYXMocGFja2FnZUlkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHBhY2thZ2VJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHBhY2thZ2VJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlQW1vdW50RXhwYW5kKHBhY2thZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZEFtb3VudElkcy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoY3VycmVudCk7XG4gICAgICBpZiAobmV3U2V0LmhhcyhwYWNrYWdlSWQpKSB7XG4gICAgICAgIG5ld1NldC5kZWxldGUocGFja2FnZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocGFja2FnZUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgfSk7XG4gIH1cblxuICBpc1BhY2thZ2VFeHBhbmRlZChwYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGFja2FnZUlkcygpLmhhcyhwYWNrYWdlSWQpO1xuICB9XG5cbiAgaXNBbW91bnRFeHBhbmRlZChwYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQW1vdW50SWRzKCkuaGFzKHBhY2thZ2VJZCk7XG4gIH1cblxuICBvbktlZXBSb29tKCk6IHZvaWQge1xuICAgIHRoaXMua2VlcFJvb20uZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RSZWZ1bmRPcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RSZWZ1bmRPcHRpb24uZW1pdCh7XG4gICAgICBwYWNrYWdlSWRzOiB0aGlzLnBhY2thZ2VJZHMoKSxcbiAgICAgIHBheW91dDogdGhpcy5wYXlvdXQoKSxcbiAgICAgIHRvdGFsUmVmdW5kOiB0aGlzLnRvdGFsUmVmdW5kKCksXG4gICAgICByZXNwb25zZURhdGE6IHRoaXMucmVzcG9uc2VEYXRhKCksXG4gICAgfSk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBzdWJtaXREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMub25Db25maXJtU2VuZCgpO1xuICB9XG5cbiAgb25Db25maXJtU2VuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdzRW5kcG9pbnRzU2VydmljZVxuICAgICAgLmNhbmNlbEJvb2tpbmdSZXF1ZXN0KG5ldyBDYW5jZWxIb3RlbEJvb2tpbmdQYXlsb2FkKCkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIGlmIChlbnZpcm9ubWVudHMuaXNUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMub25TaG93V2hhdHNBcHBBZ2VudCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzPy5kYXRhPy5pc1doYXRzQXBwUmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5vblNob3dXaGF0c0FwcEFnZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uU2hvd0NvbmZpcm1Nb2RhbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0NhbmNlbExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhvdGVsTWFuYWdlRXJyb3Iuc2V0KGVycm9yPy5lcnJvcj8uZXJyb3JzPy5tZXNzYWdlIHx8ICcnKTtcbiAgICAgICAgICB0aGlzLnNob3dFcnJvck1vZGFsRmxhZy5zZXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TaG93V2hhdHNBcHBBZ2VudCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2V0QWN0aXZlQXNpZGVUYWIoXG4gICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudCxcbiAgICApO1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uU2hvd0NvbmZpcm1Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb25maXJtTW9kYWxGbGFnLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbEZsYWcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dFcnJvck1vZGFsRmxhZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGRheSA9IG1vbWVudChkYXRlKS5mb3JtYXQoJ0QnKTtcbiAgICBjb25zdCBtb250aCA9IG1vbWVudChkYXRlKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdNTU1NJyk7XG4gICAgY29uc3QgeWVhciA9IG1vbWVudChkYXRlKS5mb3JtYXQoJ1lZWVknKTtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5XCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8IS0tIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9faGVhZGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19oZWFkZXItYnRuXCJcbiAgICAgIChjbGljayk9XCJvbktlZXBSb29tKClcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICA+XG4gICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cImJhY2tBcnJvdygpXCI+PC9hbG1hdGFyLWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLXN1bW1hcnlfX2hlYWRlci10ZXh0XCI+XG4gICAgICA8aDMgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9faGVhZGVyLXRpdGxlXCI+XG4gICAgICAgIENhbmNlbCBCb29raW5nIFJlcXVlc3RcbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19oZWFkZXItYnRuXCJcbiAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICA+XG4gICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIid4LW1hcmsnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PiAtLT5cblxuICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgPGFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnktc2tlbGV0b24gLz5cbiAgfSBAZWxzZSBpZiAoZXJyb3IoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3ItY2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLXN1bW1hcnlfX2Vycm9yLWljb24td3JhcHBlclwiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHdpZHRoPVwiMzJcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTEyIDhWMTJNMTIgMTZIMTIuMDFNMjEgMTJDMjEgMTYuOTcwNiAxNi45NzA2IDIxIDEyIDIxQzcuMDI5NDQgMjEgMyAxNi45NzA2IDMgMTJDMyA3LjAyOTQ0IDcuMDI5NDQgMyAxMiAzQzE2Ljk3MDYgMyAyMSA3LjAyOTQ0IDIxIDEyWlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19lcnJvci10aXRsZVwiPlxuICAgICAgICAgIEZhaWxlZCB0byBsb2FkIHJlZnVuZCBkZXRhaWxzLiBQbGVhc2UgdHJ5IGFnYWluLlxuICAgICAgICA8L2g0PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3ItYnRuXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwibG9hZFJlZnVuZERldGFpbHMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xIDRWMTBIN00yMyAyMFYxNEgxN00yMC40OSA5QzE5Ljk4MjggNy41NjY3OCAxOS4xMjA5IDYuMjg1NCAxNy45ODQ1IDUuMjc1NDJDMTYuODQ4MiA0LjI2NTQzIDE1LjQ3NDUgMy41NTk3NiAxMy45OTE3IDMuMjI0MjZDMTIuNTA4OSAyLjg4ODc1IDEwLjk2NTIgMi45MzQzNCA5LjUwNDgxIDMuMzU2NzdDOC4wNDQzNyAzLjc3OTIxIDYuNzE0NzUgNC41NjQ3MSA1LjY0IDUuNjRMMSAxME0yMyAxNEwxOC4zNiAxOC4zNkMxNy4yODUzIDE5LjQzNTMgMTUuOTU1NiAyMC4yMjA4IDE0LjQ5NTIgMjAuNjQzMkMxMy4wMzQ4IDIxLjA2NTcgMTEuNDkxMSAyMS4xMTEyIDEwLjAwODMgMjAuNzc1N0M4LjUyNTQ3IDIwLjQ0MDIgNy4xNTE4IDE5LjczNDYgNi4wMTU0NyAxOC43MjQ2QzQuODc5MTMgMTcuNzE0NiA0LjAxNzE3IDE2LjQzMzIgMy41MSAxNVwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19jb250ZW50XCI+XG4gICAgICA8aDMgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fdGl0bGVcIj5cbiAgICAgICAgUmVmdW5kIHN1bW1hcnlcbiAgICAgIDwvaDM+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRzXCI+XG4gICAgICAgIEBmb3IgKHBrZyBvZiBwYWNrYWdlcygpOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkXCJcbiAgICAgICAgICAgIFtjbGFzcy5wYWNrYWdlLWNhcmQtLWV4cGFuZGVkXT1cImlzUGFja2FnZUV4cGFuZGVkKHBrZy5wYWNrYWdlSWQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wYWNrYWdlLWNhcmQtLWNhbmNlbGxlZC1iZWZvcmVdPVwicGtnLmNhbmNlbGxlZEJlZm9yZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9faGVhZGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhY2thZ2VFeHBhbmQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19pbmZvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX25hbWVcIj57eyBwa2cucGFja2FnZU5hbWUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgQGlmICghcGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBDVVJSRU5UIENBTkNFTExBVElPTlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBUb2RheSBvblxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fYmFkZ2UgcGFja2FnZS1jYXJkX19iYWRnZS0tY2FuY2VsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFBSRVZJT1VTIENBTkNFTExBVElPTlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxsYXRpb24gZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREYXRlKHBrZy5jYW5jZWxsYXRpb25EYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19leHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnJvdGF0ZWRdPVwiaXNQYWNrYWdlRXhwYW5kZWQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInY2hldnJvbi1kb3duJ1wiPjwvYWxtYXRhci1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJvb21zIGRpc3BsYXkgLS0+XG4gICAgICAgICAgICBAaWYgKHBrZy5yb29tcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3Jvb21zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgZ3JvdXAgb2YgZ3JvdXBSb29tc0J5TmFtZShwa2cucm9vbXMpO1xuICAgICAgICAgICAgICAgICAgdHJhY2sgaTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gJGluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb29tLXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5jb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpcGxlIHJvb21zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmNvdW50IH19eCB7eyBncm91cC5yb29tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNpbmdsZSByb29tIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIFJvb21cblxuICAgICAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3NlcGFyYXRvclwiPiZidWxsOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5yb29tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAubmlnaHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3NlcGFyYXRvclwiPiZidWxsOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5uaWdodHMgfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLm5pZ2h0cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmlnaHRcbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5pZ2h0c1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmFkdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19zZXBhcmF0b3JcIj4mYnVsbDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYWR1bHRzIH19XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5hZHVsdHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkdWx0XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBZHVsdHNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19zZXBhcmF0b3JcIj4mYnVsbDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuY2hpbGRyZW4gfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmNoaWxkcmVuID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGlsZFxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoIXBrZy5jYW5jZWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICBUb2RheSBvblxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fZGF0ZVwiPlxuICAgICAgICAgICAgICAgIENhbmNlbGxhdGlvbiBkYXRlOlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBSb29tIEFtb3VudCBSb3cgd2l0aCBleHBhbmQgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gRXhwYW5kYWJsZSBjb250ZW50OiBSb29tcywgRGF0ZSwgYW5kIEZpbmFuY2lhbCBicmVha2Rvd24gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19leHBhbmRhYmxlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiaXNQYWNrYWdlRXhwYW5kZWQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tY2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICB0b2dnbGVBbW91bnRFeHBhbmQocGtnLnBhY2thZ2VJZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHBrZz8ucm9vbXM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlJvb21zIGFtb3VudDwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsIHBhY2thZ2UtY2FyZF9fbGFiZWwtLWRhcmstbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+Um9vbSBhbW91bnQ8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHBrZy5mZWUgPiAwIHx8IHBrZy5zZXJ2aWNlRmVlID4gMCB8fCBzdXJjaGFyZ2VBbW91bnQoKSA+IDBcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2V4cGFuZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc0Ftb3VudEV4cGFuZGVkKHBrZy5wYWNrYWdlSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2NoZXZyb24tZG93bidcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHBrZy5hbW91bnQgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEV4cGFuZGVkIGNvbnRlbnQ6IENhbmNlbGxhdGlvbiBmZWUgYW5kIFNlcnZpY2UgZmVlIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2V4cGFuZGVkLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJcbiAgICAgICAgICAgICAgICAgIGlzQW1vdW50RXhwYW5kZWQocGtnLnBhY2thZ2VJZCkgJiZcbiAgICAgICAgICAgICAgICAgIChwa2cuZmVlID4gMCB8fCBwa2cuc2VydmljZUZlZSA+IDApXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAocGtnLmZlZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fbGFiZWxcIj5DYW5jZWxsYXRpb24gZmVlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX192YWx1ZSBwYWNrYWdlLWNhcmRfX3ZhbHVlLS1ncmF5IHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwa2cuZmVlIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAocGtnLnNlcnZpY2VGZWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsXCI+U2VydmljZSBGZWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWdyYXkgcGFja2FnZS1jYXJkX192YWx1ZS0tcmVndWxhclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5zZXJ2aWNlRmVlIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAoc3VyY2hhcmdlQW1vdW50KCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgU3VyY2hhcmdlICgyLjUlKVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWdyYXkgcGFja2FnZS1jYXJkX192YWx1ZS0tcmVndWxhclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cmNoYXJnZUFtb3VudCgpIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gQWRkLU9ucyBSZWZ1bmQgU2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgQGlmIChnaWZ0c0RldGFpbHMoKS5sZW5ndGggPiAwICYmIGkgPT09IHBhY2thZ2VzKCk/Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkb25zLXJlZnVuZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsIHBhY2thZ2UtY2FyZF9fbGFiZWwtLWRhcmstbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBBZGQtT25zIFJlZnVuZFxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZG9ucy1yZWZ1bmRfX2xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZ2lmdCBvZiBnaWZ0c0RldGFpbHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fbGFiZWxcIj57eyBnaWZ0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdmFsdWUgcGFja2FnZS1jYXJkX192YWx1ZS0tZ3JheSBwYWNrYWdlLWNhcmRfX3ZhbHVlLS1yZWd1bGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWZ0LnRvQmVSZWZ1bmRlZEFtb3VudCB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQGlmICghZ2lmdC5yZWZ1bmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBAaWYgKGdpZnRzSGFzUmVmdW5kYWJsZUVudGl0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRvbnMtcmVmdW5kX19ub3RpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjeD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3k9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHI9XCI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDlWMTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjYuNVwiIHI9XCIwLjc1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRvbnMtcmVmdW5kX19ub3RpY2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgWW91ciBhZGQtb24gc2VydmljZS9zIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCBzZXBhcmF0ZWx5IGJ5IG91ciBDdXN0b21lciBTZXJ2aWNlIHRlYW0gc2hvcnRseS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIEVuZCBleHBhbmRhYmxlIGNvbnRlbnQgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gWW91IHdpbGwgZ2V0IGJhY2sgcm93IC0gQUxXQVlTIFZJU0lCTEUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIEBpZiAocGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrXCI+UmVmdW5kZWQgYW1vdW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWhpZ2hsaWdodFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcGtnLnJlZnVuZCB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrXCI+WW91IHdpbGwgZ2V0IGJhY2s8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdmFsdWUgcGFja2FnZS1jYXJkX192YWx1ZS0taGlnaGxpZ2h0IHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHBrZy5yZWZ1bmQgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q3VycmVuY3koKT8uY29kZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cInNlcGVyYXRvclwiIC8+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5X19yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX2xhYmVsXCI+VG90YWwgcGFpZDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB0b3RhbFBhaWQoKSB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAge3sgY3VycmVudEN1cnJlbmN5KCk/LmNvZGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoYWxyZWFkeVJlZnVuZGVkKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWwtc3VtbWFyeV9fcm93XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX2xhYmVsXCI+Um9vbXMgUmVmdW5kZWQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgYWxyZWFkeVJlZnVuZGVkKCkgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB7eyBjdXJyZW50Q3VycmVuY3koKT8uY29kZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3JvdyB0b3RhbC1zdW1tYXJ5X19yb3ctLWhpZ2hsaWdodFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5X19sYWJlbCB0b3RhbC1zdW1tYXJ5X19sYWJlbC0taGlnaGxpZ2h0XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgWW91J2xsIGdldCBiYWNrIGZvclxuICAgICAgICAgICAgICB7eyBjdXJyZW50UmVmdW5kUm9vbXNOdW1iZXIoKSB9fVxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5nKCkgIT09ICdhcidcbiAgICAgICAgICAgICAgICAgID8gY3VycmVudFJlZnVuZFJvb21zTnVtYmVyKCkgPiAxXG4gICAgICAgICAgICAgICAgICAgID8gKCdSb29tcycpXG4gICAgICAgICAgICAgICAgICAgIDogKCdSb29tJylcbiAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlIHRvdGFsLXN1bW1hcnlfX3ZhbHVlLS1oaWdobGlnaHRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHRvdGFsUmVmdW5kKCkgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyX19pY29uXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTAgMkwzIDVWOUMzIDEzLjU1IDYuMjQgMTcuNzQgMTAgMTguNUMxMy43NiAxNy43NCAxNyAxMy41NSAxNyA5VjVMMTAgMlpcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNNyAxMEw5IDEyTDEzIDhcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lcl9fY29udGVudFwiPlxuICAgICAgICAgIEBpZiAocGF5bWVudE1ldGhvZCgpID09PSAnQ0gnKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImluZm8tYmFubmVyX190ZXh0XCI+XG4gICAgICAgICAgICAgIFlvdXIgcmVmdW5kIGlzIGluc3RhbnQgZnJvbSBvdXIgc2lkZSwgeW91ciBiYW5rIG1heSB0YWtlIHVwIHRvIDE1IGJ1c2luZXNzIGRheXMgdG8gcmVmbGVjdCBpdC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9IEBlbHNlIGlmIChwYXltZW50TWV0aG9kKCkgPT09ICdUQicpIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5mby1iYW5uZXJfX3RleHRcIj5cbiAgICAgICAgICAgICAgWW91ciByZWZ1bmQgd2lsbCBiZSBwcm9jZXNzZWQgdG8gVGFiYnkgd2l0aGluIDMtNSBidXNpbmVzcyBkYXlzLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH0gQGVsc2UgaWYgKHBheW1lbnRNZXRob2QoKSA9PT0gJ1RNJykge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJpbmZvLWJhbm5lcl9fdGV4dFwiPlxuICAgICAgICAgICAgICBZb3VyIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCB0byBUYW1hcmEgd2l0aGluIDctMTAgYnVzaW5lc3MgZGF5cy5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5mby1iYW5uZXJfX3RleHRcIj5cbiAgICAgICAgICAgICAgWW91ciBsb3lhbHR5IHBvaW50cyB3aWxsIGJlIHJlZnVuZGVkIGluc3RhbnRseSB0byB5b3VyIGFjY291bnQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPHAgY2xhc3M9XCJpbmZvLWJhbm5lcl9fc3VidGV4dFwiPlxuICAgICAgICAgICAgWW91IGNhbiBzZWxlY3QgcmVmdW5kIG9wdGlvbiBpbiB0aGUgbmV4dCBzdGVwXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19mb290ZXJcIj5cbiAgICAgIEBpZiAoYWxsUGFja2FnZXNDYW5jZWxsZWQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsbGVkLXN0YXR1c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW5jZWxsZWQtc3RhdHVzX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgY3g9XCIxMlwiXG4gICAgICAgICAgICAgICAgY3k9XCIxMlwiXG4gICAgICAgICAgICAgICAgcj1cIjlcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk05IDEyTDExIDE0TDE1IDEwXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW5jZWxsZWQtc3RhdHVzX190ZXh0XCI+XG4gICAgICAgICAgICA8aDQ+QWxsIFJvb21zIENhbmNlbGxlZDwvaDQ+XG4gICAgICAgICAgICA8cD5BbGwgcGFja2FnZXMgaW4gdGhpcyBib29raW5nIGhhdmUgYmVlbiBjYW5jZWxsZWQ8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAodG90YWxSZWZ1bmQoKSkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi0tc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uS2VlcFJvb20oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgS2VlcCBSb29tXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0UmVmdW5kT3B0aW9uKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCByZWZ1bmQgb3B0aW9uXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi0tZGFuZ2VyXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQ2FuY2VsTG9hZGluZygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXREYXRhKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNDYW5jZWxMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG5fX3NwaW5uZXJcIj48L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQ2FuY2VsIEJvb2tpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuQGlmIChzaG93Q29uZmlybU1vZGFsRmxhZygpKSB7XG4gIDxkaXZcbiAgICBhbG1hdGFyLWNvbmZpcm0tbW9kYWxcbiAgICBbTWVzc2FnZV09XCInWW91ciByZXF1ZXN0IGhhcyBiZWVuIHN1Ym1pdHRlZC4gT3VyIGN1c3RvbWVyIHNlcnZpY2UgdGVhbSB3aWxsIGNvbnRhY3QgeW91IHNob3J0bHkuJ1wiXG4gICAgKGNhbmNlbEV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICAgIChjb25maXJtRXZlbnQpPVwiY2xvc2VBbGxNb2RhbHMoKVwiXG4gID48L2Rpdj5cbn1cblxuPCEtLSBFcnJvciBNb2RhbCAtLT5cbkBpZiAoc2hvd0Vycm9yTW9kYWxGbGFnKCkpIHtcbiAgPGRpdlxuICAgIGFsbWF0YXItbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsXG4gICAgW2Vycm9yTWVzc2FnZV09XCJob3RlbE1hbmFnZUVycm9yKClcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG4iXX0=
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1ib29raW5nLWRhc2hib2FyZC9zcmMvbGliL2NvbXBvbmVudHMvaG90ZWwtY2FuY2VsL2NvbXBvbmVudHMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvY29tcG9uZW50cy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5L2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFTL0UsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDaEksT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFD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QztJQUVPLHNCQUFzQixDQUFDLE1BQVcsRUFBRSxNQUFXO1FBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxRQUFRO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUztRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU87UUFDdEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzsrR0E5V1Usa0RBQWtEO21HQUFsRCxrREFBa0QsNGdDQzNEL0QsZ3lvQkFxakJBLGttWkQxZ0JJLFlBQVksOEJBQ1osWUFBWSw4QkFDWixpQkFBaUIsd0lBQ2pCLGtCQUFrQixxR0FJbEIsMERBQTBEOzs0RkFTakQsa0RBQWtEO2tCQXBCOUQsU0FBUzsrQkFDRSxnREFBZ0QsY0FDOUMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIseUJBQXlCO3dCQUN6QixxQkFBcUI7d0JBQ3JCLGlDQUFpQzt3QkFDakMsMERBQTBEO3FCQUMzRCxtQkFNZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IExvYWRlck1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2xvYWRlci9sb2FkZXIubW9kdWxlJztcbmltcG9ydCB7XG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2VSb29tLFxuICBJR2lmdCxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZSc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBbG1hdGFySWNvbk1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2R1bGVzL2FsbWF0YXItaWNvbi9hbG1hdGFyLWljb24ubW9kdWxlJztcbmltcG9ydCB7IEV4Y2hhbmdlUGlwZU1vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9waXBlcy9leGNoYW5nZS5waXBlJztcbmltcG9ydCB7IEN1cnJlbmN5Q29kZUljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9jdXJyZW5jeS1jb2RlLWljb24vY3VycmVuY3ktY29kZS1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdFbmRwb2ludHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nLWVuZHBvaW50cy9ob3RlbC1tYW5hZ2UtYm9va2luZy1lbmRwb2ludHMuc2VydmljZSc7XG5pbXBvcnQgeyBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2hvdGVsLW1hbmFnZS1ib29raW5nL2hvdGVsLW1hbmFnZS1ib29raW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FuY2VsSG90ZWxCb29raW5nUGF5bG9hZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvY2FuY2VsLWhvdGVsLWJvb2tpbmcubW9kZWwnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nQXNpZGVUYWJFbnVtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2VudW1zL2hvdGVsLW1hbmFnZS1ib29raW5nLWFzaWRlLXRhYi5lbnVtJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29uZmlybU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvY29uZmlybS1tb2RhbC9jb25maXJtLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYW5hZ2VCb29raW5nRmFpbGVkTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9tYW5hZ2UtYm9va2luZy1mYWlsZWQtbW9kYWwvbWFuYWdlLWJvb2tpbmctZmFpbGVkLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1yZWZ1bmQtc3VtbWFyeS1za2VsZXRvbi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LXNrZWxldG9uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIExvYWRlck1vZHVsZSxcbiAgICBBbG1hdGFySWNvbk1vZHVsZSxcbiAgICBFeGNoYW5nZVBpcGVNb2R1bGUsXG4gICAgQ3VycmVuY3lDb2RlSWNvbkNvbXBvbmVudCxcbiAgICBDb25maXJtTW9kYWxDb21wb25lbnQsXG4gICAgTWFuYWdlQm9va2luZ0ZhaWxlZE1vZGFsQ29tcG9uZW50LFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5U2tlbGV0b25Db21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOlxuICAgICcuL2FsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLXJlZnVuZC1zdW1tYXJ5LmNvbXBvbmVudC5zY3NzJyxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNTZXJ2aWNlID0gaW5qZWN0KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXV0b0NhbmNlbGxhdGlvblNlcnZpY2UgPSBpbmplY3QoXG4gICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2UsXG4gICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBob3RlbE1hbmFnZUJvb2tpbmdzRW5kcG9pbnRzU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdFbmRwb2ludHNTZXJ2aWNlLFxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSA9IGluamVjdChcbiAgICBIb3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKCl7XG4gICAgLy8gU2V0IGN1cnJlbmN5IGZyb20gaW5wdXRcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRDdXJyZW5jeSA9IHRoaXMuY3VycmVuY3koKTtcbiAgICAgIGlmIChpbnB1dEN1cnJlbmN5KSB7XG4gICAgICAgIHRoaXMuY3VycmVudEN1cnJlbmN5LnNldChpbnB1dEN1cnJlbmN5KTtcbiAgICAgIH1cbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgLy8gQ3VycmVuY3lcbiAgcmVhZG9ubHkgYmFzZUN1cnJlbmN5Q29kZSA9IHNpZ25hbCgnU0FSJyk7XG4gIHJlYWRvbmx5IGN1cnJlbnRDdXJyZW5jeSA9IHNpZ25hbDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHBheW1lbnRNZXRob2QgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAvLyBMYW5ndWFnZVxuICByZWFkb25seSBjdXJyZW50TGFuZyA9IHNpZ25hbCgnZW4nKTtcblxuICByZWFkb25seSBzZWxlY3RlZFJvb21zID1cbiAgICBpbnB1dC5yZXF1aXJlZDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXT4oKTtcblxuICByZWFkb25seSBib29raW5nSWQgPSBpbnB1dDxzdHJpbmcgfCBudW1iZXI+KCcnKTtcblxuICByZWFkb25seSBob3RlbElkID0gaW5wdXQ8c3RyaW5nIHwgbnVtYmVyPignJyk7XG5cbiAgcmVhZG9ubHkgaG90ZWxJbmZvID0gaW5wdXQ8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Ib3RlbEluZm8gfCBudWxsPihcbiAgICBudWxsLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGlvblNraXBwZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkgY3VycmVuY3kgPSBpbnB1dDxhbnk+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGtlZXBSb29tID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdFJlZnVuZE9wdGlvbiA9IG91dHB1dDx7XG4gICAgcGFja2FnZUlkczogc3RyaW5nW107XG4gICAgcGF5b3V0OiBhbnk7XG4gICAgdG90YWxSZWZ1bmQ6IG51bWJlcjtcbiAgICByZXNwb25zZURhdGE6IGFueTtcbiAgfT4oKTtcblxuICByZWFkb25seSBjbG9zZU1vZGFsID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgaXNDYW5jZWxMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBNb2RhbCBzdGF0ZVxuICByZWFkb25seSBzaG93Q29uZmlybU1vZGFsRmxhZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dFcnJvck1vZGFsRmxhZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGhvdGVsTWFuYWdlRXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgYmFja0Fycm93ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiAnYXJyb3ctbGVmdCc7IC8vIEFsd2F5cyBMVFIgZm9yIEVuZ2xpc2hcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZXhwYW5kZWRQYWNrYWdlSWRzID0gc2lnbmFsPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICByZWFkb25seSBleHBhbmRlZEFtb3VudElkcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSByZWZ1bmRTdW1tYXJ5ID1cbiAgICBzaWduYWw8SUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgZXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJlc3BvbnNlRGF0YSA9IHNpZ25hbDxhbnkgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSByb29tcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5yb29tcyA/PyBbXSk7XG5cbiAgZ3JvdXBSb29tc0J5TmFtZShyb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlUm9vbVtdKToge1xuICAgIHJvb21OYW1lOiBzdHJpbmc7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBuaWdodHM/OiBudW1iZXI7XG4gICAgYWR1bHRzPzogbnVtYmVyO1xuICAgIGNoaWxkcmVuPzogbnVtYmVyO1xuICAgIGJhc2lzPzogc3RyaW5nO1xuICB9W10ge1xuICAgIGNvbnN0IGdyb3VwZWQgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAge1xuICAgICAgICBjb3VudDogbnVtYmVyO1xuICAgICAgICBuaWdodHM/OiBudW1iZXI7XG4gICAgICAgIGFkdWx0cz86IG51bWJlcjtcbiAgICAgICAgY2hpbGRyZW4/OiBudW1iZXI7XG4gICAgICAgIGJhc2lzPzogc3RyaW5nO1xuICAgICAgfVxuICAgID4oKTtcblxuICAgIHJvb21zLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSByb29tLnJvb21OYW1lIHx8ICdSb29tJztcbiAgICAgIGNvbnN0IGFkdWx0cyA9IHJvb20ucGF4Py5hZHVsdHMgPz8gcm9vbS5hZHVsdHM7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJvb20ucGF4Py5jaGlsZHJlbiA/PyByb29tLmNoaWxkcmVuO1xuICAgICAgaWYgKGdyb3VwZWQuaGFzKG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gZ3JvdXBlZC5nZXQobmFtZSkhO1xuICAgICAgICBleGlzdGluZy5jb3VudCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ3JvdXBlZC5zZXQobmFtZSwge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHMsXG4gICAgICAgICAgYWR1bHRzLFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWQuZW50cmllcygpKS5tYXAoKFtyb29tTmFtZSwgZGF0YV0pID0+ICh7XG4gICAgICByb29tTmFtZSxcbiAgICAgIC4uLmRhdGEsXG4gICAgfSkpO1xuICB9XG5cbiAgcmVhZG9ubHkgcGFja2FnZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGFja2FnZXMgPz8gW10pO1xuXG4gIHJlYWRvbmx5IGFsbFBhY2thZ2VzQ2FuY2VsbGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHBhY2thZ2VzID0gdGhpcy5wYWNrYWdlcygpO1xuICAgIGlmIChwYWNrYWdlcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gcGFja2FnZXMuZXZlcnkoKHBrZykgPT4gcGtnLmNhbmNlbGxlZEJlZm9yZSA9PT0gdHJ1ZSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRSZWZ1bmRSb29tc051bWJlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwYWNrYWdlcyA9IHRoaXMucGFja2FnZXMoKTtcbiAgICByZXR1cm4gcGFja2FnZXNcbiAgICAgIC5maWx0ZXIoKHBrZykgPT4gIXBrZy5jYW5jZWxsZWRCZWZvcmUpXG4gICAgICAucmVkdWNlKChhY2MsIHBrZykgPT4gYWNjICsgKHBrZy5yb29tcz8ubGVuZ3RoIHx8IDApLCAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdG90YWxQYWlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk/LnRvdGFsUGFpZCA/PyAwKTtcbiAgcmVhZG9ubHkgdG90YWxSZWZ1bmQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8udG90YWxSZWZ1bmQgPz8gMCk7XG4gIHJlYWRvbmx5IGFscmVhZHlSZWZ1bmRlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucGF5b3V0KCk/LmFscmVhZHlSZWZ1bmRlZCA/PyAwLFxuICApO1xuXG4gIHJlYWRvbmx5IHN1bW1hcmllcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5zdW1tYXJpZXMgPz8gW10pO1xuICByZWFkb25seSBwYXlvdXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGF5b3V0ID8/IG51bGwpO1xuICByZWFkb25seSBwYWNrYWdlSWRzID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMoKS5tYXAoKHJvb20pID0+IHJvb20ucGFja2FnZUlkKSxcbiAgKTtcblxuICByZWFkb25seSB0b3RhbFBhY2thZ2VzQ291bnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMucGFja2FnZXMoKS5yZWR1Y2UoKGFjYywgcGtnKSA9PiBhY2MgKyAocGtnLnJvb21zPy5sZW5ndGggfHwgMCksIDApLFxuICApO1xuXG4gIC8vIEFkZGl0aW9uYWwgYnJlYWtkb3duIGZpZWxkc1xuICByZWFkb25seSBjb3Vwb25BbW91bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uY291cG9uID8/IDApO1xuICByZWFkb25seSBnaWZ0c1RvdGFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk/LmdpZnRzVG90YWwgPz8gMCk7XG4gIHJlYWRvbmx5IGdpZnRzRGV0YWlscyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5naWZ0c0RldGFpbHMgPz8gW10sXG4gICk7XG5cbiAgcmVhZG9ubHkgZ2lmdHNIYXNSZWZ1bmRhYmxlRW50aXR5ID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmdpZnRzRGV0YWlscygpLnNvbWUoKGdpZnQ6IElHaWZ0KSA9PiBnaWZ0LnJlZnVuZGFibGUpLFxuICApO1xuXG4gIHJlYWRvbmx5IHNlcnZpY2VGZWVBbW91bnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uc2VydmljZUZlZSA/PyAwLFxuICApO1xuXG4gIHJlYWRvbmx5IHN1cmNoYXJnZUFtb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5zdXJjaGFyZ2UgPz8gMCxcbiAgKTtcblxuICByZWFkb25seSBpc0dvbGRlbkdpZnQgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnJlZnVuZFN1bW1hcnkoKT8uZ29sZGVuR2lmdCA/PyBmYWxzZSxcbiAgKTtcblxuICByZWFkb25seSBwYXlvdXROb3RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYXlvdXQoKT8ubm90ZSA/PyBudWxsKTtcbiAgcmVhZG9ubHkgcHJldmlvdXNSb29tcyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMucmVmdW5kU3VtbWFyeSgpPy5wcmV2aW91c1Jvb21zID8/IFtdLFxuICApO1xuXG4gIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZGVkdWN0aW9ucyB0byBzaG93XG4gIHJlYWRvbmx5IGhhc0RlZHVjdGlvbnMgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgdGhpcy5jb3Vwb25BbW91bnQoKSA+IDAgfHxcbiAgICAgIHRoaXMuZ2lmdHNUb3RhbCgpID4gMCB8fFxuICAgICAgdGhpcy5zZXJ2aWNlRmVlQW1vdW50KCkgPiAwIHx8XG4gICAgICB0aGlzLnN1cmNoYXJnZUFtb3VudCgpID4gMCxcbiAgKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRSZWZ1bmREZXRhaWxzKCk7XG4gICAgdGhpcy5pbml0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdExhbmd1YWdlKCk6IHZvaWQge1xuICAgIC8vIExhbmd1YWdlIGlzIGZpeGVkIHRvIEVuZ2xpc2hcbiAgICB0aGlzLmN1cnJlbnRMYW5nLnNldCgnZW4nKTtcbiAgfVxuXG4gIGxvYWRSZWZ1bmREZXRhaWxzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VJZHMgPSB0aGlzLnBhY2thZ2VJZHMoKTtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG5cbiAgICB0aGlzLmVuZHBvaW50c1NlcnZpY2VcbiAgICAgIC5nZXRSZWZ1bmREZXRhaWxzKHBhY2thZ2VJZHMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmVuZHBvaW50c1NlcnZpY2UubWFwQXBpUmVzcG9uc2VUb1JlZnVuZFN1bW1hcnkoXG4gICAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5zZXQocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVmdW5kU3VtbWFyeS5zZXQoc3VtbWFyeSk7XG5cbiAgICAgICAgICAgIHRoaXMucGF5bWVudE1ldGhvZC5zZXQoXG4gICAgICAgICAgICAgIHRoaXMuZGV0ZXJtaW5lUGF5bWVudE1ldGhvZChcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnVuZFN1bW1hcnkoKT8ucGF5b3V0LFxuICAgICAgICAgICAgICAgIHRoaXMucmVmdW5kU3VtbWFyeSgpPy50b3RhbHMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KCk7XG4gICAgICAgICAgdGhpcy5lcnJvci5zZXQoZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCByZWZ1bmQgZGV0YWlscycpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KCk6IHZvaWQge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLmVuZHBvaW50c1NlcnZpY2UuY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KFxuICAgICAgdGhpcy5zZWxlY3RlZFJvb21zKCkubWFwKChyb29tKSA9PiAoeyAuLi5yb29tLCBpc1NlbGVjdGVkOiB0cnVlIH0pKSxcbiAgICApO1xuICAgIHRoaXMucmVmdW5kU3VtbWFyeS5zZXQoc3VtbWFyeSk7XG4gIH1cblxuICB0b2dnbGVQYWNrYWdlRXhwYW5kKHBhY2thZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFBhY2thZ2VJZHMudXBkYXRlKChjdXJyZW50KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KGN1cnJlbnQpO1xuICAgICAgaWYgKG5ld1NldC5oYXMocGFja2FnZUlkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHBhY2thZ2VJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHBhY2thZ2VJZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlQW1vdW50RXhwYW5kKHBhY2thZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZEFtb3VudElkcy51cGRhdGUoKGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoY3VycmVudCk7XG4gICAgICBpZiAobmV3U2V0LmhhcyhwYWNrYWdlSWQpKSB7XG4gICAgICAgIG5ld1NldC5kZWxldGUocGFja2FnZUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocGFja2FnZUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgfSk7XG4gIH1cblxuICBpc1BhY2thZ2VFeHBhbmRlZChwYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGFja2FnZUlkcygpLmhhcyhwYWNrYWdlSWQpO1xuICB9XG5cbiAgaXNBbW91bnRFeHBhbmRlZChwYWNrYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQW1vdW50SWRzKCkuaGFzKHBhY2thZ2VJZCk7XG4gIH1cblxuICBvbktlZXBSb29tKCk6IHZvaWQge1xuICAgIHRoaXMua2VlcFJvb20uZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RSZWZ1bmRPcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RSZWZ1bmRPcHRpb24uZW1pdCh7XG4gICAgICBwYWNrYWdlSWRzOiB0aGlzLnBhY2thZ2VJZHMoKSxcbiAgICAgIHBheW91dDogdGhpcy5wYXlvdXQoKSxcbiAgICAgIHRvdGFsUmVmdW5kOiB0aGlzLnRvdGFsUmVmdW5kKCksXG4gICAgICByZXNwb25zZURhdGE6IHRoaXMucmVzcG9uc2VEYXRhKCksXG4gICAgfSk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBzdWJtaXREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMub25Db25maXJtU2VuZCgpO1xuICB9XG5cbiAgb25Db25maXJtU2VuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2FuY2VsTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5ob3RlbE1hbmFnZUJvb2tpbmdzRW5kcG9pbnRzU2VydmljZVxuICAgICAgLmNhbmNlbEJvb2tpbmdSZXF1ZXN0KG5ldyBDYW5jZWxIb3RlbEJvb2tpbmdQYXlsb2FkKCkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzQ2FuY2VsTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIGlmIChlbnZpcm9ubWVudHMuaXNUZW5hbnQpIHtcbiAgICAgICAgICAgIHRoaXMub25TaG93V2hhdHNBcHBBZ2VudCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVzPy5kYXRhPy5pc1doYXRzQXBwUmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5vblNob3dXaGF0c0FwcEFnZW50KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uU2hvd0NvbmZpcm1Nb2RhbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0NhbmNlbExvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmhvdGVsTWFuYWdlRXJyb3Iuc2V0KGVycm9yPy5lcnJvcj8uZXJyb3JzPy5tZXNzYWdlIHx8ICcnKTtcbiAgICAgICAgICB0aGlzLnNob3dFcnJvck1vZGFsRmxhZy5zZXQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TaG93V2hhdHNBcHBBZ2VudCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2V0QWN0aXZlQXNpZGVUYWIoXG4gICAgICBIb3RlbE1hbmFnZUJvb2tpbmdBc2lkZVRhYkVudW0ud2hhdHNBcHBBZ2VudCxcbiAgICApO1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uU2hvd0NvbmZpcm1Nb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb25maXJtTW9kYWxGbGFnLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlQWxsTW9kYWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1Nb2RhbEZsYWcuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dFcnJvck1vZGFsRmxhZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBmb3JtYXREYXRlKGRhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGRheSA9IG1vbWVudChkYXRlKS5mb3JtYXQoJ0QnKTtcbiAgICBjb25zdCBtb250aCA9IG1vbWVudChkYXRlKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdNTU1NJyk7XG4gICAgY29uc3QgeWVhciA9IG1vbWVudChkYXRlKS5mb3JtYXQoJ1lZWVknKTtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lUGF5bWVudE1ldGhvZCh0b3RhbHM6IGFueSwgcGF5b3V0OiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICgocGF5b3V0Py50YWJieSA/PyB0b3RhbHM/LnRhYmJ5ID8/IDApID4gMCkge1xuICAgICAgcmV0dXJuICdUQic7IC8vIFRhYmJ5XG4gICAgfVxuICAgIGlmICgocGF5b3V0Py50YW1hcmEgPz8gdG90YWxzPy50YW1hcmEgPz8gMCkgPiAwKSB7XG4gICAgICByZXR1cm4gJ1RNJzsgLy8gVGFtYXJhXG4gICAgfVxuICAgIGlmICgocGF5b3V0Py5jYXJkID8/IHRvdGFscz8uY2FyZCA/PyAwKSA+IDApIHtcbiAgICAgIHJldHVybiAnQ0gnOyAvLyBDYXJkXG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5XCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8IS0tIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9faGVhZGVyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19oZWFkZXItYnRuXCJcbiAgICAgIChjbGljayk9XCJvbktlZXBSb29tKClcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICA+XG4gICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cImJhY2tBcnJvdygpXCI+PC9hbG1hdGFyLWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLXN1bW1hcnlfX2hlYWRlci10ZXh0XCI+XG4gICAgICA8aDMgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9faGVhZGVyLXRpdGxlXCI+XG4gICAgICAgIENhbmNlbCBCb29raW5nIFJlcXVlc3RcbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19oZWFkZXItYnRuXCJcbiAgICAgIChjbGljayk9XCJvbkNsb3NlKClcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICA+XG4gICAgICA8YWxtYXRhci1pY29uIFtuYW1lXT1cIid4LW1hcmsnXCI+PC9hbG1hdGFyLWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PiAtLT5cblxuICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgPGFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24tcmVmdW5kLXN1bW1hcnktc2tlbGV0b24gLz5cbiAgfSBAZWxzZSBpZiAoZXJyb3IoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3ItY2FyZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVmdW5kLXN1bW1hcnlfX2Vycm9yLWljb24td3JhcHBlclwiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHdpZHRoPVwiMzJcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTEyIDhWMTJNMTIgMTZIMTIuMDFNMjEgMTJDMjEgMTYuOTcwNiAxNi45NzA2IDIxIDEyIDIxQzcuMDI5NDQgMjEgMyAxNi45NzA2IDMgMTJDMyA3LjAyOTQ0IDcuMDI5NDQgMyAxMiAzQzE2Ljk3MDYgMyAyMSA3LjAyOTQ0IDIxIDEyWlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19lcnJvci10aXRsZVwiPlxuICAgICAgICAgIEZhaWxlZCB0byBsb2FkIHJlZnVuZCBkZXRhaWxzLiBQbGVhc2UgdHJ5IGFnYWluLlxuICAgICAgICA8L2g0PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZXJyb3ItYnRuXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwibG9hZFJlZnVuZERldGFpbHMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xIDRWMTBIN00yMyAyMFYxNEgxN00yMC40OSA5QzE5Ljk4MjggNy41NjY3OCAxOS4xMjA5IDYuMjg1NCAxNy45ODQ1IDUuMjc1NDJDMTYuODQ4MiA0LjI2NTQzIDE1LjQ3NDUgMy41NTk3NiAxMy45OTE3IDMuMjI0MjZDMTIuNTA4OSAyLjg4ODc1IDEwLjk2NTIgMi45MzQzNCA5LjUwNDgxIDMuMzU2NzdDOC4wNDQzNyAzLjc3OTIxIDYuNzE0NzUgNC41NjQ3MSA1LjY0IDUuNjRMMSAxME0yMyAxNEwxOC4zNiAxOC4zNkMxNy4yODUzIDE5LjQzNTMgMTUuOTU1NiAyMC4yMjA4IDE0LjQ5NTIgMjAuNjQzMkMxMy4wMzQ4IDIxLjA2NTcgMTEuNDkxMSAyMS4xMTEyIDEwLjAwODMgMjAuNzc1N0M4LjUyNTQ3IDIwLjQ0MDIgNy4xNTE4IDE5LjczNDYgNi4wMTU0NyAxOC43MjQ2QzQuODc5MTMgMTcuNzE0NiA0LjAxNzE3IDE2LjQzMzIgMy41MSAxNVwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICBUcnkgQWdhaW5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJlZnVuZC1zdW1tYXJ5X19jb250ZW50XCI+XG4gICAgICA8aDMgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fdGl0bGVcIj5cbiAgICAgICAgUmVmdW5kIHN1bW1hcnlcbiAgICAgIDwvaDM+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRzXCI+XG4gICAgICAgIEBmb3IgKHBrZyBvZiBwYWNrYWdlcygpOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkXCJcbiAgICAgICAgICAgIFtjbGFzcy5wYWNrYWdlLWNhcmQtLWV4cGFuZGVkXT1cImlzUGFja2FnZUV4cGFuZGVkKHBrZy5wYWNrYWdlSWQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wYWNrYWdlLWNhcmQtLWNhbmNlbGxlZC1iZWZvcmVdPVwicGtnLmNhbmNlbGxlZEJlZm9yZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9faGVhZGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhY2thZ2VFeHBhbmQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19pbmZvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX25hbWVcIj57eyBwa2cucGFja2FnZU5hbWUgfX08L2g0PlxuICAgICAgICAgICAgICAgICAgQGlmICghcGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBDVVJSRU5UIENBTkNFTExBVElPTlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBUb2RheSBvblxuICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fYmFkZ2UgcGFja2FnZS1jYXJkX19iYWRnZS0tY2FuY2VsbGVkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIFBSRVZJT1VTIENBTkNFTExBVElPTlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxsYXRpb24gZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXREYXRlKHBrZy5jYW5jZWxsYXRpb25EYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19leHBhbmQtaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnJvdGF0ZWRdPVwiaXNQYWNrYWdlRXhwYW5kZWQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFsbWF0YXItaWNvbiBbbmFtZV09XCInY2hldnJvbi1kb3duJ1wiPjwvYWxtYXRhci1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJvb21zIGRpc3BsYXkgLS0+XG4gICAgICAgICAgICBAaWYgKHBrZy5yb29tcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3Jvb21zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgZ3JvdXAgb2YgZ3JvdXBSb29tc0J5TmFtZShwa2cucm9vbXMpO1xuICAgICAgICAgICAgICAgICAgdHJhY2sgaTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gJGluZGV4XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb29tLXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5jb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIE11bHRpcGxlIHJvb21zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmNvdW50IH19eCB7eyBncm91cC5yb29tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNpbmdsZSByb29tIC0tPlxuICAgICAgICAgICAgICAgICAgICAgIFJvb21cblxuICAgICAgICAgICAgICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3NlcGFyYXRvclwiPiZidWxsOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5yb29tTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZ3JvdXAubmlnaHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3NlcGFyYXRvclwiPiZidWxsOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5uaWdodHMgfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLm5pZ2h0cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmlnaHRcbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5pZ2h0c1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmFkdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19zZXBhcmF0b3JcIj4mYnVsbDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuYWR1bHRzIH19XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5hZHVsdHMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkdWx0XG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBZHVsdHNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChncm91cC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19zZXBhcmF0b3JcIj4mYnVsbDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuY2hpbGRyZW4gfX1cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGdyb3VwLmNoaWxkcmVuID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDaGlsZFxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoIXBrZy5jYW5jZWxsZWRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2RhdGVcIj5cbiAgICAgICAgICAgICAgICBUb2RheSBvblxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fZGF0ZVwiPlxuICAgICAgICAgICAgICAgIENhbmNlbGxhdGlvbiBkYXRlOlxuICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUocGtnLmNhbmNlbGxhdGlvbkRhdGUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBSb29tIEFtb3VudCBSb3cgd2l0aCBleHBhbmQgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gRXhwYW5kYWJsZSBjb250ZW50OiBSb29tcywgRGF0ZSwgYW5kIEZpbmFuY2lhbCBicmVha2Rvd24gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19leHBhbmRhYmxlLWNvbnRlbnRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiaXNQYWNrYWdlRXhwYW5kZWQocGtnLnBhY2thZ2VJZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tY2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICB0b2dnbGVBbW91bnRFeHBhbmQocGtnLnBhY2thZ2VJZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHBrZz8ucm9vbXM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlJvb21zIGFtb3VudDwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsIHBhY2thZ2UtY2FyZF9fbGFiZWwtLWRhcmstbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+Um9vbSBhbW91bnQ8L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHBrZy5mZWUgPiAwIHx8IHBrZy5zZXJ2aWNlRmVlID4gMCB8fCBzdXJjaGFyZ2VBbW91bnQoKSA+IDBcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2V4cGFuZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mucm90YXRlZF09XCJpc0Ftb3VudEV4cGFuZGVkKHBrZy5wYWNrYWdlSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxhbG1hdGFyLWljb24gW25hbWVdPVwiJ2NoZXZyb24tZG93bidcIj48L2FsbWF0YXItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHBrZy5hbW91bnQgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIEV4cGFuZGVkIGNvbnRlbnQ6IENhbmNlbGxhdGlvbiBmZWUgYW5kIFNlcnZpY2UgZmVlIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2V4cGFuZGVkLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJcbiAgICAgICAgICAgICAgICAgIGlzQW1vdW50RXhwYW5kZWQocGtnLnBhY2thZ2VJZCkgJiZcbiAgICAgICAgICAgICAgICAgIChwa2cuZmVlID4gMCB8fCBwa2cuc2VydmljZUZlZSA+IDApXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAocGtnLmZlZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fbGFiZWxcIj5DYW5jZWxsYXRpb24gZmVlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFja2FnZS1jYXJkX192YWx1ZSBwYWNrYWdlLWNhcmRfX3ZhbHVlLS1ncmF5IHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgLVxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwa2cuZmVlIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAocGtnLnNlcnZpY2VGZWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsXCI+U2VydmljZSBGZWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWdyYXkgcGFja2FnZS1jYXJkX192YWx1ZS0tcmVndWxhclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5zZXJ2aWNlRmVlIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBpZiAoc3VyY2hhcmdlQW1vdW50KCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgU3VyY2hhcmdlICgyLjUlKVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWdyYXkgcGFja2FnZS1jYXJkX192YWx1ZS0tcmVndWxhclwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAtXG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cmNoYXJnZUFtb3VudCgpIHwgZXhjaGFuZ2Vfcm91bmRcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gQWRkLU9ucyBSZWZ1bmQgU2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgQGlmIChnaWZ0c0RldGFpbHMoKS5sZW5ndGggPiAwICYmIGkgPT09IHBhY2thZ2VzKCk/Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkb25zLXJlZnVuZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX2xhYmVsIHBhY2thZ2UtY2FyZF9fbGFiZWwtLWRhcmstbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBBZGQtT25zIFJlZnVuZFxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZG9ucy1yZWZ1bmRfX2xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZ2lmdCBvZiBnaWZ0c0RldGFpbHMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhY2thZ2UtY2FyZF9fbGFiZWxcIj57eyBnaWZ0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdmFsdWUgcGFja2FnZS1jYXJkX192YWx1ZS0tZ3JheSBwYWNrYWdlLWNhcmRfX3ZhbHVlLS1yZWd1bGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWZ0LnRvQmVSZWZ1bmRlZEFtb3VudCB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQGlmICghZ2lmdC5yZWZ1bmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IC0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBAaWYgKGdpZnRzSGFzUmVmdW5kYWJsZUVudGl0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRvbnMtcmVmdW5kX19ub3RpY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjeD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3k9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHI9XCI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwIDlWMTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjYuNVwiIHI9XCIwLjc1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGRvbnMtcmVmdW5kX19ub3RpY2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgWW91ciBhZGQtb24gc2VydmljZS9zIHJlZnVuZCB3aWxsIGJlIHByb2Nlc3NlZCBzZXBhcmF0ZWx5IGJ5IG91ciBDdXN0b21lciBTZXJ2aWNlIHRlYW0gc2hvcnRseS5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfSAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIEVuZCBleHBhbmRhYmxlIGNvbnRlbnQgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gWW91IHdpbGwgZ2V0IGJhY2sgcm93IC0gQUxXQVlTIFZJU0lCTEUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFja2FnZS1jYXJkX19kZXRhaWxzXCI+XG4gICAgICAgICAgICAgIEBpZiAocGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrXCI+UmVmdW5kZWQgYW1vdW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3ZhbHVlIHBhY2thZ2UtY2FyZF9fdmFsdWUtLWhpZ2hsaWdodFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcGtnLnJlZnVuZCB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWNrYWdlLWNhcmRfX3JvdyBwYWNrYWdlLWNhcmRfX3Jvdy0tdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFja2FnZS1jYXJkX19sYWJlbCBwYWNrYWdlLWNhcmRfX2xhYmVsLS1kYXJrXCI+WW91IHdpbGwgZ2V0IGJhY2s8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhY2thZ2UtY2FyZF9fdmFsdWUgcGFja2FnZS1jYXJkX192YWx1ZS0taGlnaGxpZ2h0IHBhY2thZ2UtY2FyZF9fdmFsdWUtLXJlZ3VsYXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHBrZy5yZWZ1bmQgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50Q3VycmVuY3koKT8uY29kZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cInNlcGVyYXRvclwiIC8+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5X19yb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX2xhYmVsXCI+VG90YWwgcGFpZDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICB0b3RhbFBhaWQoKSB8IGV4Y2hhbmdlX3JvdW5kXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAge3sgY3VycmVudEN1cnJlbmN5KCk/LmNvZGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIEBpZiAoYWxyZWFkeVJlZnVuZGVkKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidG90YWwtc3VtbWFyeV9fcm93XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX2xhYmVsXCI+Um9vbXMgUmVmdW5kZWQ8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgYWxyZWFkeVJlZnVuZGVkKCkgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB7eyBjdXJyZW50Q3VycmVuY3koKT8uY29kZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3JvdyB0b3RhbC1zdW1tYXJ5X19yb3ctLWhpZ2hsaWdodFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b3RhbC1zdW1tYXJ5X19sYWJlbCB0b3RhbC1zdW1tYXJ5X19sYWJlbC0taGlnaGxpZ2h0XCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgWW91J2xsIGdldCBiYWNrIGZvclxuICAgICAgICAgICAgICB7eyBjdXJyZW50UmVmdW5kUm9vbXNOdW1iZXIoKSB9fVxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMYW5nKCkgIT09ICdhcidcbiAgICAgICAgICAgICAgICAgID8gY3VycmVudFJlZnVuZFJvb21zTnVtYmVyKCkgPiAxXG4gICAgICAgICAgICAgICAgICAgID8gKCdSb29tcycpXG4gICAgICAgICAgICAgICAgICAgIDogKCdSb29tJylcbiAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvdGFsLXN1bW1hcnlfX3ZhbHVlIHRvdGFsLXN1bW1hcnlfX3ZhbHVlLS1oaWdobGlnaHRcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHRvdGFsUmVmdW5kKCkgfCBleGNoYW5nZV9yb3VuZFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHt7IGN1cnJlbnRDdXJyZW5jeSgpPy5jb2RlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyX19pY29uXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTAgMkwzIDVWOUMzIDEzLjU1IDYuMjQgMTcuNzQgMTAgMTguNUMxMy43NiAxNy43NCAxNyAxMy41NSAxNyA5VjVMMTAgMlpcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNNyAxMEw5IDEyTDEzIDhcIlxuICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lcl9fY29udGVudFwiPlxuICAgICAgICAgIEBpZiAocGF5bWVudE1ldGhvZCgpID09PSAnQ0gnKSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImluZm8tYmFubmVyX190ZXh0XCI+XG4gICAgICAgICAgICAgIFlvdXIgcmVmdW5kIGlzIGluc3RhbnQgZnJvbSBvdXIgc2lkZSwgeW91ciBiYW5rIG1heSB0YWtlIHVwIHRvIDE1IGJ1c2luZXNzIGRheXMgdG8gcmVmbGVjdCBpdC5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9IEBlbHNlIGlmIChwYXltZW50TWV0aG9kKCkgPT09ICdUQicpIHtcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5mby1iYW5uZXJfX3RleHRcIj5cbiAgICAgICAgICAgICAgWW91ciByZWZ1bmQgaXMgaW5zdGFudCBmcm9tIG91ciBzaWRlLCBUYWJieSBtYXkgdGFrZSA1LTcgYnVzaW5lc3MgZGF5cyB0byByZWZsZWN0IGl0LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH0gQGVsc2UgaWYgKHBheW1lbnRNZXRob2QoKSA9PT0gJ1RNJykge1xuICAgICAgICAgICAgPHAgY2xhc3M9XCJpbmZvLWJhbm5lcl9fdGV4dFwiPlxuICAgICAgICAgICAgICBZb3VyIHJlZnVuZCBpcyBpbnN0YW50IGZyb20gb3VyIHNpZGUsIFRhbWFyYSBtYXkgdGFrZSB1cCB0byAxMCBidXNpbmVzcyBkYXlzIHRvIHJlZmxlY3QgaXQuXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cImluZm8tYmFubmVyX190ZXh0XCI+XG4gICAgICAgICAgICAgIFlvdXIgcmVmdW5kIGlzIGluc3RhbnQgZnJvbSBvdXIgc2lkZSwgeW91ciBsb3lhbHR5IHByb2dyYW0gbWF5IHRha2Ugc29tZSB0aW1lIHRvIHJlZmxlY3QgaXQgYmFzZWQgb24gdGhlaXIgcG9saWN5LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxwIGNsYXNzPVwiaW5mby1iYW5uZXJfX3N1YnRleHRcIj5cbiAgICAgICAgICAgIFlvdSBjYW4gc2VsZWN0IHJlZnVuZCBvcHRpb24gaW4gdGhlIG5leHQgc3RlcFxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyZWZ1bmQtc3VtbWFyeV9fZm9vdGVyXCI+XG4gICAgICBAaWYgKGFsbFBhY2thZ2VzQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbmNlbGxlZC1zdGF0dXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsbGVkLXN0YXR1c19faWNvblwiPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICB3aWR0aD1cIjI0XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgIGN4PVwiMTJcIlxuICAgICAgICAgICAgICAgIGN5PVwiMTJcIlxuICAgICAgICAgICAgICAgIHI9XCI5XCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNOSAxMkwxMSAxNEwxNSAxMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FuY2VsbGVkLXN0YXR1c19fdGV4dFwiPlxuICAgICAgICAgICAgPGg0PkFsbCBSb29tcyBDYW5jZWxsZWQ8L2g0PlxuICAgICAgICAgICAgPHA+QWxsIHBhY2thZ2VzIGluIHRoaXMgYm9va2luZyBoYXZlIGJlZW4gY2FuY2VsbGVkPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaWYgKHRvdGFsUmVmdW5kKCkpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tLXNlY29uZGFyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbktlZXBSb29tKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEtlZXAgUm9vbVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi0tcHJpbWFyeVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdFJlZnVuZE9wdGlvbigpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTZWxlY3QgcmVmdW5kIG9wdGlvblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tLWRhbmdlclwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0NhbmNlbExvYWRpbmcoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic3VibWl0RGF0YSgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzQ2FuY2VsTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuX19zcGlubmVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIENhbmNlbCBCb29raW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjwhLS0gQ29uZmlybSBNb2RhbCAtLT5cbkBpZiAoc2hvd0NvbmZpcm1Nb2RhbEZsYWcoKSkge1xuICA8ZGl2XG4gICAgYWxtYXRhci1jb25maXJtLW1vZGFsXG4gICAgW01lc3NhZ2VdPVwiJ1lvdXIgcmVxdWVzdCBoYXMgYmVlbiBzdWJtaXR0ZWQuIE91ciBjdXN0b21lciBzZXJ2aWNlIHRlYW0gd2lsbCBjb250YWN0IHlvdSBzaG9ydGx5LidcIlxuICAgIChjYW5jZWxFdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgICAoY29uZmlybUV2ZW50KT1cImNsb3NlQWxsTW9kYWxzKClcIlxuICA+PC9kaXY+XG59XG5cbjwhLS0gRXJyb3IgTW9kYWwgLS0+XG5AaWYgKHNob3dFcnJvck1vZGFsRmxhZygpKSB7XG4gIDxkaXZcbiAgICBhbG1hdGFyLW1hbmFnZS1ib29raW5nLWZhaWxlZC1tb2RhbFxuICAgIFtlcnJvck1lc3NhZ2VdPVwiaG90ZWxNYW5hZ2VFcnJvcigpXCJcbiAgICAoY2FuY2VsRXZlbnQpPVwiY2xvc2VBbGxNb2RhbHMoKVwiXG4gICAgKGNvbmZpcm1FdmVudCk9XCJjbG9zZUFsbE1vZGFscygpXCJcbiAgPjwvZGl2PlxufVxuIl19
|