vc-create-dashboard 2.2.9 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/create-dashboard.umd.js +21 -36
- package/bundles/create-dashboard.umd.js.map +1 -1
- package/create-dashboard.metadata.json +1 -1
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.js +5 -4
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngfactory.js +15 -13
- package/esm2015/lib/create-dashboard-container/create-dashboard.component.js +17 -15
- package/esm2015/lib/create-dashboard-container/create-dashboard.component.ngfactory.js +3 -3
- package/esm2015/lib/create-dashboard-container/user-list/user-list.component.js +2 -20
- package/fesm2015/create-dashboard.js +21 -36
- package/fesm2015/create-dashboard.js.map +1 -1
- package/package.json +1 -1
|
@@ -593,7 +593,7 @@ export class CreateDashboardComponent {
|
|
|
593
593
|
* @param key contains key to extract id from the list
|
|
594
594
|
*/
|
|
595
595
|
returnIds(list, key) {
|
|
596
|
-
return list.map(ele => { if (ele[key]) {
|
|
596
|
+
return list === null || list === void 0 ? void 0 : list.map(ele => { if (ele[key]) {
|
|
597
597
|
return ele[key];
|
|
598
598
|
} });
|
|
599
599
|
}
|
|
@@ -709,6 +709,7 @@ export class CreateDashboardComponent {
|
|
|
709
709
|
}
|
|
710
710
|
}
|
|
711
711
|
populateDashboardForm(data) {
|
|
712
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
712
713
|
this.dashboardForm.dashboardName = data.dashboard_name,
|
|
713
714
|
this.dashboardForm.dashboardDescriptionText = data.description[0].content,
|
|
714
715
|
this.dashboardForm.selectedViewers = this.setList(this.usersList, data.visible_to_users, 'member_id');
|
|
@@ -717,14 +718,14 @@ export class CreateDashboardComponent {
|
|
|
717
718
|
this.dashboardForm.selectedResponsibilityCategories = this.setList(this.allComplianceCategories, data.responsibility_category, 'category_id');
|
|
718
719
|
this.dashboardForm.selectedRiskCategories = this.setList(this.allRiskCategories, data.risk_category, 'category_id');
|
|
719
720
|
this.dashboardForm.displayCriteria = (data.display_criteria === "BOTH_RC_AND_CATEGORY") ? 'and' : 'or';
|
|
720
|
-
this.dashboardForm.selectedFromDate = (data.timeframe.start_date) ? dayjs(data.timeframe.start_date) : undefined;
|
|
721
|
-
this.dashboardForm.selectedToDate = (data.timeframe.end_date) ? dayjs(data.timeframe.end_date) : undefined;
|
|
721
|
+
this.dashboardForm.selectedFromDate = ((_a = data === null || data === void 0 ? void 0 : data.timeframe) === null || _a === void 0 ? void 0 : _a.start_date) ? (_c = dayjs((_b = data === null || data === void 0 ? void 0 : data.timeframe) === null || _b === void 0 ? void 0 : _b.start_date)) === null || _c === void 0 ? void 0 : _c.toDate() : undefined;
|
|
722
|
+
this.dashboardForm.selectedToDate = ((_d = data === null || data === void 0 ? void 0 : data.timeframe) === null || _d === void 0 ? void 0 : _d.end_date) ? (_f = dayjs((_e = data === null || data === void 0 ? void 0 : data.timeframe) === null || _e === void 0 ? void 0 : _e.end_date)) === null || _f === void 0 ? void 0 : _f.toDate() : undefined;
|
|
722
723
|
this.vLoader = false;
|
|
723
724
|
this.dashboardForm.configureWidget = data.widget_details;
|
|
724
725
|
this.selectedWidgets = data.widget_details.length > 0 ? [...new Set(data.widget_details)] : [];
|
|
725
726
|
this.displayedWidgets = data.all_widgets.length > 0 ? [...new Set(data.all_widgets)] : [];
|
|
726
|
-
this.setFrequency(data.email_summary, 'import');
|
|
727
|
-
let minToDate = this.setToDate(data.timeframe.start_date);
|
|
727
|
+
this.setFrequency(data === null || data === void 0 ? void 0 : data.email_summary, 'import');
|
|
728
|
+
let minToDate = this.setToDate((_g = data === null || data === void 0 ? void 0 : data.timeframe) === null || _g === void 0 ? void 0 : _g.start_date);
|
|
728
729
|
this.toDatePickerConfig = { min: minToDate };
|
|
729
730
|
this.hideToDate = true;
|
|
730
731
|
setTimeout(() => {
|
|
@@ -732,16 +733,17 @@ export class CreateDashboardComponent {
|
|
|
732
733
|
}, 20);
|
|
733
734
|
}
|
|
734
735
|
setFrequency(event, mode) {
|
|
736
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
735
737
|
if (mode === 'export') {
|
|
736
738
|
switch (this.dashboardForm.selectedFrequencyType) {
|
|
737
739
|
case 'weekly':
|
|
738
|
-
const weeklyValueData = this.dashboardForm.selectedFrequencies.map((ele) => Number(ele) + 1);
|
|
739
|
-
const weeklyValue = weeklyValueData.join();
|
|
740
|
+
const weeklyValueData = (_b = (_a = this.dashboardForm) === null || _a === void 0 ? void 0 : _a.selectedFrequencies) === null || _b === void 0 ? void 0 : _b.map((ele) => Number(ele) + 1);
|
|
741
|
+
const weeklyValue = weeklyValueData === null || weeklyValueData === void 0 ? void 0 : weeklyValueData.join();
|
|
740
742
|
return '2~' + weeklyValue + '~0~0';
|
|
741
743
|
case 'monthly':
|
|
742
|
-
const monthlyValueData = this.dashboardForm.selectedFrequencies.map((ele) => Number(ele) + 1);
|
|
743
|
-
const monthlyValue = monthlyValueData.join();
|
|
744
|
-
return '3~' + this.dashboardForm.frequencyDate + '~' + monthlyValue + '~0';
|
|
744
|
+
const monthlyValueData = (_d = (_c = this.dashboardForm) === null || _c === void 0 ? void 0 : _c.selectedFrequencies) === null || _d === void 0 ? void 0 : _d.map((ele) => Number(ele) + 1);
|
|
745
|
+
const monthlyValue = monthlyValueData === null || monthlyValueData === void 0 ? void 0 : monthlyValueData.join();
|
|
746
|
+
return '3~' + ((_e = this.dashboardForm) === null || _e === void 0 ? void 0 : _e.frequencyDate) + '~' + monthlyValue + '~0';
|
|
745
747
|
case 'quarterly':
|
|
746
748
|
const quarterlyValueData = Number(this.dashboardForm.selectedFrequencies) + 1;
|
|
747
749
|
return '7~' + this.dashboardForm.frequencyDate + '~' + quarterlyValueData + '~0';
|
|
@@ -754,8 +756,8 @@ export class CreateDashboardComponent {
|
|
|
754
756
|
{
|
|
755
757
|
let stringVal = "Every ";
|
|
756
758
|
this.dashboardForm.selectedFrequencyType = 'weekly';
|
|
757
|
-
this.dashboardForm.selectedFrequencies = val[1].split(',').map((element) => Number(element) - 1);
|
|
758
|
-
this.dashboardForm.selectedFrequencies.forEach((dayIndex, index) => {
|
|
759
|
+
this.dashboardForm.selectedFrequencies = (_g = (_f = val[1]) === null || _f === void 0 ? void 0 : _f.split(',')) === null || _g === void 0 ? void 0 : _g.map((element) => Number(element) - 1);
|
|
760
|
+
(_h = this.dashboardForm.selectedFrequencies) === null || _h === void 0 ? void 0 : _h.forEach((dayIndex, index) => {
|
|
759
761
|
stringVal += index === 0 ? this.dayNames[dayIndex] : ', ' + this.dayNames[dayIndex];
|
|
760
762
|
});
|
|
761
763
|
this.dashboardForm.frequencyMessage = stringVal;
|
|
@@ -766,7 +768,7 @@ export class CreateDashboardComponent {
|
|
|
766
768
|
let stringVal = "every ";
|
|
767
769
|
this.dashboardForm.selectedFrequencyType = 'monthly';
|
|
768
770
|
this.dashboardForm.frequencyDate = val[1];
|
|
769
|
-
this.dashboardForm.selectedFrequencies = val[2].split(',').map((element) => Number(element) - 1);
|
|
771
|
+
this.dashboardForm.selectedFrequencies = (_k = (_j = val[2]) === null || _j === void 0 ? void 0 : _j.split(',')) === null || _k === void 0 ? void 0 : _k.map((element) => Number(element) - 1);
|
|
770
772
|
this.dashboardForm.selectedFrequencies.forEach((monthIndex, index) => {
|
|
771
773
|
stringVal += index === 0 ? this.monthNames[monthIndex] : ', ' + this.monthNames[monthIndex];
|
|
772
774
|
});
|
|
@@ -820,7 +822,7 @@ export class CreateDashboardComponent {
|
|
|
820
822
|
CreateDashboardComponent.decorators = [
|
|
821
823
|
{ type: Component, args: [{
|
|
822
824
|
selector: 'app-create-dashboard',
|
|
823
|
-
template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\"></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Dashboard Name<span class=\"required\">*</span></label>\r\n <div class=\"vx-input-group\">\r\n <input type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n dashboardForm?.dashboardDescriptionText.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && dashboardForm?.dashboardDescriptionText?.length>250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who can view this dashboard?<span\r\n class=\"required\">*</span></label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons\" (click)=\"remove('whoCanView',user)\"></i>\r\n <span class=\"value\">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #userList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n (click)=\"remove('whoCanView',user)\"></i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('rc',rc)\"></i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\"></i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CATEGORIES</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Responsibility Category or Categories that this responsibility relates to.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RISK CATEGORIES</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" [value]=\"dashboardForm.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"select\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left\" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\"></i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Responsibility Category or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Responsibility Category.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>",
|
|
825
|
+
template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\"></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Dashboard Name<span class=\"required\">*</span></label>\r\n <div class=\"vx-input-group\">\r\n <input type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n dashboardForm?.dashboardDescriptionText.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && dashboardForm?.dashboardDescriptionText?.length>250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Who can view this dashboard?<span\r\n class=\"required\">*</span></label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons\" (click)=\"remove('whoCanView',user)\"></i>\r\n <span class=\"value\">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #userList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n (click)=\"remove('whoCanView',user)\"></i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('rc',rc)\"></i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\"></i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RESPONSIBILITY CATEGORIES</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Responsibility Category or Categories that this responsibility relates to.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RISK CATEGORIES</label>\r\n <div class=\"select\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"select\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left\" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons\"></i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\"></i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Responsibility Category or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Responsibility Category.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>",
|
|
824
826
|
styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\");@import url(\"https://cdn.v-comply.com/design-system/css/color/color.css\");@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");@import url(\"https://cdn.v-comply.com/design-system/css/display/display.css\");@import url(\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\");@import url(\"https://cdn.v-comply.com/design-system/css/button/button.css\");@import url(\"https://cdn.v-comply.com/design-system/css/text/text.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\");@import url(\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\");@import url(\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\");@import url(\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\");@import url(\"https://cdn.v-comply.com/design-system/css/width/width.css\");@import url(\"https://cdn.v-comply.com/design-system/css/animate/animation.css\");@import url(\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\");@import url(\"https://cdn.v-comply.com/design-system/css/forms/forms.css\");::ng-deep .create-dashboard-container{width:100vw;background:#161b2fcc}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #f1f1f1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0;right:0;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:#0000;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#f1f1f1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:initial;position:relative;border-radius:0 0 0 30px;background:#0000}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .select:after{content:\"\";border-top:4px solid #707070;border-right:4px solid #0000;border-left:4px solid #0000;position:absolute;right:16px;top:calc(50% - 2px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .select:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{display:flex!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:#0000;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0;right:0;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #dbdbdb;background:#fff;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0;left:0;z-index:6;background:linear-gradient(180deg,#fff0 0,#ffffffbf 22%,#fff);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:#0000;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:#0000;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:#0000;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#fff;border:1px solid #dcdcdc;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#fff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:#0000;color:#fff;border-color:#fff}"]
|
|
825
827
|
},] }
|
|
826
828
|
];
|
|
@@ -842,4 +844,4 @@ CreateDashboardComponent.propDecorators = {
|
|
|
842
844
|
configureWidget: [{ type: Input }],
|
|
843
845
|
onKeydownHandler: [{ type: HostListener, args: ['document:keydown.escape', ['$event'],] }]
|
|
844
846
|
};
|
|
845
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFPaEMsTUFBTSxPQUFPLHdCQUF3QjtJQXlIbkMsWUFDVSxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLEdBQXNCLEVBQ3RCLFFBQXlCLEVBQzFCLGNBQThCLEVBQzdCLHVCQUFnRDtRQUxoRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENB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WUFPZixjQUFjO1lBTmQsdUJBQXVCOzs7bUJBa0I3QixLQUFLOzBCQUNMLEtBQUs7b0JBQ0wsTUFBTTt3QkFDTixLQUFLOzZCQUVMLFNBQVMsU0FBQyxnQkFBZ0I7MkJBQzFCLFNBQVMsU0FBQyxjQUFjOzhCQUV4QixLQUFLOytCQTRITCxZQUFZLFNBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIElEYXRlUGlja2VyQ29uZmlnIH0gZnJvbSAnbmcyLWRhdGUtcGlja2VyJztcclxuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1saXN0L3VzZXItbGlzdC5jb25maWcnO1xyXG5pbXBvcnQgeyBDcmVhdGVEYXNoYm9hcmRGb3JtIH0gZnJvbSAnLi9jcmVhdGUtZGFzaGJvYXJkLWNvbmZpZyc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZmlndXJlLXdpZGdldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpbmRJbmRleCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCAqIGFzIGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XHJcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlJztcclxuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1kYXNoYm9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZURhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSBkYXNoYm9hcmRJZCA9ICcnO1xyXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBjcmVhdGVkQnkgPSAwO1xyXG5cclxuICBAVmlld0NoaWxkKCdmcm9tRGF0ZVBpY2tlcicpIGZyb21EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCd0b0RhdGVQaWNrZXInKSB0b0RhdGVQaWNrZXIhOiBEYXRlUGlja2VyQ29tcG9uZW50O1xyXG4gIGFuaW1hdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29uZmlndXJlV2lkZ2V0ID0gZmFsc2VcclxuXHJcbiAgdG90YWxQYWdlcyA9IDE7XHJcbiAgdG90YWxMaXN0ID0gMTtcclxuICB1c2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgdkxvYWRlciA9IHRydWU7XHJcbiAgdXNlckxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBjb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICByaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgaGlkZVRvRGF0ZSA9IGZhbHNlO1xyXG4gIGxpc3REZXRhaWxzOiBVc2VyTGlzdENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBzZWxlY3RlZFVzZXJzTGlzdDogW10sXHJcbiAgICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgZGlzcGxheUVsZW1lbnRLZXk6ICdtZW1iZXJfbmFtZScsXHJcbiAgICBlbGVtZW50SWRLZXk6ICdtZW1iZXJfaWQnLFxyXG4gICAgdG9vbHRpcEtleTogJ21lbWJlcl9lbWFpbCcsXHJcbiAgfTtcclxuICBkYXNoYm9hcmREZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgcGxhY2Vob2xkZXI6ICdEZXNjcmlwdGlvbiAoTWF4IGxpbWl0OiAyNTAgY2hhcmFjdGVycyknLFxyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGlkOiAnZGVzY3JpcHRpb24nXHJcbiAgfVxyXG4gIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWU6IGFueSA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgc3RhbmRhcmRzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfVxyXG4gIH07XHJcbiAgYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgYWxsUmlza0NhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgc2hvd1Jpc2tDYXRlZ29yeSA9IGZhbHNlO1xyXG4gIHNob3dDcml0ZXJpYSA9IHRydWU7XHJcblxyXG4gIGRhc2hib2FyZEZvcm06IENyZWF0ZURhc2hib2FyZEZvcm0gPSB7XHJcbiAgICBkYXNoYm9hcmROYW1lOiAnJyxcclxuICAgIGRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDogJycsXHJcbiAgICBzZWxlY3RlZFZpZXdlcnM6IFtdLFxyXG4gICAgc2VsZWN0ZWRGcm9tRGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRUb0RhdGU6IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzOiBbXSxcclxuICAgIHNlbGVjdGVkUmlza0NhdGVnb3JpZXM6IFtdLFxyXG4gICAgZGlzcGxheUNyaXRlcmlhOiAnb3InLFxyXG4gICAgY29uZmlndXJlV2lkZ2V0OiBbXSxcclxuICAgIGZyZXF1ZW5jeURldGFpbHM6ICcnLFxyXG4gICAgc2VsZWN0ZWRGcmVxdWVuY3lUeXBlOiAnJyxcclxuICAgIHNlbGVjdGVkRnJlcXVlbmNpZXM6IFswXSxcclxuICAgIGZyZXF1ZW5jeU1lc3NhZ2U6ICcnLFxyXG4gICAgZnJlcXVlbmN5RGF0ZTogMVxyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5Db25maWd1cmVXaWRnZXRzID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRXaWRnZXRzOiBhbnkgPSBbXTtcclxuICBkaXNwbGF5ZWRXaWRnZXRzOiBhbnkgPSBbXVxyXG5cclxuXHJcbiAgcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IFtdO1xyXG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgZGF5TmFtZXMgPSBbJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknLCAnU3VuZGF5J107XHJcbiAgbW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xyXG4gIHF1YXJ0ZXJzID0gWydKYW51YXJ5LCBBcHJpbCwgSnVseSwgT2N0b2JlcicsICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJywgJ01hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJ107XHJcblxyXG4gIGNhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIHNob3dSaXNrV2lkZ2V0cyA9IGZhbHNlO1xyXG4gIHNob3dDb21wbGlhbmNlV2lkZ2V0cyA9IGZhbHNlO1xyXG5cclxuICByaXNrQ2F0ZWdvcnlMaXN0ID0ge1xyXG4gICAgc3RyYXRlZ2ljOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0aW9uYWw6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBjb21wbGlhbmNlOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgb3RoZXJzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGZyb21EYXRlUGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyA9IHtcclxuICAgIG1pbjogdGhpcy5nZXRDdXJyZW50RGF0ZSgpXHJcbiAgfVxyXG5cclxuICB0b0RhdGVQaWNrZXJDb25maWc6IElEYXRlUGlja2VyQ29uZmlnID0ge1xyXG4gIH1cclxuXHJcbiAgaXNTbWlsZXkhOiBib29sZWFuO1xyXG4gIHNtaWxleU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkU2VydmljZTogQ3JlYXRlRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHBvcG92ZXJTZXJ2aWNlOiBQb3BvdmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlndXJlV2lkZ2V0c1NlcnZpY2U6IENvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jcmVhdGVkQnkpIHtcclxuICAgICAgdGhpcy5saXN0RGV0YWlscy5ub25SZW1vdmFibGVVc2Vyc0xpc3QucHVzaCh0aGlzLmNyZWF0ZWRCeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdkaXNjYXJkJyB9KTtcclxuICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KCcnKTtcclxuICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRDb21wbGlhbmNlQ2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB0aGlzLnNldEZyZXF1ZW5jeShcIjJ+MX4wfjBcIiwgJ2ltcG9ydCcpO1xyXG4gICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoJycpO1xyXG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbigpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcXVpY2tMaW5rID0gcmVzLnF1aWNrX2xpbms7XHJcbiAgICAgIGlmIChxdWlja0xpbmsucmlzaykge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Umlza0NhdGVnb3J5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0sIGVycm9yID0+IHsgY29uc29sZS5sb2coZXJyb3IpIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIHRoZSBsaXN0aW5nIHBhZ2VzIHRoZSBsZWZ0IHNpZGUgb2YgcG9saWN5IGZvcm0gdG8gc2V0IGFuZCBlZGl0IHRoZSBkcm9wZG93biBmaWVsZHMgdmFsdWVzXHJcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcclxuICAgKi9cclxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0eXBlID09ICdmcmVxdWVuY3knIHx8IHRoaXMuYWN0aXZlU2VsZWN0b3IgPT0gJ2ZyZXF1ZW5jeScpIHtcclxuICAgICAgdGhpcy5zaG93Q3JpdGVyaWEgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93Q3JpdGVyaWEgPSB0cnVlO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcclxuICB9XHJcblxyXG4gIG9wZW5Gcm9tRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMuZnJvbURhdGVQaWNrZXIuYXBpLm9wZW4oKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb3BlblRvRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyLmFwaS5vcGVuKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gdHJ1ZTtcclxuICB9XHJcbiAgY2xvc2VGcm9tRGF0ZVBpY2tlcigpIHtcclxuICAgIGlmICghdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUpIHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICAgICAgfSwgMjApO1xyXG4gICAgICB0aGlzLmZyb21EYXRlUGlja2VyLmFwaS5jbG9zZSgpO1xyXG4gICAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgbGV0IG1pblRvRGF0ZSA9IHRoaXMuc2V0VG9EYXRlKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlKVxyXG4gICAgdGhpcy50b0RhdGVQaWNrZXJDb25maWcgPSB7IG1pbjogbWluVG9EYXRlIH07XHJcblxyXG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShtaW5Ub0RhdGUuc3BsaXQoJy0nKS5yZXZlcnNlKCkuam9pbignLScpKTtcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSlcclxuICAgIGNvbnN0IGluVmFsaWREYXRlID0gKGZyb21EYXRlID49IHRvRGF0ZSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAoaW5WYWxpZERhdGUpIHtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICAgICAgfSwgMjApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mcm9tRGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNsb3NlVG9EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy50b0RhdGVQaWNrZXIuYXBpLmNsb3NlKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhbmltYXRlSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjaXJjbGVJbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ltYWdlJylcclxuICB9XHJcblxyXG4gIHNhdmVGcmVxdWVuY3koZXZlbnRWYWx1ZXM6IGFueSkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9IGV2ZW50VmFsdWVzLmZyZXF1ZW5jeVR5cGU7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IGV2ZW50VmFsdWVzLmZyZXF1ZW5jaWVzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBldmVudFZhbHVlcy5mcmVxdWVuY3lTdHJpbmc7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IGV2ZW50VmFsdWVzLnNlbGVjdGVkRGF0ZTtcclxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpXHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50RGF0ZSgpIHtcclxuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICByZXR1cm4gdG9kYXkuZ2V0RGF0ZSgpICsgJy0nICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSArICctJyArIHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIHNldFRvRGF0ZShkYXRhOiBzdHJpbmcpIHtcclxuICAgIGxldCB0b2RheSA9IG5ldyBEYXRlKGRhdGEpO1xyXG4gICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSArIDEgKyAnLScgKyAodG9kYXkuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgZ2V0RnJvbURhdGUoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZShkYXRhKTtcclxuICAgIHJldHVybiB0b2RheS5nZXREYXRlKCkgKyAnLScgKyAodG9kYXkuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgdG9kYXkuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbiAgY29uZmlndXJlRGFzaGJvYXJkKCkge1xyXG4gICAgbGV0IGZpZWxkc1N0YXR1cyA9IHRoaXMudmFsaWRhdGVEYXNoYm9hcmQoKTtcclxuICAgIGlmIChmaWVsZHNTdGF0dXMpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIGRhc2hib2FyZF9uYW1lOiB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSxcclxuICAgICAgICAgIGRhc2hib2FyZF9pZDogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmNoZWNrRHVwbGljYXRlRGFzaGJvYXJkTmFtZShwYXlsb2FkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9ICh0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgJiYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPSAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxyXG4gICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICAgIGRhc2hib2FyZF9uYW1lOiB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSxcclxuICAgICAgICAgIGRhc2hib2FyZF9pZDogdGhpcy5kYXNoYm9hcmRJZFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuY2hlY2tEdXBsaWNhdGVEYXNoYm9hcmROYW1lKHBheWxvYWQpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXMpIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jpc2tXaWRnZXRzID0gKHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSAmJiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dDb21wbGlhbmNlV2lkZ2V0cyA9ICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID4gMCB8fCB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID4gMCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBjb3VudCBhcGkgdG8gZ2V0IHRvdGFsIG51bWJlciBvZiBwYWdlc1xyXG4gICAgKiBAcGFyYW0gVXJsIGNvbnRhaW5zIHByYW1zXHJcbiAgICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoVXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XHJcbiAgICAgIGlmIChyZXMudG90YWxfbWVtYmVycyAmJiByZXMubGltaXRfcGVyX3BhZ2UgPiAxKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzLmNyZWF0ZV9wYWdlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEdldCB1c2VycyBsaXN0IGJ5IG1ha2luZyBhcGkgY2FsbCBhbmQgcHJlIHNlbGVjdHMgYWxsIGFkbWlucyBieSBhZGRpbmcgdG8gdmlld2Vyc1xyXG4gKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHF1ZXJ5IHBhcmFtcyBmb3Igb3JnYW5pemF0aW9uIHVzZXJzIGFwaVxyXG4gKi9cclxuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRBbGxVc2VycygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnVzZXJMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnVzZXJzTGlzdCwgW3RoaXMuY3JlYXRlZEJ5XSwgJ21lbWJlcl9pZCcpO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcGxpYW5jZUNhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRDb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXM7XHJcbiAgICAgIHRoaXMuYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXMgPSBPYmplY3QuYXNzaWduKHJlcylcclxuICAgICAgLy8gY2xvbmVEZWVwKHJlcyk7XHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLm90aGVycy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDEpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5yZWd1bGF0aW9ucy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDIpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5zdGFuZGFyZHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUuaW50ZXJuYWxDb250cm9scy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSwgKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5jb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2F2ZVNlbGVjdGVkQ2F0ZWdvcnkoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coXCJldmVudD09Pj4+XCIsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRDYXRlZ29yeUxpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdC5zdHJhdGVnaWMubGlzdCA9IHJlcy5zdHJhdGVnaWNfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Qub3BlcmF0aW9uYWwubGlzdCA9IHJlcy5vcGVyYXRpb25hbF9hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdC5jb21wbGlhbmNlLmxpc3QgPSByZXMuY29tcGxpYW5jZV9hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdC5vdGhlcnMubGlzdCA9IHJlcy5vdGhlcnNfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmFsbFJpc2tDYXRlZ29yaWVzID0gWy4uLm5ldyBTZXQodGhpcy5hbGxSaXNrQ2F0ZWdvcmllcy5jb25jYXQocmVzLnN0cmF0ZWdpY19hcnIsIHJlcy5vcGVyYXRpb25hbF9hcnIsIHJlcy5jb21wbGlhbmNlX2FyciwgcmVzLm90aGVyc19hcnIpKV1cclxuXHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XHJcbiAgKi9cclxuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcclxuICAgIGlmICh0aGlzLnJjTGlzdExvYWRlZCAmJiB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCAmJiB0aGlzLnJpc2tDYXRlZ29yeUxpc3RMb2FkZWQgJiYgdGhpcy51c2VyTGlzdExvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLmVkaXREYXNoYm9hcmQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRXaWRnZXRzKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHtcclxuICAgICAgY29uc3Qgd2lkZ2V0c0FycmF5OiBhbnkgPSBbXVxyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgb2JqLm1vZHVsZV9uYW1lID0gZWxlbWVudC5tb2R1bGU7XHJcbiAgICAgICAgb2JqLl9pZCA9ICcnO1xyXG4gICAgICAgIG9iai53aWRnZXRfbmFtZSA9IGVsZW1lbnQudGl0bGVcclxuICAgICAgICBvYmoud2lkZ2V0X2NvZGUgPSBlbGVtZW50LmlkO1xyXG4gICAgICAgIG9iai5zdWJfd2lkZ2V0cyA9IFtdO1xyXG4gICAgICAgIG9iai5zdGF0ZSA9ICdBQ1RJVkUnXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBlbGVtZW50LnN1YldpZGdldHMuZm9yRWFjaCgoc3ViV2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IHN1YldpZGdldE9iamVjdDogYW55ID0ge31cclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0Ll9pZCA9ICcnO1xyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X25hbWUgPSBzdWJXaWRnZXQudGl0bGVcclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9jb2RlID0gc3ViV2lkZ2V0LmlkO1xyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Quc3RhdGUgPSAoc3ViV2lkZ2V0LnZhbHVlKSA/ICdBQ1RJVkUnIDogJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICBvYmouc3ViX3dpZGdldHMucHVzaChPYmplY3QuYXNzaWduKHN1YldpZGdldE9iamVjdCkpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2lkZ2V0c0FycmF5LnB1c2gob2JqKVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQgPSB3aWRnZXRzQXJyYXk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIGNvbnN0IHdpZGdldHNBcnJheTogYW55ID0gW11cclxuXHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFKU09OLnN0cmluZ2lmeSh0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0KS5pbmNsdWRlcyhlbGVtZW50LmlkKSkge1xyXG4gICAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICAgIG9iai5tb2R1bGVfbmFtZSA9IGVsZW1lbnQubW9kdWxlO1xyXG4gICAgICAgICAgb2JqLl9pZCA9ICcnO1xyXG4gICAgICAgICAgb2JqLndpZGdldF9uYW1lID0gZWxlbWVudC50aXRsZVxyXG4gICAgICAgICAgb2JqLndpZGdldF9jb2RlID0gZWxlbWVudC5pZDtcclxuICAgICAgICAgIG9iai5zdWJfd2lkZ2V0cyA9IFtdO1xyXG4gICAgICAgICAgb2JqLnN0YXRlID0gJ0FDVElWRSdcclxuICAgICAgICAgIGlmIChlbGVtZW50LnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnN1YldpZGdldHMuZm9yRWFjaCgoc3ViV2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgc3ViV2lkZ2V0T2JqZWN0OiBhbnkgPSB7fVxyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5faWQgPSAnJztcclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X25hbWUgPSBzdWJXaWRnZXQudGl0bGVcclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X2NvZGUgPSBzdWJXaWRnZXQuaWQ7XHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LnN0YXRlID0gKHN1YldpZGdldC52YWx1ZSkgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgICBvYmouc3ViX3dpZGdldHMucHVzaChzdWJXaWRnZXRPYmplY3QpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldC5wdXNoKG9iailcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUud2lkZ2V0X2NvZGUgPT0gZWxlbWVudC5pZClcclxuICAgICAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3RhdGUgPSAnQUNUSVZFJ1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFdpZGdldHNbaW5kZXhdLnN1Yl93aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3ViX3dpZGdldHMuZm9yRWFjaCgoc3ViV2lkZ2V0RGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50SW5kZXggPSBlbGVtZW50LnN1YldpZGdldHMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmlkID09IHN1YldpZGdldERhdGEud2lkZ2V0X2NvZGUpXHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHN1YldpZGdldERhdGEuc3RhdGUgPSAoZWxlbWVudC5zdWJXaWRnZXRzW2VsZW1lbnRJbmRleF0udmFsdWUpID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldC5mb3JFYWNoKChzYXZlZFdpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmZpbmRJbmRleCgoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQuaWQgPT0gc2F2ZWRXaWRnZXQud2lkZ2V0X2NvZGUpXHJcbiAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XHJcbiAgICAgICAgICBzYXZlZFdpZGdldC5zdGF0ZSA9ICdJTkFDVElWRSc7XHJcbiAgICAgICAgICBpZiAoc2F2ZWRXaWRnZXQuc3ViX3dpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzYXZlZFdpZGdldC5zdWJfd2lkZ2V0cy5mb3JFYWNoKChzYXZlU3ViV2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBzYXZlU3ViV2lkZ2V0LnN0YXRlID0gJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gZGF0YVxyXG4gICAgdGhpcy5vcGVuQ29uZmlndXJlV2lkZ2V0cyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdWJtaXREYXNoYm9hcmQoKTtcclxuXHJcbiAgfVxyXG5cclxuICBjbG9zZUNvbmZpZ3VyZVdpZGdldHMoZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbHRlciBsaXN0IHVzZXIncyBsaXN0IGJhc2VkIG9uIHBhZ2luYXRpb24gYnkgbWFraW5nIGFwaSBjYWxsXHJcbiAgICogQHBhcmFtIGV2ZW50IHNwZWNpZmllcyBhIGJvb2xlYW4gdmFsdWUgdG8gY2FsbCBhcGlcclxuICAgKi9cclxuICBwYWdpbmF0aW9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLmdldFVzZXJzTGlzdCh7XHJcbiAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSxcclxuICAgICAgICB0eXBlOiAnYWxsX2V4Y2VwdF9leGVjdXRpdmUnLFxyXG4gICAgICAgIHE6ICghdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSkgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0UkNMaXN0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0ID0gcmVzO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIHNlbGVjdGVkSXRlbXMsICdpdGVtX2lkJyk7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd3aG9DYW5WaWV3JzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzID0gc2VsZWN0ZWRJdGVtc1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyaXNrQ2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuZmluZEluZGV4KChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZCk7XHJcbiAgICAgICAgaWYgKHJjSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRSYzogYW55ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzW3JjSW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLnNwbGljZShyY0luZGV4LCAxKTtcclxuXHJcbiAgICAgICAgICBpZiAocGFyZW50UmM/Lml0ZW1fY2hpbGRfaWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHBhcmVudFJjLml0ZW1fY2hpbGRfaWRzLmZvckVhY2goKGNoaWxkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlSW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuZmluZEluZGV4KChyZW1vdmVFbGVtZW50OiBhbnkpID0+IHJlbW92ZUVsZW1lbnQucmNfaWQgPT0gY2hpbGRFbGVtZW50KTtcclxuICAgICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3dob0NhblZpZXcnOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzLmZpbmRJbmRleCgodmlld2VyOiBhbnkpID0+IHZpZXdlci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkKTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzLnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyc6XHJcbiAgICAgICAgY29uc3QgQ0NjYXRlZ29yeUluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmZpbmRJbmRleCgoQ0NjYXRlZ29yeTogYW55KSA9PiBDQ2NhdGVnb3J5LmNhdGVnb3J5X2lkID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMuc3BsaWNlKENDY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmlza0NhdGVnb3J5JzpcclxuICAgICAgICBjb25zdCByaXNrQ2F0ZWdvcnlJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmZpbmRJbmRleCgocmlza0NhdGVnb3J5OiBhbnkpID0+IHJpc2tDYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgaWYgKHJpc2tDYXRlZ29yeUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50OiBhbnkgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllc1tyaXNrQ2F0ZWdvcnlJbmRleF07XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5zcGxpY2Uocmlza0NhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgICAgaWYgKHBhcmVudD8uY2hpbGRfY2F0X2lkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJlbnQuY2hpbGRfY2F0X2lkcy5mb3JFYWNoKChjaGlsZEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuZmluZEluZGV4KChyZW1vdmVFbGVtZW50OiBhbnkpID0+IHJlbW92ZUVsZW1lbnQuY2F0ZWdvcnlfaWQgPT0gY2hpbGRFbGVtZW50KTtcclxuICAgICAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJpc2tDYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TGlzdChsaXN0OiBhbnlbXSwgaWRzOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRhdGE6IGFueSA9IFtdO1xyXG5cclxuICAgIGlkcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmZpbmRJbmRleCgobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50KTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG4gIHN1Ym1pdHRlZCA9IGZhbHNlXHJcblxyXG4gIC8qKlxyXG4gICogUmV0dXJucyBpZCdzIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3QgZWxlbWVudHNcclxuICAqIEBwYXJhbSBsaXN0IGFjdHVhbCBzZWxlY3RlZCBsaXN0XHJcbiAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBleHRyYWN0IGlkIGZyb20gdGhlIGxpc3RcclxuICAqL1xyXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsaXN0Lm1hcChlbGUgPT4geyBpZiAoZWxlW2tleV0pIHsgcmV0dXJuIGVsZVtrZXldOyB9IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBWYWxpZGF0ZXMgdGhlIGRhdGEgc3VibWl0dGVkIG9uIGNyZWF0ZSBkYXNoYm9hcmQgZm9ybVxyXG4gICovXHJcbiAgdmFsaWRhdGVEYXNoYm9hcmQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIDEwMCk7XHJcbiAgICBjb25zdCBldmVudCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lO1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lID0gZXZlbnQucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgPSBkZXNjcmlwdGlvbi5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSB8fCB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZS50cmltKCkgPT0gJydcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLmxlbmd0aCA+IDMwKVxyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dC5sZW5ndGggPiAyNTApXHJcbiAgICAgIHx8ICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSAmJiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSkpXHJcbiAgICAgIHx8ICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoID09IDAgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoID09IDAgJiZcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxyXG4gICogQHBhcmFtIGRhc2hib2FyZCBjb250YWlucyBkYXNoYm9hcmRGb3JtIGRhdGFcclxuICAqL1xyXG4gIHN1Ym1pdERhc2hib2FyZCgpIHtcclxuXHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlRGFzaGJvYXJkKCk7XHJcbiAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMudkxvYWRlciA9IHRydWU7XHJcbiAgICBjb25zdCBkYXNoYm9hcmQgPSB0aGlzLmRhc2hib2FyZEZvcm07XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGRhc2hib2FyZF9uYW1lOiBkYXNoYm9hcmQuZGFzaGJvYXJkTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjb250ZW50OiBkYXNoYm9hcmQuZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0LFxyXG4gICAgICAgICAgYXR0YWNobWVudHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICB2aXNpYmxlX3RvX3VzZXJzOiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRWaWV3ZXJzLCAnbWVtYmVyX2lkJyksXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5X2NlbnRlcjogdGhpcy5yZXR1cm5JZHMoZGFzaGJvYXJkLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLCAnaXRlbV9pZCcpLFxyXG4gICAgICByZXNwb25zaWJpbGl0eV9jYXRlZ29yeTogdGhpcy5yZXR1cm5JZHMoZGFzaGJvYXJkLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLCAnY2F0ZWdvcnlfaWQnKSxcclxuICAgICAgcmlza19jYXRlZ29yeTogdGhpcy5yZXR1cm5JZHMoZGFzaGJvYXJkLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICBkaXNwbGF5X2NyaXRlcmlhOiAoZGFzaGJvYXJkLmRpc3BsYXlDcml0ZXJpYSA9PT0gJ2FuZCcpID8gJ0JPVEhfUkNfQU5EX0NBVEVHT1JZJyA6ICdSQ19PUl9DQVRFR09SWScsXHJcbiAgICAgIHRpbWVmcmFtZToge1xyXG4gICAgICAgIHN0YXJ0X2RhdGU6IChkYXNoYm9hcmQuc2VsZWN0ZWRGcm9tRGF0ZSkgPyBkYXlqcyhkYXNoYm9hcmQuc2VsZWN0ZWRGcm9tRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiAnJyxcclxuICAgICAgICBlbmRfZGF0ZTogKGRhc2hib2FyZC5zZWxlY3RlZFRvRGF0ZSkgPyBkYXlqcyhkYXNoYm9hcmQuc2VsZWN0ZWRUb0RhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJycsXHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlbWFpbF9zdW1tYXJ5OiB0aGlzLnNldEZyZXF1ZW5jeSgnJywgJ2V4cG9ydCcpLCAvL3NldEZvcm1hdFxyXG4gICAgICB3aWRnZXRfZGV0YWlsczogZGFzaGJvYXJkLmNvbmZpZ3VyZVdpZGdldFxyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLnN1Ym1pdERhc2hib2FyZChwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgLy8gdGhpcy5zbmFja0Jhci5zaG93KCdUaGUgZGFzaGJvYXJkIGhhcyBiZWVuIGNyZWF0ZWQuJyk7XHJcbiAgICAgICAgdGhpcy5pc1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoeyBtb2RlOiAnY3JlYXRlZCcsIGlkOiByZXMuX2lkIH0pO1xyXG4gICAgICAgIH0sIDMwMDApO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwOSkge1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJyk7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICBwYXlsb2FkLndpZGdldF91cGRhdGVfZmxhZyA9IHRydWVcclxuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZURhc2hib2FyZCh0aGlzLmRhc2hib2FyZElkLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gdXBkYXRlZCcpO1xyXG4gICAgICAgICAgdGhpcy5pc1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSAnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiB1cGRhdGVkJztcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICd1cGRhdGVkJyB9KTtcclxuICAgICAgICAgIH0sIDMwMDApO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdERhc2hib2FyZCgpIHtcclxuICAgIGlmICh0aGlzLmRhc2hib2FyZElkKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5mZXRjaERhc2hib2FyZCh0aGlzLmRhc2hib2FyZElkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdCA9IFtyZXMuY3JlYXRlZF9ieV1cclxuICAgICAgICB0aGlzLnBvcHVsYXRlRGFzaGJvYXJkRm9ybShkYXRhKTtcclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvcHVsYXRlRGFzaGJvYXJkRm9ybShkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lID0gZGF0YS5kYXNoYm9hcmRfbmFtZSxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCA9IGRhdGEuZGVzY3JpcHRpb25bMF0uY29udGVudCxcclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnVzZXJzTGlzdCwgZGF0YS52aXNpYmxlX3RvX3VzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsIGRhdGEucmVzcG9uc2liaWxpdHlfY2VudGVyLCAnaXRlbV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KHRoaXMuYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXMsIGRhdGEucmVzcG9uc2liaWxpdHlfY2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QodGhpcy5hbGxSaXNrQ2F0ZWdvcmllcywgZGF0YS5yaXNrX2NhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kaXNwbGF5Q3JpdGVyaWEgPSAoZGF0YS5kaXNwbGF5X2NyaXRlcmlhID09PSBcIkJPVEhfUkNfQU5EX0NBVEVHT1JZXCIpID8gJ2FuZCcgOiAnb3InO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJvbURhdGUgPSAoZGF0YS50aW1lZnJhbWUuc3RhcnRfZGF0ZSkgPyBkYXlqcyhkYXRhLnRpbWVmcmFtZS5zdGFydF9kYXRlKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IChkYXRhLnRpbWVmcmFtZS5lbmRfZGF0ZSkgPyBkYXlqcyhkYXRhLnRpbWVmcmFtZS5lbmRfZGF0ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQgPSBkYXRhLndpZGdldF9kZXRhaWxzXHJcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IGRhdGEud2lkZ2V0X2RldGFpbHMubGVuZ3RoID4gMCA/IFsuLi5uZXcgU2V0KGRhdGEud2lkZ2V0X2RldGFpbHMpXSA6IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRXaWRnZXRzID0gZGF0YS5hbGxfd2lkZ2V0cy5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoZGF0YS5hbGxfd2lkZ2V0cyldIDogW107XHJcbiAgICB0aGlzLnNldEZyZXF1ZW5jeShkYXRhLmVtYWlsX3N1bW1hcnksICdpbXBvcnQnKTtcclxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZShkYXRhLnRpbWVmcmFtZS5zdGFydF9kYXRlKTtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG4gICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICAgIH0sIDIwKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRGcmVxdWVuY3koZXZlbnQ6IGFueSwgbW9kZTogYW55KSB7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2V4cG9ydCcpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnd2Vla2x5JzpcclxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzLm1hcCgoZWxlOiBhbnkpID0+IE51bWJlcihlbGUpICsgMSk7XHJcbiAgICAgICAgICBjb25zdCB3ZWVrbHlWYWx1ZSA9IHdlZWtseVZhbHVlRGF0YS5qb2luKCk7XHJcbiAgICAgICAgICByZXR1cm4gJzJ+JyArIHdlZWtseVZhbHVlICsgJ34wfjAnXHJcbiAgICAgICAgY2FzZSAnbW9udGhseSc6XHJcbiAgICAgICAgICBjb25zdCBtb250aGx5VmFsdWVEYXRhID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMubWFwKChlbGU6IGFueSkgPT4gTnVtYmVyKGVsZSkgKyAxKTtcclxuICAgICAgICAgIGNvbnN0IG1vbnRobHlWYWx1ZSA9IG1vbnRobHlWYWx1ZURhdGEuam9pbigpO1xyXG4gICAgICAgICAgcmV0dXJuICczficgKyB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd+JyArIG1vbnRobHlWYWx1ZSArICd+MCdcclxuICAgICAgICBjYXNlICdxdWFydGVybHknOlxyXG4gICAgICAgICAgY29uc3QgcXVhcnRlcmx5VmFsdWVEYXRhID0gTnVtYmVyKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzKSArIDE7XHJcbiAgICAgICAgICByZXR1cm4gJzd+JyArIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ34nICsgcXVhcnRlcmx5VmFsdWVEYXRhICsgJ34wJ1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1vZGUgPT09ICdpbXBvcnQnKSB7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnNwbGl0KCd+JylcclxuICAgICAgc3dpdGNoICh2YWxbMF0pIHtcclxuICAgICAgICBjYXNlICcyJzoge1xyXG4gICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9IFwiRXZlcnkgXCI7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ3dlZWtseSdcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gdmFsWzFdLnNwbGl0KCcsJykubWFwKChlbGVtZW50OiBhbnkpID0+IE51bWJlcihlbGVtZW50KSAtIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMuZm9yRWFjaCgoZGF5SW5kZXg6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdHJpbmdWYWwgKz0gaW5kZXggPT09IDAgPyB0aGlzLmRheU5hbWVzW2RheUluZGV4XSA6ICcsICcgKyB0aGlzLmRheU5hbWVzW2RheUluZGV4XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5TWVzc2FnZSA9IHN0cmluZ1ZhbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICczJzoge1xyXG4gICAgICAgICAgbGV0IHN0cmluZ1ZhbCA9IFwiZXZlcnkgXCI7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlID0gJ21vbnRobHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSB2YWxbMl0uc3BsaXQoJywnKS5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gTnVtYmVyKGVsZW1lbnQpIC0gMSk7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcy5mb3JFYWNoKChtb250aEluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsICs9IGluZGV4ID09PSAwID8gdGhpcy5tb250aE5hbWVzW21vbnRoSW5kZXhdIDogJywgJyArIHRoaXMubW9udGhOYW1lc1ttb250aEluZGV4XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnNyc6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcImV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdxdWFydGVybHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gTnVtYmVyKHZhbFsyXS5zcGxpdCgnLCcpWzBdKSAtIDE7XHJcbiAgICAgICAgICBzdHJpbmdWYWwgKz0gdGhpcy5xdWFydGVyc1t0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc107XHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAvL3lvdXIgY29kZSB0byB1cGRhdGUgdGhlIG1vZGVsXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFPaEMsTUFBTSxPQUFPLHdCQUF3QjtJQXlIbkMsWUFDVSxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLEdBQXNCLEVBQ3RCLFFBQXlCLEVBQzFCLGNBQThCLEVBQzdCLHVCQUFnRDtRQUxoRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENB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YSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7eUJBQ3hEO3dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7cUJBQzFFO29CQUNDLE1BQUs7YUFFUjtTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUNoQiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs7WUE5MkJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyw2L25DQUFnRDs7YUFFakQ7OztZQWxCUSxzQkFBc0I7WUFDdEIsaUJBQWlCO1lBSmpCLGlCQUFpQjtZQU9qQixlQUFlO1lBT2YsY0FBYztZQU5kLHVCQUF1Qjs7O21CQWtCN0IsS0FBSzswQkFDTCxLQUFLO29CQUNMLE1BQU07d0JBQ04sS0FBSzs2QkFFTCxTQUFTLFNBQUMsZ0JBQWdCOzJCQUMxQixTQUFTLFNBQUMsY0FBYzs4QkFFeEIsS0FBSzsrQkE0SEwsWUFBWSxTQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50LCBJRGF0ZVBpY2tlckNvbmZpZyB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XHJcbmltcG9ydCB7IENyZWF0ZURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NyZWF0ZS1kYXNoYm9hcmQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyTGlzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3VzZXItbGlzdC91c2VyLWxpc3QuY29uZmlnJztcclxuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkRm9ybSB9IGZyb20gJy4vY3JlYXRlLWRhc2hib2FyZC1jb25maWcnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2NvbmZpZ3VyZS13aWRnZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaW5kSW5kZXggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5cclxuaW1wb3J0ICogYXMgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgKiBhcyBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnO1xyXG5pbXBvcnQgeyBQb3BvdmVyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9wb3BvdmVyL3BvcG92ZXIuc2VydmljZSc7XHJcbmRheWpzLmV4dGVuZChjdXN0b21QYXJzZUZvcm1hdCk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtZGFzaGJvYXJkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XHJcbiAgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XHJcbiAgQElucHV0KCkgZGFzaGJvYXJkSWQgPSAnJztcclxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgY3JlYXRlZEJ5ID0gMDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZnJvbURhdGVQaWNrZXInKSBmcm9tRGF0ZVBpY2tlciE6IERhdGVQaWNrZXJDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgndG9EYXRlUGlja2VyJykgdG9EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBhbmltYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZVdpZGdldCA9IGZhbHNlXHJcblxyXG4gIHRvdGFsUGFnZXMgPSAxO1xyXG4gIHRvdGFsTGlzdCA9IDE7XHJcbiAgdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHZMb2FkZXIgPSB0cnVlO1xyXG4gIHVzZXJMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgcmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIGhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICBsaXN0RGV0YWlsczogVXNlckxpc3RDb25maWd1cmF0aW9uID0ge1xyXG4gICAgc2VsZWN0ZWRVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBbXSxcclxuICAgIGRpc3BsYXlFbGVtZW50S2V5OiAnbWVtYmVyX25hbWUnLFxyXG4gICAgZWxlbWVudElkS2V5OiAnbWVtYmVyX2lkJyxcclxuICAgIHRvb2x0aXBLZXk6ICdtZW1iZXJfZW1haWwnLFxyXG4gIH07XHJcbiAgZGFzaGJvYXJkRGVzY3JpcHRpb246IEVkaXRvckNvbmZpZyA9IHtcclxuICAgIHBsYWNlaG9sZGVyOiAnRGVzY3JpcHRpb24gKE1heCBsaW1pdDogMjUwIGNoYXJhY3RlcnMpJyxcclxuICAgIG1vZGU6ICdwcmltZScsXHJcbiAgICBpZDogJ2Rlc2NyaXB0aW9uJ1xyXG4gIH1cclxuICByZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlOiBhbnkgPSB7XHJcbiAgICByZWd1bGF0aW9uczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIHN0YW5kYXJkczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIGludGVybmFsQ29udHJvbHM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBvdGhlcnM6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH1cclxuICB9O1xyXG4gIGFsbENvbXBsaWFuY2VDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIGFsbFJpc2tDYXRlZ29yaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHNob3dSaXNrQ2F0ZWdvcnkgPSBmYWxzZTtcclxuICBzaG93Q3JpdGVyaWEgPSB0cnVlO1xyXG5cclxuICBkYXNoYm9hcmRGb3JtOiBDcmVhdGVEYXNoYm9hcmRGb3JtID0ge1xyXG4gICAgZGFzaGJvYXJkTmFtZTogJycsXHJcbiAgICBkYXNoYm9hcmREZXNjcmlwdGlvblRleHQ6ICcnLFxyXG4gICAgc2VsZWN0ZWRWaWV3ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkRnJvbURhdGU6IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkVG9EYXRlOiB1bmRlZmluZWQsXHJcbiAgICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogW10sXHJcbiAgICBzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllczogW10sXHJcbiAgICBzZWxlY3RlZFJpc2tDYXRlZ29yaWVzOiBbXSxcclxuICAgIGRpc3BsYXlDcml0ZXJpYTogJ29yJyxcclxuICAgIGNvbmZpZ3VyZVdpZGdldDogW10sXHJcbiAgICBmcmVxdWVuY3lEZXRhaWxzOiAnJyxcclxuICAgIHNlbGVjdGVkRnJlcXVlbmN5VHlwZTogJycsXHJcbiAgICBzZWxlY3RlZEZyZXF1ZW5jaWVzOiBbMF0sXHJcbiAgICBmcmVxdWVuY3lNZXNzYWdlOiAnJyxcclxuICAgIGZyZXF1ZW5jeURhdGU6IDFcclxuICB9XHJcblxyXG5cclxuICBvcGVuQ29uZmlndXJlV2lkZ2V0cyA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkV2lkZ2V0czogYW55ID0gW107XHJcbiAgZGlzcGxheWVkV2lkZ2V0czogYW55ID0gW11cclxuXHJcblxyXG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSBbXTtcclxuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIGRheU5hbWVzID0gWydNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5JywgJ1N1bmRheSddO1xyXG4gIG1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcclxuICBxdWFydGVycyA9IFsnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLCAnRmVicnVhcnksIE1heSwgQXVndXN0LCBOb3ZlbWJlcicsICdNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlciddO1xyXG5cclxuICBjYXRlZ29yeUxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBzaG93Umlza1dpZGdldHMgPSBmYWxzZTtcclxuICBzaG93Q29tcGxpYW5jZVdpZGdldHMgPSBmYWxzZTtcclxuXHJcbiAgcmlza0NhdGVnb3J5TGlzdCA9IHtcclxuICAgIHN0cmF0ZWdpYzoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG9wZXJhdGlvbmFsOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgY29tcGxpYW5jZToge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBmcm9tRGF0ZVBpY2tlckNvbmZpZzogSURhdGVQaWNrZXJDb25maWcgPSB7XHJcbiAgICBtaW46IHRoaXMuZ2V0Q3VycmVudERhdGUoKVxyXG4gIH1cclxuXHJcbiAgdG9EYXRlUGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyA9IHtcclxuICB9XHJcblxyXG4gIGlzU21pbGV5ITogYm9vbGVhbjtcclxuICBzbWlsZXlNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFNlcnZpY2U6IENyZWF0ZURhc2hib2FyZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHB1YmxpYyBwb3BvdmVyU2VydmljZTogUG9wb3ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlOiBDb25maWd1cmVXaWRnZXRzU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuY3JlYXRlZEJ5KSB7XHJcbiAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LnB1c2godGhpcy5jcmVhdGVkQnkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKSBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICB0aGlzLmNsb3NlLmVtaXQoeyBtb2RlOiAnZGlzY2FyZCcgfSk7XHJcbiAgICB0aGlzLmlzU21pbGV5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCgnJyk7XHJcbiAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5nZXRSQ0xpc3QoKTtcclxuICAgIHRoaXMuZ2V0Q29tcGxpYW5jZUNhdGVnb3J5TGlzdCgpO1xyXG4gICAgdGhpcy5zZXRGcmVxdWVuY3koXCIyfjF+MH4wXCIsICdpbXBvcnQnKTtcclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIHRoaXMuZ2V0VXNlcnNMaXN0KCcnKTtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHF1aWNrTGluayA9IHJlcy5xdWlja19saW5rO1xyXG4gICAgICBpZiAocXVpY2tMaW5rLnJpc2spIHtcclxuICAgICAgICB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9LCBlcnJvciA9PiB7IGNvbnNvbGUubG9nKGVycm9yKSB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5cyB0aGUgbGlzdGluZyBwYWdlcyB0aGUgbGVmdCBzaWRlIG9mIHBvbGljeSBmb3JtIHRvIHNldCBhbmQgZWRpdCB0aGUgZHJvcGRvd24gZmllbGRzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSB0eXBlIGhvbGRzIG5hbWUgb2YgcGFydGljdWxhciBsaXN0IGlzIHRvIGJlIGRpc3BsYXllZFxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBib29sZWFuIHZhbHVlIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb3Igbm90XHJcbiAgICovXHJcbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAodHlwZSA9PSAnZnJlcXVlbmN5JyB8fCB0aGlzLmFjdGl2ZVNlbGVjdG9yID09ICdmcmVxdWVuY3knKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NyaXRlcmlhID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0NyaXRlcmlhID0gdHJ1ZTtcclxuICAgICAgfSwgMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XHJcbiAgfVxyXG5cclxuICBvcGVuRnJvbURhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmZyb21EYXRlUGlja2VyLmFwaS5vcGVuKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5Ub0RhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLnRvRGF0ZVBpY2tlci5hcGkub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgfVxyXG4gIGNsb3NlRnJvbURhdGVQaWNrZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSlcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG5cclxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUobWluVG9EYXRlLnNwbGl0KCctJykucmV2ZXJzZSgpLmpvaW4oJy0nKSk7XHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUpXHJcbiAgICBjb25zdCBpblZhbGlkRGF0ZSA9IChmcm9tRGF0ZSA+PSB0b0RhdGUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGluVmFsaWREYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZnJvbURhdGVQaWNrZXIuYXBpLmNsb3NlKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbG9zZVRvRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyLmFwaS5jbG9zZSgpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZUltYWdlKCkge1xyXG4gICAgY29uc3QgY2lyY2xlSW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbWFnZScpXHJcbiAgfVxyXG5cclxuICBzYXZlRnJlcXVlbmN5KGV2ZW50VmFsdWVzOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSBldmVudFZhbHVlcy5mcmVxdWVuY3lUeXBlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSBldmVudFZhbHVlcy5mcmVxdWVuY2llcztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmN5U3RyaW5nO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSBldmVudFZhbHVlcy5zZWxlY3RlZERhdGU7XHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudERhdGUoKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBzZXRUb0RhdGUoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZShkYXRhKTtcclxuICAgIHJldHVybiB0b2RheS5nZXREYXRlKCkgKyAxICsgJy0nICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSArICctJyArIHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGdldEZyb21EYXRlKGRhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICByZXR1cm4gdG9kYXkuZ2V0RGF0ZSgpICsgJy0nICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSArICctJyArIHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGNvbmZpZ3VyZURhc2hib2FyZCgpIHtcclxuICAgIGxldCBmaWVsZHNTdGF0dXMgPSB0aGlzLnZhbGlkYXRlRGFzaGJvYXJkKCk7XHJcbiAgICBpZiAoZmllbGRzU3RhdHVzKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5jaGVja0R1cGxpY2F0ZURhc2hib2FyZE5hbWUocGF5bG9hZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Umlza1dpZGdldHMgPSAodGhpcy5zaG93Umlza0NhdGVnb3J5ICYmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGggPiAwIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwKSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbXBsaWFuY2VXaWRnZXRzID0gKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPiAwIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuQ29uZmlndXJlV2lkZ2V0cyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdBIGRhc2hib2FyZCB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4gU3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgZGFzaGJvYXJkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6IHRoaXMuZGFzaGJvYXJkSWRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmNoZWNrRHVwbGljYXRlRGFzaGJvYXJkTmFtZShwYXlsb2FkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9ICh0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgJiYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPSAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgICogRmV0Y2hlcyBvcmdhbml6YXRpb24gdXNlcnMgY291bnQgYXBpIHRvIGdldCB0b3RhbCBudW1iZXIgb2YgcGFnZXNcclxuICAgICogQHBhcmFtIFVybCBjb250YWlucyBwcmFtc1xyXG4gICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybDogYW55KSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudChVcmwpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRvdGFsTGlzdCA9IHJlcy50b3RhbF9tZW1iZXJzO1xyXG4gICAgICBpZiAocmVzLnRvdGFsX21lbWJlcnMgJiYgcmVzLmxpbWl0X3Blcl9wYWdlID4gMSkge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHJlcy5jcmVhdGVfcGFnZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBHZXQgdXNlcnMgbGlzdCBieSBtYWtpbmcgYXBpIGNhbGwgYW5kIHByZSBzZWxlY3RzIGFsbCBhZG1pbnMgYnkgYWRkaW5nIHRvIHZpZXdlcnNcclxuICogQHBhcmFtIHVybCBjb250YWlucyBxdWVyeSBwYXJhbXMgZm9yIG9yZ2FuaXphdGlvbiB1c2VycyBhcGlcclxuICovXHJcbiAgZ2V0VXNlcnNMaXN0KHVybDogYW55KSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0QWxsVXNlcnMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy51c2VyTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSB0aGlzLnNldExpc3QodGhpcy51c2Vyc0xpc3QsIFt0aGlzLmNyZWF0ZWRCeV0sICdtZW1iZXJfaWQnKTtcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldENvbXBsaWFuY2VDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzO1xyXG4gICAgICB0aGlzLmFsbENvbXBsaWFuY2VDYXRlZ29yaWVzID0gT2JqZWN0LmFzc2lnbihyZXMpXHJcbiAgICAgIC8vIGNsb25lRGVlcChyZXMpO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDApIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5vdGhlcnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUucmVndWxhdGlvbnMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUuc3RhbmRhcmRzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMykge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLmludGVybmFsQ29udHJvbHMubGlzdC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0sIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNhdmVTZWxlY3RlZENhdGVnb3J5KGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiZXZlbnQ9PT4+PlwiLCBldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0Q2F0ZWdvcnlMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Quc3RyYXRlZ2ljLmxpc3QgPSByZXMuc3RyYXRlZ2ljX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0Lm9wZXJhdGlvbmFsLmxpc3QgPSByZXMub3BlcmF0aW9uYWxfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3QuY29tcGxpYW5jZS5saXN0ID0gcmVzLmNvbXBsaWFuY2VfYXJyO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3Qub3RoZXJzLmxpc3QgPSByZXMub3RoZXJzX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hbGxSaXNrQ2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHRoaXMuYWxsUmlza0NhdGVnb3JpZXMuY29uY2F0KHJlcy5zdHJhdGVnaWNfYXJyLCByZXMub3BlcmF0aW9uYWxfYXJyLCByZXMuY29tcGxpYW5jZV9hcnIsIHJlcy5vdGhlcnNfYXJyKSldXHJcblxyXG4gICAgfSwgZXJyID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLnJpc2tDYXRlZ29yeUxpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBJdCBpcyB0byBlbnN1cmUgd2hldGhlciBhbGwgcmVxdWlyZWQgbGlzdHMgb24gUG9saWN5IGZyb20gaXMgbG9hZGVkIGZyb20gdGhlIGFwaSBjYWxsIG9yIG5vdFxyXG4gICovXHJcbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5yY0xpc3RMb2FkZWQgJiYgdGhpcy5jb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkICYmIHRoaXMudXNlckxpc3RMb2FkZWQpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0RGFzaGJvYXJkKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkV2lkZ2V0cyhkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdDUkVBVEUnKSB7XHJcbiAgICAgIGNvbnN0IHdpZGdldHNBcnJheTogYW55ID0gW11cclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgIG9iai5tb2R1bGVfbmFtZSA9IGVsZW1lbnQubW9kdWxlO1xyXG4gICAgICAgIG9iai5faWQgPSAnJztcclxuICAgICAgICBvYmoud2lkZ2V0X25hbWUgPSBlbGVtZW50LnRpdGxlXHJcbiAgICAgICAgb2JqLndpZGdldF9jb2RlID0gZWxlbWVudC5pZDtcclxuICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcclxuICAgICAgICBvYmouc3RhdGUgPSAnQUNUSVZFJ1xyXG4gICAgICAgIGlmIChlbGVtZW50LnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZWxlbWVudC5zdWJXaWRnZXRzLmZvckVhY2goKHN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdWJXaWRnZXRPYmplY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5faWQgPSAnJztcclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9uYW1lID0gc3ViV2lkZ2V0LnRpdGxlXHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfY29kZSA9IHN1YldpZGdldC5pZDtcclxuICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LnN0YXRlID0gKHN1YldpZGdldC52YWx1ZSkgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgb2JqLnN1Yl93aWRnZXRzLnB1c2goT2JqZWN0LmFzc2lnbihzdWJXaWRnZXRPYmplY3QpKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpZGdldHNBcnJheS5wdXNoKG9iailcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0ID0gd2lkZ2V0c0FycmF5O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICBjb25zdCB3aWRnZXRzQXJyYXk6IGFueSA9IFtdXHJcblxyXG4gICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghSlNPTi5zdHJpbmdpZnkodGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCkuaW5jbHVkZXMoZWxlbWVudC5pZCkpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9XHJcbiAgICAgICAgICBvYmoubW9kdWxlX25hbWUgPSBlbGVtZW50Lm1vZHVsZTtcclxuICAgICAgICAgIG9iai5faWQgPSAnJztcclxuICAgICAgICAgIG9iai53aWRnZXRfbmFtZSA9IGVsZW1lbnQudGl0bGVcclxuICAgICAgICAgIG9iai53aWRnZXRfY29kZSA9IGVsZW1lbnQuaWQ7XHJcbiAgICAgICAgICBvYmouc3ViX3dpZGdldHMgPSBbXTtcclxuICAgICAgICAgIG9iai5zdGF0ZSA9ICdBQ1RJVkUnXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zdWJXaWRnZXRzLmZvckVhY2goKHN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IHN1YldpZGdldE9iamVjdDogYW55ID0ge31cclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3QuX2lkID0gJyc7XHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9uYW1lID0gc3ViV2lkZ2V0LnRpdGxlXHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0LndpZGdldF9jb2RlID0gc3ViV2lkZ2V0LmlkO1xyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5zdGF0ZSA9IChzdWJXaWRnZXQudmFsdWUpID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgICAgb2JqLnN1Yl93aWRnZXRzLnB1c2goc3ViV2lkZ2V0T2JqZWN0KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQucHVzaChvYmopXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLndpZGdldF9jb2RlID09IGVsZW1lbnQuaWQpXHJcbiAgICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHNbaW5kZXhdLnN0YXRlID0gJ0FDVElWRSdcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdWJfd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHNbaW5kZXhdLnN1Yl93aWRnZXRzLmZvckVhY2goKHN1YldpZGdldERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEluZGV4ID0gZWxlbWVudC5zdWJXaWRnZXRzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5pZCA9PSBzdWJXaWRnZXREYXRhLndpZGdldF9jb2RlKVxyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICBzdWJXaWRnZXREYXRhLnN0YXRlID0gKGVsZW1lbnQuc3ViV2lkZ2V0c1tlbGVtZW50SW5kZXhdLnZhbHVlKSA/ICdBQ1RJVkUnIDogJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQuZm9yRWFjaCgoc2F2ZWRXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50LmlkID09IHNhdmVkV2lkZ2V0LndpZGdldF9jb2RlKVxyXG4gICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgc2F2ZWRXaWRnZXQuc3RhdGUgPSAnSU5BQ1RJVkUnO1xyXG4gICAgICAgICAgaWYgKHNhdmVkV2lkZ2V0LnN1Yl93aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2F2ZWRXaWRnZXQuc3ViX3dpZGdldHMuZm9yRWFjaCgoc2F2ZVN1YldpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgc2F2ZVN1YldpZGdldC5zdGF0ZSA9ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IGRhdGFcclxuICAgIHRoaXMub3BlbkNvbmZpZ3VyZVdpZGdldHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc3VibWl0RGFzaGJvYXJkKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgY2xvc2VDb25maWd1cmVXaWRnZXRzKGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaWx0ZXIgbGlzdCB1c2VyJ3MgbGlzdCBiYXNlZCBvbiBwYWdpbmF0aW9uIGJ5IG1ha2luZyBhcGkgY2FsbFxyXG4gICAqIEBwYXJhbSBldmVudCBzcGVjaWZpZXMgYSBib29sZWFuIHZhbHVlIHRvIGNhbGwgYXBpXHJcbiAgICovXHJcbiAgcGFnaW5hdGlvbkZpbHRlcihldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5nZXRVc2Vyc0xpc3Qoe1xyXG4gICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXHJcbiAgICAgICAgdHlwZTogJ2FsbF9leGNlcHRfZXhlY3V0aXZlJyxcclxuICAgICAgICBxOiAoIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUpID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGdldFJDTGlzdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5nZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVNlbGVjdGVkTGlzdCh0eXBlOiBzdHJpbmcsIHNlbGVjdGVkSXRlbXM6IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSB0aGlzLnNldExpc3QodGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LCBzZWxlY3RlZEl0ZW1zLCAnaXRlbV9pZCcpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnd2hvQ2FuVmlldyc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycyA9IHNlbGVjdGVkSXRlbXNcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmlza0NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcyA9IHNlbGVjdGVkSXRlbXM7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCcnLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmUodHlwZTogYW55LCBldmVudDogYW55LCByZW1vdmVJbmRleD86IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3JjJzpcclxuICAgICAgICBjb25zdCByY0luZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleCgocmM6IGFueSkgPT4gcmMucmNfaWQgPT0gZXZlbnQucmNfaWQpO1xyXG4gICAgICAgIGlmIChyY0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50UmM6IGFueSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc1tyY0luZGV4XTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5zcGxpY2UocmNJbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmVudFJjPy5pdGVtX2NoaWxkX2lkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBwYXJlbnRSYy5pdGVtX2NoaWxkX2lkcy5mb3JFYWNoKChjaGlsZEVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmZpbmRJbmRleCgocmVtb3ZlRWxlbWVudDogYW55KSA9PiByZW1vdmVFbGVtZW50LnJjX2lkID09IGNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICd3aG9DYW5WaWV3JzpcclxuICAgICAgICBjb25zdCByZXZpZXdlckluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2Vycy5maW5kSW5kZXgoKHZpZXdlcjogYW55KSA9PiB2aWV3ZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZCk7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2Vycy5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMnOlxyXG4gICAgICAgIGNvbnN0IENDY2F0ZWdvcnlJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5maW5kSW5kZXgoKENDY2F0ZWdvcnk6IGFueSkgPT4gQ0NjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLnNwbGljZShDQ2NhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3Jpc2tDYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3Qgcmlza0NhdGVnb3J5SW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5maW5kSW5kZXgoKHJpc2tDYXRlZ29yeTogYW55KSA9PiByaXNrQ2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmIChyaXNrQ2F0ZWdvcnlJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudDogYW55ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXNbcmlza0NhdGVnb3J5SW5kZXhdO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJpc2tDYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICAgIGlmIChwYXJlbnQ/LmNoaWxkX2NhdF9pZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyZW50LmNoaWxkX2NhdF9pZHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmZpbmRJbmRleCgocmVtb3ZlRWxlbWVudDogYW55KSA9PiByZW1vdmVFbGVtZW50LmNhdGVnb3J5X2lkID09IGNoaWxkRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShyaXNrQ2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcclxuXHJcbiAgICBpZHMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudCk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuICBzdWJtaXR0ZWQgPSBmYWxzZVxyXG5cclxuICAvKipcclxuICAqIFJldHVybnMgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXHJcbiAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxyXG4gICogQHBhcmFtIGtleSBjb250YWlucyBrZXkgdG8gZXh0cmFjdCBpZCBmcm9tIHRoZSBsaXN0XHJcbiAgKi9cclxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbGlzdD8ubWFwKGVsZSA9PiB7IGlmIChlbGVba2V5XSkgeyByZXR1cm4gZWxlW2tleV07IH0gfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIGRhc2hib2FyZCBmb3JtXHJcbiAgKi9cclxuICB2YWxpZGF0ZURhc2hib2FyZCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XHJcblxyXG4gICAgfSwgMTAwKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0O1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dCA9IGRlc2NyaXB0aW9uLnJlcGxhY2UocmUsICcnKS50cmltKCk7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLnRyaW0oKSA9PSAnJ1xyXG4gICAgICB8fCAodGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUubGVuZ3RoID4gMzApXHJcbiAgICAgIHx8ICh0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0Lmxlbmd0aCA+IDI1MClcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlICYmICghdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlKSlcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogTWFrZXMgYW4gYXBpIGNhbGwgdG8gY3JlYXRlIGEgcG9saWN5XHJcbiAgKiBAcGFyYW0gZGFzaGJvYXJkIGNvbnRhaW5zIGRhc2hib2FyZEZvcm0gZGF0YVxyXG4gICovXHJcbiAgc3VibWl0RGFzaGJvYXJkKCkge1xyXG5cclxuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGVEYXNoYm9hcmQoKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRhc2hib2FyZCA9IHRoaXMuZGFzaGJvYXJkRm9ybTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgZGFzaGJvYXJkX25hbWU6IGRhc2hib2FyZC5kYXNoYm9hcmROYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnRlbnQ6IGRhc2hib2FyZC5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQsXHJcbiAgICAgICAgICBhdHRhY2htZW50czogW11cclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHZpc2libGVfdG9fdXNlcnM6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFZpZXdlcnMsICdtZW1iZXJfaWQnKSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlfY2VudGVyOiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMsICdpdGVtX2lkJyksXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICByaXNrX2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcywgJ2NhdGVnb3J5X2lkJyksXHJcbiAgICAgIGRpc3BsYXlfY3JpdGVyaWE6IChkYXNoYm9hcmQuZGlzcGxheUNyaXRlcmlhID09PSAnYW5kJykgPyAnQk9USF9SQ19BTkRfQ0FURUdPUlknIDogJ1JDX09SX0NBVEVHT1JZJyxcclxuICAgICAgdGltZWZyYW1lOiB7XHJcbiAgICAgICAgc3RhcnRfZGF0ZTogKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6ICcnLFxyXG4gICAgICAgIGVuZF9kYXRlOiAoZGFzaGJvYXJkLnNlbGVjdGVkVG9EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZFRvRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiAnJyxcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVtYWlsX3N1bW1hcnk6IHRoaXMuc2V0RnJlcXVlbmN5KCcnLCAnZXhwb3J0JyksIC8vc2V0Rm9ybWF0XHJcbiAgICAgIHdpZGdldF9kZXRhaWxzOiBkYXNoYm9hcmQuY29uZmlndXJlV2lkZ2V0XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2Uuc3VibWl0RGFzaGJvYXJkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nKTtcclxuICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSAnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiBjcmVhdGVkLidcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdjcmVhdGVkJywgaWQ6IHJlcy5faWQgfSk7XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nKTtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycpO1xyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHBheWxvYWQud2lkZ2V0X3VwZGF0ZV9mbGFnID0gdHJ1ZVxyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UudXBkYXRlRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQsIHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuc25hY2tCYXIuc2hvdygnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiB1cGRhdGVkJyk7XHJcbiAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGUgZGFzaGJvYXJkIGhhcyBiZWVuIHVwZGF0ZWQnO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHsgbW9kZTogJ3VwZGF0ZWQnIH0pO1xyXG4gICAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0RGFzaGJvYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSWQpIHtcclxuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmZldGNoRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0ID0gW3Jlcy5jcmVhdGVkX2J5XVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVEYXNoYm9hcmRGb3JtKGRhdGEpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVEYXNoYm9hcmRGb3JtKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBkYXRhLmRhc2hib2FyZF9uYW1lLFxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0ID0gZGF0YS5kZXNjcmlwdGlvblswXS5jb250ZW50LFxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMudXNlcnNMaXN0LCBkYXRhLnZpc2libGVfdG9fdXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgZGF0YS5yZXNwb25zaWJpbGl0eV9jZW50ZXIsICdpdGVtX2lkJyk7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QodGhpcy5hbGxDb21wbGlhbmNlQ2F0ZWdvcmllcywgZGF0YS5yZXNwb25zaWJpbGl0eV9jYXRlZ29yeSwgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbFJpc2tDYXRlZ29yaWVzLCBkYXRhLnJpc2tfY2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRpc3BsYXlDcml0ZXJpYSA9IChkYXRhLmRpc3BsYXlfY3JpdGVyaWEgPT09IFwiQk9USF9SQ19BTkRfQ0FURUdPUllcIikgPyAnYW5kJyA6ICdvcic7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSA9IChkYXRhPy50aW1lZnJhbWU/LnN0YXJ0X2RhdGUpID8gZGF5anMoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKT8udG9EYXRlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUgPSAoZGF0YT8udGltZWZyYW1lPy5lbmRfZGF0ZSkgPyBkYXlqcyhkYXRhPy50aW1lZnJhbWU/LmVuZF9kYXRlKT8udG9EYXRlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQgPSBkYXRhLndpZGdldF9kZXRhaWxzXHJcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IGRhdGEud2lkZ2V0X2RldGFpbHMubGVuZ3RoID4gMCA/IFsuLi5uZXcgU2V0KGRhdGEud2lkZ2V0X2RldGFpbHMpXSA6IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRXaWRnZXRzID0gZGF0YS5hbGxfd2lkZ2V0cy5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoZGF0YS5hbGxfd2lkZ2V0cyldIDogW107XHJcbiAgICB0aGlzLnNldEZyZXF1ZW5jeShkYXRhPy5lbWFpbF9zdW1tYXJ5LCAnaW1wb3J0Jyk7XHJcbiAgICBsZXQgbWluVG9EYXRlID0gdGhpcy5zZXRUb0RhdGUoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKTtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG4gICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICAgIH0sIDIwKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRGcmVxdWVuY3koZXZlbnQ6IGFueSwgbW9kZTogYW55KSB7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2V4cG9ydCcpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnd2Vla2x5JzpcclxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcmVxdWVuY2llcz8ubWFwKChlbGU6IGFueSkgPT4gTnVtYmVyKGVsZSkgKyAxKTtcclxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlID0gd2Vla2x5VmFsdWVEYXRhPy5qb2luKCk7XHJcbiAgICAgICAgICByZXR1cm4gJzJ+JyArIHdlZWtseVZhbHVlICsgJ34wfjAnXHJcbiAgICAgICAgY2FzZSAnbW9udGhseSc6XHJcbiAgICAgICAgICBjb25zdCBtb250aGx5VmFsdWVEYXRhID0gdGhpcy5kYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEZyZXF1ZW5jaWVzPy5tYXAoKGVsZTogYW55KSA9PiBOdW1iZXIoZWxlKSArIDEpO1xyXG4gICAgICAgICAgY29uc3QgbW9udGhseVZhbHVlID0gbW9udGhseVZhbHVlRGF0YT8uam9pbigpO1xyXG4gICAgICAgICAgcmV0dXJuICczficgKyB0aGlzLmRhc2hib2FyZEZvcm0/LmZyZXF1ZW5jeURhdGUgKyAnficgKyBtb250aGx5VmFsdWUgKyAnfjAnXHJcbiAgICAgICAgY2FzZSAncXVhcnRlcmx5JzpcclxuICAgICAgICAgIGNvbnN0IHF1YXJ0ZXJseVZhbHVlRGF0YSA9IE51bWJlcih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcykgKyAxO1xyXG4gICAgICAgICAgcmV0dXJuICc3ficgKyB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd+JyArIHF1YXJ0ZXJseVZhbHVlRGF0YSArICd+MCdcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtb2RlID09PSAnaW1wb3J0Jykge1xyXG4gICAgICBjb25zdCB2YWwgPSBldmVudC5zcGxpdCgnficpXHJcbiAgICAgIHN3aXRjaCAodmFsWzBdKSB7XHJcbiAgICAgICAgY2FzZSAnMic6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcIkV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICd3ZWVrbHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IHZhbFsxXT8uc3BsaXQoJywnKT8ubWFwKChlbGVtZW50OiBhbnkpID0+IE51bWJlcihlbGVtZW50KSAtIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXM/LmZvckVhY2goKGRheUluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsICs9IGluZGV4ID09PSAwID8gdGhpcy5kYXlOYW1lc1tkYXlJbmRleF0gOiAnLCAnICsgdGhpcy5kYXlOYW1lc1tkYXlJbmRleF07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBzdHJpbmdWYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMyc6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcImV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdtb250aGx5J1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSB2YWxbMV1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gdmFsWzJdPy5zcGxpdCgnLCcpPy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gTnVtYmVyKGVsZW1lbnQpIC0gMSk7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcy5mb3JFYWNoKChtb250aEluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsICs9IGluZGV4ID09PSAwID8gdGhpcy5tb250aE5hbWVzW21vbnRoSW5kZXhdIDogJywgJyArIHRoaXMubW9udGhOYW1lc1ttb250aEluZGV4XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnNyc6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcImV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdxdWFydGVybHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gTnVtYmVyKHZhbFsyXS5zcGxpdCgnLCcpWzBdKSAtIDE7XHJcbiAgICAgICAgICBzdHJpbmdWYWwgKz0gdGhpcy5xdWFydGVyc1t0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc107XHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAvL3lvdXIgY29kZSB0byB1cGRhdGUgdGhlIG1vZGVsXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|