@lenne.tech/ng-base 14.25.0 → 14.25.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/esm2020/base-components/components/model-form/model-form.component.mjs +5 -2
- package/esm2020/shared/classes/helper.class.mjs +4 -1
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +5 -2
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +3 -0
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +4 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +3 -0
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -527,7 +527,10 @@ export class ModelFormComponent {
|
|
|
527
527
|
result[props[i]] = value;
|
|
528
528
|
return result[props[i]];
|
|
529
529
|
}
|
|
530
|
-
result =
|
|
530
|
+
result =
|
|
531
|
+
result[props[i]]?.fields && Object.keys(result[props[i]]?.fields)?.length > 0
|
|
532
|
+
? result[props[i]]?.fields
|
|
533
|
+
: result[props[i]];
|
|
531
534
|
}
|
|
532
535
|
return result;
|
|
533
536
|
}
|
|
@@ -558,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.10", ngImpo
|
|
|
558
561
|
}], finished: [{
|
|
559
562
|
type: Output
|
|
560
563
|
}] } });
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFLVCxTQUFTLEVBR1Qsa0JBQWtCLEVBS2xCLFNBQVMsR0FDVixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBSW5HOzs7OztHQUtHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQWtDN0IsWUFDVSxrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCO1FBUnhCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFX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QztRQUUvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ25DLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1lBRUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O2dIQWhvQlUsa0JBQWtCO29HQUFsQixrQkFBa0IsK1RDakMvQix1aEZBaUVBOzRGRGhDYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsaUJBQWlCOzJUQUtsQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXV0aFNlcnZpY2UsXG4gIEJhc2ljVXNlcixcbiAgQ01TRmllbGRDb25maWcsXG4gIENtc1NlcnZpY2UsXG4gIEZpbGVTZXJ2aWNlLFxuICBGb3Jtc1NlcnZpY2UsXG4gIGZ1bGxFbWFpbCxcbiAgR3JhcGhRTE1ldGEsXG4gIEdyYXBoUUxNZXRhU2VydmljZSxcbiAgR3JhcGhRTFJlcXVlc3RUeXBlLFxuICBHcmFwaFFMU2VydmljZSxcbiAgR3JhcGhRTFR5cGUsXG4gIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sXG4gIFRvYXN0U2VydmljZSxcbiAgVG9hc3RUeXBlLFxufSBmcm9tICdAbGVubmUudGVjaC9uZy1iYXNlL3NoYXJlZCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vZmFiLWJ1dHRvbi9mYWItYnV0dG9uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogTW9kZWxGb3JtQ29tcG9uZW50XG4gKlxuICogSGludCBmb3IgaGFuZGxpbmcgZXh0ZW5zaW9ucyBvZiB0aGlzIGNvbXBvbmVudCBpbiBwcm9qZWN0OlxuICogSWYgeW91IHdhbnQgdG8gdXNlIGNvbXBsZXRlIGN1c3RvbSBzZXJ2aWNlcyBhbmQgbWV0aG9kcywgZXh0ZW5kIE1vZGVsRm9ybUJhc2VDb21wb25lbnQgaW5zdGVhZCBvZiBNb2RlbEZvcm1Db21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYmFzZS1tb2RlbC1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGVsLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCBudWxsO1xuICBASW5wdXQoKSBkZWxldGUgPSB0cnVlO1xuICBASW5wdXQoKSBvbmx5VXBkYXRlTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkdXBsaWNhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9nZ2luZyA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maWc6IHsgW2tleTogc3RyaW5nXTogQ01TRmllbGRDb25maWcgfTtcbiAgQElucHV0KCkgc2hvd0ZhdkJ1dHRvbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIGZpbmlzaGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIG1ldGE6IEdyYXBoUUxNZXRhO1xuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBfbG9hZGluZyA9IGZhbHNlO1xuICBmaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdyYXBoUUxUeXBlPjtcbiAgb3BlcmF0aW9uOiBzdHJpbmc7XG4gIGtleXM6IHN0cmluZ1tdID0gW107XG4gIHVzZXI6IEJhc2ljVXNlcjtcbiAgb2JqZWN0OiBhbnk7XG4gIGZhYkJ1dHRvbnM6IEJ1dHRvbltdID0gW107XG4gIGZpbGVDaGFuZ2VzOiBbeyBmaWVsZDogc3RyaW5nOyBmaWxlOiBGaWxlIHwgbnVsbCB9XTtcblxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgICB9LCA0MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2FkaW5nID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBncmFwaFFMTWV0YVNlcnZpY2U6IEdyYXBoUUxNZXRhU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoUUxTZXJ2aWNlOiBHcmFwaFFMU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1zU2VydmljZTogRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjbXNTZXJ2aWNlOiBDbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldCB1c2VyIGZvciByb2xlcyBjaGVja1xuICAgIHRoaXMudXNlciA9IEJhc2ljVXNlci5tYXAodGhpcy5hdXRoU2VydmljZS5jdXJyZW50VXNlcik7XG5cbiAgICB0aGlzLmdyYXBoUUxNZXRhU2VydmljZS5nZXRNZXRhKCkuc3Vic2NyaWJlKChtZXRhKSA9PiB7XG4gICAgICB0aGlzLm1ldGEgPSBtZXRhO1xuXG4gICAgICBpZiAodGhpcy5tb2RlbE5hbWUpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmluaXRGYWJBY3Rpb25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gUmVpbml0IGZvcm0gZm9yIG5ldyBtb2RlbCBvciBsb2FkIGFuZCBwYXRjaCBmb3JtIHdpdGggbmV3IGlkXG4gICAgaWYgKGNoYW5nZXNbJ21vZGVsTmFtZSddIHx8IGNoYW5nZXNbJ2lkJ10pIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiA+IElmIHRoZSBtb2RlbCBuYW1lIGFuZCBtZXRhZGF0YSBhcmUgcHJlc2VudCwgc2V0IHRoZSBvcGVyYXRpb24gdG8gdXBkYXRlIG9yIGNyZWF0ZSwgZ2V0IHRoZSBmaWVsZHMgZnJvbSB0aGVcbiAgICogbWV0YWRhdGEsIGNyZWF0ZSB0aGUgZm9ybSwgYW5kIGlmIHRoZSB2YWx1ZSBpcyBwcmVzZW50LCBwYXRjaCB0aGUgZm9ybSB3aXRoIHRoZSB2YWx1ZVxuICAgKi9cbiAgaW5pdChpZD86IHN0cmluZykge1xuICAgIGlmIChpZCkge1xuICAgICAgdGhpcy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pZCAmJiB0aGlzLm9ubHlVcGRhdGVNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW9kZWxOYW1lICYmIHRoaXMubWV0YSkge1xuICAgICAgdGhpcy5vcGVyYXRpb24gPSB0aGlzLmlkID8gJ3VwZGF0ZScgOiAnY3JlYXRlJztcblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5vcGVyYXRpb24nLCB0aGlzLm9wZXJhdGlvbik7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPm1ldGEuZ2V0QXJncycsXG4gICAgICAgICAgdGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLm1ldGEuZ2V0QXJncyh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICB9KS5maWVsZHM7XG4gICAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRzWydpbnB1dCddLmZpZWxkcyBhcyBhbnk7XG4gICAgICB0aGlzLmtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+aWQnLCB0aGlzLmlkKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+ZmllbGRzJywgdGhpcy5maWVsZHMpO1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5rZXlzJywgdGhpcy5rZXlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVGb3JtKHRoaXMuZmllbGRzKTtcblxuICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgdGhpcy5nZXRPYmplY3RCeUlkKHRoaXMuaWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGtleSBhcyBhbiBhcmd1bWVudCwgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBzdWItb2JqZWN0XG4gICAqL1xuICBnZXRLZXlzRnJvbVN1Yk9iamVjdChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpZWxkc1trZXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBpZCwgYW5kIHRoZW4gY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGdldCB0aGUgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGxvYWRlZFxuICAgKi9cbiAgZ2V0T2JqZWN0QnlJZChpZDogc3RyaW5nKSB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPmlkJywgaWQpO1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+cmVxdWVzdEZpZWxkcycsIHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcykpO1xuICAgIH1cblxuICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgIC5ncmFwaFFsKCdnZXQnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgIGFyZ3VtZW50czogeyBpZCB9LFxuICAgICAgICBmaWVsZHM6IHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdCh0aGlzLmZpZWxkcyksXG4gICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5RVUVSWSxcbiAgICAgIH0pXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0LT52YWx1ZScsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9iamVjdCA9IHJlc3BvbnNlO1xuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgLi4ue30sIC4uLnJlc3BvbnNlIH0pO1xuXG4gICAgICAgICAgLy8gUHJvY2VzcyBwYXRjaEZpZWxkcyBmb3IgcmVmZXJlbmNlIGlucHV0XG4gICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5maWVsZHMpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5maWVsZHMpPy50eXBlID09PSAnRGF0ZVRpbWUnIHx8XG4gICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpPy50eXBlID09PSAnRGF0ZVRpbWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldChrZXkpLnBhdGNoVmFsdWUodGhpcy5mb3JtYXREYXRlKHRoaXMubmVzdGVkT2JqZWN0KGtleSwgcmVzcG9uc2UpKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGl0IG5vdCBhbiBhcnJheVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8udHlwZSA9PT0gJ1JlZmVyZW5jZScgJiZcbiAgICAgICAgICAgICAgIXRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5maWVsZHMpPy5pc0xpc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtXG4gICAgICAgICAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICAgICAgICAgIC5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8ucGF0Y2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8ucGF0Y2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgICAgICAgXT8uaWRcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnR5cGUgPT09ICdSZWZlcmVuY2UnICYmXG4gICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5maWVsZHMpPy5pc0xpc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtXG4gICAgICAgICAgICAgICAgICAuZ2V0KGtleSlcbiAgICAgICAgICAgICAgICAgIC5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8ucGF0Y2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8ucGF0Y2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgICAgICAgXT8ubWFwKChlKSA9PiBlPy5pZClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXRPYmplY3RCeUlkLT5wYXRjaGVkRm9ybScsIHRoaXMuZm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9uIGxvYWQgb2JqZWN0JywgZXJyKTtcbiAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIEdyYXBoUUwgdHlwZSBjb2xsZWN0aW9uIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG9iamVjdHNcbiAgICpcbiAgICogQHBhcmFtIGZpZWxkcyAtIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24gLSBUaGlzIGlzIHRoZSBvYmplY3QgdGhhdCBpcyByZXR1cm5lZCBmcm9tIHRoZVxuICAgKiBpbnRyb3NwZWN0aW9uIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBvYmplY3RzLlxuICAgKi9cbiAgY3JlYXRlUmVxdWVzdE9iamVjdChmaWVsZHM6IElHcmFwaFFMVHlwZUNvbGxlY3Rpb24pIHtcbiAgICBjb25zdCByZXF1ZXN0RmllbGRzOiBhbnkgPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy5leGNsdWRlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb25maWdba2V5XT8uZXhjbHVkZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkc1trZXldPy5maWVsZHMpPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnW2tleV0/LnR5cGUgIT09ICdSZWZlcmVuY2UnKSB7XG4gICAgICAgICAgcmVxdWVzdEZpZWxkcy5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxdWVzdEZpZWxkcy5wdXNoKHsgW3RoaXMuY29uZmlnW2tleV0/LnBhdGNoRmllbGQgPyB0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkIDoga2V5XTogWydpZCddIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdWJrZXlzID0gdGhpcy5jcmVhdGVSZXF1ZXN0T2JqZWN0KGZpZWxkc1trZXldLmZpZWxkcyBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcmVzdWx0T2JqZWN0ID0ge307XG4gICAgICAgIHJlc3VsdE9iamVjdFtrZXldID0gc3Via2V5cztcbiAgICAgICAgcmVxdWVzdEZpZWxkcy5wdXNoKHJlc3VsdE9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Y3JlYXRlUmVxdWVzdE9iamVjdC0+cmVxdWVzdEZpZWxkcycsIHJlcXVlc3RGaWVsZHMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0RmllbGRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgY29sbGVjdGlvbiBvZiBHcmFwaFFMIHR5cGVzIGFuZCBjcmVhdGVzIGEgZm9ybSBncm91cCB3aXRoIGEgZm9ybSBjb250cm9sIGZvciBlYWNoIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIGZpZWxkcyAtIElHcmFwaFFMVHlwZUNvbGxlY3Rpb25cbiAgICogQHBhcmFtIHBhcmVudHNcbiAgICovXG4gIGNyZWF0ZUZvcm0oZmllbGRzOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLCBwYXJlbnRzOiBhbnlbXSA9IFtdKSB7XG4gICAgY29uc3QgZ3JvdXA6IGFueSA9IHt9O1xuICAgIGxldCBpbnRlcm5QYXJlbnRzID0gWy4uLltdLCAuLi5wYXJlbnRzXTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh2YWx1ZT8uZmllbGRzKT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGdyb3VwW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy5wcm9jZXNzVmFsaWRhdG9ycyhcbiAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGludGVyblBhcmVudHMubGVuZ3RoID8gaW50ZXJuUGFyZW50cy5qb2luKCcuJykgKyAnLicgKyBrZXkgOiBrZXksIHRoaXMuY29uZmlnKSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuUGFyZW50cy5wdXNoKGtleSk7XG4gICAgICAgIGdyb3VwW2tleV0gPSB0aGlzLmNyZWF0ZUZvcm0oZmllbGRzW2tleV0uZmllbGRzIGFzIElHcmFwaFFMVHlwZUNvbGxlY3Rpb24sIGludGVyblBhcmVudHMpO1xuICAgICAgICBpbnRlcm5QYXJlbnRzID0gW107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Y3JlYXRlRm9ybS0+Z3JvdXAnLCBncm91cCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKGdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGZvcm0gdmFsaWRhdG9ycyBmb3IgY29udHJvbFxuICAgKi9cbiAgcHJvY2Vzc1ZhbGlkYXRvcnMoY29uZmlnOiBhbnksIHZhbHVlOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIHwgR3JhcGhRTFR5cGUpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBpZiAoY29uZmlnPy5yZXF1aXJlZCAhPT0gdW5kZWZpbmVkID8gY29uZmlnPy5yZXF1aXJlZCA6IHZhbHVlLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnPy50eXBlID09PSAnRW1haWwnKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChmdWxsRW1haWwoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWc/LnR5cGUgPT09ICdQYXNzd29yZCcpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKDYpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWc/Lm1pbiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGNvbmZpZy5taW4pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWc/Lm1heCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGNvbmZpZy5tYXgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnPy52YWxpZGF0b3JzKSkge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goLi4uY29uZmlnPy52YWxpZGF0b3JzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBjYWxscyB0aGUgZ3JhcGhRTFNlcnZpY2UgdG8gZGVsZXRlIHRoZSBvYmplY3Qgd2l0aCB0aGUgaWQgb2YgdGhlIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBlZGl0ZWRcbiAgICovXG4gIGRlbGV0ZU9iamVjdCgpIHtcbiAgICB0aGlzLmNtc1NlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuaWQsIHRoaXMubW9kZWxOYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICBpZDogdGhpcy5tb2RlbE5hbWUgKyAnLXN1Y2Nlc3MnLFxuICAgICAgICB0eXBlOiBUb2FzdFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmxhYmVsICsgJyB3dXJkZSBlcmZvbGdyZWljaCBnZWzDtnNjaHQuJyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHNlbmRzIGEgR3JhcGhRTCBtdXRhdGlvbiB0byB0aGUgc2VydmVyIHRvIGR1cGxpY2F0ZSB0aGUgb2JqZWN0XG4gICAqL1xuICBhc3luYyBkdXBsaWNhdGVPYmplY3QoKSB7XG4gICAgdGhpcy5jbXNTZXJ2aWNlLmR1cGxpY2F0ZU9iamVjdCh0aGlzLmlkLCB0aGlzLm1vZGVsTmFtZSkudGhlbihhc3luYyAodmFsdWUpID0+IHtcbiAgICAgIGlmICh2YWx1ZT8uaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgICBpZDogdGhpcy5tb2RlbE5hbWUgKyAnLXN1Y2Nlc3MnLFxuICAgICAgICAgIHR5cGU6IFRvYXN0VHlwZS5TVUNDRVNTLFxuICAgICAgICAgIHRpdGxlOiAnRXJmb2xncmVpY2gnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmxhYmVsICsgJyB3dXJkZSBlcmZvbGdyZWljaCBkdXBsaXppZXJ0LicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCBjYXBpdGFsaXplcyB0aGUgZmlyc3QgbGV0dGVyLCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICogQHJldHVybnMgVGhlIGZpcnN0IGxldHRlciBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIGlzIGJlaW5nIHJldHVybmVkLlxuICAgKi9cbiAgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jbXNTZXJ2aWNlLmNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gQWJzdHJhY3RDb250cm9sIGFuZCByZXR1cm5zIGEgRm9ybUNvbnRyb2xcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkXG4gICAqIEByZXR1cm5zIEEgRm9ybUNvbnRyb2xcbiAgICovXG4gIHRyYW5zZm9ybVRvQ29udHJvbChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIHRoZSBrZXkgb2YgdGhlIGZvcm0gY29udHJvbCB0aGF0IGhhcyBjaGFuZ2VkLCBnZXRzIHRoZSB2YWx1ZSBvZiB0aGF0IGZvcm0gY29udHJvbCwgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICoga2V5IGFuZCB2YWx1ZSwgYW5kIHRoZW4gc2VuZHMgdGhhdCBvYmplY3QgdG8gdGhlIEdyYXBoUUwgc2VydmVyIHRvIHVwZGF0ZSB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGltYWdlQ2hhbmdlZChrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBkYXRhW2tleV0gPSB0aGlzLmZvcm0uZ2V0KGtleSkudmFsdWU7XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjppbWFnZUNoYW5nZWQtPmJvZHknLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAgIC5ncmFwaFFsKCd1cGRhdGUnICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpLCB7XG4gICAgICAgICAgICBhcmd1bWVudHM6IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiBkYXRhIH0sXG4gICAgICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxSZXF1ZXN0VHlwZS5NVVRBVElPTixcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjppbWFnZUNoYW5nZWQtPnN1Y2Nlc3MnLCB2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjppbWFnZUNoYW5nZWQtPmVycm9yJywgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgdGhlIGZvcm0sIHZhbGlkYXRlcyBpdCwgYW5kIHRoZW4gc2VuZHMgaXQgdG8gdGhlIEdyYXBoUUwgc2VydmVyXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBpZCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBvciB1cGRhdGVkIG9iamVjdC5cbiAgICovXG4gIHN1Ym1pdChzZWNyZXQgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXNlY3JldCkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQgJiYgIXNlY3JldCkge1xuICAgICAgICB0aGlzLmZvcm1zU2VydmljZS52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5mb3JtIGFzIGFueSk7XG4gICAgICAgIHRoaXMuZm9ybXNTZXJ2aWNlLnNjcm9sbFRvSW52YWxpZENvbnRyb2wodGhpcy5mb3JtKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyAmJiAhdGhpcy5pZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdJRCBpcyBtaXNzaW5nIGZvciB1cGRhdGUhJyk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6c3VibWl0LT5mb3JtVmFsdWUnLCB0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmVwYXJlIGRhdGEgZm9yIHNlcnZlciByZXF1ZXN0XG4gICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICBkYXRhID0gdGhpcy5wcmVwYXJlRGF0YUZvclJlcXVlc3QodGhpcy5jb25maWcsIHRoaXMuZmllbGRzLCBkYXRhKTtcblxuICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPnZhbHVlVG9HcmFwaHFsJywgZGF0YSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OnN1Ym1pdC0+ZmlsZUNoYW5nZXMnLCB0aGlzLmZpbGVDaGFuZ2VzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmlsZUNoYW5nZXM/Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGVDaGFuZ2Ugb2YgdGhpcy5maWxlQ2hhbmdlcykge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGZpbGVDaGFuZ2UuZmllbGQ7XG4gICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk7XG5cbiAgICAgICAgICBpZiAoZmlsZUNoYW5nZS5maWxlKSB7XG4gICAgICAgICAgICAvLyBVcGxvYWRcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtLmdldChrZXkpLnZhbHVlO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBmaWxlIGlzIGFuIElEIG9yIGEgYmFzZTY0IHN0cmluZ1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGlmIElEXG4gICAgICAgICAgICAgIGlmICghdGhpcy5mb3JtLmdldChrZXkpLnZhbHVlPy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5kZWxldGUoXG4gICAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8udXJsLFxuICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LmRlbGV0ZVBhdGggfHwgJy9maWxlcy8nLFxuICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLm9iamVjdClcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCBkYXRhLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS51cGxvYWQoXG4gICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnVybCxcbiAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8udXBsb2FkUGF0aCB8fCAnL2ZpbGVzL3VwbG9hZCcsXG4gICAgICAgICAgICAgICAgZmlsZUNoYW5nZS5maWxlLFxuICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpPy5jb21wcmVzc09wdGlvbnNcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAodXBsb2FkUmVzdWx0Py5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgZGF0YSwgdXBsb2FkUmVzdWx0LmlkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWc/LmltYWdlTW9kZSAmJiBjb25maWc/LmltYWdlTW9kZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgIC8vIERlbGV0ZVxuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmZpbGVTZXJ2aWNlLmRlbGV0ZShcbiAgICAgICAgICAgICAgICBjb25maWc/LnVybCxcbiAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8uZGVsZXRlUGF0aCB8fCAnL2ZpbGVzLycsXG4gICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLm9iamVjdClcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCBkYXRhLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ncmFwaFFMU2VydmljZVxuICAgICAgICAuZ3JhcGhRbCh0aGlzLm9wZXJhdGlvbiArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgIGFyZ3VtZW50czogdGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnID8geyBpZDogdGhpcy5pZCwgaW5wdXQ6IGRhdGEgfSA6IHsgaW5wdXQ6IGRhdGEgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnaWQnXSxcbiAgICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWxOYW1lICsgJy1zdWNjZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2FzdFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0VyZm9sZ3JlaWNoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFiZWwgKyAnIHd1cmRlIGVyZm9sZ3JlaWNoICcgKyAodGhpcy5vcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ2Vyc3RlbGx0LicgOiAnYWt0dWFsaXNpZXJ0LicpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIG9uICcgKyB0aGlzLm9wZXJhdGlvbiwgZXJyKTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubW9kZWxOYW1lICsgJy1zdWNjZXNzJyxcbiAgICAgICAgICAgICAgICB0eXBlOiBUb2FzdFR5cGUuRVJST1IsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICAnQmVpbSAnICtcbiAgICAgICAgICAgICAgICAgICh0aGlzLm9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnZXJzdGVsbGVuJyA6ICdha3R1YWxpc2llcmVuJykgK1xuICAgICAgICAgICAgICAgICAgJyB2b24gJyArXG4gICAgICAgICAgICAgICAgICB0aGlzLmxhYmVsICtcbiAgICAgICAgICAgICAgICAgICcgaXN0IGV0d2FzIHNjaGllZmdlbGF1ZmVuLicsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGRhdGEgZm9yIHNlcnZlclxuICAgKi9cbiAgcHJlcGFyZURhdGFGb3JSZXF1ZXN0KGNvbmZpZywgZmllbGRzQ29uZmlnLCBkYXRhKSB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgaWYgKCh0aGlzLmZpZWxkc1trZXldPy50eXBlID09PSAnRGF0ZVRpbWUnIHx8IHRoaXMuY29uZmlnW2tleV0/LnR5cGUgPT09ICdEYXRlVGltZScpICYmIHZhbHVlID09PSAnJykge1xuICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKChjb25maWdba2V5XT8ucm9sZXMgPyAhdGhpcy51c2VyLmhhc0FsbFJvbGVzKGNvbmZpZ1trZXldPy5yb2xlcykgOiBmYWxzZSkgfHwgY29uZmlnW2tleV0/LmV4Y2x1ZGUpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0aGlzLmZpZWxkc1trZXldPy50eXBlICE9PSAnVXBsb2FkJykge1xuICAgICAgICBkYXRhW2tleV0gPSBPYmplY3Qua2V5cyhkYXRhW2tleV0pXG4gICAgICAgICAgLmZpbHRlcigoaykgPT4gZGF0YVtrZXldW2tdICE9IG51bGwpXG4gICAgICAgICAgLnJlZHVjZSgoYSwgaykgPT4gKHsgLi4uYSwgW2tdOiBkYXRhW2tleV1ba10gfSksIHt9KTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YVtrZXldKT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ09iamVjdCBpcyBlbXB0eSBmcm9tIHJlc3VsdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhW2tleV0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0eXBlIGZvciBncmFwaHFsIG1ldGhvZFxuICAgICAgaWYgKGZpZWxkc0NvbmZpZ1trZXldPy50eXBlID09PSAnRmxvYXQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGRhdGFba2V5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGRzQ29uZmlnW2tleV0/LmZpZWxkcyAmJiBPYmplY3Qua2V5cyhmaWVsZHNDb25maWdba2V5XT8uZmllbGRzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IHRoaXMucHJlcGFyZURhdGFGb3JSZXF1ZXN0KGNvbmZpZ1trZXldPy5maWVsZHMsIGZpZWxkc0NvbmZpZ1trZXldPy5maWVsZHMsIGRhdGFba2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBmYWIgYnV0dG9ucyBmb3IgbW9iaWxlIGRldmljZXNcbiAgICovXG4gIGluaXRGYWJBY3Rpb25zKCkge1xuICAgIGNvbnN0IHNhdmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICB0aGlzLmZhYkJ1dHRvbnMucHVzaCh7IGljb246ICdiaS1jaGVjay1sZycsIGNvbG9yOiAndmFyKC0tYnMtc3VjY2VzcyknLCBldmVudDogc2F2ZUV2ZW50IH0pO1xuICAgIHNhdmVFdmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdWJtaXQoZmFsc2UpKTtcblxuICAgIGlmICh0aGlzLmR1cGxpY2F0ZSAmJiB0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgICAgdGhpcy5mYWJCdXR0b25zLnB1c2goeyBpY29uOiAnYmktYmFjaycsIGNvbG9yOiAndmFyKC0tYnMtaW5mbyknLCBldmVudCB9KTtcbiAgICAgIGV2ZW50LnN1YnNjcmliZSgoKSA9PiB0aGlzLmR1cGxpY2F0ZU9iamVjdCgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnICYmIHRoaXMuZGVsZXRlKSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICAgIHRoaXMuZmFiQnV0dG9ucy5wdXNoKHsgaWNvbjogJ2JpLXRyYXNoMycsIGNvbG9yOiAndmFyKC0tYnMtZGFuZ2VyKScsIGV2ZW50IH0pO1xuICAgICAgZXZlbnQuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGVsZXRlT2JqZWN0KCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZmlsZSBjaGFuZ2VzIGZvciBwcm9jZXNzXG4gICAqL1xuICBwcm9jZXNzRmlsZUNoYW5nZXMoZXZlbnQ6IHsgZmllbGQ6IHN0cmluZzsgZmlsZTogRmlsZSB8IG51bGw7IGJhc2U2NDogc3RyaW5nIHwgbnVsbCB9KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbGVDaGFuZ2VzPy5maW5kSW5kZXgoKGUpID0+IGUuZmllbGQgPT09IGV2ZW50LmZpZWxkKTtcblxuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWxlQ2hhbmdlc1tpbmRleF0gPSBldmVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUNoYW5nZXMpIHtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZXMucHVzaChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZXMgPSBbZXZlbnRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHJldHVybiBuZXdEYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE2KTtcbiAgfVxuXG4gIHByaXZhdGUgbmVzdGVkT2JqZWN0KGtleTogc3RyaW5nLCBuZXN0ZWRPYmplY3Q6IGFueSwgdmFsdWU/OiBhbnkpIHtcbiAgICBjb25zdCBwcm9wcyA9IGtleS5zcGxpdCgnLicpO1xuICAgIGxldCByZXN1bHQ6IGFueSA9IG5lc3RlZE9iamVjdDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSAmJiBpID09PSBwcm9wcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHJlc3VsdFtwcm9wc1tpXV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtwcm9wc1tpXV07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHJlc3VsdFtwcm9wc1tpXV0/LmZpZWxkcyA/IHJlc3VsdFtwcm9wc1tpXV0/LmZpZWxkcyA6IHJlc3VsdFtwcm9wc1tpXV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJmb3JtXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyZXNwb25zaXZlLWJhY2sgZC1mbGV4IGQtbGctbm9uZVwiPlxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1hcnJvdy1sZWZ0XCIgcm91dGVyTGluaz1cIi4uL1wiPjwvaT5cbiAgICA8L2Rpdj5cbiAgICA8aDIgY2xhc3M9XCJtYi0wXCI+XG4gICAgICB7eyBsYWJlbCA/IGxhYmVsIDogY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKG1vZGVsTmFtZSkgfX0ge3sgb3BlcmF0aW9uID09PSAndXBkYXRlJyA/ICdiZWFyYmVpdGVuJyA6ICdlcnN0ZWxsZW4nIH19XG4gICAgPC9oMj5cblxuICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1sZy1mbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWUtMlwiICpuZ0lmPVwiaWQgJiYgZHVwbGljYXRlICYmICFfbG9hZGluZ1wiIChjbGljayk9XCJkdXBsaWNhdGVPYmplY3QoKVwiPlxuICAgICAgICBEdXBsaXppZXJlblxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybS50b3VjaGVkICYmICFmb3JtLmRpcnR5XCJcbiAgICAgICAgKGNsaWNrKT1cInN1Ym1pdChmYWxzZSlcIlxuICAgICAgICAqbmdJZj1cIiFfbG9hZGluZ1wiXG4gICAgICA+XG4gICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGlzYWJsZWQgKm5nSWY9XCJfbG9hZGluZ1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICA8YmFzZS1tb2RlbC1mb3JtLXN1YlxuICAgICAgW2lkXT1cImlkXCJcbiAgICAgIFtmaWVsZHNdPVwiZmllbGRzXCJcbiAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgIFtmb3JtXT1cImZvcm1cIlxuICAgICAgKGltYWdlQ2hhbmdlZCk9XCJpbWFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAoZmlsZUNoYW5nZWQpPVwicHJvY2Vzc0ZpbGVDaGFuZ2VzKCRldmVudClcIlxuICAgID48L2Jhc2UtbW9kZWwtZm9ybS1zdWI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbGctZmxleCBtdC00XCIgW25nQ2xhc3NdPVwiaWQgJiYgZGVsZXRlID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtZW5kJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImlkICYmIGRlbGV0ZVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRlbGV0ZU9iamVjdCgpXCI+TMO2c2NoZW48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udG91Y2hlZCAmJiAhZm9ybS5kaXJ0eVwiXG4gICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdChmYWxzZSlcIlxuICAgICAgICAgICpuZ0lmPVwiIV9sb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwiX2xvYWRpbmdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fS4uLlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImQtYmxvY2sgZC1sZy1ub25lIHJlc3BvbnNpdmUtYWN0aW9uLWJ1dHRvblwiICpuZ0lmPVwic2hvd0ZhdkJ1dHRvblwiPlxuICA8YmFzZS1mYWItYnV0dG9uIFtidXR0b25zXT1cImZhYkJ1dHRvbnNcIj48L2Jhc2UtZmFiLWJ1dHRvbj5cbjwvZGl2PlxuIl19
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL2Jhc2UtY29tcG9uZW50cy9jb21wb25lbnRzL21vZGVsLWZvcm0vbW9kZWwtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUVMLFNBQVMsRUFLVCxTQUFTLEVBR1Qsa0JBQWtCLEVBS2xCLFNBQVMsR0FDVixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBSW5HOzs7OztHQUtHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQWtDN0IsWUFDVSxrQkFBc0MsRUFDdEMsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsV0FBd0IsRUFDeEIsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLFVBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCO1FBUnhCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFX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WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBCYXNpY1VzZXIsXG4gIENNU0ZpZWxkQ29uZmlnLFxuICBDbXNTZXJ2aWNlLFxuICBGaWxlU2VydmljZSxcbiAgRm9ybXNTZXJ2aWNlLFxuICBmdWxsRW1haWwsXG4gIEdyYXBoUUxNZXRhLFxuICBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gIEdyYXBoUUxSZXF1ZXN0VHlwZSxcbiAgR3JhcGhRTFNlcnZpY2UsXG4gIEdyYXBoUUxUeXBlLFxuICBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLFxuICBUb2FzdFNlcnZpY2UsXG4gIFRvYXN0VHlwZSxcbn0gZnJvbSAnQGxlbm5lLnRlY2gvbmctYmFzZS9zaGFyZWQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uL2ZhYi1idXR0b24vZmFiLWJ1dHRvbi5jb21wb25lbnQnO1xuXG4vKipcbiAqIE1vZGVsRm9ybUNvbXBvbmVudFxuICpcbiAqIEhpbnQgZm9yIGhhbmRsaW5nIGV4dGVuc2lvbnMgb2YgdGhpcyBjb21wb25lbnQgaW4gcHJvamVjdDpcbiAqIElmIHlvdSB3YW50IHRvIHVzZSBjb21wbGV0ZSBjdXN0b20gc2VydmljZXMgYW5kIG1ldGhvZHMsIGV4dGVuZCBNb2RlbEZvcm1CYXNlQ29tcG9uZW50IGluc3RlYWQgb2YgTW9kZWxGb3JtQ29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhc2UtbW9kZWwtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb2RlbC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbW9kZWwtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1vZGVsTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nIHwgbnVsbDtcbiAgQElucHV0KCkgZGVsZXRlID0gdHJ1ZTtcbiAgQElucHV0KCkgb25seVVwZGF0ZU1vZGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZHVwbGljYXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxvZ2dpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnOiB7IFtrZXk6IHN0cmluZ106IENNU0ZpZWxkQ29uZmlnIH07XG4gIEBJbnB1dCgpIHNob3dGYXZCdXR0b24gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBmaW5pc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBtZXRhOiBHcmFwaFFMTWV0YTtcbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgX2xvYWRpbmcgPSBmYWxzZTtcbiAgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBHcmFwaFFMVHlwZT47XG4gIG9wZXJhdGlvbjogc3RyaW5nO1xuICBrZXlzOiBzdHJpbmdbXSA9IFtdO1xuICB1c2VyOiBCYXNpY1VzZXI7XG4gIG9iamVjdDogYW55O1xuICBmYWJCdXR0b25zOiBCdXR0b25bXSA9IFtdO1xuICBmaWxlQ2hhbmdlczogW3sgZmllbGQ6IHN0cmluZzsgZmlsZTogRmlsZSB8IG51bGwgfV07XG5cbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9hZGluZyA9IHZhbHVlO1xuICAgICAgfSwgNDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9hZGluZyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZ3JhcGhRTE1ldGFTZXJ2aWNlOiBHcmFwaFFMTWV0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmFwaFFMU2VydmljZTogR3JhcGhRTFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3Jtc1NlcnZpY2U6IEZvcm1zU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY21zU2VydmljZTogQ21zU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXNlciBmb3Igcm9sZXMgY2hlY2tcbiAgICB0aGlzLnVzZXIgPSBCYXNpY1VzZXIubWFwKHRoaXMuYXV0aFNlcnZpY2UuY3VycmVudFVzZXIpO1xuXG4gICAgdGhpcy5ncmFwaFFMTWV0YVNlcnZpY2UuZ2V0TWV0YSgpLnN1YnNjcmliZSgobWV0YSkgPT4ge1xuICAgICAgdGhpcy5tZXRhID0gbWV0YTtcblxuICAgICAgaWYgKHRoaXMubW9kZWxOYW1lKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5pbml0RmFiQWN0aW9ucygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFJlaW5pdCBmb3JtIGZvciBuZXcgbW9kZWwgb3IgbG9hZCBhbmQgcGF0Y2ggZm9ybSB3aXRoIG5ldyBpZFxuICAgIGlmIChjaGFuZ2VzWydtb2RlbE5hbWUnXSB8fCBjaGFuZ2VzWydpZCddKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogPiBJZiB0aGUgbW9kZWwgbmFtZSBhbmQgbWV0YWRhdGEgYXJlIHByZXNlbnQsIHNldCB0aGUgb3BlcmF0aW9uIHRvIHVwZGF0ZSBvciBjcmVhdGUsIGdldCB0aGUgZmllbGRzIGZyb20gdGhlXG4gICAqIG1ldGFkYXRhLCBjcmVhdGUgdGhlIGZvcm0sIGFuZCBpZiB0aGUgdmFsdWUgaXMgcHJlc2VudCwgcGF0Y2ggdGhlIGZvcm0gd2l0aCB0aGUgdmFsdWVcbiAgICovXG4gIGluaXQoaWQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoaWQpIHtcbiAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaWQgJiYgdGhpcy5vbmx5VXBkYXRlTW9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vZGVsTmFtZSAmJiB0aGlzLm1ldGEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uID0gdGhpcy5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+b3BlcmF0aW9uJywgdGhpcy5vcGVyYXRpb24pO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnTW9kZWxGb3JtQ29tcG9uZW50Ojppbml0LT5tZXRhLmdldEFyZ3MnLFxuICAgICAgICAgIHRoaXMub3BlcmF0aW9uICsgdGhpcy5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodGhpcy5tb2RlbE5hbWUpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5tZXRhLmdldEFyZ3ModGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgfSkuZmllbGRzO1xuICAgICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkc1snaW5wdXQnXS5maWVsZHMgYXMgYW55O1xuICAgICAgdGhpcy5rZXlzID0gT2JqZWN0LmtleXModGhpcy5maWVsZHMpO1xuXG4gICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPmlkJywgdGhpcy5pZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmluaXQtPmZpZWxkcycsIHRoaXMuZmllbGRzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW5pdC0+a2V5cycsIHRoaXMua2V5cyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuY3JlYXRlRm9ybSh0aGlzLmZpZWxkcyk7XG5cbiAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMuZ2V0T2JqZWN0QnlJZCh0aGlzLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBrZXkgYXMgYW4gYXJndW1lbnQsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGtleXMgZnJvbSB0aGUgc3ViLW9iamVjdFxuICAgKi9cbiAgZ2V0S2V5c0Zyb21TdWJPYmplY3Qoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5maWVsZHNba2V5XSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gaWQsIGFuZCB0aGVuIGNhbGxzIHRoZSBncmFwaFFMU2VydmljZSB0byBnZXQgdGhlIG9iamVjdCBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWQgb2YgdGhlIG9iamVjdCB0byBiZSBsb2FkZWRcbiAgICovXG4gIGdldE9iamVjdEJ5SWQoaWQ6IHN0cmluZykge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpnZXRPYmplY3RCeUlkLT5pZCcsIGlkKTtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldE9iamVjdEJ5SWQtPnJlcXVlc3RGaWVsZHMnLCB0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QodGhpcy5maWVsZHMpKTtcbiAgICB9XG5cbiAgICB0aGlzLmdyYXBoUUxTZXJ2aWNlXG4gICAgICAuZ3JhcGhRbCgnZ2V0JyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICBhcmd1bWVudHM6IHsgaWQgfSxcbiAgICAgICAgZmllbGRzOiB0aGlzLmNyZWF0ZVJlcXVlc3RPYmplY3QodGhpcy5maWVsZHMpLFxuICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuUVVFUlksXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmdldC0+dmFsdWUnLCByZXNwb25zZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vYmplY3QgPSByZXNwb25zZTtcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnt9LCAuLi5yZXNwb25zZSB9KTtcblxuICAgICAgICAgIC8vIFByb2Nlc3MgcGF0Y2hGaWVsZHMgZm9yIHJlZmVyZW5jZSBpbnB1dFxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZmllbGRzKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuZmllbGRzKT8udHlwZSA9PT0gJ0RhdGVUaW1lJyB8fFxuICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8udHlwZSA9PT0gJ0RhdGVUaW1lJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoa2V5KS5wYXRjaFZhbHVlKHRoaXMuZm9ybWF0RGF0ZSh0aGlzLm5lc3RlZE9iamVjdChrZXksIHJlc3BvbnNlKSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBpdCBub3QgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnR5cGUgPT09ICdSZWZlcmVuY2UnICYmXG4gICAgICAgICAgICAgICF0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuZmllbGRzKT8uaXNMaXN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVxuICAgICAgICAgICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgICAgICAgICAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnBhdGNoRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnBhdGNoRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIF0/LmlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGFuIGFycmF5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpPy50eXBlID09PSAnUmVmZXJlbmNlJyAmJlxuICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuZmllbGRzKT8uaXNMaXN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVxuICAgICAgICAgICAgICAgICAgLmdldChrZXkpXG4gICAgICAgICAgICAgICAgICAucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VbXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnBhdGNoRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnBhdGNoRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgICAgICAgIF0/Lm1hcCgoZSkgPT4gZT8uaWQpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6Z2V0T2JqZWN0QnlJZC0+cGF0Y2hlZEZvcm0nLCB0aGlzLmZvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvbiBsb2FkIG9iamVjdCcsIGVycik7XG4gICAgICAgICAgdGhpcy5maW5pc2hlZC5lbWl0KG51bGwpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBHcmFwaFFMIHR5cGUgY29sbGVjdGlvbiBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBvYmplY3RzXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uIC0gVGhpcyBpcyB0aGUgb2JqZWN0IHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB0aGVcbiAgICogaW50cm9zcGVjdGlvbiBxdWVyeS5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncyBhbmQgb2JqZWN0cy5cbiAgICovXG4gIGNyZWF0ZVJlcXVlc3RPYmplY3QoZmllbGRzOiBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uKSB7XG4gICAgY29uc3QgcmVxdWVzdEZpZWxkczogYW55ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAodGhpcy5jb25maWdba2V5XT8uZXhjbHVkZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZmlnW2tleV0/LmV4Y2x1ZGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZHNba2V5XT8uZmllbGRzKT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ1trZXldPy50eXBlICE9PSAnUmVmZXJlbmNlJykge1xuICAgICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaChrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaCh7IFt0aGlzLmNvbmZpZ1trZXldPy5wYXRjaEZpZWxkID8gdGhpcy5jb25maWdba2V5XT8ucGF0Y2hGaWVsZCA6IGtleV06IFsnaWQnXSB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3Via2V5cyA9IHRoaXMuY3JlYXRlUmVxdWVzdE9iamVjdChmaWVsZHNba2V5XS5maWVsZHMgYXMgSUdyYXBoUUxUeXBlQ29sbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IHJlc3VsdE9iamVjdCA9IHt9O1xuICAgICAgICByZXN1bHRPYmplY3Rba2V5XSA9IHN1YmtleXM7XG4gICAgICAgIHJlcXVlc3RGaWVsZHMucHVzaChyZXN1bHRPYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmNyZWF0ZVJlcXVlc3RPYmplY3QtPnJlcXVlc3RGaWVsZHMnLCByZXF1ZXN0RmllbGRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdEZpZWxkcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGNvbGxlY3Rpb24gb2YgR3JhcGhRTCB0eXBlcyBhbmQgY3JlYXRlcyBhIGZvcm0gZ3JvdXAgd2l0aCBhIGZvcm0gY29udHJvbCBmb3IgZWFjaCB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSBmaWVsZHMgLSBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uXG4gICAqIEBwYXJhbSBwYXJlbnRzXG4gICAqL1xuICBjcmVhdGVGb3JtKGZpZWxkczogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiwgcGFyZW50czogYW55W10gPSBbXSkge1xuICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcbiAgICBsZXQgaW50ZXJuUGFyZW50cyA9IFsuLi5bXSwgLi4ucGFyZW50c107XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXModmFsdWU/LmZpZWxkcyk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm91cFtrZXldID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIHRoaXMucHJvY2Vzc1ZhbGlkYXRvcnMoXG4gICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChpbnRlcm5QYXJlbnRzLmxlbmd0aCA/IGludGVyblBhcmVudHMuam9pbignLicpICsgJy4nICsga2V5IDoga2V5LCB0aGlzLmNvbmZpZyksXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVyblBhcmVudHMucHVzaChrZXkpO1xuICAgICAgICBncm91cFtrZXldID0gdGhpcy5jcmVhdGVGb3JtKGZpZWxkc1trZXldLmZpZWxkcyBhcyBJR3JhcGhRTFR5cGVDb2xsZWN0aW9uLCBpbnRlcm5QYXJlbnRzKTtcbiAgICAgICAgaW50ZXJuUGFyZW50cyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OmNyZWF0ZUZvcm0tPmdyb3VwJywgZ3JvdXApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVW50eXBlZEZvcm1Hcm91cChncm91cCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBmb3JtIHZhbGlkYXRvcnMgZm9yIGNvbnRyb2xcbiAgICovXG4gIHByb2Nlc3NWYWxpZGF0b3JzKGNvbmZpZzogYW55LCB2YWx1ZTogSUdyYXBoUUxUeXBlQ29sbGVjdGlvbiB8IEdyYXBoUUxUeXBlKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgaWYgKGNvbmZpZz8ucmVxdWlyZWQgIT09IHVuZGVmaW5lZCA/IGNvbmZpZz8ucmVxdWlyZWQgOiB2YWx1ZS5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZz8udHlwZSA9PT0gJ0VtYWlsJykge1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goZnVsbEVtYWlsKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnPy50eXBlID09PSAnUGFzc3dvcmQnKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnPy5taW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbihjb25maWcubWluKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnPy5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heChjb25maWcubWF4KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZz8udmFsaWRhdG9ycykpIHtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLmNvbmZpZz8udmFsaWRhdG9ycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogSXQgY2FsbHMgdGhlIGdyYXBoUUxTZXJ2aWNlIHRvIGRlbGV0ZSB0aGUgb2JqZWN0IHdpdGggdGhlIGlkIG9mIHRoZSBvYmplY3QgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkXG4gICAqL1xuICBkZWxldGVPYmplY3QoKSB7XG4gICAgdGhpcy5jbXNTZXJ2aWNlLmRlbGV0ZU9iamVjdCh0aGlzLmlkLCB0aGlzLm1vZGVsTmFtZSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgaWQ6IHRoaXMubW9kZWxOYW1lICsgJy1zdWNjZXNzJyxcbiAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgIHRpdGxlOiAnRXJmb2xncmVpY2gnLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5sYWJlbCArICcgd3VyZGUgZXJmb2xncmVpY2ggZ2Vsw7ZzY2h0LicsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBzZW5kcyBhIEdyYXBoUUwgbXV0YXRpb24gdG8gdGhlIHNlcnZlciB0byBkdXBsaWNhdGUgdGhlIG9iamVjdFxuICAgKi9cbiAgYXN5bmMgZHVwbGljYXRlT2JqZWN0KCkge1xuICAgIHRoaXMuY21zU2VydmljZS5kdXBsaWNhdGVPYmplY3QodGhpcy5pZCwgdGhpcy5tb2RlbE5hbWUpLnRoZW4oYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWU/LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgaWQ6IHRoaXMubW9kZWxOYW1lICsgJy1zdWNjZXNzJyxcbiAgICAgICAgICB0eXBlOiBUb2FzdFR5cGUuU1VDQ0VTUyxcbiAgICAgICAgICB0aXRsZTogJ0VyZm9sZ3JlaWNoJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5sYWJlbCArICcgd3VyZGUgZXJmb2xncmVpY2ggZHVwbGl6aWVydC4nLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmluaXNoZWQuZW1pdChudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZywgY2FwaXRhbGl6ZXMgdGhlIGZpcnN0IGxldHRlciwgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIHN0cmluZ1xuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gICAqIEByZXR1cm5zIFRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIHN0cmluZyBpcyBiZWluZyBjYXBpdGFsaXplZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBpcyBiZWluZyByZXR1cm5lZC5cbiAgICovXG4gIGNhcGl0YWxpemVGaXJzdExldHRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY21zU2VydmljZS5jYXBpdGFsaXplRmlyc3RMZXR0ZXIodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGFuIEFic3RyYWN0Q29udHJvbCBhbmQgcmV0dXJucyBhIEZvcm1Db250cm9sXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sIC0gQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBBIEZvcm1Db250cm9sXG4gICAqL1xuICB0cmFuc2Zvcm1Ub0NvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyB0aGUga2V5IG9mIHRoZSBmb3JtIGNvbnRyb2wgdGhhdCBoYXMgY2hhbmdlZCwgZ2V0cyB0aGUgdmFsdWUgb2YgdGhhdCBmb3JtIGNvbnRyb2wsIGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlXG4gICAqIGtleSBhbmQgdmFsdWUsIGFuZCB0aGVuIHNlbmRzIHRoYXQgb2JqZWN0IHRvIHRoZSBHcmFwaFFMIHNlcnZlciB0byB1cGRhdGUgdGhlIGRhdGFiYXNlXG4gICAqL1xuICBpbWFnZUNoYW5nZWQoa2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRhID0ge307XG4gICAgZGF0YVtrZXldID0gdGhpcy5mb3JtLmdldChrZXkpLnZhbHVlO1xuXG4gICAgaWYgKHRoaXMubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW1hZ2VDaGFuZ2VkLT5ib2R5JywgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgICAuZ3JhcGhRbCgndXBkYXRlJyArIHRoaXMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRoaXMubW9kZWxOYW1lKSwge1xuICAgICAgICAgICAgYXJndW1lbnRzOiB7IGlkOiB0aGlzLmlkLCBpbnB1dDogZGF0YSB9LFxuICAgICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgICB0eXBlOiBHcmFwaFFMUmVxdWVzdFR5cGUuTVVUQVRJT04sXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW1hZ2VDaGFuZ2VkLT5zdWNjZXNzJywgdmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6aW1hZ2VDaGFuZ2VkLT5lcnJvcicsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIHRoZSBmb3JtLCB2YWxpZGF0ZXMgaXQsIGFuZCB0aGVuIHNlbmRzIGl0IHRvIHRoZSBHcmFwaFFMIHNlcnZlclxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgaWQgb2YgdGhlIG5ld2x5IGNyZWF0ZWQgb3IgdXBkYXRlZCBvYmplY3QuXG4gICAqL1xuICBzdWJtaXQoc2VjcmV0ID0gZmFsc2UpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCFzZWNyZXQpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkICYmICFzZWNyZXQpIHtcbiAgICAgICAgdGhpcy5mb3Jtc1NlcnZpY2UudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZm9ybSBhcyBhbnkpO1xuICAgICAgICB0aGlzLmZvcm1zU2VydmljZS5zY3JvbGxUb0ludmFsaWRDb250cm9sKHRoaXMuZm9ybSk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgJiYgIXRoaXMuaWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSUQgaXMgbWlzc2luZyBmb3IgdXBkYXRlIScpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdNb2RlbEZvcm1Db21wb25lbnQ6OnN1Ym1pdC0+Zm9ybVZhbHVlJywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJlcGFyZSBkYXRhIGZvciBzZXJ2ZXIgcmVxdWVzdFxuICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgZGF0YSA9IHRoaXMucHJlcGFyZURhdGFGb3JSZXF1ZXN0KHRoaXMuY29uZmlnLCB0aGlzLmZpZWxkcywgZGF0YSk7XG5cbiAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ01vZGVsRm9ybUNvbXBvbmVudDo6c3VibWl0LT52YWx1ZVRvR3JhcGhxbCcsIGRhdGEpO1xuICAgICAgICBjb25zb2xlLmxvZygnTW9kZWxGb3JtQ29tcG9uZW50OjpzdWJtaXQtPmZpbGVDaGFuZ2VzJywgdGhpcy5maWxlQ2hhbmdlcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbGVDaGFuZ2VzPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWxlQ2hhbmdlIG9mIHRoaXMuZmlsZUNoYW5nZXMpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBmaWxlQ2hhbmdlLmZpZWxkO1xuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpO1xuXG4gICAgICAgICAgaWYgKGZpbGVDaGFuZ2UuZmlsZSkge1xuICAgICAgICAgICAgLy8gVXBsb2FkXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybS5nZXQoa2V5KS52YWx1ZTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBpcyBhbiBJRCBvciBhIGJhc2U2NCBzdHJpbmdcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIC8vIERlbGV0ZSBpZiBJRFxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9ybS5nZXQoa2V5KS52YWx1ZT8uc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UuZGVsZXRlKFxuICAgICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnVybCxcbiAgICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpPy5kZWxldGVQYXRoIHx8ICcvZmlsZXMvJyxcbiAgICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5vYmplY3QpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChkZWxldGVSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgZGF0YSwgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UudXBsb2FkKFxuICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5jb25maWcpPy51cmwsXG4gICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LnVwbG9hZFBhdGggfHwgJy9maWxlcy91cGxvYWQnLFxuICAgICAgICAgICAgICAgIGZpbGVDaGFuZ2UuZmlsZSxcbiAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIHRoaXMuY29uZmlnKT8uY29tcHJlc3NPcHRpb25zXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHVwbG9hZFJlc3VsdD8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5lc3RlZE9iamVjdChrZXksIGRhdGEsIHVwbG9hZFJlc3VsdC5pZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnPy5pbWFnZU1vZGUgJiYgY29uZmlnPy5pbWFnZU1vZGUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAvLyBEZWxldGVcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5kZWxldGUoXG4gICAgICAgICAgICAgICAgY29uZmlnPy51cmwsXG4gICAgICAgICAgICAgICAgdGhpcy5uZXN0ZWRPYmplY3Qoa2V5LCB0aGlzLmNvbmZpZyk/LmRlbGV0ZVBhdGggfHwgJy9maWxlcy8nLFxuICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgdGhpcy5vYmplY3QpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubmVzdGVkT2JqZWN0KGtleSwgZGF0YSwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JhcGhRTFNlcnZpY2VcbiAgICAgICAgLmdyYXBoUWwodGhpcy5vcGVyYXRpb24gKyB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih0aGlzLm1vZGVsTmFtZSksIHtcbiAgICAgICAgICBhcmd1bWVudHM6IHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyA/IHsgaWQ6IHRoaXMuaWQsIGlucHV0OiBkYXRhIH0gOiB7IGlucHV0OiBkYXRhIH0sXG4gICAgICAgICAgZmllbGRzOiBbJ2lkJ10sXG4gICAgICAgICAgdHlwZTogR3JhcGhRTFJlcXVlc3RUeXBlLk1VVEFUSU9OLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmZpbmlzaGVkLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLlNVQ0NFU1MsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdFcmZvbGdyZWljaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICB0aGlzLmxhYmVsICsgJyB3dXJkZSBlcmZvbGdyZWljaCAnICsgKHRoaXMub3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdlcnN0ZWxsdC4nIDogJ2FrdHVhbGlzaWVydC4nKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghc2VjcmV0KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCBvbiAnICsgdGhpcy5vcGVyYXRpb24sIGVycik7XG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLm1vZGVsTmFtZSArICctc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgdHlwZTogVG9hc3RUeXBlLkVSUk9SLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICAgICAgJ0JlaW0gJyArXG4gICAgICAgICAgICAgICAgICAodGhpcy5vcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ2Vyc3RlbGxlbicgOiAnYWt0dWFsaXNpZXJlbicpICtcbiAgICAgICAgICAgICAgICAgICcgdm9uICcgK1xuICAgICAgICAgICAgICAgICAgdGhpcy5sYWJlbCArXG4gICAgICAgICAgICAgICAgICAnIGlzdCBldHdhcyBzY2hpZWZnZWxhdWZlbi4nLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBkYXRhIGZvciBzZXJ2ZXJcbiAgICovXG4gIHByZXBhcmVEYXRhRm9yUmVxdWVzdChjb25maWcsIGZpZWxkc0NvbmZpZywgZGF0YSkge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmICgodGhpcy5maWVsZHNba2V5XT8udHlwZSA9PT0gJ0RhdGVUaW1lJyB8fCB0aGlzLmNvbmZpZ1trZXldPy50eXBlID09PSAnRGF0ZVRpbWUnKSAmJiB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgZGF0YVtrZXldID0gbnVsbDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY29uZmlnW2tleV0/LnJvbGVzID8gIXRoaXMudXNlci5oYXNBbGxSb2xlcyhjb25maWdba2V5XT8ucm9sZXMpIDogZmFsc2UpIHx8IGNvbmZpZ1trZXldPy5leGNsdWRlKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2tleV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdGhpcy5maWVsZHNba2V5XT8udHlwZSAhPT0gJ1VwbG9hZCcpIHtcbiAgICAgICAgZGF0YVtrZXldID0gT2JqZWN0LmtleXMoZGF0YVtrZXldKVxuICAgICAgICAgIC5maWx0ZXIoKGspID0+IGRhdGFba2V5XVtrXSAhPSBudWxsKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGspID0+ICh7IC4uLmEsIFtrXTogZGF0YVtrZXldW2tdIH0pLCB7fSk7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGFba2V5XSk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0aGlzLmxvZ2dpbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdPYmplY3QgaXMgZW1wdHkgZnJvbSByZXN1bHQnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YVtrZXldID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgdHlwZSBmb3IgZ3JhcGhxbCBtZXRob2RcbiAgICAgIGlmIChmaWVsZHNDb25maWdba2V5XT8udHlwZSA9PT0gJ0Zsb2F0Jykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFba2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkc0NvbmZpZ1trZXldPy5maWVsZHMgJiYgT2JqZWN0LmtleXMoZmllbGRzQ29uZmlnW2tleV0/LmZpZWxkcykubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXRhW2tleV0gPSB0aGlzLnByZXBhcmVEYXRhRm9yUmVxdWVzdChjb25maWdba2V5XT8uZmllbGRzLCBmaWVsZHNDb25maWdba2V5XT8uZmllbGRzLCBkYXRhW2tleV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgZmFiIGJ1dHRvbnMgZm9yIG1vYmlsZSBkZXZpY2VzXG4gICAqL1xuICBpbml0RmFiQWN0aW9ucygpIHtcbiAgICBjb25zdCBzYXZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgdGhpcy5mYWJCdXR0b25zLnB1c2goeyBpY29uOiAnYmktY2hlY2stbGcnLCBjb2xvcjogJ3ZhcigtLWJzLXN1Y2Nlc3MpJywgZXZlbnQ6IHNhdmVFdmVudCB9KTtcbiAgICBzYXZlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3VibWl0KGZhbHNlKSk7XG5cbiAgICBpZiAodGhpcy5kdXBsaWNhdGUgJiYgdGhpcy5vcGVyYXRpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICAgIHRoaXMuZmFiQnV0dG9ucy5wdXNoKHsgaWNvbjogJ2JpLWJhY2snLCBjb2xvcjogJ3ZhcigtLWJzLWluZm8pJywgZXZlbnQgfSk7XG4gICAgICBldmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kdXBsaWNhdGVPYmplY3QoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3BlcmF0aW9uID09PSAndXBkYXRlJyAmJiB0aGlzLmRlbGV0ZSkge1xuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgICB0aGlzLmZhYkJ1dHRvbnMucHVzaCh7IGljb246ICdiaS10cmFzaDMnLCBjb2xvcjogJ3ZhcigtLWJzLWRhbmdlciknLCBldmVudCB9KTtcbiAgICAgIGV2ZW50LnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlbGV0ZU9iamVjdCgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGZpbGUgY2hhbmdlcyBmb3IgcHJvY2Vzc1xuICAgKi9cbiAgcHJvY2Vzc0ZpbGVDaGFuZ2VzKGV2ZW50OiB7IGZpZWxkOiBzdHJpbmc7IGZpbGU6IEZpbGUgfCBudWxsOyBiYXNlNjQ6IHN0cmluZyB8IG51bGwgfSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWxlQ2hhbmdlcz8uZmluZEluZGV4KChlKSA9PiBlLmZpZWxkID09PSBldmVudC5maWVsZCk7XG5cbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsZUNoYW5nZXNbaW5kZXhdID0gZXZlbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmZpbGVDaGFuZ2VzLnB1c2goZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbGVDaGFuZ2VzID0gW2V2ZW50XTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICByZXR1cm4gbmV3RGF0ZS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxNik7XG4gIH1cblxuICBwcml2YXRlIG5lc3RlZE9iamVjdChrZXk6IHN0cmluZywgbmVzdGVkT2JqZWN0OiBhbnksIHZhbHVlPzogYW55KSB7XG4gICAgY29uc3QgcHJvcHMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICBsZXQgcmVzdWx0OiBhbnkgPSBuZXN0ZWRPYmplY3Q7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWUgJiYgaSA9PT0gcHJvcHMubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXN1bHRbcHJvcHNbaV1dID0gdmFsdWU7XG4gICAgICAgIHJldHVybiByZXN1bHRbcHJvcHNbaV1dO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPVxuICAgICAgICByZXN1bHRbcHJvcHNbaV1dPy5maWVsZHMgJiYgT2JqZWN0LmtleXMocmVzdWx0W3Byb3BzW2ldXT8uZmllbGRzKT8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gcmVzdWx0W3Byb3BzW2ldXT8uZmllbGRzXG4gICAgICAgICAgOiByZXN1bHRbcHJvcHNbaV1dO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiZm9ybVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVzcG9uc2l2ZS1iYWNrIGQtZmxleCBkLWxnLW5vbmVcIj5cbiAgICAgIDxpIGNsYXNzPVwiYmkgYmktYXJyb3ctbGVmdFwiIHJvdXRlckxpbms9XCIuLi9cIj48L2k+XG4gICAgPC9kaXY+XG4gICAgPGgyIGNsYXNzPVwibWItMFwiPlxuICAgICAge3sgbGFiZWwgPyBsYWJlbCA6IGNhcGl0YWxpemVGaXJzdExldHRlcihtb2RlbE5hbWUpIH19IHt7IG9wZXJhdGlvbiA9PT0gJ3VwZGF0ZScgPyAnYmVhcmJlaXRlbicgOiAnZXJzdGVsbGVuJyB9fVxuICAgIDwvaDI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbGctZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IG1lLTJcIiAqbmdJZj1cImlkICYmIGR1cGxpY2F0ZSAmJiAhX2xvYWRpbmdcIiAoY2xpY2spPVwiZHVwbGljYXRlT2JqZWN0KClcIj5cbiAgICAgICAgRHVwbGl6aWVyZW5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udG91Y2hlZCAmJiAhZm9ybS5kaXJ0eVwiXG4gICAgICAgIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCJcbiAgICAgICAgKm5nSWY9XCIhX2xvYWRpbmdcIlxuICAgICAgPlxuICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRpc2FibGVkICpuZ0lmPVwiX2xvYWRpbmdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgIHt7IG9wZXJhdGlvbiA9PT0gJ2NyZWF0ZScgPyAnRXJzdGVsbGVuJyA6ICdTcGVpY2hlcm4nIH19Li4uXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPGJhc2UtbW9kZWwtZm9ybS1zdWJcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBbZmllbGRzXT1cImZpZWxkc1wiXG4gICAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgICBbZm9ybV09XCJmb3JtXCJcbiAgICAgIChpbWFnZUNoYW5nZWQpPVwiaW1hZ2VDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGZpbGVDaGFuZ2VkKT1cInByb2Nlc3NGaWxlQ2hhbmdlcygkZXZlbnQpXCJcbiAgICA+PC9iYXNlLW1vZGVsLWZvcm0tc3ViPlxuXG4gICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLWxnLWZsZXggbXQtNFwiIFtuZ0NsYXNzXT1cImlkICYmIGRlbGV0ZSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWVuZCdcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJpZCAmJiBkZWxldGVcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVPYmplY3QoKVwiPkzDtnNjaGVuPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFmb3JtLnRvdWNoZWQgJiYgIWZvcm0uZGlydHlcIlxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXQoZmFsc2UpXCJcbiAgICAgICAgICAqbmdJZj1cIiFfbG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBvcGVyYXRpb24gPT09ICdjcmVhdGUnID8gJ0Vyc3RlbGxlbicgOiAnU3BlaWNoZXJuJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBkaXNhYmxlZCAqbmdJZj1cIl9sb2FkaW5nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAge3sgb3BlcmF0aW9uID09PSAnY3JlYXRlJyA/ICdFcnN0ZWxsZW4nIDogJ1NwZWljaGVybicgfX0uLi5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJkLWJsb2NrIGQtbGctbm9uZSByZXNwb25zaXZlLWFjdGlvbi1idXR0b25cIiAqbmdJZj1cInNob3dGYXZCdXR0b25cIj5cbiAgPGJhc2UtZmFiLWJ1dHRvbiBbYnV0dG9uc109XCJmYWJCdXR0b25zXCI+PC9iYXNlLWZhYi1idXR0b24+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -48,6 +48,9 @@ export class Helper {
|
|
|
48
48
|
str = str.replace('ö', 'oe');
|
|
49
49
|
str = str.replace('ü', 'ue');
|
|
50
50
|
str = str.replace('ß', 'ss');
|
|
51
|
+
// Remove double characters
|
|
52
|
+
str = str.replace('---', '-');
|
|
53
|
+
str = str.replace('--', '-');
|
|
51
54
|
// Remove other special chars
|
|
52
55
|
str = str.replace(/[^a-zA-Z0-9-]/g, '');
|
|
53
56
|
}
|
|
@@ -301,4 +304,4 @@ export class Helper {
|
|
|
301
304
|
return `data:image/*;base64, ${window.btoa(binary)}`;
|
|
302
305
|
}
|
|
303
306
|
}
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvY2xhc3Nlcy9oZWxwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQTZCLE9BQVksRUFBRSxNQUE4QjtRQUNwRixPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQy9CLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDaEMsT0FBTyxLQUFLLENBQUM7eUJBQ2Q7cUJBQ0Y7aUJBQ0Y7cUJBQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO29CQUNqQyxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQVUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVEsRUFBRSxVQUFrQyxFQUFFO1FBQzdELFNBQVM7UUFDVCxNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLFlBQVk7UUFDWixHQUFHLEdB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aEYsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNO1FBQy9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLHdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhbmRhcmQgfSBmcm9tICcuL3N0YW5kYXJkLmNsYXNzJztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEhlbHBlciB7XG4gIC8qKlxuICAgKiBTaW1wbGUgZmlsdGVyIGZ1bmN0aW9uIGZvciBwbGFpbiBvYmplY3RzXG4gICAqL1xuICBzdGF0aWMgZmlsdGVyPFQgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9PihvYmplY3RzOiBUW10sIGZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IFRbXSB7XG4gICAgcmV0dXJuIChvYmplY3RzPy5maWx0ZXIoKGVsZW1lbnQpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudFtrZXldKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBlbGVtZW50W2tleV0pIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtrZXldLmluY2x1ZHModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFtrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSkgfHwgW10pIGFzIGFueVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSB1cmwvdXJpIGNvbmZvcm0gc3RyaW5nXG4gICAqIE9ubHk6XG4gICAqIC0gbG93ZXIgY2FzZVxuICAgKiAtIGNoYXJzLCBudW1iZXJzIGFuZCBoeXBoZW5zXG4gICAqL1xuICBzdGF0aWMgdXJsU3RyaW5nKHN0cjogYW55LCBvcHRpb25zOiB7IGFsbG93QWxsPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmcge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFsbG93QWxsOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIFRvIHN0cmluZ1xuICAgIHN0ciA9IHN0ciArICcnO1xuXG4gICAgLy8gVHJpbVxuICAgIHN0ciA9IHN0ci50cmltKCk7XG5cbiAgICAvLyBMb3dlciBjYXNlXG4gICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIWNvbmZpZy5hbGxvd0FsbCkge1xuICAgICAgLy8gUmVwbGFjZSBzcGFjZXNcbiAgICAgIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBSZXBsYWNlIHNvbWUgc3BlY2lhbCBjaGFyc1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ8OkJywgJ2FlJyk7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnw7YnLCAnb2UnKTtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCfDvCcsICd1ZScpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ8OfJywgJ3NzJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBvdGhlciBzcGVjaWFsIGNoYXJzXG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktXS9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHVybCBjb25mb3JtIHN0cmluZ1xuICAgIHJldHVybiBlbmNvZGVVUkkoc3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgbWFwIGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hcDxUID0geyBba2V5OiBzdHJpbmddOiBhbnkgfT4oXG4gICAgc291cmNlOiBQYXJ0aWFsPFQ+IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgICB0YXJnZXQ6IFQsXG4gICAgb3B0aW9uczogeyBmdW5jQWxsb3dlZD86IGJvb2xlYW47IGRhdGVTdHJpbmdUb0RhdGU/OiBib29sZWFuIHwgc3RyaW5nW10gfSA9IHt9XG4gICk6IFQge1xuICAgIC8vIFNldCBjb25maWdcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBmdW5jQWxsb3dlZDogZmFsc2UsXG4gICAgICBkYXRlU3RyaW5nVG9EYXRlOiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgc291cmNlXG4gICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGFyZ2V0KSkge1xuICAgICAgaWYgKHNvdXJjZVtrZXldICE9PSB1bmRlZmluZWQgJiYgKGNvbmZpZy5mdW5jQWxsb3dlZCB8fCB0eXBlb2YgKHNvdXJjZVtrZXldICE9PSAnZnVuY3Rpb24nKSkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2Vba2V5XSA9PT0gJ3N0cmluZycgJiYgY29uZmlnLmRhdGVTdHJpbmdUb0RhdGUpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25maWcuZGF0ZVN0cmluZ1RvRGF0ZSkpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcuZGF0ZVN0cmluZ1RvRGF0ZS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgIHRhcmdldFtrZXldID0gSGVscGVyLnBhcnNlRGF0ZShzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gSGVscGVyLnBhcnNlRGF0ZShzb3VyY2Vba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGFyZ2V0XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgT2JqZWN0IG9yIE9iamVjdHMgb2Ygc3BlY2lmaWVkIHR5cGUgd2l0aCBzcGVjaWZpZWQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYXBzPFQgZXh0ZW5kcyBTdGFuZGFyZD4oXG4gICAgZGF0YTogUGFydGlhbDxUPiB8IFBhcnRpYWw8VD5bXSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9W10sXG4gICAgdGFyZ2V0Q2xhc3M6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFRcbiAgKTogVFtdIHtcbiAgICAvLyBDaGVjayBkYXRhXG4gICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZGF0YSA9IFtkYXRhXTtcbiAgICB9XG5cbiAgICAvLyBNYXBcbiAgICByZXR1cm4gKGRhdGEgYXMgYW55KS5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgcmV0dXJuICh0YXJnZXRDbGFzcyBhcyBhbnkpLm1hcChpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGxhaW4gcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFBsYWluUGFyYW1ldGVyKHBhcmFtZXRlcjogc3RyaW5nKSB7XG4gICAgaWYgKCFwYXJhbWV0ZXIpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbWV0ZXI/LnNwbGl0KCc/Jyk/LnNoaWZ0KCk/LnNwbGl0KCcjJyk/LnNoaWZ0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IElEIG9mIGFuIHVybCBwYXJhbWV0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGFyYW1ldGVySWQocGFyYW1ldGVyOiBzdHJpbmcpIHtcbiAgICBpZiAoIXBhcmFtZXRlcikge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlcjtcbiAgICB9XG4gICAgcmV0dXJuIEhlbHBlci5nZXRQbGFpblBhcmFtZXRlcihwYXJhbWV0ZXIpPy5zcGxpdCgnLScpLnBvcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRlbGF5KG1zOiBudW1iZXIpIHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWVwIGZyZWV6ZVxuICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2ZyZWV6ZSNXaGF0X2lzX3NoYWxsb3dfZnJlZXplXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRlZXBGcmVlemUob2JqZWN0OiBhbnksIHByZXBhcmVkT2JqZWN0cyA9IFtdKSB7XG4gICAgLy8gUHJldmVudCBpbmZpbml0IHJlZ3Jlc3NcbiAgICBpZiAocHJlcGFyZWRPYmplY3RzLmluY2x1ZGVzKG9iamVjdCBhcyBuZXZlcikpIHtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICAgIHByZXBhcmVkT2JqZWN0cy5wdXNoKG9iamVjdCBhcyBuZXZlcik7XG5cbiAgICAvLyBSZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZXMgZGVmaW5lZCBvbiBvYmplY3RcbiAgICBjb25zdCBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG4gICAgLy8gRnJlZXplIHByb3BlcnRpZXMgYmVmb3JlIGZyZWV6aW5nIHNlbGZcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9iamVjdFtuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgSGVscGVyLmRlZXBGcmVlemUodmFsdWUsIHByZXBhcmVkT2JqZWN0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUob2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gdW5pcXVlIGlkZW50aWZpZXIgd2l0aCBhIHNwZWNpZmljIGxlbmd0aFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRVSUQobGVuZ3RoOiBudW1iZXIgPSAyNCk6IHN0cmluZyB7XG4gICAgbGV0IGR0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdXVpZCA9ICd4Jy5yZXBlYXQobGVuZ3RoKS5yZXBsYWNlKC9beHldL2csIChjKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgY29uc3QgciA9IChkdCArIE1hdGgucmFuZG9tKCkgKiAxNikgJSAxNiB8IDA7XG4gICAgICBkdCA9IE1hdGguZmxvb3IoZHQgLyAxNik7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgcmV0dXJuIChjID09PSAneCcgPyByIDogKHIgJiAweDMpIHwgMHg4KS50b1N0cmluZygxNik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHV1aWQ7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZGF0ZSBzdHJpbmcgdG8gZGF0ZSBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZykge1xuICAgIGNvbnN0IHJlSVNPID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KD86XFwuXFxkKikpKD86WnwoXFwrfC0pKFtcXGR8Ol0qKSk/JC87XG4gICAgY29uc3QgcmVNc0FqYXggPSAvXlxcL0RhdGVcXCgoZHwtfC4qKVxcKVtcXC98XFxcXF0kLztcbiAgICBpZiAodHlwZW9mIGRhdGVTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBpc29FeGVjID0gcmVJU08uZXhlYyhkYXRlU3RyaW5nKTtcbiAgICAgIGlmIChpc29FeGVjKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1zQWpheEV4ZWMgPSByZU1zQWpheC5leGVjKGRhdGVTdHJpbmcpO1xuICAgICAgaWYgKG1zQWpheEV4ZWMpIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZCA9IG1zQWpheEV4ZWNbMV0uc3BsaXQoL1stKywuXS8pO1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoY2xlYW5lZFswXSA/ICtjbGVhbmVkWzBdIDogMCAtICtjbGVhbmVkWzFdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGVTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJyb3dzZXIgbmFtZSBhbmQgdmVyc2lvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRCcm93c2VyKCkge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gICAgbGV0IGRhdGEgPSB1c2VyQWdlbnQubWF0Y2goLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pKSB8fCBbXTtcbiAgICBsZXQgdmVyc2lvbjtcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KGRhdGFbMV0pKSB7XG4gICAgICB2ZXJzaW9uID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVzZXJBZ2VudCkgfHwgW107XG4gICAgICByZXR1cm4geyBuYW1lOiAnSUUnLCB2ZXJzaW9uOiB2ZXJzaW9uWzFdIHx8ICcnIH07XG4gICAgfVxuICAgIGlmIChkYXRhWzFdID09PSAnQ2hyb21lJykge1xuICAgICAgdmVyc2lvbiA9IHVzZXJBZ2VudC5tYXRjaCgvXFxiT1BSfEVkZ2VcXC8oXFxkKykvKTtcbiAgICAgIGlmICh2ZXJzaW9uICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogJ09wZXJhJywgdmVyc2lvbjogdmVyc2lvblsxXSB9O1xuICAgICAgfVxuICAgIH1cbiAgICBkYXRhID0gZGF0YVsyXSA/IFtkYXRhWzFdLCBkYXRhWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xuICAgIHZlcnNpb24gPSB1c2VyQWdlbnQubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSk7XG4gICAgaWYgKHZlcnNpb24gIT09IG51bGwpIHtcbiAgICAgIGRhdGEuc3BsaWNlKDEsIDEsIHZlcnNpb25bMV0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogZGF0YVswXSxcbiAgICAgIHZlcnNpb246IGRhdGFbMV0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZpcnN0IHBhcmFtZXRlciBpcyBhIGRlZXAgc3Vic2V0IG9mIHNlY29uZCBwYXJhbWV0ZXJcbiAgICogSGludDogZnVuY3Rpb25zIHdpbGwgYmUgaWdub3JlZFxuICAgKi9cbiAgc3RhdGljIGlzU3Vic2V0KGE6IGFueSwgYjogYW55KSB7XG4gICAgLy8gRXF1YWxcbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGlmZmVyZW50IHR5cGVcbiAgICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhKSkge1xuICAgICAgICBpZiAoSGVscGVyLmlzU3Vic2V0KHZhbHVlLCBiW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdFxuICAgIGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IHBsYWluID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwbGFpbikpIHtcbiAgICAgICAgaWYgKEhlbHBlci5pc1N1YnNldCh2YWx1ZSwgYltrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRWxzZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcGFyYW1ldGVycyBhcmUgZXF1YWwgKGhhdmUgZXF1YWwgcHJvcGVydGllcylcbiAgICogSGludDogZnVuY3Rpb25zIHdpbGwgYmUgaWdub3JlZFxuICAgKi9cbiAgc3RhdGljIGlzRXF1YWwoYTogYW55LCBiOiBhbnkpIHtcbiAgICByZXR1cm4gSGVscGVyLmlzU3Vic2V0KGEsIGIpICYmIEhlbHBlci5pc1N1YnNldChiLCBhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJzdCBsZXZlbCBkaWZmZXJlbmNlIG9mIHR3byBvYmplY3RzXG4gICAqIEhpbnQ6IGZ1bmN0aW9ucyB3aWxsIGJlIGlnbm9yZWQgYW5kIHdoZW4gYW4gYXJyYXkgb3IgYW4gb2JqZWN0IGlzIGRpZmZlcmVudCB0aGUgaG9sZSBhcnJheSBvciBvYmplY3Qgd2lsbCB1c2VkIGFzIHByb3BlcnR5IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIFJlY29yZDxzdHJpbmcsIGFueT4gT2JqZWN0IHdpdGggcHJvcGVydGllcyBmcm9tIGZpcnN0IG9iamVjdFxuICAgKi9cbiAgc3RhdGljIGdldERpZmYoYTogUmVjb3JkPHN0cmluZywgYW55PiwgYjogUmVjb3JkPHN0cmluZywgYW55PiwgY2xvbmU6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgbGV0IGZpcnN0T2JqZWN0ID0gYTtcbiAgICBpZiAoY2xvbmUpIHtcbiAgICAgIGZpcnN0T2JqZWN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpcnN0T2JqZWN0KSkge1xuICAgICAgaWYgKCFIZWxwZXIuaXNTdWJzZXQodmFsdWUsIGJba2V5XSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwcm9wZXJ0aWUgaXMgdHlwZSBvZiBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdFxuICAgKiBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcyMzgzNDRcbiAgICpcbiAgICogQHBhcmFtIG5vZGVzXG4gICAqL1xuICBzdGF0aWMgaXNOb2RlTGlzdChub2Rlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJpbmdSZXByID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5vZGVzKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHR5cGVvZiBub2RlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgL15cXFtvYmplY3QgKEhUTUxDb2xsZWN0aW9ufE5vZGVMaXN0fE9iamVjdClcXF0kLy50ZXN0KHN0cmluZ1JlcHIpICYmXG4gICAgICAgIHR5cGVvZiBub2Rlcy5sZW5ndGggPT09ICdudW1iZXInICYmXG4gICAgICAgIChub2Rlcy5sZW5ndGggPT09IDAgfHwgKHR5cGVvZiBub2Rlc1swXSA9PT0gJ29iamVjdCcgJiYgbm9kZXNbMF0ubm9kZVR5cGUgPiAwKSlcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcikge1xuICAgIGxldCBiaW5hcnkgPSAnJztcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBgZGF0YTppbWFnZS8qO2Jhc2U2NCwgJHt3aW5kb3cuYnRvYShiaW5hcnkpfWA7XG4gIH1cbn1cbiJdfQ==
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctYmFzZS9zaGFyZWQvY2xhc3Nlcy9oZWxwZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNqQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQTZCLE9BQVksRUFBRSxNQUE4QjtRQUNwRixPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNqRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQy9CLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDaEMsT0FBTyxLQUFLLENBQUM7eUJBQ2Q7cUJBQ0Y7aUJBQ0Y7cUJBQU0sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO29CQUNqQyxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsSUFBSSxFQUFFLENBQVUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVEsRUFBRSxVQUFrQyxFQUFFO1FBQzdELFNBQVM7UUFDVCxNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVEsRUFBRSxLQUFLO1lBQ2YsR0FBRyxPQUFPO1NBQ1gsQ0FBQztRQUVGLFlBQVk7UUFDWixHQUFHLEdB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QyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDaEYsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNO1FBQy9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLHdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhbmRhcmQgfSBmcm9tICcuL3N0YW5kYXJkLmNsYXNzJztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEhlbHBlciB7XG4gIC8qKlxuICAgKiBTaW1wbGUgZmlsdGVyIGZ1bmN0aW9uIGZvciBwbGFpbiBvYmplY3RzXG4gICAqL1xuICBzdGF0aWMgZmlsdGVyPFQgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9PihvYmplY3RzOiBUW10sIGZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IFRbXSB7XG4gICAgcmV0dXJuIChvYmplY3RzPy5maWx0ZXIoKGVsZW1lbnQpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudFtrZXldKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBlbGVtZW50W2tleV0pIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudFtrZXldLmluY2x1ZHModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFtrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSkgfHwgW10pIGFzIGFueVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gYSB1cmwvdXJpIGNvbmZvcm0gc3RyaW5nXG4gICAqIE9ubHk6XG4gICAqIC0gbG93ZXIgY2FzZVxuICAgKiAtIGNoYXJzLCBudW1iZXJzIGFuZCBoeXBoZW5zXG4gICAqL1xuICBzdGF0aWMgdXJsU3RyaW5nKHN0cjogYW55LCBvcHRpb25zOiB7IGFsbG93QWxsPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmcge1xuICAgIC8vIENvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFsbG93QWxsOiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIFRvIHN0cmluZ1xuICAgIHN0ciA9IHN0ciArICcnO1xuXG4gICAgLy8gVHJpbVxuICAgIHN0ciA9IHN0ci50cmltKCk7XG5cbiAgICAvLyBMb3dlciBjYXNlXG4gICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIWNvbmZpZy5hbGxvd0FsbCkge1xuICAgICAgLy8gUmVwbGFjZSBzcGFjZXNcbiAgICAgIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBSZXBsYWNlIHNvbWUgc3BlY2lhbCBjaGFyc1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ8OkJywgJ2FlJyk7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnw7YnLCAnb2UnKTtcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCfDvCcsICd1ZScpO1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJ8OfJywgJ3NzJyk7XG5cbiAgICAgIC8vIFJlbW92ZSBkb3VibGUgY2hhcmFjdGVyc1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoJy0tLScsICctJyk7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLS0nLCAnLScpO1xuXG4gICAgICAvLyBSZW1vdmUgb3RoZXIgc3BlY2lhbCBjaGFyc1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1teYS16QS1aMC05LV0vZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiB1cmwgY29uZm9ybSBzdHJpbmdcbiAgICByZXR1cm4gZW5jb2RlVVJJKHN0cik7XG4gIH1cblxuICAvKipcbiAgICogU2ltcGxlIG1hcCBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtYXA8VCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxuICAgIHNvdXJjZTogUGFydGlhbDxUPiB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgdGFyZ2V0OiBULFxuICAgIG9wdGlvbnM6IHsgZnVuY0FsbG93ZWQ/OiBib29sZWFuOyBkYXRlU3RyaW5nVG9EYXRlPzogYm9vbGVhbiB8IHN0cmluZ1tdIH0gPSB7fVxuICApOiBUIHtcbiAgICAvLyBTZXQgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgZnVuY0FsbG93ZWQ6IGZhbHNlLFxuICAgICAgZGF0ZVN0cmluZ1RvRGF0ZTogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIENoZWNrIHNvdXJjZVxuICAgIGlmICghc291cmNlIHx8IHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcHJvcGVydGllc1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHtcbiAgICAgIGlmIChzb3VyY2Vba2V5XSAhPT0gdW5kZWZpbmVkICYmIChjb25maWcuZnVuY0FsbG93ZWQgfHwgdHlwZW9mIChzb3VyY2Vba2V5XSAhPT0gJ2Z1bmN0aW9uJykpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2tleV0gPT09ICdzdHJpbmcnICYmIGNvbmZpZy5kYXRlU3RyaW5nVG9EYXRlKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLmRhdGVTdHJpbmdUb0RhdGUpKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmRhdGVTdHJpbmdUb0RhdGUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IEhlbHBlci5wYXJzZURhdGUoc291cmNlW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IEhlbHBlci5wYXJzZURhdGUoc291cmNlW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRhcmdldFxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIE9iamVjdCBvciBPYmplY3RzIG9mIHNwZWNpZmllZCB0eXBlIHdpdGggc3BlY2lmaWVkIGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWFwczxUIGV4dGVuZHMgU3RhbmRhcmQ+KFxuICAgIGRhdGE6IFBhcnRpYWw8VD4gfCBQYXJ0aWFsPFQ+W10gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdLFxuICAgIHRhcmdldENsYXNzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUXG4gICk6IFRbXSB7XG4gICAgLy8gQ2hlY2sgZGF0YVxuICAgIGlmICghZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuXG4gICAgLy8gTWFwXG4gICAgcmV0dXJuIChkYXRhIGFzIGFueSkubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiAodGFyZ2V0Q2xhc3MgYXMgYW55KS5tYXAoaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBsYWluIHBhcmFtZXRlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRQbGFpblBhcmFtZXRlcihwYXJhbWV0ZXI6IHN0cmluZykge1xuICAgIGlmICghcGFyYW1ldGVyKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1ldGVyPy5zcGxpdCgnPycpPy5zaGlmdCgpPy5zcGxpdCgnIycpPy5zaGlmdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBJRCBvZiBhbiB1cmwgcGFyYW1ldGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFBhcmFtZXRlcklkKHBhcmFtZXRlcjogc3RyaW5nKSB7XG4gICAgaWYgKCFwYXJhbWV0ZXIpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgfVxuICAgIHJldHVybiBIZWxwZXIuZ2V0UGxhaW5QYXJhbWV0ZXIocGFyYW1ldGVyKT8uc3BsaXQoJy0nKS5wb3AoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxheVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkZWxheShtczogbnVtYmVyKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVlcCBmcmVlemVcbiAgICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemUjV2hhdF9pc19zaGFsbG93X2ZyZWV6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkZWVwRnJlZXplKG9iamVjdDogYW55LCBwcmVwYXJlZE9iamVjdHMgPSBbXSkge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdCByZWdyZXNzXG4gICAgaWYgKHByZXBhcmVkT2JqZWN0cy5pbmNsdWRlcyhvYmplY3QgYXMgbmV2ZXIpKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgICBwcmVwYXJlZE9iamVjdHMucHVzaChvYmplY3QgYXMgbmV2ZXIpO1xuXG4gICAgLy8gUmV0cmlldmUgdGhlIHByb3BlcnR5IG5hbWVzIGRlZmluZWQgb24gb2JqZWN0XG4gICAgY29uc3QgcHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcblxuICAgIC8vIEZyZWV6ZSBwcm9wZXJ0aWVzIGJlZm9yZSBmcmVlemluZyBzZWxmXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHByb3BOYW1lcykge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3RbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIEhlbHBlci5kZWVwRnJlZXplKHZhbHVlLCBwcmVwYXJlZE9iamVjdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIHVuaXF1ZSBpZGVudGlmaWVyIHdpdGggYSBzcGVjaWZpYyBsZW5ndGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VUlEKGxlbmd0aDogbnVtYmVyID0gMjQpOiBzdHJpbmcge1xuICAgIGxldCBkdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHV1aWQgPSAneCcucmVwZWF0KGxlbmd0aCkucmVwbGFjZSgvW3h5XS9nLCAoYykgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIGNvbnN0IHIgPSAoZHQgKyBNYXRoLnJhbmRvbSgpICogMTYpICUgMTYgfCAwO1xuICAgICAgZHQgPSBNYXRoLmZsb29yKGR0IC8gMTYpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIHJldHVybiAoYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xuICAgIH0pO1xuICAgIHJldHVybiB1dWlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGRhdGUgc3RyaW5nIHRvIGRhdGUgb2JqZWN0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhcnNlRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZUlTTyA9IC9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopKSg/Olp8KFxcK3wtKShbXFxkfDpdKikpPyQvO1xuICAgIGNvbnN0IHJlTXNBamF4ID0gL15cXC9EYXRlXFwoKGR8LXwuKilcXClbXFwvfFxcXFxdJC87XG4gICAgaWYgKHR5cGVvZiBkYXRlU3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaXNvRXhlYyA9IHJlSVNPLmV4ZWMoZGF0ZVN0cmluZyk7XG4gICAgICBpZiAoaXNvRXhlYykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBtc0FqYXhFeGVjID0gcmVNc0FqYXguZXhlYyhkYXRlU3RyaW5nKTtcbiAgICAgIGlmIChtc0FqYXhFeGVjKSB7XG4gICAgICAgIGNvbnN0IGNsZWFuZWQgPSBtc0FqYXhFeGVjWzFdLnNwbGl0KC9bLSssLl0vKTtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGNsZWFuZWRbMF0gPyArY2xlYW5lZFswXSA6IDAgLSArY2xlYW5lZFsxXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRlU3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBicm93c2VyIG5hbWUgYW5kIHZlcnNpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QnJvd3NlcigpIHtcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGxldCBkYXRhID0gdXNlckFnZW50Lm1hdGNoKC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaSkgfHwgW107XG4gICAgbGV0IHZlcnNpb247XG4gICAgaWYgKC90cmlkZW50L2kudGVzdChkYXRhWzFdKSkge1xuICAgICAgdmVyc2lvbiA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1c2VyQWdlbnQpIHx8IFtdO1xuICAgICAgcmV0dXJuIHsgbmFtZTogJ0lFJywgdmVyc2lvbjogdmVyc2lvblsxXSB8fCAnJyB9O1xuICAgIH1cbiAgICBpZiAoZGF0YVsxXSA9PT0gJ0Nocm9tZScpIHtcbiAgICAgIHZlcnNpb24gPSB1c2VyQWdlbnQubWF0Y2goL1xcYk9QUnxFZGdlXFwvKFxcZCspLyk7XG4gICAgICBpZiAodmVyc2lvbiAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHZlcnNpb25bMV0gfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGF0YSA9IGRhdGFbMl0gPyBbZGF0YVsxXSwgZGF0YVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcbiAgICB2ZXJzaW9uID0gdXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpO1xuICAgIGlmICh2ZXJzaW9uICE9PSBudWxsKSB7XG4gICAgICBkYXRhLnNwbGljZSgxLCAxLCB2ZXJzaW9uWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGRhdGFbMF0sXG4gICAgICB2ZXJzaW9uOiBkYXRhWzFdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBkZWVwIHN1YnNldCBvZiBzZWNvbmQgcGFyYW1ldGVyXG4gICAqIEhpbnQ6IGZ1bmN0aW9ucyB3aWxsIGJlIGlnbm9yZWRcbiAgICovXG4gIHN0YXRpYyBpc1N1YnNldChhOiBhbnksIGI6IGFueSkge1xuICAgIC8vIEVxdWFsXG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIERpZmZlcmVudCB0eXBlXG4gICAgaWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYSkpIHtcbiAgICAgICAgaWYgKEhlbHBlci5pc1N1YnNldCh2YWx1ZSwgYltrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBvYmplY3RcbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBwbGFpbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYSkpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGxhaW4pKSB7XG4gICAgICAgIGlmIChIZWxwZXIuaXNTdWJzZXQodmFsdWUsIGJba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEVsc2VcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChoYXZlIGVxdWFsIHByb3BlcnRpZXMpXG4gICAqIEhpbnQ6IGZ1bmN0aW9ucyB3aWxsIGJlIGlnbm9yZWRcbiAgICovXG4gIHN0YXRpYyBpc0VxdWFsKGE6IGFueSwgYjogYW55KSB7XG4gICAgcmV0dXJuIEhlbHBlci5pc1N1YnNldChhLCBiKSAmJiBIZWxwZXIuaXNTdWJzZXQoYiwgYSk7XG4gIH1cblxuICAvKipcbiAgICogRmlyc3QgbGV2ZWwgZGlmZmVyZW5jZSBvZiB0d28gb2JqZWN0c1xuICAgKiBIaW50OiBmdW5jdGlvbnMgd2lsbCBiZSBpZ25vcmVkIGFuZCB3aGVuIGFuIGFycmF5IG9yIGFuIG9iamVjdCBpcyBkaWZmZXJlbnQgdGhlIGhvbGUgYXJyYXkgb3Igb2JqZWN0IHdpbGwgdXNlZCBhcyBwcm9wZXJ0eSB2YWx1ZVxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmQ8c3RyaW5nLCBhbnk+IE9iamVjdCB3aXRoIHByb3BlcnRpZXMgZnJvbSBmaXJzdCBvYmplY3RcbiAgICovXG4gIHN0YXRpYyBnZXREaWZmKGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIGI6IFJlY29yZDxzdHJpbmcsIGFueT4sIGNsb25lOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGxldCBmaXJzdE9iamVjdCA9IGE7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICBmaXJzdE9iamVjdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaXJzdE9iamVjdCkpIHtcbiAgICAgIGlmICghSGVscGVyLmlzU3Vic2V0KHZhbHVlLCBiW2tleV0pKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcHJvcGVydGllIGlzIHR5cGUgb2YgSFRNTENvbGxlY3Rpb24gb3IgTm9kZUxpc3RcbiAgICogU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MjM4MzQ0XG4gICAqXG4gICAqIEBwYXJhbSBub2Rlc1xuICAgKi9cbiAgc3RhdGljIGlzTm9kZUxpc3Qobm9kZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyaW5nUmVwciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChub2Rlcyk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2Ygbm9kZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgIC9eXFxbb2JqZWN0IChIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdHxPYmplY3QpXFxdJC8udGVzdChzdHJpbmdSZXByKSAmJlxuICAgICAgICB0eXBlb2Ygbm9kZXMubGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAobm9kZXMubGVuZ3RoID09PSAwIHx8ICh0eXBlb2Ygbm9kZXNbMF0gPT09ICdvYmplY3QnICYmIG5vZGVzWzBdLm5vZGVUeXBlID4gMCkpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXIpIHtcbiAgICBsZXQgYmluYXJ5ID0gJyc7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYGRhdGE6aW1hZ2UvKjtiYXNlNjQsICR7d2luZG93LmJ0b2EoYmluYXJ5KX1gO1xuICB9XG59XG4iXX0=
|
|
@@ -1832,7 +1832,7 @@ class ModelFormComponent {
|
|
|
1832
1832
|
return newDate.toISOString().substring(0, 16);
|
|
1833
1833
|
}
|
|
1834
1834
|
nestedObject(key, nestedObject, value) {
|
|
1835
|
-
var _a, _b;
|
|
1835
|
+
var _a, _b, _c, _d;
|
|
1836
1836
|
const props = key.split('.');
|
|
1837
1837
|
let result = nestedObject;
|
|
1838
1838
|
for (let i = 0; i < props.length; i++) {
|
|
@@ -1840,7 +1840,10 @@ class ModelFormComponent {
|
|
|
1840
1840
|
result[props[i]] = value;
|
|
1841
1841
|
return result[props[i]];
|
|
1842
1842
|
}
|
|
1843
|
-
result =
|
|
1843
|
+
result =
|
|
1844
|
+
((_a = result[props[i]]) === null || _a === void 0 ? void 0 : _a.fields) && ((_c = Object.keys((_b = result[props[i]]) === null || _b === void 0 ? void 0 : _b.fields)) === null || _c === void 0 ? void 0 : _c.length) > 0
|
|
1845
|
+
? (_d = result[props[i]]) === null || _d === void 0 ? void 0 : _d.fields
|
|
1846
|
+
: result[props[i]];
|
|
1844
1847
|
}
|
|
1845
1848
|
return result;
|
|
1846
1849
|
}
|