@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
339 lines • 44.2 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, Injector, Input } from '@angular/core';
import { Debounce } from '@microsoft/windows-admin-center-sdk/core/base/decorators/debounce.decorators';
import { CoreBaseComponent } from '../common/base.component';
import { DialogChangeEvent, DialogService } from '../dialog/dialog.service';
import { StatusIconType } from '../icon/layered-icon/status/status-icon.component';
import { AlertBarService, AlertSeverity } from './alert-bar.service';
import * as i0 from "@angular/core";
import * as i1 from "./alert-bar.service";
import * as i2 from "../dialog/dialog.service";
import * as i3 from "@angular/common";
import * as i4 from "@angular/router";
import * as i5 from "../icon/layered-icon/status/status-icon.component";
import * as i6 from "../tooltip/tooltip.directive";
const _c0 = function (a0, a1) { return { "sme-icon-chevronDown": a0, "sme-icon-chevronRight": a1 }; };
function AlertBarComponent_div_1_span_3_Template(rf, ctx) { if (rf & 1) {
const _r8 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "span", 18);
i0.ɵɵlistener("click", function AlertBarComponent_div_1_span_3_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const alert_r1 = i0.ɵɵnextContext().$implicit; const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.clickExpand($event, alert_r1)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const alert_r1 = i0.ɵɵnextContext().$implicit;
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c0, alert_r1.isExpanded, !alert_r1.isExpanded))("title", ctx_r2.strings.MsftSmeShell.Angular.AlertBar.Expand);
} }
function AlertBarComponent_div_1_p_12_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "p", 19);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const alert_r1 = i0.ɵɵnextContext().$implicit;
i0.ɵɵattribute("aria-label", alert_r1.message);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", alert_r1.message, " ");
} }
function AlertBarComponent_div_1_p_13_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "p", 19);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const alert_r1 = i0.ɵɵnextContext().$implicit;
i0.ɵɵattribute("aria-label", alert_r1.message);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", alert_r1.message, " ");
} }
function AlertBarComponent_div_1_label_14_div_1_a_1_Template(rf, ctx) { if (rf & 1) {
const _r18 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "a", 23);
i0.ɵɵlistener("click", function AlertBarComponent_div_1_label_14_div_1_a_1_Template_a_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const link_r13 = i0.ɵɵnextContext().$implicit; const ctx_r16 = i0.ɵɵnextContext(3); link_r13.event(); return i0.ɵɵresetView(ctx_r16.stopClickPropagation($event)); });
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const link_r13 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", link_r13.displayText, " ");
} }
function AlertBarComponent_div_1_label_14_div_1_div_2_a_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "a", 27);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const link_r13 = i0.ɵɵnextContext(2).$implicit;
i0.ɵɵproperty("href", link_r13.uri, i0.ɵɵsanitizeUrl);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", link_r13.displayText, " ");
} }
function AlertBarComponent_div_1_label_14_div_1_div_2_a_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "a", 28);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const link_r13 = i0.ɵɵnextContext(2).$implicit;
i0.ɵɵproperty("routerLink", link_r13.uri);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", link_r13.displayText, " ");
} }
function AlertBarComponent_div_1_label_14_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
const _r25 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 24);
i0.ɵɵlistener("click", function AlertBarComponent_div_1_label_14_div_1_div_2_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r24 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r24.stopClickPropagation($event)); });
i0.ɵɵtemplate(1, AlertBarComponent_div_1_label_14_div_1_div_2_a_1_Template, 2, 2, "a", 25);
i0.ɵɵtemplate(2, AlertBarComponent_div_1_label_14_div_1_div_2_a_2_Template, 2, 2, "a", 26);
i0.ɵɵelementEnd();
} if (rf & 2) {
const link_r13 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", link_r13.isExternalLink);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !link_r13.isExternalLink);
} }
function AlertBarComponent_div_1_label_14_div_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");
i0.ɵɵtemplate(1, AlertBarComponent_div_1_label_14_div_1_a_1_Template, 2, 1, "a", 21);
i0.ɵɵtemplate(2, AlertBarComponent_div_1_label_14_div_1_div_2_Template, 3, 2, "div", 22);
i0.ɵɵelementEnd();
} if (rf & 2) {
const link_r13 = ctx.$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", link_r13.event);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !link_r13.event && link_r13.uri);
} }
function AlertBarComponent_div_1_label_14_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "label");
i0.ɵɵtemplate(1, AlertBarComponent_div_1_label_14_div_1_Template, 3, 2, "div", 20);
i0.ɵɵelementEnd();
} if (rf & 2) {
const alert_r1 = i0.ɵɵnextContext().$implicit;
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", alert_r1.links);
} }
function AlertBarComponent_div_1_Template(rf, ctx) { if (rf & 1) {
const _r29 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 2);
i0.ɵɵlistener("click", function AlertBarComponent_div_1_Template_div_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r29); const alert_r1 = restoredCtx.$implicit; const ctx_r28 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r28.openNotificationDetails(alert_r1)); });
i0.ɵɵelementStart(1, "div", 3);
i0.ɵɵelement(2, "sme-status-icon", 4);
i0.ɵɵtemplate(3, AlertBarComponent_div_1_span_3_Template, 1, 5, "span", 5);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(4, "div", 6)(5, "div", 7)(6, "div", 8)(7, "p", 9);
i0.ɵɵtext(8);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(9, "p", 10);
i0.ɵɵtext(10);
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(11, "div", 3);
i0.ɵɵtemplate(12, AlertBarComponent_div_1_p_12_Template, 2, 2, "p", 11);
i0.ɵɵtemplate(13, AlertBarComponent_div_1_p_13_Template, 2, 2, "p", 11);
i0.ɵɵtemplate(14, AlertBarComponent_div_1_label_14_Template, 2, 1, "label", 12);
i0.ɵɵelementEnd()();
i0.ɵɵelementStart(15, "div", 13)(16, "div", 14);
i0.ɵɵtext(17);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(18, "div", 15);
i0.ɵɵtext(19);
i0.ɵɵelementEnd()()();
i0.ɵɵelementStart(20, "div", 3)(21, "button", 16);
i0.ɵɵlistener("click", function AlertBarComponent_div_1_Template_button_click_21_listener() { const restoredCtx = i0.ɵɵrestoreView(_r29); const alert_r1 = restoredCtx.$implicit; const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.dismiss(alert_r1)); });
i0.ɵɵelement(22, "span", 17);
i0.ɵɵelementEnd()()();
} if (rf & 2) {
const alert_r1 = ctx.$implicit;
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵproperty("status", ctx_r0.getStatusString(alert_r1))("title", ctx_r0.getIconTitle(alert_r1));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", alert_r1.title && alert_r1.needsClamp);
i0.ɵɵadvance(5);
i0.ɵɵtextInterpolate(ctx_r0.getIconTitle(alert_r1));
i0.ɵɵadvance(1);
i0.ɵɵattribute("aria-label", alert_r1.title || alert_r1.message);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(alert_r1.title || alert_r1.message);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", alert_r1.title && !alert_r1.isExpanded);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", alert_r1.title && alert_r1.isExpanded);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", alert_r1.links);
i0.ɵɵadvance(3);
i0.ɵɵtextInterpolate(alert_r1.nodeName);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate1(" ", alert_r1.timestamp, "");
i0.ɵɵadvance(2);
i0.ɵɵattribute("aria-label", ctx_r0.strings.MsftSmeShell.Angular.AlertBar.DismissAriaLabel);
i0.ɵɵadvance(1);
i0.ɵɵproperty("title", ctx_r0.strings.MsftSmeShell.Angular.AlertBar.Dismiss);
} }
export class AlertBarComponent extends CoreBaseComponent {
/**
* Initializes a new instance of the {AlertBarComponent} class.
*
* @param alertBarService The alert service.
* @param router The router.
* @param activatedRoute The activated route.
*/
constructor(injector, alertBarService, dialogService) {
super(injector);
this.alertBarService = alertBarService;
this.dialogService = dialogService;
this.dialogSubscriptions = [];
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'AlertBarComponent';
}
/**
* The method to run when the component is initialized.
*/
ngOnInit() {
this.alerts = [];
this.alertBarService.register(this, this.id);
this.dialogSubscriptions.push(this.dialogService.changed.subscribe(event => {
// clear all alerts if the notification dialog opens
if (event.dialogId === this.dialogService.commonIds.notificationsPane && event.changeEvent === DialogChangeEvent.Show) {
this.alerts = [];
}
}));
}
/**
* The method to run when the component is destroyed.
*/
ngOnDestroy() {
this.alertBarService.unregister(this.id);
if (this.dialogSubscriptions) {
this.dialogSubscriptions.forEach(sub => sub?.unsubscribe());
}
}
/**
* Open details view in notification pane
* @param alert the alert clicked
*/
openNotificationDetails(alert) {
this.dialogSubscriptions.push(this.dialogService.show(this.dialogService.commonIds.notificationsPane, { id: alert.id }).subscribe());
}
/**
* click the message expand button
* @param event the event
* @param alert the alert clicked
*/
clickExpand(event, alert) {
alert.isExpanded = !alert.isExpanded;
this.stopClickPropagation(event);
}
/**
* stop propagation on the event
* @param event the event to stop
*/
stopClickPropagation(event) {
event.stopPropagation();
}
/**
* Assigns needsClamp properly to given alert
* @param alert the alert
* @param event the clamped event
*/
assignClamped(alert, event) {
alert.needsClamp = event.clamped;
}
/**
* Gets the status string for the status icon
*
* @param alert The alert.
*/
getStatusString(alert) {
switch (alert.severity) {
case AlertSeverity.Error:
return StatusIconType.Error;
case AlertSeverity.Warning:
return StatusIconType.Warning;
case AlertSeverity.Success:
return StatusIconType.Success;
case AlertSeverity.InProgress:
return StatusIconType.Progress;
case AlertSeverity.Informational:
default:
return StatusIconType.Info;
}
}
getIconTitle(alert) {
switch (alert.severity) {
case AlertSeverity.Error:
return this.strings.MsftSmeShell.Angular.AlertBar.Error;
case AlertSeverity.Warning:
return this.strings.MsftSmeShell.Angular.AlertBar.Warning;
case AlertSeverity.Success:
return this.strings.MsftSmeShell.Angular.AlertBar.Success;
case AlertSeverity.InProgress:
return this.strings.MsftSmeShell.Angular.AlertBar.InProgress;
case AlertSeverity.Informational:
default:
return this.strings.MsftSmeShell.Angular.AlertBar.Information;
}
}
/**
* Shows an alert.
*
* @param alert The alert to show.
*/
show(alert) {
// don't show popup if notifications are already open
if (!MsftSme.find(this.dialogService.activeDialogsStack, dialog => dialog.id === this.dialogService.commonIds.notificationsPane)) {
const existingAlert = this.alerts.find(x => x.id === alert.id || this.indexName(x) === this.indexName(alert));
if (existingAlert) {
if (existingAlert.setTimeout) {
clearTimeout(existingAlert.setTimeout);
existingAlert.setTimeout = null;
}
this.dismiss(existingAlert);
}
if (alert.setTimeout) {
clearTimeout(alert.setTimeout);
alert.setTimeout = null;
}
this.alerts.unshift(alert);
alert.setTimeout = setTimeout(() => { this.dismiss(alert); }, 7000);
}
}
/**
* Dismisses an alert.
*
* @param alert The alert to dismiss.
*/
dismiss(alert) {
MsftSme.remove(this.alerts, alert);
}
/**
* Create the index name in map collection.
*
* @param alert the alert
*/
indexName(alert) {
return alert.severity + ':' + alert.title + ':' + alert.message + ':' + alert.nodeName;
}
}
/** @nocollapse */ AlertBarComponent.ɵfac = function AlertBarComponent_Factory(t) { return new (t || AlertBarComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i1.AlertBarService), i0.ɵɵdirectiveInject(i2.DialogService)); };
/** @nocollapse */ AlertBarComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: AlertBarComponent, selectors: [["sme-alert-bar"]], inputs: { id: "id" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "sme-layer-notification", "sme-layout-absolute", "sme-layout-notification-popup-list"], ["tabindex", "0", "class", "sme-layout-notification-popup sme-shadow-notification-popup sme-margin-right-sm sme-margin-top-sm sme-arrange-stack-h\n sme-background-color-alt-5 sme-border-color-alt-5 sme-padding-top-xs sme-padding-left-sm sme-padding-right-xs sme-padding-bottom-xs sme-behavior-hover-trigger", 3, "click", 4, "ngFor", "ngForOf"], ["tabindex", "0", 1, "sme-layout-notification-popup", "sme-shadow-notification-popup", "sme-margin-right-sm", "sme-margin-top-sm", "sme-arrange-stack-h", "sme-background-color-alt-5", "sme-border-color-alt-5", "sme-padding-top-xs", "sme-padding-left-sm", "sme-padding-right-xs", "sme-padding-bottom-xs", "sme-behavior-hover-trigger", 3, "click"], [1, "sme-arrange-stack-v"], ["size", "16px", 1, "sme-padding-right-xs", "sme-padding-top-xxxs", 3, "status", "title"], ["role", "button", "class", "sme-button-trigger sme-button-auto-width sme-position-flex-none sme-padding-inset-none sme-icon sme-padding-top-xxs sme-behavior-hover-target-show", 3, "ngClass", "title", "click", 4, "ngIf"], ["role", "alert", "id", "sme-alert-bar-content", 1, "sme-arrange-stack-v", "sme-arrange-overflow-hide-x", "sme-arrange-word-wrap-break-word", "sme-position-stretch-h"], [1, "sme-layout-notification-message"], [1, "sme-arrange-stack-h"], [1, "sme-screen-reader"], [1, "sme-font-family-bold", "sme-font-label", "sme-margin-inset-none", "sme-padding-top-xxxs", "sme-position-stretch-h", "sme-position-left-inline"], ["class", "sme-font-label", 4, "ngIf"], [4, "ngIf"], [1, "sme-arrange-stack-h", "sme-font-label", "sme-color-base-40"], [1, "sme-position-flex-auto", "sme-arrange-ellipsis"], [1, "sme-position-flex-none", "sme-margin-left-xxs"], ["data-uta-id", "cancel-alert", "aria-describedby", "sme-alert-bar-content", 1, "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-inset-none", "sme-padding-left-xxs", "sme-padding-right-xxs", 3, "click"], [1, "sme-icon", "sme-icon-cancel", 3, "title"], ["role", "button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-position-flex-none", "sme-padding-inset-none", "sme-icon", "sme-padding-top-xxs", "sme-behavior-hover-target-show", 3, "ngClass", "title", "click"], [1, "sme-font-label"], [4, "ngFor", "ngForOf"], ["class", "sme-link", 3, "click", 4, "ngIf"], [3, "click", 4, "ngIf"], [1, "sme-link", 3, "click"], [3, "click"], ["class", "sme-link", "target", "_blank", 3, "href", 4, "ngIf"], ["class", "sme-link", 3, "routerLink", 4, "ngIf"], ["target", "_blank", 1, "sme-link", 3, "href"], [1, "sme-link", 3, "routerLink"]], template: function AlertBarComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0);
i0.ɵɵtemplate(1, AlertBarComponent_div_1_Template, 23, 13, "div", 1);
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx.alerts);
} }, dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i4.RouterLink, i5.StatusIconComponent, i6.TooltipDirective], encapsulation: 2 });
__decorate([
Debounce(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", void 0)
], AlertBarComponent.prototype, "assignClamped", null);
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AlertBarComponent, [{
type: Component,
args: [{ selector: 'sme-alert-bar', template: "<div class=\"sme-layer-notification sme-layout-absolute sme-layout-notification-popup-list\">\r\n\r\n <div *ngFor=\"let alert of alerts\" tabindex=\"0\" (click)=\"openNotificationDetails(alert)\"\r\n class=\"sme-layout-notification-popup sme-shadow-notification-popup sme-margin-right-sm sme-margin-top-sm sme-arrange-stack-h\r\n sme-background-color-alt-5 sme-border-color-alt-5 sme-padding-top-xs sme-padding-left-sm sme-padding-right-xs sme-padding-bottom-xs sme-behavior-hover-trigger\">\r\n\r\n <div class=\"sme-arrange-stack-v\">\r\n <sme-status-icon class=\"sme-padding-right-xs sme-padding-top-xxxs\" [status]=\"getStatusString(alert)\" size=\"16px\"\r\n [title]=\"getIconTitle(alert)\"></sme-status-icon>\r\n <span role=\"button\" *ngIf=\"alert.title && alert.needsClamp\" (click)=\"clickExpand($event, alert)\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-position-flex-none sme-padding-inset-none sme-icon sme-padding-top-xxs sme-behavior-hover-target-show\"\r\n [ngClass]=\"{'sme-icon-chevronDown':alert.isExpanded, 'sme-icon-chevronRight': !alert.isExpanded}\"\r\n [title]=\"strings.MsftSmeShell.Angular.AlertBar.Expand\"></span>\r\n </div>\r\n\r\n <div role=\"alert\" id=\"sme-alert-bar-content\"\r\n class=\"sme-arrange-stack-v sme-arrange-overflow-hide-x sme-arrange-word-wrap-break-word sme-position-stretch-h\">\r\n\r\n <div class=\"sme-layout-notification-message\">\r\n <div class=\"sme-arrange-stack-h\">\r\n <p class=\"sme-screen-reader\">{{ getIconTitle(alert) }}</p>\r\n <p class=\"sme-font-family-bold sme-font-label sme-margin-inset-none sme-padding-top-xxxs sme-position-stretch-h sme-position-left-inline\"\r\n [attr.aria-label]=\"alert.title || alert.message\">{{ alert.title || alert.message }}</p>\r\n </div>\r\n <div class=\"sme-arrange-stack-v\">\r\n <p *ngIf=\"alert.title && !alert.isExpanded\" class=\"sme-font-label\" [attr.aria-label]=\"alert.message\">\r\n {{ alert.message }}\r\n </p>\r\n <p *ngIf=\"alert.title && alert.isExpanded\" class=\"sme-font-label\" [attr.aria-label]=\"alert.message\">\r\n {{ alert.message }}\r\n </p>\r\n\r\n <label *ngIf=\"alert.links\">\r\n <div *ngFor=\"let link of alert.links\">\r\n <a *ngIf=\"link.event\" class=\"sme-link\" (click)=\"link.event();stopClickPropagation($event)\">\r\n {{ link.displayText }}\r\n </a>\r\n <div *ngIf=\"!link.event && link.uri\" (click)=\"stopClickPropagation($event)\">\r\n <a *ngIf=\"link.isExternalLink\" class=\"sme-link\" [href]=\"link.uri\" target=\"_blank\">\r\n {{ link.displayText }}\r\n </a>\r\n <a *ngIf=\"!link.isExternalLink\" class=\"sme-link\" [routerLink]=\"link.uri\">\r\n {{ link.displayText }}\r\n </a>\r\n </div>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"sme-arrange-stack-h sme-font-label sme-color-base-40\">\r\n <div class=\"sme-position-flex-auto sme-arrange-ellipsis\">{{ alert.nodeName }}</div>\r\n <div class=\"sme-position-flex-none sme-margin-left-xxs\"> {{ alert.timestamp }}</div>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"sme-arrange-stack-v\">\r\n <button\r\n class=\"sme-button-trigger sme-button-auto-width sme-position-flex-none sme-padding-inset-none sme-padding-left-xxs sme-padding-right-xxs\"\r\n (click)=\"dismiss(alert)\" [attr.aria-label]=\"strings.MsftSmeShell.Angular.AlertBar.DismissAriaLabel\"\r\n data-uta-id=\"cancel-alert\" aria-describedby=\"sme-alert-bar-content\">\r\n <span class=\"sme-icon sme-icon-cancel\" [title]=\"strings.MsftSmeShell.Angular.AlertBar.Dismiss\"></span>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n" }]
}], function () { return [{ type: i0.Injector }, { type: i1.AlertBarService }, { type: i2.DialogService }]; }, { id: [{
type: Input
}], assignClamped: [] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2FsZXJ0LWJhci9hbGVydC1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvYWxlcnQtYmFyL2FsZXJ0LWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFFeEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNuRixPQUFPLEVBQW1CLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7SUNHaEYsZ0NBR3lEO0lBSEcsd05BQVMsZUFBQSxvQ0FBMEIsQ0FBQSxJQUFDO0lBR3ZDLGlCQUFPOzs7O0lBRDlELCtGQUFpRyw4REFBQTs7O0lBYy9GLDZCQUFxRztJQUNuRyxZQUNGO0lBQUEsaUJBQUk7OztJQUYrRCw4Q0FBaUM7SUFDbEcsZUFDRjtJQURFLGlEQUNGOzs7SUFDQSw2QkFBb0c7SUFDbEcsWUFDRjtJQUFBLGlCQUFJOzs7SUFGOEQsOENBQWlDO0lBQ2pHLGVBQ0Y7SUFERSxpREFDRjs7OztJQUlJLDZCQUEyRjtJQUFwRCw2TkFBUyxnQkFBWSxTQUFDLGVBQUEsb0NBQTRCLENBQUEsSUFBQztJQUN4RixZQUNGO0lBQUEsaUJBQUk7OztJQURGLGVBQ0Y7SUFERSxxREFD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dkIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssU0FBUyxDQUFDLEtBQVk7UUFDMUIsT0FBTyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQzNGLENBQUM7O3FHQTdLUSxpQkFBaUI7bUdBQWpCLGlCQUFpQjtRQ1o5Qiw4QkFBMkY7UUFFekYsb0VBK0RNO1FBQ1IsaUJBQU07O1FBaEVtQixlQUFTO1FBQVQsb0NBQVM7O0FEaUc5QjtJQUFDLFFBQVEsRUFBRTs7OztzREFHVjt1RkExRlEsaUJBQWlCO2NBSjdCLFNBQVM7MkJBQ0ksZUFBZTtxSEFZbEIsRUFBRTtrQkFEUixLQUFLO1lBZ0ZDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGVib3VuY2UgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL2Jhc2UvZGVjb3JhdG9ycy9kZWJvdW5jZS5kZWNvcmF0b3JzJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2Jhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nQ2hhbmdlRXZlbnQsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0dXNJY29uVHlwZSB9IGZyb20gJy4uL2ljb24vbGF5ZXJlZC1pY29uL3N0YXR1cy9zdGF0dXMtaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBbGVydCwgQWxlcnRCYXIsIEFsZXJ0QmFyU2VydmljZSwgQWxlcnRTZXZlcml0eSB9IGZyb20gJy4vYWxlcnQtYmFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1hbGVydC1iYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FsZXJ0LWJhci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0QmFyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWxlcnRCYXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc291cmNlIG5hbWUgdG8gdXNlIGZvciBsb2dnaW5nXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXQgbG9nU291cmNlTmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gJ0FsZXJ0QmFyQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlkOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGRpYWxvZ1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gICAgLy8gS2VlcCB0aGUgYXJyYXkgdG8gbWFpbnRhaW4gdGhlIG9yZGVyIG9mIEFsZXJ0cyByZWNlaXZlZC5cclxuICAgIHB1YmxpYyBhbGVydHM6IEFsZXJ0W107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUge0FsZXJ0QmFyQ29tcG9uZW50fSBjbGFzcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYWxlcnRCYXJTZXJ2aWNlIFRoZSBhbGVydCBzZXJ2aWNlLlxyXG4gICAgICogQHBhcmFtIHJvdXRlciBUaGUgcm91dGVyLlxyXG4gICAgICogQHBhcmFtIGFjdGl2YXRlZFJvdXRlIFRoZSBhY3RpdmF0ZWQgcm91dGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydEJhclNlcnZpY2U6IEFsZXJ0QmFyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1ldGhvZCB0byBydW4gd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuICAgICAgICB0aGlzLmFsZXJ0QmFyU2VydmljZS5yZWdpc3Rlcih0aGlzLCB0aGlzLmlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaWFsb2dTZXJ2aWNlLmNoYW5nZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgLy8gY2xlYXIgYWxsIGFsZXJ0cyBpZiB0aGUgbm90aWZpY2F0aW9uIGRpYWxvZyBvcGVuc1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGlhbG9nSWQgPT09IHRoaXMuZGlhbG9nU2VydmljZS5jb21tb25JZHMubm90aWZpY2F0aW9uc1BhbmUgJiYgZXZlbnQuY2hhbmdlRXZlbnQgPT09IERpYWxvZ0NoYW5nZUV2ZW50LlNob3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbWV0aG9kIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbGVydEJhclNlcnZpY2UudW5yZWdpc3Rlcih0aGlzLmlkKTtcclxuICAgICAgICBpZiAodGhpcy5kaWFsb2dTdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gZGV0YWlscyB2aWV3IGluIG5vdGlmaWNhdGlvbiBwYW5lXHJcbiAgICAgKiBAcGFyYW0gYWxlcnQgdGhlIGFsZXJ0IGNsaWNrZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5Ob3RpZmljYXRpb25EZXRhaWxzKGFsZXJ0OiBBbGVydCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvdyh0aGlzLmRpYWxvZ1NlcnZpY2UuY29tbW9uSWRzLm5vdGlmaWNhdGlvbnNQYW5lLCB7IGlkOiBhbGVydC5pZCB9KS5zdWJzY3JpYmUoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjbGljayB0aGUgbWVzc2FnZSBleHBhbmQgYnV0dG9uXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgdGhlIGV2ZW50XHJcbiAgICAgKiBAcGFyYW0gYWxlcnQgdGhlIGFsZXJ0IGNsaWNrZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsaWNrRXhwYW5kKGV2ZW50OiBFdmVudCwgYWxlcnQ6IEFsZXJ0KSB7XHJcbiAgICAgICAgYWxlcnQuaXNFeHBhbmRlZCA9ICFhbGVydC5pc0V4cGFuZGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcENsaWNrUHJvcGFnYXRpb24oZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogc3RvcCBwcm9wYWdhdGlvbiBvbiB0aGUgZXZlbnRcclxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgZXZlbnQgdG8gc3RvcFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RvcENsaWNrUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBc3NpZ25zIG5lZWRzQ2xhbXAgcHJvcGVybHkgdG8gZ2l2ZW4gYWxlcnRcclxuICAgICAqIEBwYXJhbSBhbGVydCB0aGUgYWxlcnRcclxuICAgICAqIEBwYXJhbSBldmVudCB0aGUgY2xhbXBlZCBldmVudFxyXG4gICAgICovXHJcbiAgICBARGVib3VuY2UoKVxyXG4gICAgcHVibGljIGFzc2lnbkNsYW1wZWQoYWxlcnQ6IEFsZXJ0LCBldmVudDogYW55KSB7XHJcbiAgICAgICAgYWxlcnQubmVlZHNDbGFtcCA9IGV2ZW50LmNsYW1wZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBzdGF0dXMgc3RyaW5nIGZvciB0aGUgc3RhdHVzIGljb25cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYWxlcnQgVGhlIGFsZXJ0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0U3RhdHVzU3RyaW5nKGFsZXJ0OiBBbGVydCk6IFN0YXR1c0ljb25UeXBlIHtcclxuICAgICAgICBzd2l0Y2ggKGFsZXJ0LnNldmVyaXR5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgQWxlcnRTZXZlcml0eS5FcnJvcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXNJY29uVHlwZS5FcnJvcjtcclxuICAgICAgICAgICAgY2FzZSBBbGVydFNldmVyaXR5Lldhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzSWNvblR5cGUuV2FybmluZztcclxuICAgICAgICAgICAgY2FzZSBBbGVydFNldmVyaXR5LlN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzSWNvblR5cGUuU3VjY2VzcztcclxuICAgICAgICAgICAgY2FzZSBBbGVydFNldmVyaXR5LkluUHJvZ3Jlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzSWNvblR5cGUuUHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIGNhc2UgQWxlcnRTZXZlcml0eS5JbmZvcm1hdGlvbmFsOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1c0ljb25UeXBlLkluZm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJY29uVGl0bGUoYWxlcnQ6IEFsZXJ0KTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKGFsZXJ0LnNldmVyaXR5KSB7XHJcbiAgICAgICAgICAgIGNhc2UgQWxlcnRTZXZlcml0eS5FcnJvcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQWxlcnRCYXIuRXJyb3I7XHJcbiAgICAgICAgICAgIGNhc2UgQWxlcnRTZXZlcml0eS5XYXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5BbGVydEJhci5XYXJuaW5nO1xyXG4gICAgICAgICAgICBjYXNlIEFsZXJ0U2V2ZXJpdHkuU3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQWxlcnRCYXIuU3VjY2VzcztcclxuICAgICAgICAgICAgY2FzZSBBbGVydFNldmVyaXR5LkluUHJvZ3Jlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkFsZXJ0QmFyLkluUHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIGNhc2UgQWxlcnRTZXZlcml0eS5JbmZvcm1hdGlvbmFsOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5Nc2Z0U21lU2hlbGwuQW5ndWxhci5BbGVydEJhci5JbmZvcm1hdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93cyBhbiBhbGVydC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYWxlcnQgVGhlIGFsZXJ0IHRvIHNob3cuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaG93KGFsZXJ0OiBBbGVydCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGRvbid0IHNob3cgcG9wdXAgaWYgbm90aWZpY2F0aW9ucyBhcmUgYWxyZWFkeSBvcGVuXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmZpbmQodGhpcy5kaWFsb2dTZXJ2aWNlLmFjdGl2ZURpYWxvZ3NTdGFjaywgZGlhbG9nID0+IGRpYWxvZy5pZCA9PT0gdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbW1vbklkcy5ub3RpZmljYXRpb25zUGFuZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBbGVydCA9IHRoaXMuYWxlcnRzLmZpbmQoeCA9PiB4LmlkID09PSBhbGVydC5pZCB8fCB0aGlzLmluZGV4TmFtZSh4KSA9PT0gdGhpcy5pbmRleE5hbWUoYWxlcnQpKTtcclxuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQWxlcnQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0FsZXJ0LnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdBbGVydC5zZXRUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FsZXJ0LnNldFRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzcyhleGlzdGluZ0FsZXJ0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGFsZXJ0LnNldFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChhbGVydC5zZXRUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0LnNldFRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy51bnNoaWZ0KGFsZXJ0KTtcclxuICAgICAgICAgICAgYWxlcnQuc2V0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLmRpc21pc3MoYWxlcnQpOyB9LCA3MDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNtaXNzZXMgYW4gYWxlcnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFsZXJ0IFRoZSBhbGVydCB0byBkaXNtaXNzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzbWlzcyhhbGVydDogQWxlcnQpOiB2b2lkIHtcclxuICAgICAgICBNc2Z0U21lLnJlbW92ZSh0aGlzLmFsZXJ0cywgYWxlcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIHRoZSBpbmRleCBuYW1lIGluIG1hcCBjb2xsZWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhbGVydCB0aGUgYWxlcnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbmRleE5hbWUoYWxlcnQ6IEFsZXJ0KTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYWxlcnQuc2V2ZXJpdHkgKyAnOicgKyBhbGVydC50aXRsZSArICc6JyArIGFsZXJ0Lm1lc3NhZ2UgKyAnOicgKyBhbGVydC5ub2RlTmFtZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21lLWxheWVyLW5vdGlmaWNhdGlvbiBzbWUtbGF5b3V0LWFic29sdXRlIHNtZS1sYXlvdXQtbm90aWZpY2F0aW9uLXBvcHVwLWxpc3RcIj5cclxuXHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgYWxlcnQgb2YgYWxlcnRzXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cIm9wZW5Ob3RpZmljYXRpb25EZXRhaWxzKGFsZXJ0KVwiXHJcbiAgICBjbGFzcz1cInNtZS1sYXlvdXQtbm90aWZpY2F0aW9uLXBvcHVwIHNtZS1zaGFkb3ctbm90aWZpY2F0aW9uLXBvcHVwIHNtZS1tYXJnaW4tcmlnaHQtc20gc21lLW1hcmdpbi10b3Atc20gc21lLWFycmFuZ2Utc3RhY2staFxyXG4gICAgc21lLWJhY2tncm91bmQtY29sb3ItYWx0LTUgc21lLWJvcmRlci1jb2xvci1hbHQtNSBzbWUtcGFkZGluZy10b3AteHMgc21lLXBhZGRpbmctbGVmdC1zbSBzbWUtcGFkZGluZy1yaWdodC14cyBzbWUtcGFkZGluZy1ib3R0b20teHMgc21lLWJlaGF2aW9yLWhvdmVyLXRyaWdnZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdlwiPlxyXG4gICAgICA8c21lLXN0YXR1cy1pY29uIGNsYXNzPVwic21lLXBhZGRpbmctcmlnaHQteHMgc21lLXBhZGRpbmctdG9wLXh4eHNcIiBbc3RhdHVzXT1cImdldFN0YXR1c1N0cmluZyhhbGVydClcIiBzaXplPVwiMTZweFwiXHJcbiAgICAgICAgW3RpdGxlXT1cImdldEljb25UaXRsZShhbGVydClcIj48L3NtZS1zdGF0dXMtaWNvbj5cclxuICAgICAgPHNwYW4gcm9sZT1cImJ1dHRvblwiICpuZ0lmPVwiYWxlcnQudGl0bGUgJiYgYWxlcnQubmVlZHNDbGFtcFwiIChjbGljayk9XCJjbGlja0V4cGFuZCgkZXZlbnQsIGFsZXJ0KVwiXHJcbiAgICAgICAgY2xhc3M9XCJzbWUtYnV0dG9uLXRyaWdnZXIgc21lLWJ1dHRvbi1hdXRvLXdpZHRoIHNtZS1wb3NpdGlvbi1mbGV4LW5vbmUgc21lLXBhZGRpbmctaW5zZXQtbm9uZSBzbWUtaWNvbiBzbWUtcGFkZGluZy10b3AteHhzIHNtZS1iZWhhdmlvci1ob3Zlci10YXJnZXQtc2hvd1wiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydzbWUtaWNvbi1jaGV2cm9uRG93bic6YWxlcnQuaXNFeHBhbmRlZCwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6ICFhbGVydC5pc0V4cGFuZGVkfVwiXHJcbiAgICAgICAgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQWxlcnRCYXIuRXhwYW5kXCI+PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiByb2xlPVwiYWxlcnRcIiBpZD1cInNtZS1hbGVydC1iYXItY29udGVudFwiXHJcbiAgICAgIGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2stdiBzbWUtYXJyYW5nZS1vdmVyZmxvdy1oaWRlLXggc21lLWFycmFuZ2Utd29yZC13cmFwLWJyZWFrLXdvcmQgc21lLXBvc2l0aW9uLXN0cmV0Y2gtaFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInNtZS1sYXlvdXQtbm90aWZpY2F0aW9uLW1lc3NhZ2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21lLWFycmFuZ2Utc3RhY2staFwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWUtc2NyZWVuLXJlYWRlclwiPnt7IGdldEljb25UaXRsZShhbGVydCkgfX08L3A+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInNtZS1mb250LWZhbWlseS1ib2xkIHNtZS1mb250LWxhYmVsIHNtZS1tYXJnaW4taW5zZXQtbm9uZSBzbWUtcGFkZGluZy10b3AteHh4cyBzbWUtcG9zaXRpb24tc3RyZXRjaC1oIHNtZS1wb3NpdGlvbi1sZWZ0LWlubGluZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWxlcnQudGl0bGUgfHwgYWxlcnQubWVzc2FnZVwiPnt7IGFsZXJ0LnRpdGxlIHx8IGFsZXJ0Lm1lc3NhZ2UgfX08L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1hcnJhbmdlLXN0YWNrLXZcIj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiYWxlcnQudGl0bGUgJiYgIWFsZXJ0LmlzRXhwYW5kZWRcIiBjbGFzcz1cInNtZS1mb250LWxhYmVsXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJhbGVydC5tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIHt7IGFsZXJ0Lm1lc3NhZ2UgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiYWxlcnQudGl0bGUgJiYgYWxlcnQuaXNFeHBhbmRlZFwiIGNsYXNzPVwic21lLWZvbnQtbGFiZWxcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFsZXJ0Lm1lc3NhZ2VcIj5cclxuICAgICAgICAgICAge3sgYWxlcnQubWVzc2FnZSB9fVxyXG4gICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImFsZXJ0LmxpbmtzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgYWxlcnQubGlua3NcIj5cclxuICAgICAgICAgICAgICA8YSAqbmdJZj1cImxpbmsuZXZlbnRcIiBjbGFzcz1cInNtZS1saW5rXCIgKGNsaWNrKT1cImxpbmsuZXZlbnQoKTtzdG9wQ2xpY2tQcm9wYWdhdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBsaW5rLmRpc3BsYXlUZXh0IH19XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbGluay5ldmVudCAmJiBsaW5rLnVyaVwiIChjbGljayk9XCJzdG9wQ2xpY2tQcm9wYWdhdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImxpbmsuaXNFeHRlcm5hbExpbmtcIiBjbGFzcz1cInNtZS1saW5rXCIgW2hyZWZdPVwibGluay51cmlcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cclxuICAgICAgICAgICAgICAgICAge3sgbGluay5kaXNwbGF5VGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPGEgKm5nSWY9XCIhbGluay5pc0V4dGVybmFsTGlua1wiIGNsYXNzPVwic21lLWxpbmtcIiBbcm91dGVyTGlua109XCJsaW5rLnVyaVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsaW5rLmRpc3BsYXlUZXh0IH19XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay1oIHNtZS1mb250LWxhYmVsIHNtZS1jb2xvci1iYXNlLTQwXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLWFycmFuZ2UtZWxsaXBzaXNcIj57eyBhbGVydC5ub2RlTmFtZSB9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1tYXJnaW4tbGVmdC14eHNcIj4ge3sgYWxlcnQudGltZXN0YW1wIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJzbWUtYXJyYW5nZS1zdGFjay12XCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cInNtZS1idXR0b24tdHJpZ2dlciBzbWUtYnV0dG9uLWF1dG8td2lkdGggc21lLXBvc2l0aW9uLWZsZXgtbm9uZSBzbWUtcGFkZGluZy1pbnNldC1ub25lIHNtZS1wYWRkaW5nLWxlZnQteHhzIHNtZS1wYWRkaW5nLXJpZ2h0LXh4c1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImRpc21pc3MoYWxlcnQpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJzdHJpbmdzLk1zZnRTbWVTaGVsbC5Bbmd1bGFyLkFsZXJ0QmFyLkRpc21pc3NBcmlhTGFiZWxcIlxyXG4gICAgICAgIGRhdGEtdXRhLWlkPVwiY2FuY2VsLWFsZXJ0XCIgYXJpYS1kZXNjcmliZWRieT1cInNtZS1hbGVydC1iYXItY29udGVudFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic21lLWljb24gc21lLWljb24tY2FuY2VsXCIgW3RpdGxlXT1cInN0cmluZ3MuTXNmdFNtZVNoZWxsLkFuZ3VsYXIuQWxlcnRCYXIuRGlzbWlzc1wiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=