e5core-angular-ui
Version:
e5 Anywhere Angular UI
479 lines • 46.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Input, Output, ViewChildren, QueryList, Inject, LOCALE_ID } from '@angular/core';
import { DiariseUnit } from '../../enums/diarise-unit';
import { BehaviorSubject } from 'rxjs';
import { WorkMenuItemFoundationService, WorkItemFoundationService } from 'e5core-angular-services';
import { DatePipe } from '@angular/common';
import { DiariseReasonModel } from '../../models/diarise-reason.model';
var E5coreUiWorkDiariseComponent = /** @class */ (function () {
function E5coreUiWorkDiariseComponent(workItemFoundationService, workMenuItemService, locale, datePipe) {
this.workItemFoundationService = workItemFoundationService;
this.workMenuItemService = workMenuItemService;
this.locale = locale;
this.datePipe = datePipe;
this.dateChange = new EventEmitter();
this.reasonTextChange = new EventEmitter();
this.reasonChange = new EventEmitter();
this.diariseWork = new EventEmitter();
this.timeChange = new EventEmitter();
this.diariseReasonOption = '';
this.showDiariseTime = true;
this.showDiariseButton = true;
this.showDiariseReasonDropdown = true;
}
Object.defineProperty(E5coreUiWorkDiariseComponent.prototype, "diariseDate", {
get: /**
* @return {?}
*/
function () {
return this._diariseDate;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._diariseDate = value;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
if (typeof this.workItem$ === 'undefined') {
console.error('e5core-ui-work-diarise [workItem$] must have a BehaviorSubject<WorkItemModel>');
return;
}
if (this.displayedTime == null) {
/** @type {?} */
var currentTime = this.formatAMPM(new Date());
this.displayedTime = currentTime;
}
if (this.displayedDate == null) {
this.displayedDate = new Date();
}
if (typeof this.workItem$ != null) {
this.workItem$.subscribe(function (w) {
_this.workId = w.workId;
if (_this.showDiariseReasonDropdown) {
_this.reasons = new Array();
if (_this.workId !== '00000000-0000-0000-0000-000000000000') {
_this.GetDiariseReasons();
}
}
});
}
};
/**
* @private
* @param {?} clickedDiariseOption
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.calculateDiariseDate = /**
* @private
* @param {?} clickedDiariseOption
* @return {?}
*/
function (clickedDiariseOption) {
/** @type {?} */
var unit = parseInt(DiariseUnit[clickedDiariseOption.diariseUnit], 10);
/** @type {?} */
var increment = parseInt(clickedDiariseOption.value.toString(), 10);
this.diariseDate = new Date();
switch (unit) {
case DiariseUnit.Tomorrow:
{
this.diariseDate.setDate(this.diariseDate.getDate() + 1);
break;
}
case DiariseUnit.Days:
{
this.diariseDate.setDate(this.diariseDate.getDate() + increment);
break;
}
case DiariseUnit.Months:
{
this.diariseDate.setMonth(this.diariseDate.getMonth() + increment);
break;
}
case DiariseUnit.Weeks:
{
this.diariseDate.setDate(this.diariseDate.getDate() + increment * 7);
break;
}
case DiariseUnit.Year:
{
this.diariseDate.setFullYear(this.diariseDate.getFullYear() + increment);
break;
}
}
};
/**
* @private
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.setDatePickerDate = /**
* @private
* @return {?}
*/
function () {
// for(let datePicker of this.datePickerComponents.toArray()){
// datePicker.displayedDate = this.diariseDate;
this.displayedDate = this.diariseDate;
};
/**
* @private
* @param {?} tempDate
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.formatAMPM = /**
* @private
* @param {?} tempDate
* @return {?}
*/
function (tempDate) {
/** @type {?} */
var minuteString;
/** @type {?} */
var hours = tempDate.getHours();
/** @type {?} */
var minutes = tempDate.getMinutes();
/** @type {?} */
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minuteString = minutes < 10 ? '0' + minutes.toString() : minutes.toString();
/** @type {?} */
var strTime = hours.toString() + ':' + minuteString + ' ' + ampm;
return strTime;
};
/**
* @param {?} $event
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onDiarisePeriodOptionClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.calculateDiariseDate($event.diariseOption);
this.setDatePickerDate();
this.diarisePeriodOption = $event.diariseOption;
};
/**
* @param {?} $event
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onDiariseButtonClick = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
// ---Working Code------------------------------------------
// let temp = {"AssessmentExplanationcode":"This is a test"};
// let menuData = {
// "WorkItemChanges": WorkItemChanges,
// "TaskChanges": null,
// "AdditionalProperties": {
// "result": "ok",
// "DiariseReason": this.diariseReasonOption,
// "DiariseUntilDate": formattedDiariseUntilDate,
// "DiariseUntilHours": diariseHours,
// "DiariseUntilMinutes": diariseMinutes
// }
// }
// _let diariseEvent : WorkDiariseEvent = {diariseOption:this.diarisePeriodOption,
// diariseUntilDate:diariseUntilDate, diariseUntilHours : diariseHours,
// diariseUntilMinutes : diariseMinutes, diariseTextReason : this.diariseReasonTextValue,
// diariseReasonOption : this.diariseReasonOption, menuData:menuData, source:"button"} ;
// ---Working Code------------------------------------------
this.diariseWorkEvent = this.ConstructWorkDiariseEvent('button');
this.DiariseWorkItem();
};
/**
* @param {?} $event
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onDiariseDateChange = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.displayedDate = $event;
this.diariseWorkEvent = this.ConstructWorkDiariseEvent('date');
this.dateChange.emit(this.diariseWorkEvent);
};
/**
* @param {?} $event
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onDiariseReasonTextChange = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.diariseReasonTextValue = $event;
this.diariseReasonOption = $event;
this.diariseWorkEvent = this.ConstructWorkDiariseEvent('reasonText');
this.reasonTextChange.emit(this.diariseWorkEvent);
};
/**
* @param {?} $event
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onDiariseReasonChange = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
this.diariseReasonOption = $event.value;
this.diariseWorkEvent = this.ConstructWorkDiariseEvent('reasonDropdown');
this.reasonChange.emit(this.diariseWorkEvent);
};
/**
* @param {?} time
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.onTimeChange = /**
* @param {?} time
* @return {?}
*/
function (time) {
this.displayedTime = time;
/** @type {?} */
var diariseWorkEvent = this.ConstructWorkDiariseEvent('time');
this.timeChange.emit(diariseWorkEvent);
};
/**
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.GetDiariseReasons = /**
* @return {?}
*/
function () {
var _this = this;
this.workItemFoundationService.getDiariseReasons(this.workId).subscribe(function (s) {
/** @type {?} */
var tempReasons = s.map(function (item) { return new DiariseReasonModel(item); });
_this.reasons = tempReasons;
}, function (error) {
console.error(error);
});
};
/**
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.DiariseWorkItem = /**
* @return {?}
*/
function () {
var _this = this;
this.diariseWorkEvent = this.ConstructWorkDiariseEvent('diariseWorkItem');
/** @type {?} */
var options = { menuItemCode: "diarise" };
this.workMenuItemService.invokeMenuItem(this.workId, -1, this.diariseWorkEvent.menuData, options).subscribe(function (s) {
_this.diariseWork.emit(_this.diariseWorkEvent);
}, function (error) {
console.error(error);
});
};
/**
* @param {?} eventSource
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.ConstructWorkDiariseEvent = /**
* @param {?} eventSource
* @return {?}
*/
function (eventSource) {
/** @type {?} */
var WorkItemChanges = {};
if (this.diariseReasonPropertyId != null && this.diariseReasonTextValue != null) {
WorkItemChanges[this.diariseReasonPropertyId] = this.diariseReasonTextValue;
}
/** @type {?} */
var diariseUntilTime = this.ConvertTime12to24(this.displayedTime).split(':');
/** @type {?} */
var diariseHours = parseInt(diariseUntilTime[0], 10);
/** @type {?} */
var diariseMinutes = parseInt(diariseUntilTime[1], 10);
/** @type {?} */
var diariseUntilDate = this.datePipe.transform(this.displayedDate, 'dd/MM/yyyy');
/** @type {?} */
var additionalProperties = {
result: 'ok',
DiariseReason: this.diariseReasonOption,
DiariseUntilDate: diariseUntilDate,
DiaiseUntilHours: diariseHours,
DiariseUntilMinutes: diariseMinutes
};
/** @type {?} */
var menuData = {
'WorkItemChanges': WorkItemChanges,
'TaskChanges': null,
'AdditionalProperties': {
'result': 'ok',
'DiariseReason': this.diariseReasonOption,
'DiariseUntilDate': diariseUntilDate,
'DiariseUntilHours': diariseHours,
'DiariseUntilMinutes': diariseMinutes
}
};
// let additionalProperties: AdditionalProperties = {result:"ok", DiariseReason:this.diariseReasonOption,
// DiariseUntilDate:formattedDiariseUntilDate,DiaiseUntilHours:diariseHours, DiariseUntilMinutes:diariseMinutes};
// let menuData:DiariseMenuDataModel = {WorkItemChanges: WorkItemChanges, TaskChanges : null,
// AdditionalProperties:additionalProperties };
/** @type {?} */
var diariseEvent = {
diariseOption: this.diarisePeriodOption,
diariseUntilDate: diariseUntilDate,
diariseUntilHours: diariseHours,
diariseUntilMinutes: diariseMinutes,
diariseTextReason: this.diariseReasonTextValue,
diariseReasonOption: this.diariseReasonOption,
menuData: menuData,
source: eventSource
};
return diariseEvent;
};
/**
* @param {?} time12h
* @return {?}
*/
E5coreUiWorkDiariseComponent.prototype.ConvertTime12to24 = /**
* @param {?} time12h
* @return {?}
*/
function (time12h) {
var _a = tslib_1.__read(time12h.split(' '), 2), time = _a[0], modifier = _a[1];
// tslint:disable-next-line:prefer-const
var _b = tslib_1.__read(time.split(':'), 2), hours = _b[0], minutes = _b[1];
if (hours === '12') {
hours = '00';
}
if (modifier.toUpperCase() === 'PM') {
hours = parseInt(hours, 10) + 12;
}
return hours + ':' + minutes;
};
E5coreUiWorkDiariseComponent.decorators = [
{ type: Component, args: [{
selector: 'e5core-ui-work-diarise',
template: "<e5core-ui-work-diarise-material\n [periodOptions]='periodOptions'\n [reasons]='reasons'\n [displayedDate] ='displayedDate'\n [displayedTime] = 'displayedTime'\n [diariseReasonPropertyId] ='diariseReasonPropertyId'\n [diariseReasonPlaceHolder] ='diariseReasonPlaceHolder'\n [diariseReasonTextValue]='diariseReasonTextValue'\n [showDiariseButton]='showDiariseButton'\n [showDiariseTime]='showDiariseTime'\n (diariseWork)='onDiariseButtonClick($event)'\n (reasonTextChange)='onDiariseReasonTextChange($event)'\n (reasonChange)='onDiariseReasonChange($event)'\n (dateChange)='onDiariseDateChange($event)'\n (timeChange)=\"onTimeChange($event)\"\n (periodChange)=\"onDiarisePeriodOptionClick($event)\"\n [showDiariseReasonDropdown]='showDiariseReasonDropdown'\n >\n </e5core-ui-work-diarise-material>"
}] }
];
/** @nocollapse */
E5coreUiWorkDiariseComponent.ctorParameters = function () { return [
{ type: WorkItemFoundationService },
{ type: WorkMenuItemFoundationService },
{ type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
{ type: DatePipe }
]; };
E5coreUiWorkDiariseComponent.propDecorators = {
workItem$: [{ type: Input }],
diariseReasons$: [{ type: Input }],
dateChange: [{ type: Output }],
reasonTextChange: [{ type: Output }],
reasonChange: [{ type: Output }],
diariseWork: [{ type: Output }],
timeChange: [{ type: Output }],
periodOptions: [{ type: Input }],
reasons: [{ type: Input }],
diariseReasonPropertyId: [{ type: Input }],
displayedDate: [{ type: Input }],
displayedTime: [{ type: Input }],
diariseReasonPlaceHolder: [{ type: Input }],
diariseReasonTextValue: [{ type: Input }],
diariseReasonOption: [{ type: Input }],
showDiariseTime: [{ type: Input }],
showDiariseButton: [{ type: Input }],
showDiariseReasonDropdown: [{ type: Input }],
datePickerComponents: [{ type: ViewChildren, args: ['datepicker',] }]
};
return E5coreUiWorkDiariseComponent;
}());
export { E5coreUiWorkDiariseComponent };
if (false) {
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.workItem$;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseReasons$;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.dateChange;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.reasonTextChange;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.reasonChange;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseWork;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.timeChange;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.periodOptions;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.reasons;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseReasonPropertyId;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.displayedDate;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.displayedTime;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseReasonPlaceHolder;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseReasonTextValue;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseReasonOption;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.showDiariseTime;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.showDiariseButton;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.showDiariseReasonDropdown;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.workItemModel;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.workId;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diarisePeriodOption;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.diariseWorkEvent;
/**
* @type {?}
* @private
*/
E5coreUiWorkDiariseComponent.prototype._diariseDate;
/** @type {?} */
E5coreUiWorkDiariseComponent.prototype.datePickerComponents;
/**
* @type {?}
* @private
*/
E5coreUiWorkDiariseComponent.prototype.workItemFoundationService;
/**
* @type {?}
* @private
*/
E5coreUiWorkDiariseComponent.prototype.workMenuItemService;
/**
* @type {?}
* @private
*/
E5coreUiWorkDiariseComponent.prototype.locale;
/**
* @type {?}
* @private
*/
E5coreUiWorkDiariseComponent.prototype.datePipe;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZTVjb3JlLXVpLXdvcmstZGlhcmlzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2U1Y29yZS11aS13b3JrLWRpYXJpc2UvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRyxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJdkU7SUF5REksc0NBQ1kseUJBQW9ELEVBQ3BELG1CQUFrRCxFQUMvQixNQUFjLEVBQ2pDLFFBQWtCO1FBSGxCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUErQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2pDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFwQ3BCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0MsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7UUFDbkQsZUFBVSxHQUFHLElBQUks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Z0JBclNKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsdWhDQWtCa0M7aUJBQy9DOzs7O2dCQTNCdUMseUJBQXlCO2dCQUF4RCw2QkFBNkI7NkNBa0U3QixNQUFNLFNBQUMsU0FBUztnQkFqRUosUUFBUTs7OzRCQTRCeEIsS0FBSztrQ0FDTCxLQUFLOzZCQUNMLE1BQU07bUNBQ04sTUFBTTsrQkFDTixNQUFNOzhCQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FFTixLQUFLOzBCQUNMLEtBQUs7MENBQ0wsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7MkNBQ0wsS0FBSzt5Q0FDTCxLQUFLO3NDQUNMLEtBQUs7a0NBQ0wsS0FBSztvQ0FDTCxLQUFLOzRDQUNMLEtBQUs7dUNBY0wsWUFBWSxTQUFDLFlBQVk7O0lBK085QixtQ0FBQztDQUFBLEFBdFNELElBc1NDO1NBaFJZLDRCQUE0Qjs7O0lBQ3JDLGlEQUFtRDs7SUFDbkQsdURBQStEOztJQUMvRCxrREFBK0M7O0lBQy9DLHdEQUFxRDs7SUFDckQsb0RBQWlEOztJQUNqRCxtREFBNkQ7O0lBQzdELGtEQUErQzs7SUFFL0MscURBQTZDOztJQUM3QywrQ0FBdUM7O0lBQ3ZDLCtEQUF5Qzs7SUFDekMscURBQTZCOztJQUM3QixxREFBK0I7O0lBQy9CLGdFQUEwQzs7SUFDMUMsOERBQXlDOztJQUN6QywyREFBa0M7O0lBQ2xDLHVEQUFnQzs7SUFDaEMseURBQWtDOztJQUNsQyxpRUFBMEM7O0lBRTFDLHFEQUE2Qjs7SUFDN0IsOENBQWU7O0lBQ2YsMkRBQXdDOztJQUN4Qyx3REFBbUM7Ozs7O0lBQ25DLG9EQUEyQjs7SUFRM0IsNERBQ29FOzs7OztJQUVoRSxpRUFBNEQ7Ozs7O0lBQzVELDJEQUEwRDs7Ozs7SUFDMUQsOENBQXlDOzs7OztJQUN6QyxnREFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgSW5qZWN0LCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEU1Y29yZVVpV29ya0RpYXJpc2VCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnQvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaWFyaXNlT3B0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGlhcmlzZS1vcHRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRGlhcmlzZU9wdGlvbkNsaWNrRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvZGlhcmlzZS1vcHRpb24tY2xpY2stZXZlbnQnO1xuaW1wb3J0IHsgRGlhcmlzZVVuaXQgfSBmcm9tICcuLi8uLi9lbnVtcy9kaWFyaXNlLXVuaXQnO1xuaW1wb3J0IHsgRTVjb3JlVWlEYXRlcGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZTVjb3JlLXVpLWRhdGVwaWNrZXIvZTVjb3JlLXVpLWRhdGVwaWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgV29ya0l0ZW1Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrLWl0ZW0nO1xuaW1wb3J0IHsgV29ya01lbnVJdGVtRm91bmRhdGlvblNlcnZpY2UsIFdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2UgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaWFyaXNlUmVhc29uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGlhcmlzZS1yZWFzb24ubW9kZWwnO1xuaW1wb3J0IHsgRGlhcmlzZU1lbnVEYXRhTW9kZWwsIEFkZGl0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RpYXJpc2UtbWVudS1kYXRhLW1vZGVsJztcbmltcG9ydCB7IERpYXJpc2VXb3JrRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvZGlhcmlzZS13b3JrLWV2ZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlNWNvcmUtdWktd29yay1kaWFyaXNlJyxcbiAgICB0ZW1wbGF0ZTogYDxlNWNvcmUtdWktd29yay1kaWFyaXNlLW1hdGVyaWFsXG4gICAgICAgICAgICAgICBbcGVyaW9kT3B0aW9uc109J3BlcmlvZE9wdGlvbnMnXG4gICAgICAgICAgICAgICBbcmVhc29uc109J3JlYXNvbnMnXG4gICAgICAgICAgICAgICBbZGlzcGxheWVkRGF0ZV0gPSdkaXNwbGF5ZWREYXRlJ1xuICAgICAgICAgICAgICAgW2Rpc3BsYXllZFRpbWVdID0gJ2Rpc3BsYXllZFRpbWUnXG4gICAgICAgICAgICAgICBbZGlhcmlzZVJlYXNvblByb3BlcnR5SWRdID0nZGlhcmlzZVJlYXNvblByb3BlcnR5SWQnXG4gICAgICAgICAgICAgICBbZGlhcmlzZVJlYXNvblBsYWNlSG9sZGVyXSA9J2RpYXJpc2VSZWFzb25QbGFjZUhvbGRlcidcbiAgICAgICAgICAgICAgIFtkaWFyaXNlUmVhc29uVGV4dFZhbHVlXT0nZGlhcmlzZVJlYXNvblRleHRWYWx1ZSdcbiAgICAgICAgICAgICAgIFtzaG93RGlhcmlzZUJ1dHRvbl09J3Nob3dEaWFyaXNlQnV0dG9uJ1xuICAgICAgICAgICAgICAgW3Nob3dEaWFyaXNlVGltZV09J3Nob3dEaWFyaXNlVGltZSdcbiAgICAgICAgICAgICAgIChkaWFyaXNlV29yayk9J29uRGlhcmlzZUJ1dHRvbkNsaWNrKCRldmVudCknXG4gICAgICAgICAgICAgICAocmVhc29uVGV4dENoYW5nZSk9J29uRGlhcmlzZVJlYXNvblRleHRDaGFuZ2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgIChyZWFzb25DaGFuZ2UpPSdvbkRpYXJpc2VSZWFzb25DaGFuZ2UoJGV2ZW50KSdcbiAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT0nb25EaWFyaXNlRGF0ZUNoYW5nZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgKHRpbWVDaGFuZ2UpPVwib25UaW1lQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgKHBlcmlvZENoYW5nZSk9XCJvbkRpYXJpc2VQZXJpb2RPcHRpb25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtzaG93RGlhcmlzZVJlYXNvbkRyb3Bkb3duXT0nc2hvd0RpYXJpc2VSZWFzb25Ecm9wZG93bidcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgIDwvZTVjb3JlLXVpLXdvcmstZGlhcmlzZS1tYXRlcmlhbD5gXG59KVxuZXhwb3J0IGNsYXNzIEU1Y29yZVVpV29ya0RpYXJpc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHdvcmtJdGVtJDogQmVoYXZpb3JTdWJqZWN0PFdvcmtJdGVtTW9kZWw+O1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25zJDogQmVoYXZpb3JTdWJqZWN0PERpYXJpc2VSZWFzb25Nb2RlbD4gO1xuICAgIEBPdXRwdXQoKSBkYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIHJlYXNvblRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgcmVhc29uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIGRpYXJpc2VXb3JrID0gbmV3IEV2ZW50RW1pdHRlcjxEaWFyaXNlV29ya0V2ZW50PigpO1xuICAgIEBPdXRwdXQoKSB0aW1lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBASW5wdXQoKSBwZXJpb2RPcHRpb25zOiBEaWFyaXNlT3B0aW9uTW9kZWxbXTtcbiAgICBASW5wdXQoKSByZWFzb25zOiBEaWFyaXNlUmVhc29uTW9kZWxbXTtcbiAgICBASW5wdXQoKSBkaWFyaXNlUmVhc29uUHJvcGVydHlJZDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc3BsYXllZERhdGU6IERhdGU7XG4gICAgQElucHV0KCkgZGlzcGxheWVkVGltZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25QbGFjZUhvbGRlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpYXJpc2VSZWFzb25UZXh0VmFsdWU6IHN0cmluZyA7XG4gICAgQElucHV0KCkgZGlhcmlzZVJlYXNvbk9wdGlvbiA9ICcnO1xuICAgIEBJbnB1dCgpIHNob3dEaWFyaXNlVGltZSA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0RpYXJpc2VCdXR0b24gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEaWFyaXNlUmVhc29uRHJvcGRvd24gPSB0cnVlO1xuXG4gICAgd29ya0l0ZW1Nb2RlbDogV29ya0l0ZW1Nb2RlbDtcbiAgICB3b3JrSWQ6IHN0cmluZztcbiAgICBkaWFyaXNlUGVyaW9kT3B0aW9uOiBEaWFyaXNlT3B0aW9uTW9kZWw7XG4gICAgZGlhcmlzZVdvcmtFdmVudDogRGlhcmlzZVdvcmtFdmVudDtcbiAgICBwcml2YXRlIF9kaWFyaXNlRGF0ZTogRGF0ZTtcbiAgICBwdWJsaWMgZ2V0IGRpYXJpc2VEYXRlKCk6IERhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlhcmlzZURhdGU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgZGlhcmlzZURhdGUodmFsdWU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5fZGlhcmlzZURhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkcmVuKCdkYXRlcGlja2VyJylcbiAgICBwdWJsaWMgZGF0ZVBpY2tlckNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxFNWNvcmVVaURhdGVwaWNrZXJDb21wb25lbnQ+O1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2U6IFdvcmtJdGVtRm91bmRhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgd29ya01lbnVJdGVtU2VydmljZTogV29ya01lbnVJdGVtRm91bmRhdGlvblNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuXG4gICAgICAgIGlmwqAgKHR5cGVvZsKgdGhpcy53b3JrSXRlbSTCoD09PcKgJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2U1Y29yZS11aS13b3JrLWRpYXJpc2UgW3dvcmtJdGVtJF0gbXVzdCBoYXZlIGEgQmVoYXZpb3JTdWJqZWN0PFdvcmtJdGVtTW9kZWw+Jyk7XG4gICAgICAgICAgICByZXR1cm7CoDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZFRpbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSB0aGlzLmZvcm1hdEFNUE0obmV3IERhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXllZERhdGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWbCoCAodHlwZW9mwqB0aGlzLndvcmtJdGVtJMKgIT3CoG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0kLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICB3ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrSWQgPSB3LndvcmtJZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0RpYXJpc2VSZWFzb25Ecm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFzb25zID0gbmV3IEFycmF5PERpYXJpc2VSZWFzb25Nb2RlbD4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLndvcmtJZCAhPT0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkdldERpYXJpc2VSZWFzb25zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApIDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVEaWFyaXNlRGF0ZShjbGlja2VkRGlhcmlzZU9wdGlvbjogRGlhcmlzZU9wdGlvbk1vZGVsKTogdm9pZCB7XG5cbiAgICAgICAgY29uc3QgdW5pdCA9IHBhcnNlSW50KERpYXJpc2VVbml0W2NsaWNrZWREaWFyaXNlT3B0aW9uLmRpYXJpc2VVbml0XSwgMTApO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwYXJzZUludChjbGlja2VkRGlhcmlzZU9wdGlvbi52YWx1ZS50b1N0cmluZygpLCAxMCk7XG4gICAgICAgIHRoaXMuZGlhcmlzZURhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgRGlhcmlzZVVuaXQuVG9tb3Jyb3c6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldERhdGUodGhpcy5kaWFyaXNlRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5EYXlzOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFyaXNlRGF0ZS5zZXREYXRlKHRoaXMuZGlhcmlzZURhdGUuZ2V0RGF0ZSgpICsgaW5jcmVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5Nb250aHM6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldE1vbnRoKHRoaXMuZGlhcmlzZURhdGUuZ2V0TW9udGgoKSArIGluY3JlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRGlhcmlzZVVuaXQuV2Vla3M6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYXJpc2VEYXRlLnNldERhdGUodGhpcy5kaWFyaXNlRGF0ZS5nZXREYXRlKCkgKyBpbmNyZW1lbnQgKiA3KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBEaWFyaXNlVW5pdC5ZZWFyOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFyaXNlRGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRpYXJpc2VEYXRlLmdldEZ1bGxZZWFyKCkgKyBpbmNyZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGF0ZVBpY2tlckRhdGUoKSB7XG4gICAgICAgIC8vIGZvcihsZXQgZGF0ZVBpY2tlciBvZiB0aGlzLmRhdGVQaWNrZXJDb21wb25lbnRzLnRvQXJyYXkoKSl7XG4gICAgICAgIC8vICAgZGF0ZVBpY2tlci5kaXNwbGF5ZWREYXRlID0gdGhpcy5kaWFyaXNlRGF0ZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gdGhpcy5kaWFyaXNlRGF0ZTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0QU1QTSh0ZW1wRGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtaW51dGVTdHJpbmc6IHN0cmluZztcbiAgICAgICAgbGV0IGhvdXJzID0gdGVtcERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHRlbXBEYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgY29uc3QgYW1wbSA9IGhvdXJzID49IDEyID8gJ3BtJyA6ICdhbSc7XG4gICAgICAgIGhvdXJzID0gaG91cnMgJSAxMjtcbiAgICAgICAgaG91cnMgPSBob3VycyA/IGhvdXJzIDogMTI7IC8vIHRoZSBob3VyICcwJyBzaG91bGQgYmUgJzEyJ1xuICAgICAgICBtaW51dGVTdHJpbmcgPSBtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzLnRvU3RyaW5nKCkgOiBtaW51dGVzLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHN0clRpbWUgPSBob3Vycy50b1N0cmluZygpICsgJzonICsgbWludXRlU3RyaW5nICsgJyAnICsgYW1wbTtcbiAgICAgICAgcmV0dXJuIHN0clRpbWU7XG4gICAgfVxuXG4gICAgb25EaWFyaXNlUGVyaW9kT3B0aW9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVEaWFyaXNlRGF0ZSgkZXZlbnQuZGlhcmlzZU9wdGlvbik7XG4gICAgICAgIHRoaXMuc2V0RGF0ZVBpY2tlckRhdGUoKTtcbiAgICAgICAgdGhpcy5kaWFyaXNlUGVyaW9kT3B0aW9uID0gJGV2ZW50LmRpYXJpc2VPcHRpb247XG4gICAgfVxuXG4gICAgb25EaWFyaXNlQnV0dG9uQ2xpY2soJGV2ZW50OiBEaWFyaXNlV29ya0V2ZW50KSB7XG5cbiAgICAgICAgLy8gIC0tLVdvcmtpbmcgQ29kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBcdGxldCB0ZW1wID0ge1wiQXNzZXNzbWVudEV4cGxhbmF0aW9uY29kZVwiOlwiVGhpcyBpcyBhIHRlc3RcIn07XG4gICAgICAgIC8vICAgbGV0IG1lbnVEYXRhID0ge1xuICAgICAgICAvLyBcdFwiV29ya0l0ZW1DaGFuZ2VzXCI6IFdvcmtJdGVtQ2hhbmdlcyxcbiAgICAgICAgLy8gXHRcIlRhc2tDaGFuZ2VzXCI6IG51bGwsXG4gICAgICAgIC8vIFx0XCJBZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgIC8vIFx0XHRcInJlc3VsdFwiOiBcIm9rXCIsXG4gICAgICAgIC8vIFx0XHRcIkRpYXJpc2VSZWFzb25cIjogdGhpcy5kaWFyaXNlUmVhc29uT3B0aW9uLFxuICAgICAgICAvLyBcdFx0XCJEaWFyaXNlVW50aWxEYXRlXCI6IGZvcm1hdHRlZERpYXJpc2VVbnRpbERhdGUsXG4gICAgICAgIC8vIFx0XHRcIkRpYXJpc2VVbnRpbEhvdXJzXCI6IGRpYXJpc2VIb3VycyxcbiAgICAgICAgLy8gXHRcdFwiRGlhcmlzZVVudGlsTWludXRlc1wiOiBkaWFyaXNlTWludXRlc1xuICAgICAgICAvLyBcdH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAgX2xldCBkaWFyaXNlRXZlbnQgOiBXb3JrRGlhcmlzZUV2ZW50ID0ge2RpYXJpc2VPcHRpb246dGhpcy5kaWFyaXNlUGVyaW9kT3B0aW9uLFxuICAgICAgICAvLyAgZGlhcmlzZVVudGlsRGF0ZTpkaWFyaXNlVW50aWxEYXRlLCBkaWFyaXNlVW50aWxIb3VycyA6IGRpYXJpc2VIb3VycyxcbiAgICAgICAgLy8gIGRpYXJpc2VVbnRpbE1pbnV0ZXMgOiBkaWFyaXNlTWludXRlcywgZGlhcmlzZVRleHRSZWFzb24gOiB0aGlzLmRpYXJpc2VSZWFzb25UZXh0VmFsdWUsXG4gICAgICAgIC8vICBkaWFyaXNlUmVhc29uT3B0aW9uIDogdGhpcy5kaWFyaXNlUmVhc29uT3B0aW9uLCBtZW51RGF0YTptZW51RGF0YSwgc291cmNlOlwiYnV0dG9uXCJ9IDtcbiAgICAgICAgLy8gIC0tLVdvcmtpbmcgQ29kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgICAgIHRoaXMuZGlhcmlzZVdvcmtFdmVudCA9ICB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ2J1dHRvbicpO1xuICAgICAgICB0aGlzLkRpYXJpc2VXb3JrSXRlbSgpO1xuICAgIH1cblxuICAgIG9uRGlhcmlzZURhdGVDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWREYXRlID0gJGV2ZW50O1xuICAgICAgICB0aGlzLmRpYXJpc2VXb3JrRXZlbnQgPSAgdGhpcy5Db25zdHJ1Y3RXb3JrRGlhcmlzZUV2ZW50KCdkYXRlJykgO1xuICAgICAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdCh0aGlzLmRpYXJpc2VXb3JrRXZlbnQpO1xuICAgIH1cblxuICAgIG9uRGlhcmlzZVJlYXNvblRleHRDaGFuZ2UoJGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5kaWFyaXNlUmVhc29uVGV4dFZhbHVlID0gJGV2ZW50O1xuICAgICAgICB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24gPSAkZXZlbnQ7XG4gICAgICAgIHRoaXMuZGlhcmlzZVdvcmtFdmVudCA9ICB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ3JlYXNvblRleHQnKSA7XG4gICAgICAgIHRoaXMucmVhc29uVGV4dENoYW5nZS5lbWl0KHRoaXMuZGlhcmlzZVdvcmtFdmVudCk7XG4gICAgfVxuXG4gICAgb25EaWFyaXNlUmVhc29uQ2hhbmdlKCRldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbiA9ICRldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5kaWFyaXNlV29ya0V2ZW50ID0gIHRoaXMuQ29uc3RydWN0V29ya0RpYXJpc2VFdmVudCgncmVhc29uRHJvcGRvd24nKSA7XG4gICAgICAgIHRoaXMucmVhc29uQ2hhbmdlLmVtaXQodGhpcy5kaWFyaXNlV29ya0V2ZW50KTtcbiAgICB9XG5cbiAgICBvblRpbWVDaGFuZ2UodGltZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVGltZSA9IHRpbWU7XG4gICAgICAgIGNvbnN0IGRpYXJpc2VXb3JrRXZlbnQ6IERpYXJpc2VXb3JrRXZlbnQgPSB0aGlzLkNvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoJ3RpbWUnKSA7XG4gICAgICAgIHRoaXMudGltZUNoYW5nZS5lbWl0KGRpYXJpc2VXb3JrRXZlbnQpO1xuICAgIH1cblxuICAgIEdldERpYXJpc2VSZWFzb25zKCk6IHZvaWQge1xuXG4gICAgICAgIHRoaXMud29ya0l0ZW1Gb3VuZGF0aW9uU2VydmljZS5nZXREaWFyaXNlUmVhc29ucyh0aGlzLndvcmtJZCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcFJlYXNvbnM6IGFueSA9IHMubWFwKGl0ZW0gPT4gbmV3IERpYXJpc2VSZWFzb25Nb2RlbChpdGVtKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFzb25zID0gdGVtcFJlYXNvbnM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICApIDtcbiAgICB9XG5cbiAgICBwdWJsaWMgRGlhcmlzZVdvcmtJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYXJpc2VXb3JrRXZlbnQgPSAgdGhpcy5Db25zdHJ1Y3RXb3JrRGlhcmlzZUV2ZW50KCdkaWFyaXNlV29ya0l0ZW0nKTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7bWVudUl0ZW1Db2RlOiBcImRpYXJpc2VcIn07XG4gICAgICAgIHRoaXMud29ya01lbnVJdGVtU2VydmljZS5pbnZva2VNZW51SXRlbSh0aGlzLndvcmtJZCwgLTEsIHRoaXMuZGlhcmlzZVdvcmtFdmVudC5tZW51RGF0YSwgb3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhcmlzZVdvcmsuZW1pdCh0aGlzLmRpYXJpc2VXb3JrRXZlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSA7XG4gICAgfVxuXG4gICAgcHVibGljIENvbnN0cnVjdFdvcmtEaWFyaXNlRXZlbnQoZXZlbnRTb3VyY2U6IGFueSk6IERpYXJpc2VXb3JrRXZlbnQge1xuICAgICAgICBjb25zdCBXb3JrSXRlbUNoYW5nZXMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMuZGlhcmlzZVJlYXNvblByb3BlcnR5SWQgIT0gbnVsbCAmJiB0aGlzLmRpYXJpc2VSZWFzb25UZXh0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgV29ya0l0ZW1DaGFuZ2VzW3RoaXMuZGlhcmlzZVJlYXNvblByb3BlcnR5SWRdID0gdGhpcy5kaWFyaXNlUmVhc29uVGV4dFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhcmlzZVVudGlsVGltZSA9IHRoaXMuQ29udmVydFRpbWUxMnRvMjQodGhpcy5kaXNwbGF5ZWRUaW1lKS5zcGxpdCgnOicpO1xuICAgICAgICBjb25zdCBkaWFyaXNlSG91cnMgPSBwYXJzZUludChkaWFyaXNlVW50aWxUaW1lWzBdLCAxMCk7XG4gICAgICAgIGNvbnN0IGRpYXJpc2VNaW51dGVzID0gcGFyc2VJbnQoZGlhcmlzZVVudGlsVGltZVsxXSwgMTApO1xuICAgICAgICBjb25zdCBkaWFyaXNlVW50aWxEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kaXNwbGF5ZWREYXRlLCAnZGQvTU0veXl5eScpIDtcblxuICAgICAgICBjb25zdCBhZGRpdGlvbmFsUHJvcGVydGllczogQWRkaXRpb25hbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICByZXN1bHQ6ICdvaycsXG4gICAgICAgICAgICBEaWFyaXNlUmVhc29uOiB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24sXG4gICAgICAgICAgICBEaWFyaXNlVW50aWxEYXRlOiBkaWFyaXNlVW50aWxEYXRlLFxuICAgICAgICAgICAgRGlhaXNlVW50aWxIb3VyczogZGlhcmlzZUhvdXJzLFxuICAgICAgICAgICAgRGlhcmlzZVVudGlsTWludXRlczogZGlhcmlzZU1pbnV0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbWVudURhdGEgPSB7XG4gICAgICAgICAgICAnV29ya0l0ZW1DaGFuZ2VzJzogV29ya0l0ZW1DaGFuZ2VzLFxuICAgICAgICAgICAgJ1Rhc2tDaGFuZ2VzJzogbnVsbCxcbiAgICAgICAgICAgICdBZGRpdGlvbmFsUHJvcGVydGllcyc6IHtcbiAgICAgICAgICAgICAgICAncmVzdWx0JzogJ29rJyxcbiAgICAgICAgICAgICAgICAnRGlhcmlzZVJlYXNvbic6IHRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbixcbiAgICAgICAgICAgICAgICAnRGlhcmlzZVVudGlsRGF0ZSc6IGRpYXJpc2VVbnRpbERhdGUsXG4gICAgICAgICAgICAgICAgJ0RpYXJpc2VVbnRpbEhvdXJzJzogZGlhcmlzZUhvdXJzLFxuICAgICAgICAgICAgICAgICdEaWFyaXNlVW50aWxNaW51dGVzJzogZGlhcmlzZU1pbnV0ZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSA7XG5cbiAgICAgICAgLy8gbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBBZGRpdGlvbmFsUHJvcGVydGllcyA9IHtyZXN1bHQ6XCJva1wiLCBEaWFyaXNlUmVhc29uOnRoaXMuZGlhcmlzZVJlYXNvbk9wdGlvbixcbiAgICAgICAgLy8gIERpYXJpc2VVbnRpbERhdGU6Zm9ybWF0dGVkRGlhcmlzZVVudGlsRGF0ZSxEaWFpc2VVbnRpbEhvdXJzOmRpYXJpc2VIb3VycywgRGlhcmlzZVVudGlsTWludXRlczpkaWFyaXNlTWludXRlc307XG4gICAgICAgIC8vIGxldCBtZW51RGF0YTpEaWFyaXNlTWVudURhdGFNb2RlbCA9IHtXb3JrSXRlbUNoYW5nZXM6IFdvcmtJdGVtQ2hhbmdlcywgVGFza0NoYW5nZXMgOiBudWxsLFxuICAgICAgICAvLyAgQWRkaXRpb25hbFByb3BlcnRpZXM6YWRkaXRpb25hbFByb3BlcnRpZXMgfTtcblxuICAgICAgICBjb25zdCBkaWFyaXNlRXZlbnQ6IERpYXJpc2VXb3JrRXZlbnQgPSB7XG4gICAgICAgICAgICBkaWFyaXNlT3B0aW9uOiB0aGlzLmRpYXJpc2VQZXJpb2RPcHRpb24sXG4gICAgICAgICAgICBkaWFyaXNlVW50aWxEYXRlOiBkaWFyaXNlVW50aWxEYXRlLFxuICAgICAgICAgICAgZGlhcmlzZVVudGlsSG91cnMgOiBkaWFyaXNlSG91cnMsXG4gICAgICAgICAgICBkaWFyaXNlVW50aWxNaW51dGVzIDogZGlhcmlzZU1pbnV0ZXMsXG4gICAgICAgICAgICBkaWFyaXNlVGV4dFJlYXNvbiA6IHRoaXMuZGlhcmlzZVJlYXNvblRleHRWYWx1ZSxcbiAgICAgICAgICAgIGRpYXJpc2VSZWFzb25PcHRpb24gOiB0aGlzLmRpYXJpc2VSZWFzb25PcHRpb24sXG4gICAgICAgICAgICBtZW51RGF0YTogbWVudURhdGEsXG4gICAgICAgICAgICBzb3VyY2U6IGV2ZW50U291cmNlXG4gICAgICAgIH0gO1xuICAgICAgICByZXR1cm4gZGlhcmlzZUV2ZW50O1xuICAgIH1cblxuICAgIENvbnZlcnRUaW1lMTJ0bzI0KHRpbWUxMmgpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBbdGltZSwgbW9kaWZpZXJdID0gdGltZTEyaC5zcGxpdCgnICcpO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWNvbnN0XG4gICAgICAgIGxldCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoaG91cnMgPT09ICcxMicpIHtcbiAgICAgICAgICAgIGhvdXJzID0gJzAwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIudG9VcHBlckNhc2UoKSA9PT0gJ1BNJykge1xuICAgICAgICAgICAgaG91cnMgPSBwYXJzZUludChob3VycywgMTApICsgMTI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaG91cnMgKyAnOicgKyBtaW51dGVzO1xuICAgIH1cbn1cbiJdfQ==