@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
455 lines • 64.3 kB
JavaScript
import { Observable } from 'rxjs';
export class ChartDataModel {
constructor() {
this.subList = [];
this.currentData = [];
}
initLabel(indexOrArray) {
if (indexOrArray) {
this.labels = indexOrArray;
}
}
initVariable(variableOrArray) {
if (!variableOrArray) {
return [];
}
const vArray = Array.isArray(variableOrArray)
? variableOrArray
: [variableOrArray];
return vArray.map((variable) => {
return {
stream: variable.values,
label: variable.id?.toString() || '',
};
});
}
/**
* @param inputs data inputs
* @param history to show data with time
* @param valueCountLimit when history has true, this one define the limit of length
*/
defineInputStreamSingle(inputs, history, valueCountLimit, forceHistory) {
this.currentData = inputs;
return new Observable((observer) => {
let results = [];
if (inputs) {
if (!Array.isArray(inputs)) {
inputs = [inputs];
}
inputs.forEach((input) => {
if (input) {
const inputStream = input;
this.subList.push(inputStream.stream.subscribe({
next: (data) => {
if (Array.isArray(data) && !forceHistory) {
if (data.length > 1) {
history = false;
}
}
let i = 0;
if (history) {
if (Array.isArray(data)) {
const vals = JSON.parse('{"name": "' + this.currentDate() + '"}');
data.forEach((d) => {
vals[i] = d;
i++;
});
results.push(vals);
results = [
...results.map((r) => {
let newKeys = {};
let i = 0;
for (const [key, value] of Object.entries(r)) {
if (key !== 'name') {
if (typeof key === 'number') {
newKeys[key] = this.labelConfig(key, input.label);
}
else {
newKeys[key] = this.labelConfig(i, input.label);
}
}
else {
newKeys[key] = key;
}
if (!(key === 'name' && i === 0)) {
i++;
}
}
const renamedObj = this.renameKeys(r, newKeys);
const mappedObj = {};
mappedObj['name'] = renamedObj['name'];
for (const [key, v] of Object.entries(renamedObj)) {
if (key !== 'name') {
mappedObj[key] = v;
}
}
return mappedObj;
}),
];
const itemCount = results.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results.splice(0, toRemove);
}
}
else {
results.push({
name: this.currentDate(),
value: data,
extra: 0,
});
const itemCount = results.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results.splice(0, toRemove);
}
}
}
else {
if (Array.isArray(data)) {
data.map(() => {
results[i] = {
name: this.labelConfig(i, input.label),
value: data[i],
extra: i,
};
i++;
});
}
else {
results[i] = {
name: this.labelConfig(i, input.label),
value: data,
extra: i,
};
}
}
results = [...results];
observer.next(results);
},
error: (err) => {
console.log(err);
observer.next([]);
},
}));
}
});
}
});
}
defineMultiInputStream(inputs) {
this.currentData = inputs;
return new Observable((observer) => {
let results = [];
let indexInputs = 0;
inputs.forEach((input) => {
this.subList.push(input.stream.subscribe({
next: (values) => {
let indexInput = 0;
if (!Array.isArray(values)) {
values = [values];
}
values.map((value) => {
let indexOfLabel = 0;
for (const inputLabel of inputs) {
if (inputLabel.label === input.label) {
indexInputs = indexOfLabel;
}
indexOfLabel++;
}
if (!results[indexInput]) {
results[indexInput] = {
name: this.labelConfig(indexInput, 'Index '),
series: [],
};
}
results[indexInput].series[indexInputs] = {
name: inputs[indexInputs].label,
value: value,
extra: indexInput,
};
indexInput++;
});
results = [...results];
observer.next(results);
},
error: (err) => {
console.log(err);
observer.next([]);
},
}));
});
});
}
defineMultiInputStreamTable(inputs) {
this.currentData = inputs;
return new Observable((observer) => {
let results = [];
inputs.forEach((input) => {
let indexValues = 0;
this.subList.push(input.stream.subscribe({
next: (values) => {
let indexOfLabel = 0;
for (const inputLabel of inputs) {
if (inputLabel.label === input.label) {
indexValues = indexOfLabel;
}
indexOfLabel++;
}
const vals = JSON.parse('{"Name": "' + input.label + '"}');
let turn = 0;
if (!Array.isArray(values)) {
values = [values];
}
for (const val of values) {
vals[this.labelConfig(turn, 'Index')] = val;
turn++;
}
results[indexValues] = vals;
results = [...results];
observer.next(results);
},
error: (error) => {
console.log(error);
observer.next([]);
},
}));
});
});
}
defineInputStreamMulti(inputs, history, valueCountLimit) {
this.currentData = inputs;
return new Observable((observer) => {
let results = [];
if (inputs) {
if (!Array.isArray(inputs)) {
inputs = [inputs];
}
inputs.map((input) => {
const inputStream = input;
this.subList.push(inputStream.stream.subscribe({
next: (data) => {
const seriesData = [];
let indexLabel = 0;
if (history) {
if (Array.isArray(data)) {
data.forEach((element) => {
seriesData.push({
name: this.labelConfig(indexLabel, inputStream.label),
value: element,
extra: indexLabel,
});
indexLabel++;
});
results.push({
name: this.currentDate(),
series: seriesData,
});
const itemCount = results.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results.splice(0, toRemove);
}
}
else {
results.push({
name: new Date(),
series: [
{
name: inputStream.label,
value: data,
extra: 0,
},
],
});
const itemCount = results.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results.splice(0, toRemove);
}
}
}
else {
if (Array.isArray(data)) {
data.map((element) => {
seriesData.push({
name: this.labelConfig(indexLabel, inputStream.label),
value: element,
extra: indexLabel,
});
indexLabel++;
});
results = [
{
name: inputStream.label,
series: seriesData,
},
];
}
else {
results = [
{
name: inputStream.label,
series: [
{
name: this.labelConfig(indexLabel, inputStream.label),
value: data,
extra: indexLabel,
},
],
},
];
}
}
results = [...results];
observer.next(results);
},
error: (err) => {
console.log(err);
observer.next([]);
},
}));
});
}
});
}
defineInputStreamHistoryMultiLegend(inputs, valueCountLimit) {
this.currentData = inputs;
return new Observable((observer) => {
let results = [];
if (inputs) {
if (!Array.isArray(inputs)) {
inputs = [inputs];
}
results = [];
inputs.map((input) => {
if (input.stream) {
const inputStream = input;
this.subList.push(inputStream.stream.subscribe({
next: (value) => {
let indexLabel = 0;
if (Array.isArray(value)) {
value.map(() => {
if (!results[indexLabel]) {
results.push({
name: this.labelConfig(indexLabel, inputStream.label),
series: [],
});
}
else {
results[indexLabel].name = this.labelConfig(indexLabel, inputStream.label);
}
results[indexLabel].series.push({
name: new Date(),
value: value[indexLabel],
extra: indexLabel,
});
const itemCount = results[indexLabel].series.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results[indexLabel].series.splice(0, toRemove);
}
indexLabel++;
});
}
else {
if (!results[0]) {
results.push({
name: inputStream.label,
series: [],
});
}
results[0].series.push({
name: new Date(),
value: value,
extra: 0,
});
const itemCount = results[0].series.length;
if (valueCountLimit !== undefined &&
itemCount > valueCountLimit) {
const toRemove = itemCount - valueCountLimit;
results[0].series.splice(0, toRemove);
}
}
results = [...results];
observer.next(results);
},
error: (err) => {
console.log(err);
observer.next([]);
},
}));
}
});
}
});
}
labelConfig(index, labelBundle) {
let labelToReturn = '';
if (typeof this.labels === 'function') {
labelToReturn = this.labels(index);
}
else if (!this.labels) {
labelToReturn = labelBundle + (index + 1);
}
else {
if (Array.isArray(this.labels)) {
if (this.labels[index]) {
labelToReturn = this.labels[index];
}
else {
labelToReturn = labelBundle + (index + 1);
}
}
else if (!Array.isArray(this.labels) && index < 1) {
labelToReturn = this.labels;
}
else if (!Array.isArray(this.labels) && index > 0) {
labelToReturn = labelBundle + (index + 1);
}
}
return labelToReturn;
}
digit(n) {
return n > 9 ? '' + n : '0' + n;
}
renameKeys(obj, newKeys) {
const keyValues = Object.entries(obj).map(([key, value]) => {
const newKey = newKeys[key] || key;
return { [newKey]: value };
});
return Object.assign({}, ...keyValues);
}
async showDetail(event, mod, component) {
const modal = await mod.create({
component: component,
cssClass: 'modal-class',
componentProps: {
label: event.label,
value: event.value,
index: event.extra,
variable: this.currentData[0],
},
});
return await modal.present();
}
currentDate() {
return ('' +
this.digit(+new Date().getHours()) +
':' +
this.digit(+new Date().getMinutes()) +
':' +
this.digit(+new Date().getSeconds()));
}
destroyCurrentSub() {
for (const sub of this.subList) {
sub.unsubscribe();
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhcnREYXRhTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvQ2hhcnREYXRhTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUF5QmhELE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBR0UsWUFBTyxHQUFtQixFQUFFLENBQUM7UUFFN0IsZ0JBQVcsR0FBZ0QsRUFBRSxDQUFDO0lBd2dCaEUsQ0FBQztJQXRnQlEsU0FBUyxDQUFDLFlBQXNEO1FBQ3JFLElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLFlBQVksQ0FDakIsZUFHYTtRQUViLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDcEIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxlQUFlO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQzdCLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2FBQ3JDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCLENBQzVCLE1BQW1ELEVBQ25ELE9BQWdCLEVBQ2hCLGVBQXVCLEVBQ3ZCLFlBQXNCO1FBRXRCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FB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QUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUNkLEtBQThCLEVBQzlCLEdBQW9CLEVBQ3BCLFNBQW9CO1FBRXBCLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUM3QixTQUFTLEVBQUUsU0FBUztZQUNwQixRQUFRLEVBQUUsYUFBYTtZQUN2QixjQUFjLEVBQUU7Z0JBQ2QsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsUUFBUSxFQUFHLElBQUksQ0FBQyxXQUFtQixDQUFDLENBQUMsQ0FBQzthQUN2QztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLENBQ0wsRUFBRTtZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLEdBQUc7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxHQUFHO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzlCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFic3RyYWN0VmFyaWFibGUgfSBmcm9tICdAaW90aXplL3RhcC9kYXRhJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25TZWxlY3RDaGFydFZhbHVlRXZlbnQgfSBmcm9tICcuL3NoYXJlZC10eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRJbnB1dFNpbmdsZSB7XG4gIG5hbWU6IHN0cmluZyB8IERhdGU7XG4gIHZhbHVlOiBudW1iZXIgfCBzdHJpbmc7XG4gIGV4dHJhOiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENoYXJ0SW5wdXRUYWJsZSA9IHtcbiAgbmFtZTogc3RyaW5nIHwgRGF0ZTtcbn0gJiB7XG4gIFt2YWxzOiBudW1iZXJdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0SW5wdXRNdXRsaSB7XG4gIG5hbWU6IHN0cmluZyB8IERhdGU7XG4gIHNlcmllczogQ2hhcnRJbnB1dFNpbmdsZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0SW5wdXRTdHJlYW1WYXIge1xuICBzdHJlYW06IE9ic2VydmFibGU8bnVtYmVyIHwgbnVtYmVyW10+O1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ2hhcnREYXRhTW9kZWwge1xuICBsYWJlbHM6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgRnVuY3Rpb247XG5cbiAgc3ViTGlzdDogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjdXJyZW50RGF0YTogQ2hhcnRJbnB1dFN0cmVhbVZhciB8IENoYXJ0SW5wdXRTdHJlYW1WYXJbXSA9IFtdO1xuXG4gIHB1YmxpYyBpbml0TGFiZWwoaW5kZXhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IEZ1bmN0aW9uKSB7XG4gICAgaWYgKGluZGV4T3JBcnJheSkge1xuICAgICAgdGhpcy5sYWJlbHMgPSBpbmRleE9yQXJyYXk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGluaXRWYXJpYWJsZShcbiAgICB2YXJpYWJsZU9yQXJyYXk6XG4gICAgICB8IEFic3RyYWN0VmFyaWFibGU8bnVtYmVyIHwgbnVtYmVyW10+XG4gICAgICB8IEFic3RyYWN0VmFyaWFibGU8bnVtYmVyIHwgbnVtYmVyW10+W11cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IENoYXJ0SW5wdXRTdHJlYW1WYXJbXSB7XG4gICAgaWYgKCF2YXJpYWJsZU9yQXJyYXkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdkFycmF5ID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZU9yQXJyYXkpXG4gICAgICA/IHZhcmlhYmxlT3JBcnJheVxuICAgICAgOiBbdmFyaWFibGVPckFycmF5XTtcbiAgICByZXR1cm4gdkFycmF5Lm1hcCgodmFyaWFibGUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cmVhbTogdmFyaWFibGUudmFsdWVzLFxuICAgICAgICBsYWJlbDogdmFyaWFibGUuaWQ/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbnB1dHMgZGF0YSBpbnB1dHNcbiAgICogQHBhcmFtIGhpc3RvcnkgdG8gc2hvdyBkYXRhIHdpdGggdGltZVxuICAgKiBAcGFyYW0gdmFsdWVDb3VudExpbWl0IHdoZW4gaGlzdG9yeSBoYXMgdHJ1ZSwgdGhpcyBvbmUgZGVmaW5lIHRoZSBsaW1pdCBvZiBsZW5ndGhcbiAgICovXG4gIHB1YmxpYyBkZWZpbmVJbnB1dFN0cmVhbVNpbmdsZShcbiAgICBpbnB1dHM6IENoYXJ0SW5wdXRTdHJlYW1WYXIgfCBDaGFydElucHV0U3RyZWFtVmFyW10sXG4gICAgaGlzdG9yeTogYm9vbGVhbixcbiAgICB2YWx1ZUNvdW50TGltaXQ6IG51bWJlcixcbiAgICBmb3JjZUhpc3Rvcnk/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgdGhpcy5jdXJyZW50RGF0YSA9IGlucHV0cztcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgIGxldCByZXN1bHRzID0gW10gYXMgQ2hhcnRJbnB1dFNpbmdsZVtdO1xuICAgICAgaWYgKGlucHV0cykge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXRzKSkge1xuICAgICAgICAgIGlucHV0cyA9IFtpbnB1dHNdO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRzLmZvckVhY2goKGlucHV0OiBDaGFydElucHV0U3RyZWFtVmFyKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0IGFzIENoYXJ0SW5wdXRTdHJlYW1WYXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0U3RyZWFtID0gaW5wdXQgYXMgQ2hhcnRJbnB1dFN0cmVhbVZhcjtcbiAgICAgICAgICAgIHRoaXMuc3ViTGlzdC5wdXNoKFxuICAgICAgICAgICAgICBpbnB1dFN0cmVhbS5zdHJlYW0uc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgIWZvcmNlSGlzdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICBpZiAoaGlzdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHMgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3tcIm5hbWVcIjogXCInICsgdGhpcy5jdXJyZW50RGF0ZSgpICsgJ1wifSdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9yRWFjaCgoZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsc1tpXSA9IGQgYXMgbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2YWxzKTtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0cy5tYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0tleXM6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgIT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0tleXNba2V5XSA9IHRoaXMubGFiZWxDb25maWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdLZXlzW2tleV0gPSB0aGlzLmxhYmVsQ29uZmlnKGksIGlucHV0LmxhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3S2V5c1trZXldID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgPT09ICduYW1lJyAmJiBpID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5hbWVkT2JqID0gdGhpcy5yZW5hbWVLZXlzKHIsIG5ld0tleXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRPYmo6IFJlY29yZDxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHwgRGF0ZSB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA+ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZE9ialsnbmFtZSddID0gcmVuYW1lZE9ialsnbmFtZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZdIG9mIE9iamVjdC5lbnRyaWVzKHJlbmFtZWRPYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWRPYmpba2V5XSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXBwZWRPYmogYXMgYW55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ291bnQgPSByZXN1bHRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvdW50TGltaXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50ID4gdmFsdWVDb3VudExpbWl0XG4gICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b1JlbW92ZSA9IGl0ZW1Db3VudCAtIHZhbHVlQ291bnRMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuc3BsaWNlKDAsIHRvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY3VycmVudERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUNvdW50ID0gcmVzdWx0cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVDb3VudExpbWl0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudCA+IHZhbHVlQ291bnRMaW1pdFxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBpdGVtQ291bnQgLSB2YWx1ZUNvdW50TGltaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnNwbGljZSgwLCB0b1JlbW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubGFiZWxDb25maWcoaSwgaW5wdXQubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVtpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmxhYmVsQ29uZmlnKGksIGlucHV0LmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IGksXG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFsuLi5yZXN1bHRzXTtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoW10pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZGVmaW5lTXVsdGlJbnB1dFN0cmVhbShcbiAgICBpbnB1dHM6IENoYXJ0SW5wdXRTdHJlYW1WYXJbXVxuICApOiBPYnNlcnZhYmxlPENoYXJ0SW5wdXRNdXRsaVtdPiB7XG4gICAgdGhpcy5jdXJyZW50RGF0YSA9IGlucHV0cztcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgIGxldCByZXN1bHRzOiBDaGFydElucHV0TXV0bGlbXSA9IFtdO1xuICAgICAgbGV0IGluZGV4SW5wdXRzID0gMDtcbiAgICAgIGlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICB0aGlzLnN1Ykxpc3QucHVzaChcbiAgICAgICAgICBpbnB1dC5zdHJlYW0uc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGluZGV4SW5wdXQgPSAwO1xuICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4T2ZMYWJlbCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbnB1dExhYmVsIG9mIGlucHV0cykge1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0TGFiZWwubGFiZWwgPT09IGlucHV0LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4SW5wdXRzID0gaW5kZXhPZkxhYmVsO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5kZXhPZkxhYmVsKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0c1tpbmRleElucHV0XSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0c1tpbmRleElucHV0XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5sYWJlbENvbmZpZyhpbmRleElucHV0LCAnSW5kZXggJyksXG4gICAgICAgICAgICAgICAgICAgIHNlcmllczogW10sXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW2luZGV4SW5wdXRdLnNlcmllc1tpbmRleElucHV0c10gPSB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBpbnB1dHNbaW5kZXhJbnB1dHNdLmxhYmVsLFxuICAgICAgICAgI