@datorama/core 22.9.3 → 22.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/datorama-core.umd.js +10 -8
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +2 -2
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/select/select.component.js +10 -8
- package/esm2015/lib/version.js +2 -2
- package/esm5/lib/select/select.component.js +10 -8
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +10 -8
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +10 -8
- package/fesm5/datorama-core.js.map +1 -1
- package/package.json +1 -1
|
@@ -298,16 +298,18 @@ let DatoSelectComponent = class DatoSelectComponent extends BaseCustomControl {
|
|
|
298
298
|
});
|
|
299
299
|
this.datoOverlay.attach({ placement: this.placement }, this._dropdownClass);
|
|
300
300
|
this.toggle();
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
301
|
+
if (this.hasValue) {
|
|
302
|
+
/**
|
|
303
|
+
* When we first open the dropdown we need to mark the
|
|
304
|
+
* FormControl values as actives
|
|
305
|
+
*/
|
|
306
|
+
if (this._initialOpen) {
|
|
307
|
+
this.markAsActive(this._model);
|
|
308
|
+
this._initialOpen = false;
|
|
309
|
+
}
|
|
307
310
|
if (this.limitSelectedTo && this._model.length === this.limitSelectedTo) {
|
|
308
311
|
this.updateDisabledState();
|
|
309
312
|
}
|
|
310
|
-
this._initialOpen = false;
|
|
311
313
|
}
|
|
312
314
|
if (this._withInfiniteScroll) {
|
|
313
315
|
this.activateInfiniteScroll();
|
|
@@ -909,4 +911,4 @@ DatoSelectComponent = __decorate([
|
|
|
909
911
|
DatoOverlay, Object, Object, String])
|
|
910
912
|
], DatoSelectComponent);
|
|
911
913
|
export { DatoSelectComponent };
|
|
912
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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UUFBUSxDQUFDLENBQUM7O3FDQUNwQixhQUFhOzs0REFLckM7QUExd0JVLG1CQUFtQjtJQVQvQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBYTtRQUN2QiwyeEdBQXNDO1FBQ3RDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUN2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtRQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDO0lBK1RHLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JCLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FDQU5OLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUN6QixVQUFVO1FBQ0gsV0FBVztHQTdUdkIsbUJBQW1CLENBbzRCL0I7U0FwNEJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUN1c3RvbUNvbnRyb2wgfSBmcm9tICcuLi9jdXN0b20tY29udHJvbC9iYXNlLWN1c3RvbS1jb250cm9sJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0LCBTZWxlY3RUeXBlIH0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuaW1wb3J0IHsgRGF0b09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC1hY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdG9TZWxlY3RTZWFyY2hTdHJhdGVneSwgZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5IH0gZnJvbSAnLi9zZWFyY2guc3RyYXRlZ3knO1xuaW1wb3J0IHsgY2xvc2VzdCwgcXVlcnksIHNldFN0eWxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycyc7XG5pbXBvcnQgeyBEYXRvT3ZlcmxheSwgRGF0b1RlbXBsYXRlUG9ydGFsIH0gZnJvbSAnLi4vYW5ndWxhci9vdmVybGF5JztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgX3Njcm9sbFRvT3B0aW9uIH0gZnJvbSAnLi4vb3B0aW9ucy9vcHRpb25zLXV0aWxzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2RhdGEtbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBEYXRvQWNjb3JkaW9uQ29tcG9uZW50LCBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY2NvcmRpb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9saXN0L2xpc3QudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGlzQXJyb3dVcERvd24sIGlzRW50ZXIsIGlzRXNjYXBlIH0gZnJvbSAnLi4vcngvZXZlbnRzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IGlzU3RyaW5nLCBzaXplIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyB6SW5kZXhQbGVhc2UgfSBmcm9tICcuLi9pbnRlcm5hbC96LWluZGV4JztcbmltcG9ydCB7IGlzVGVzdEVudiB9IGZyb20gJy4uL2lzdGVzdC1lbnYnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IFBvcHBlck9wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3BwZXInO1xuaW1wb3J0IHsgc2V0RGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2N1c3RvbS1kaW1lbnNpb25zJztcblxuY29uc3QgdmFsdWVBY2Nlc3NvciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdG9TZWxlY3RDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHByb3ZpZGVyczogW3ZhbHVlQWNjZXNzb3IsIERhdG9PdmVybGF5XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGV4cG9ydEFzOiAnZGF0b1NlbGVjdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0b1NlbGVjdENvbXBvbmVudCBleHRlbmRzIEJhc2VDdXN0b21Db250cm9sXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqIFRoZSBkcm9wZG93biBjb250YWluZXIgZWxlbWVudCB3aGljaCBpcyB0aGUgcG9ydGFsICAqKi9cbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKVxuICBkcm9wZG93bjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogVGhlIG92ZXJsYXkgb3JpZ2luIHdoaWNoIGlzIG9uZSBvZiBkYXRvLXRyaWdnZXJzICoqL1xuICBAVmlld0NoaWxkKCdvdmVybGF5T3JpZ2luJylcbiAgb3JpZ2luOiBFbGVtZW50UmVmO1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b09wdGlvbnMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9BY2NvcmRpb25Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IERhdG9BY2NvcmRpb25Db21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGFjY29yZGlvbjogUXVlcnlMaXN0PERhdG9BY2NvcmRpb25Db21wb25lbnQ+O1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b0dyb3VwcyBjaGlsZHJlbiAqL1xuICBAQ29udGVudENoaWxkcmVuKERhdG9Hcm91cENvbXBvbmVudClcbiAgZ3JvdXBzOiBRdWVyeUxpc3Q8RGF0b0dyb3VwQ29tcG9uZW50PjtcblxuICAvKiogQWxsb3dpbmcgY3VzdG9tIHRlbXBsYXRlIGJ5IHBhc3NpbmcgKmRhdG9BY3RpdmUgZGlyZWN0aXZlIHdoaWNoIGdldHMgdGhlIGFjdGl2ZSBhcyBjb250ZXh0ICovXG4gIEBDb250ZW50Q2hpbGQoRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZSlcbiAgYWN0aXZlOiBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlO1xuXG4gIC8qKiBUaGUga2V5IHRoYXQgc3RvcmVzIHRoZSBvcHRpb24gaWQgKi9cbiAgQElucHV0KClcbiAgaWRLZXkgPSAnaWQnO1xuXG4gIC8qKiBUaGUgbG9va3VwIGtleSBmb3IgdGhlIGxhYmVsICovXG4gIEBJbnB1dCgpXG4gIGxhYmVsS2V5ID0gJ2xhYmVsJztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHRyaWdnZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnY29yZS5zZWxlY3QnO1xuXG4gIC8qKiBBIHBsYWNlaG9sZGVyIGZvciB0aGUgc2VhcmNoICovXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyID0gJ2NvcmUuc2VhcmNoJztcblxuICAvKiogQ3VzdG9tIHRleHQgd2hlbiB3ZSBkb24ndCBoYXZlIHJlc3VsdHMgKi9cbiAgQElucHV0KClcbiAgc2V0IG5vSXRlbXNMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBJZiBkZWZpbmVkLCBpbmRpY2F0ZXMgYnkgd2hpY2gga2V5IHRoZSBkYXRhIHNob3VsZCBiZSBub3JtYWxpemVkICovXG4gIEBJbnB1dCgpXG4gIGdyb3VwQnk6IHN0cmluZztcblxuICAvKiogQWRkL3JlbW92ZXMgc2VhcmNoIGlucHV0ICovXG4gIEBJbnB1dCgpXG4gIGlzQ29tYm8gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGl0J3MgYSBncm91cCAqL1xuICBASW5wdXQoKVxuICBpc0dyb3VwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERlY2lkZSB3aGV0aGVyIHRvIGZpbHRlciB0aGUgcmVzdWx0cyBpbnRlcm5hbGx5IGJhc2VkIG9uIHNlYXJjaCBxdWVyeS5cbiAgICogVXNlZnVsIGZvciBhc3luYyBmaWx0ZXJpbmcsIHdoZXJlIHdlIHNlYXJjaCB0aHJvdWdoIG1vcmUgY29tcGxleCBkYXRhLlxuICAgKi9cbiAgQElucHV0KClcbiAgaW50ZXJuYWxTZWFyY2ggPSB0cnVlO1xuXG4gIC8qKiBEZWJvdW5jZSB0aW1lIHRvIGVtaXQgc2VhcmNoIHF1ZXJpZXMgKi9cbiAgQElucHV0KClcbiAgZGVib3VuY2VUaW1lID0gMzAwO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3IgKi9cbiAgQElucHV0KClcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgc2VsZWN0IGFsbCBjaGVja2JveCAqL1xuICBASW5wdXQoKVxuICBhbGxvd1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hpcC4gZW1wdHkgbWVhbnMgaXQncyBkaXNhYmxlZCAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RBbGxDaGlwVHh0ID0gJyc7XG5cbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBzZWxlY3QgKi9cbiAgQElucHV0KClcbiAgdHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUuU0lOR0xFO1xuXG4gIC8qKiBDbGllbnQgc2VhcmNoIHN0cmF0ZWd5ICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFN0cmF0ZWd5OiBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3kgPSBkZWZhdWx0Q2xpZW50U2VhcmNoU3RyYXRlZ3k7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHBvc2l0aW9uIG9mIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IFBvcHBlck9wdGlvbnNbJ3BsYWNlbWVudCddID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgQElucHV0KClcbiAgaW5maW5pdGVTY3JvbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIExpbWl0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyBzaG93biAqL1xuICBASW5wdXQoKVxuICBsaW1pdFRvID0gZGVmYXVsdE9wdGlvbnNEaXNwbGF5TGltaXQ7XG5cbiAgQElucHV0KCdsaW1pdFNlbGVjdGVkVG8nKVxuICBzZXQgbGltaXRTZWxlY3RlZChsaW1pdFNlbGVjdGVkVG86IG51bWJlcikge1xuICAgIHRoaXMubGltaXRTZWxlY3RlZFRvID0gbGltaXRTZWxlY3RlZFRvO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBbGxvdyBzb3J0aW5nIG9mIHNlbGVjdGVkIG9wdGlvbnMgaW4gbXVsdGkgbW9kZSAqL1xuICBASW5wdXQoKVxuICBpc1NvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqIEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBvcHRpb25zIG92ZXJsYXkgdG8gKi9cbiAgQElucHV0KClcbiAgYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgc3RyaW5nO1xuXG4gIC8qKiBUaGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBzZXQgZGF0YVNldChkYXRhOiBhbnlbXSkge1xuICAgIGlmICghdGhpcy5pbml0aWFsUnVuKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YShkYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiogZGF0YSBub3JtYWxpemF0aW9uLCBpZiByZXF1aXJlZCwgd2lsbCBiZSBoYW5kbGVkIGJ5IG5nT25Jbml0IGluIHRoZSBpbml0aWFsIHJ1biAqL1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIElmIGl0J3MgYXN5bmMgdXBkYXRlcywgY3JlYXRlIG1pY3JvIHRhc2sgaW4gb3JkZXIgdG8gcmUtc3Vic2NyaWJlIHRvIGNsaWNrcyAqL1xuICAgIGlmICh0aGlzLl9kYXRhSXNEaXJ0eSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhSXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICAvKiogU2VhcmNoIGdyb3VwcyBhcyB3ZWxsIGFzIG9wdGlvbnMgKi9cbiAgQElucHV0KClcbiAgc2VhcmNoR3JvdXBMYWJlbHMgPSB0cnVlO1xuXG4gIC8qKiBBZGQgY3VzdG9tIGNsYXNzIHRvIHRoZSBzZWxlY3QgZHJvcERvd24gKi9cbiAgQElucHV0KClcbiAgZGF0b1NlbGVjdENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBzaG93IGVtcHR5IHJlc3VsdCB0ZXh0ICovXG4gIEBJbnB1dCgpXG4gIHNob3dFbXB0eVJlc3VsdHNUZXh0ID0gdHJ1ZTtcblxuICAvKipcbiAgICoga2VlcCBmb2N1cyBpbiBpbnB1dCBhZnRlciBzZWxlY3Rpbmcgb3B0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBrZWVwRm9jdXMgPSBmYWxzZTtcblxuICAvKiogRW1pdCBzZWFyY2ggdmFsdWUgd2hlbiBpbnRlcm5hbCBzZWFyY2ggaXMgZmFsc2UgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gW3dpdGhBY3Rpb25zXSBpcyB0cnVlIGFuZCB0aGUgdXNlciBjbGlja3Mgc2F2ZSAqL1xuICBAT3V0cHV0KClcbiAgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgZmV0Y2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgbGltaXRTZWxlY3RlZFRvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgICovXG5cbiAgZ2V0IGNvbnRhaW5zR3JvdXBzKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuXG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1Jlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Jlc3VsdHM7XG4gIH1cblxuICBzZXQgaGFzUmVzdWx0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Jlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuU0lOR0xFO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGkoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2VsZWN0VHlwZS5NVUxUSTtcbiAgfVxuXG4gIGdldCBfc2hvd0VtcHR5UmVzdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RW1wdHlSZXN1bHRzVGV4dCAmJiB0aGlzLl9kYXRhICYmICghdGhpcy5oYXNSZXN1bHRzIHx8ICF0aGlzLl9kYXRhLmxlbmd0aCkgJiYgIXRoaXMuaXNHcm91cDtcbiAgfVxuXG4gIGdldCBfY291bnQoKSB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKGZhbHNlKS5sZW5ndGg7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICByZXR1cm4gYCgke2FjdGl2ZXN9LyR7dG90YWx9KWA7XG4gIH1cblxuICAvKiogV2hldGhlciBhbGwgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0FsbENoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKS5ldmVyeShvcHRpb24gPT4gdGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID4gLTEpO1xuICB9XG5cbiAgZ2V0IHNob3dTZWxlY3RBbGxDaGlwKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHNvbWUgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQoKSB7XG4gICAgbGV0IHNvbWVDaGVja2VkLFxuICAgICAgc29tZU5vdENoZWNrZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZpc2libGVPcHRpb24gb2YgdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZih2aXNpYmxlT3B0aW9uKSA+IC0xKSB7XG4gICAgICAgIHNvbWVDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWVOb3RDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzb21lQ2hlY2tlZCAmJiBzb21lTm90Q2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEZvcm1Db250cm9sIHdoaWNoIGxpc3RlbnMgZm9yIHNlYXJjaCB2YWx1ZSBjaGFuZ2VzICovXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKiogRXhwb3NlIHRoZSBzZWFyY2ggdGVybSBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBoaWdobGlnaHQgZGlyZWN0aXZlICovXG4gIHNlYXJjaFRlcm0gPSAnJztcblxuICAvKipcbiAgICogUHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAqL1xuICBfbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm5vLWl0ZW1zJyk7XG5cbiAgLyoqIFN0b3JlIHRoZSBpbml0aWFsIGRhdGEgKi9cbiAgX2RhdGEgPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgd2UgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgZGF0YSxcbiAgICogIFRoaXMgaXMgb3B0aW1pemF0aW9uIGZvciBub24gYXN5bmMgY2FsbHMuXG4gICAqICovXG4gIF9kYXRhSXNEaXJ0eSA9IGZhbHNlO1xuXG4gIC8qKiBUcmlnZ2VycyB0aGUgZm9jdXMgb24gdGhlIGlucHV0ICovXG4gIF9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTdG9yZSB0aGUgYWN0aXZlIG9wdGlvbnMgKi9cbiAgX21vZGVsID0gW107XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIHRoZSBzZWxlY3QtdHJpZ2dlciAqL1xuICBfZGlzYWJsZWQ7XG5cbiAgLyoqIFdoZXRlciB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICBfb3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHdlIGhhdmUgc2VhcmNoIHJlc3VsdHMgKi9cbiAgX2hhc1Jlc3VsdHMgPSB0cnVlO1xuXG4gIC8qKiBJbmRpY2F0aW9uIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlcyAqL1xuICBfaW5pdGlhbE9wZW4gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGdlbmVyYXRlIGNhbmNlbC9zYXZlIGZvb3RlciAqL1xuICBfd2l0aEFjdGlvbnMgPSBmYWxzZTtcblxuICBfd2l0aEluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqIE5vdGlmeSB0aGUgbXVsdGkgdHJpZ2dlciB3aGVuIGNsaWNrIG91dHNpZGUgdG8gcmVtb3ZlIHRoZSBmb2N1cyAgKi9cbiAgX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIC8qKiBEcm9wZG93biBzaXplIGNsYXNzICovXG4gIF9kcm9wZG93bkNsYXNzOiBzdHJpbmdbXTtcblxuICAvKiogdHJ1ZSB1bnRpbCBuZ09uSW5pdCAqL1xuICBwcml2YXRlIGluaXRpYWxSdW4gPSB0cnVlO1xuXG4gIC8qKiBTZWFyY2ggY29udHJvbCBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb247XG5cbiAgLyoqIENsaWNrcyBvcHRpb25zIHN1YnNjcmlwdGlvbiAqL1xuICBwcml2YXRlIGNsaWNrc1N1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPERhdG9PcHRpb25Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgaW5maW5pdGVTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGRhdG9PdmVybGF5OiBEYXRvT3ZlcmxheSxcbiAgICBAQXR0cmlidXRlKCduYWtlZCcpIHB1YmxpYyBfbmFrZWQsXG4gICAgQEF0dHJpYnV0ZSgnZGF0b1NpemUnKSBwdWJsaWMgc2l6ZSxcbiAgICBAQXR0cmlidXRlKCd3aWR0aCcpIHB1YmxpYyB3aWR0aDogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaXplID0gc2l6ZSB8fCAnbWQnO1xuICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3MgPSBbYGRhdG8tc2VsZWN0LSR7dGhpcy5zaXplfWBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0b1NlbGVjdENsYXNzKSB7XG4gICAgICB0aGlzLl9kcm9wZG93bkNsYXNzLnB1c2godGhpcy5kYXRvU2VsZWN0Q2xhc3MpO1xuICAgIH1cblxuICAgIHRoaXMuX3dpdGhBY3Rpb25zID0gdGhpcy5zYXZlLm9ic2VydmVycy5sZW5ndGggPT09IDE7XG4gICAgdGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsID0gdGhpcy5mZXRjaC5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMubGlzdGVuVG9TZWFyY2goKTtcbiAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YSh0aGlzLl9kYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIHRoaXMuaW5pdGlhbFJ1biA9IGZhbHNlO1xuICAgIC8vIGhlaWdodCBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHNpemUgcHJvcGVydHlcbiAgICBzZXREaW1lbnNpb25zKHRoaXMud2lkdGgsIG51bGwsIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgbWFya1RvdWNoZWQoKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5kZXRhY2goKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uICYmIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShhY3RpdmVPcHRpb25zOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gYWN0aXZlT3B0aW9ucyA/IGNvZXJjZUFycmF5KGFjdGl2ZU9wdGlvbnMpIDogW107XG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3ZlclRoZUxpbWl0ID0gdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy5pc011bHRpICYmIHRoaXMuX21vZGVsLmxlbmd0aCA+PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsLCB7IGRlc2VsZWN0QWxsOiB0cnVlIH0pO1xuICAgICAgb3ZlclRoZUxpbWl0ICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKiogRm9yIGxhdGVyIHVwZGF0ZXMgKi9cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBvdmVybGF5XG4gICAqL1xuICBvcGVuRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgLyoqIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIHdlIGNsaWNrIG9uIHRoZSB0cmlnZ2VyIGFuZCB3ZSBkb24ndCBoYXZlIHNlYXJjaCBvciBtdWx0aXBsZSAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgIXRoaXMuaXNDb21ibyAmJiB0aGlzLmlzU2luZ2xlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIERvbid0IGNsb3NlIHRoZSBkcm9wZG93biBpZiB3ZSBjbGljayBvbiB0aGUgaW5wdXQgYW5kIGl0J3Mgb3BlbiAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRvT3ZlcmxheS5jcmVhdGVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmJhY2tEcm9wQ2xpY2skLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW4gJiYgdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2goeyBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50IH0sIHRoaXMuX2Ryb3Bkb3duQ2xhc3MpO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gd2UgZmlyc3Qgb3BlbiB0aGUgZHJvcGRvd24gd2UgbmVlZCB0byBtYXJrIHRoZVxuICAgICAqIEZvcm1Db250cm9sIHZhbHVlcyBhcyBhY3RpdmVzXG4gICAgICovXG4gICAgaWYgKHRoaXMuaGFzVmFsdWUgJiYgdGhpcy5faW5pdGlhbE9wZW4pIHtcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsKTtcbiAgICAgIGlmICh0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faW5pdGlhbE9wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlSW5maW5pdGVTY3JvbGwoKTtcbiAgICB9XG5cbiAgICBzZXRTdHlsZShxdWVyeSgnLmRhdG8tb3ZlcmxheScpLCAnekluZGV4JywgekluZGV4UGxlYXNlKCkpO1xuICAgIGNvbnN0IGRyb3Bkb3duQ29udGFpbmVyID0gcXVlcnkoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24tY29udGFpbmVyJyk7XG4gICAgc2V0U3R5bGUoZHJvcGRvd25Db250YWluZXIsICd3aWR0aCcsIGAke3RoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRofXB4YCk7XG5cbiAgICAvKiogUHJldmVudCBzY3JvbGwgd2hpbGUgdGhlIGRyb3Bkb3duIGlzIG9wZW4gKi9cbiAgICBpZiAoaXNUZXN0RW52KCkpIHtcbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGlzTW9iaWxlKCkgPyAndG91Y2htb3ZlJyA6ICdzY3JvbGwnO1xuICAgICAgbGV0IHNjcm9sbEV2ZW50ID0gZnJvbUV2ZW50KHdpbmRvdywgZXZlbnROYW1lKTtcbiAgICAgIGlmIChpc01vYmlsZSgpKSB7XG4gICAgICAgIHNjcm9sbEV2ZW50ID0gc2Nyb2xsRXZlbnQucGlwZShmaWx0ZXIoZXZlbnQgPT4gIWRyb3Bkb3duQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5zY3JvbGxFdmVudFN1YnNjcmlwdGlvbiA9IHNjcm9sbEV2ZW50LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShlID0+IHRoaXMuY2xvc2UoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVQZXJmZWN0U2Nyb2xsQmFyKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb09wdGlvbkNsaWNrKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKTtcbiAgfVxuXG4gIGNoZWNrQWxsKGNoZWNrOiBib29sZWFuKSB7XG4gICAgbGV0IGNoZWNrZWQgPSBjaGVjaztcbiAgICBpZiAodGhpcy5faXNJbmRldGVybWluYXRlbHlDaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBpZiAoIWRhdG9PcHRpb24uZGlzYWJsZWQpIHtcbiAgICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBjaGVja2VkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpO1xuICAgIGNvbnN0IGlzQWxsVmlzaWJsZSA9IHZpc2libGVPcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcblxuICAgIGlmIChpc0FsbFZpc2libGUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gY2hlY2tlZCA/IHZpc2libGVPcHRpb25zIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgdmlzaWJsZU9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID09PSAtMSkge1xuICAgICAgICAgICAgdGVtcC5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21vZGVsID0gWy4uLnRoaXMuX21vZGVsLCAuLi50ZW1wXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKG9wdGlvbiA9PiB2aXNpYmxlT3B0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcmVvcmRlck9wdGlvbnMobmV3T3JkZXI6IGFueVtdKSB7XG4gICAgdGhpcy5fbW9kZWwgPSBuZXdPcmRlcjtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgfVxuXG4gIHJlbW92ZU9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCB1cGRhdGVEaXNhYmxlZCA9IHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG87XG4gICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50W3RoaXMuaWRLZXldICE9PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgIGNvbnN0IG9wdGlvblRvUmVtb3ZlID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICBkYXRvT3B0aW9uID0+IGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICogVG8gcHJldmVudCBjYXNlcyB3aGVuIHRoZSBvcHRpb25zIGFyZSBsaW1pdGVkIGFuZCBkb2VzbnQgaW5jbHVkZSB0aGUgYWN0aXZlIG9wdGlvbixcbiAgICAgKiB0aGF0IGNhbiBiZSByZWFjaGVkIG9ubHkgYnkgc2VydmVyIHNlYXJjaC5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9uVG9SZW1vdmUpIHtcbiAgICAgIG9wdGlvblRvUmVtb3ZlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHVwZGF0ZURpc2FibGVkICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByZXZlbnRCb2R5U2Nyb2xsKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzQXJyb3dVcERvd24oZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgb3ZlcmxheSB0byBkaXNwbGF5IHRoZSBzZWxlY3Qgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KCkge1xuICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IERhdG9UZW1wbGF0ZVBvcnRhbCh0aGlzLmRyb3Bkb3duKTtcbiAgICBsZXQgYXBwZW5kVG9FbGVtZW50O1xuICAgIGlmIChpc1N0cmluZyh0aGlzLmFwcGVuZFRvKSkge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGhpcy5hcHBlbmRUbyBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRUb0VsZW1lbnQgPSB0aGlzLmFwcGVuZFRvO1xuICAgIH1cblxuICAgIHRoaXMuZGF0b092ZXJsYXkuY3JlYXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCB0ZW1wbGF0ZVBvcnRhbCwgYXBwZW5kVG9FbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3BwZXIgZG9lc24ndCBzdXBwb3J0IHBlcmZlY3Qtc2Nyb2xsLWJhciwgc28gd2UgbmVlZCB0byBkbyBpdCBtYW51YWxseVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVQZXJmZWN0U2Nyb2xsQmFyKCkge1xuICAgIGNvbnN0IHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQgPSBjbG9zZXN0KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCAnLnBzJyk7XG4gICAgaWYgKHBlcmZlY3RTY3JvbGxCYXJQYXJlbnQpIHtcbiAgICAgIGZyb21FdmVudChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGhyb3R0bGVUaW1lKDEwKSxcbiAgICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlT3B0aW9ucyhnZXRSYXdPcHRpb25zID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGRhdG9PcHRpb24gPT4gIWRhdG9PcHRpb24uZGlzYWJsZWQpO1xuICAgIGlmIChnZXRSYXdPcHRpb25zKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5tYXAoZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmsgdGhlIGluaXRpYWwgY29udHJvbCB2YWx1ZSBhcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgbWFya0FzQWN0aXZlKG1vZGVsOiBhbnlbXSwgb3B0aW9uczogeyBkZXNlbGVjdEFsbDogYm9vbGVhbiB9ID0geyBkZXNlbGVjdEFsbDogZmFsc2UgfSkge1xuICAgIGNvbnN0IGFzQXJyYXkgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuICAgIGlmIChvcHRpb25zLmRlc2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnJlc2V0QWxsKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG1vZGVsKSB7XG4gICAgICBpZiAoIW9wdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoID0gYXNBcnJheS5maW5kKGN1cnJlbnQgPT4gY3VycmVudC5vcHRpb24gJiYgY3VycmVudC5vcHRpb25bdGhpcy5pZEtleV0gPT09IG9wdGlvblt0aGlzLmlkS2V5XSk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guYWN0aXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhbGwgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBzaG93QWxsKCkge1xuICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCk7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzOiBMaXN0R3JvdXBDb21wb25lbnRbXSA9IHRoaXMuZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXBDb21wb25lbnQgb2YgZ3JvdXBDb21wb25lbnRzKSB7XG4gICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gZmFsc2U7XG5cbiAgICAgIC8qIElmIHRoaXMgYWNjb3JkaW9uIGdyb3VwIGhhcyBiZWVuIGV4cGVuZGVkIGJ5IHRoZSBzZWFyY2ggZnVuY3Rpb24sXG4gICAgICAgICB0aGVuIGNvbGxhcHNlIGl0IHRvIHRoZSBvcmlnaW5hbCBzdGF0ZVxuICAgICAgKi9cbiAgICAgIGlmIChpc0FjY29yZGlvbikge1xuICAgICAgICBjb25zdCBhbnlHcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIGFueTtcblxuICAgICAgICBpZiAoYW55R3JvdXAuX19leHBlbmRlZCkge1xuICAgICAgICAgIGFueUdyb3VwLl9fZXhwZW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGFueUdyb3VwIGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcbiAgICAgICAgICBhY2NvcmRpb25Hcm91cC5jb250ZW50LmRpc2FibGVBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICBhY2NvcmRpb25Hcm91cC5leHBhbmQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkYXRvT3B0aW9uIG9mIHRoaXMub3B0aW9ucy50b0FycmF5KCkpIHtcbiAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBvcHRpb25zIGFuZCByZXR1cm5zIGlmIHdlIGhhdmUgcmVzdWx0XG4gICAqL1xuICBwcml2YXRlIHNlYXJjaE9wdGlvbnModmFsdWU6IHN0cmluZykge1xuICAgIGxldCBoYXNSZXN1bHQgPSBmYWxzZTtcbiAgICBjb25zdCBncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG4gICAgY29uc3QgaGFzR3JvdXBzID0gZ3JvdXBDb21wb25lbnRzQXJyYXkubGVuZ3RoO1xuXG4gICAgaWYgKGhhc0dyb3Vwcykge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNSZXN1bHQgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIG1hdGNoaW5nIGdyb3VwcyBhbmQgY2hpbGRyZW4uXG4gICAqL1xuICBwcml2YXRlIHNlYXJjaEluR3JvdXBzKGdyb3VwQ29tcG9uZW50c0FycmF5OiBMaXN0R3JvdXBDb21wb25lbnRbXSwgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzQWNjb3JkaW9uID0gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCk7XG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMuX2RhdGEubGVuZ3RoO1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLl9kYXRhW2ldO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLmdldEdyb3VwS2V5KGdyb3VwKTtcbiAgICAgIGNvbnN0IGdyb3VwTWF0Y2ggPSB0aGlzLnNlYXJjaEdyb3VwTGFiZWxzICYmIHRoaXMuc2VhcmNoU3RyYXRlZ3koZ3JvdXAsIHZhbHVlLCB0aGlzLmxhYmVsS2V5KTtcbiAgICAgIGNvbnN0IGdyb3VwT3B0aW9ucyA9IGdyb3VwLmNoaWxkcmVuLm1hcChjaGlsZCA9PiBjaGlsZFt0aGlzLmlkS2V5XSk7XG4gICAgICAvKiBzaG93L2hpZGUgdGhlIG9wdGlvbnMgKi9cbiAgICAgIGNvbnN0IHNob3dHcm91cCA9IHRoaXMuc2VhcmNoSW5PcHRpb25zKHZhbHVlLCBncm91cE9wdGlvbnMsIGdyb3VwTWF0Y2gpO1xuXG4gICAgICBpZiAoc2hvd0dyb3VwICYmICFoYXNSZXN1bHRzKSB7XG4gICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBGaW5kIHRoZSByaWdodCBjb21wb25lbnQsIGFjY29yZGluZyB0byB0aGUgaW50ZXJuYWwga2V5IGFzc2lnbmVkIGluIHRoZSBwcmV2aW91cyBzZWFyY2guXG4gICAgICAgICBXaGVuIG5vIG1hdGNoIGlzIGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdGhlIHNhbWUgaW5kZXggYXMgdGhlIGdyb3VwIG9wdGlvbi5cbiAgICAgICogIFRoZSBpbmRleCBpcyBjb25zaWRlcmVkIGxlc3Mgc2FmZSwgYmVjYXVzZSBpdCBjYW4gY2hhbmdlIGFmdGVyIHNvcnRpbmcuICovXG4gICAgICBjb25zdCBncm91cENvbXBvbmVudCA9IGdyb3VwQ29tcG9uZW50c0FycmF5LmZpbmQoKGc6IGFueSkgPT4gZy5fX2tleSA9PT0gZ3JvdXBLZXkpIHx8IGdyb3VwQ29tcG9uZW50c0FycmF5W2ldO1xuICAgICAgLyogU2hvdy9oaWRlIHRoZSBncm91cCAqL1xuICAgICAgaWYgKGdyb3VwQ29tcG9uZW50KSB7XG4gICAgICAgIGdyb3VwQ29tcG9uZW50Ll9oaWRkZW4gPSAhc2hvd0dyb3VwO1xuICAgICAgICAvKiBhc3NpZ24gYW4gaW50ZXJuYWwga2V5IHRvIHRoZSBjb21wb25lbnQgaW5zdGFuY2UsIHNvIHdlIGNhbiBmaW5kIGl0IGxhdGVyIChhYm92ZSkuICovXG4gICAgICAgIChncm91cENvbXBvbmVudCBhcyBhbnkpLl9fa2V5ID0gZ3JvdXBLZXk7XG4gICAgICAgIC8qIEV4cGFuZCB0aGUgYWNjb3JkaW9uIG9uIG1hdGNoaW5nIHJlc3VsdHMgKi9cbiAgICAgICAgaWYgKGlzQWNjb3JkaW9uICYmIHNob3dHcm91cCkge1xuICAgICAgICAgIGNvbnN0IGFjY29yZGlvbkdyb3VwID0gZ3JvdXBDb21wb25lbnQgYXMgRGF0b0FjY29yZGlvbkdyb3VwQ29tcG9uZW50O1xuXG4gICAgICAgICAgaWYgKCFhY2NvcmRpb25Hcm91cC5leHBhbmRlZCkge1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qIEV4cGFuZCB0aGUgYWNjb3JkaW9uICovXG4gICAgICAgICAgICBhY2NvcmRpb25Hcm91cC5leHBhbmQodHJ1ZSk7XG4gICAgICAgICAgICAvKiBNYXJrIHRoZSBhY2NvcmRpb24gYXMgZXhwYW5kZWQsIHNvIHdlIGNhbiByZXR1cm4gdG8gdGhlIGRlZmF1bHQgc3RhdGUgbGF0ZXIgKi9cbiAgICAgICAgICAgIChncm91cENvbXBvbmVudCBhcyBhbnkpLl9fZXhwZW5kZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgb3B0aW9ucyB0byBzaG93IG9yIGhpZGUgZWFjaCBhbmQgcmV0dXJuIGlmIHJlc3VsdCBoYXMgYmVlbiBmb3VuZC5cbiAgICogQ29uc2lkZXIgd2UgaGF2ZSBhIGdyb3VwIHRoYXQgbWF0Y2ggd2Ugc2hvdyBhbGwgb2YgaXRzIG9wdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHNlYXJjaEluT3B0aW9ucyh2YWx1ZTogc3RyaW5nLCBncm91cE9wdGlvbnMgPSBbXSwgZ3JvdXBNYXRjaCA9IGZhbHNlKSB7XG4gICAgbGV0IGhhc1Jlc3VsdHMgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBjb25zdCBvcHRpb25Jbkdyb3VwID0gZ3JvdXBPcHRpb25zLmluZGV4T2YoZGF0b09wdGlvbi5vcHRpb24gJiYgZGF0b09wdGlvbi5vcHRpb25bdGhpcy5pZEtleV0pICE9PSAtMTtcblxuICAgICAgaWYgKGdyb3VwTWF0Y2ggJiYgb3B0aW9uSW5Hcm91cCkge1xuICAgICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICghc2l6ZShncm91cE9wdGlvbnMpIHx8IG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnNlYXJjaFN0cmF0ZWd5KGRhdG9PcHRpb24sIHZhbHVlLCB0aGlzLmxhYmVsS2V5KTtcblxuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICAgIGhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc1Jlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBrZXkgb2YgdGhlIG9wdGlvbiBncm91cC4gSXQgY2FuIGJlIHRoZSBncm91cCBJZCBpZiBleGlzdHMsIG9yIHRoZSBsYWJlbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0R3JvdXBLZXkob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbiAmJiAob3B0aW9uW3RoaXMuaWRLZXldIHx8IG9wdGlvblt0aGlzLmxhYmVsS2V5XSk7XG4gIH1cblxuICBwcml2YXRlIGlzRW1wdHkodmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJyc7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHNlYXJjaCBjaGFuZ2VzIGFuZCBmaWx0ZXIgdGhlIGxpc3RcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9TZWFyY2goKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gPVxuICAgICAgdGhpcy5pc0NvbWJvICYmXG4gICAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJuYWxTZWFyY2gpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93QWxsKCk7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc3VsdHMgPSB0aGlzLnNlYXJjaE9wdGlvbnModmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaC5lbWl0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIG9wdGlvbiBjbGljayBhbmQgY2hhbmdlIHRoZSBzdGF0ZSBhY2NvcmRpbmdseVxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb09wdGlvbkNsaWNrKG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRvT3B0aW9uQ29tcG9uZW50Pikge1xuICAgIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uICYmIHRoaXMuY2xpY2tzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvKiogR2F0aGVyIGFsbCB0aGUgY2xpY2tzICovXG4gICAgY29uc3QgY2xpY2tzJCA9IG9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgb3B0aW9uLmNsaWNrJC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50OiBFdmVudCkgPT4gKHtcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICBvcHRpb25cbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIC8qKiBDb25zaWRlciBjaGFuZ2UgaXQgdG8gdXNlIGV2ZW50IGRlbGVnYXRpb24gKi9cbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiA9IG1lcmdlKC4uLmNsaWNrcyQpLnN1YnNjcmliZSgoeyBvcHRpb24sIGV2ZW50IH0pID0+IHtcbiAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmlzU2luZ2xlID8gdGhpcy5oYW5kbGVTaW5nbGVDbGljayhvcHRpb24pIDogdGhpcy5oYW5kbGVNdWx0aUNsaWNrKG9wdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpICYmIHRoaXMub3Blbikge1xuICAgICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBrZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0VudGVyKGV2ZW50KSkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4O1xuICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICB0aGlzLmlzU2luZ2xlID8gdGhpcy5oYW5kbGVTaW5nbGVDbGljayhhY3RpdmUpIDogdGhpcy5oYW5kbGVNdWx0aUNsaWNrKGFjdGl2ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyb3dVcERvd24oZXZlbnQpKSB7XG4gICAgICB0aGlzLmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpO1xuICAgICAgX3Njcm9sbFRvT3B0aW9uKHtcbiAgICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4OiB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4LFxuICAgICAgICBncm91cHM6IHRoaXMuZ3JvdXBzLFxuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0VzY2FwZShldmVudCkpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWxsKCkge1xuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd09wdGlvbiA9IGRhdG9PcHRpb24ub3B0aW9uO1xuICAgIHRoaXMuX21vZGVsID0gW3Jhd09wdGlvbl07XG4gICAgdGhpcy5vbkNoYW5nZShyYXdPcHRpb24pO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlDbGljayhkYXRvT3B0aW9uOiBEYXRvT3B0aW9uQ29tcG9uZW50KSB7XG4gICAgaWYgKCFkYXRvT3B0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1vZGVsTGVuZ3RoID0gdGhpcy5fbW9kZWwubGVuZ3RoO1xuICAgIGNvbnN0IHVwZGF0ZURpc2FibGVkID1cbiAgICAgIHRoaXMubGltaXRTZWxlY3RlZFRvICYmXG4gICAgICAobW9kZWxMZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvIHx8IChtb2RlbExlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG8gLSAxICYmICFkYXRvT3B0aW9uLmFjdGl2ZSkpO1xuICAgIGRhdG9PcHRpb24uYWN0aXZlID0gIWRhdG9PcHRpb24uYWN0aXZlO1xuICAgIGNvbnN0IHJhd09wdGlvbiA9IGRhdG9PcHRpb24ub3B0aW9uO1xuICAgIGlmIChkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5jb25jYXQocmF3T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kZWwgPSB0aGlzLl9tb2RlbC5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50W3RoaXMuaWRLZXldICE9PSByYXdPcHRpb25bdGhpcy5pZEtleV0pO1xuICAgIH1cbiAgICB1cGRhdGVEaXNhYmxlZCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX21vZGVsKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCkge1xuICAgIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpLCAnc2Nyb2xsJylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MCkpXG4gICAgICAuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gaGVpZ2h0IC0gc2Nyb2xsWTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCB8fCBvZmZzZXQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZldGNoLmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24gJiYgdGhpcy5zZWFyY2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24gJiYgdGhpcy5pbmZpbml0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoZWQgJiYgdGhpcy5kYXRvT3ZlcmxheS5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ3JvdXAgY29tcG9uZW50IGlzIEFjY29yZGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpc0FjY29yZGlvbkdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLmFjY29yZGlvbiAmJiB0aGlzLmFjY29yZGlvbi5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYW4gYXJyYXkgb2YgdGhlIGdyb3VwIGNvbXBvbmVudHNcbiAgICovXG4gIHByaXZhdGUgZ2V0R3JvdXBDb21wb25lbnRzQXJyYXkoKTogTGlzdEdyb3VwQ29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLmlzQWNjb3JkaW9uR3JvdXAoKSA/IHRoaXMuYWNjb3JkaW9uLmZpcnN0Lmdyb3Vwcy50b0FycmF5KCkgOiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy50b0FycmF5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvO1xuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBpZiAoIWRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICAgIGRhdG9PcHRpb24uZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhlIG92ZXJsYXkgd2lsbCBiZSB1cGRhdGUgQUZURVIgQ2hhbmdlIERldGVjdGlvbiB3YXMgZG9uZVxuICAvLyBTbyB0aGUgaXRlbXMgaW4gdGhlIGlucHV0IChhbmQgaXRzIGhlaWdodCkgaXMgdXBkYXRlXG4gIHByaXZhdGUgYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCkge1xuICAgIGlmICh0aGlzLmRhdG9PdmVybGF5ICYmIHRoaXMuZGF0b092ZXJsYXkuYXR0YWNoZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kYXRvT3ZlcmxheS5zY2hlZHVsZVVwZGF0ZSgpLCAwKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
914
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7QUFFSCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RFLE9BQU8sRUFBNEIsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxP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LGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3FDQUNwQixhQUFhOzs0REFLckM7QUE3d0JVLG1CQUFtQjtJQVQvQixTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsYUFBYTtRQUN2QiwyeEdBQXNDO1FBQ3RDLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQztRQUN2QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtRQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDO0lBK1RHLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2xCLFdBQUEsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3JCLFdBQUEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FDQU5OLGlCQUFpQjtRQUNYLG9CQUFvQjtRQUN6QixVQUFVO1FBQ0gsV0FBVztHQTdUdkIsbUJBQW1CLENBdTRCL0I7U0F2NEJZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZUN1c3RvbUNvbnRyb2wgfSBmcm9tICcuLi9jdXN0b20tY29udHJvbC9iYXNlLWN1c3RvbS1jb250cm9sJztcbmltcG9ydCB7IGRlZmF1bHRPcHRpb25zRGlzcGxheUxpbWl0LCBTZWxlY3RUeXBlIH0gZnJvbSAnLi9zZWxlY3QudHlwZXMnO1xuaW1wb3J0IHsgRGF0b09wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbnMvb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdG9TZWxlY3RBY3RpdmVEaXJlY3RpdmUgfSBmcm9tICcuL3NlbGVjdC1hY3RpdmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdG9TZWxlY3RTZWFyY2hTdHJhdGVneSwgZGVmYXVsdENsaWVudFNlYXJjaFN0cmF0ZWd5IH0gZnJvbSAnLi9zZWFyY2guc3RyYXRlZ3knO1xuaW1wb3J0IHsgY2xvc2VzdCwgcXVlcnksIHNldFN0eWxlIH0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycyc7XG5pbXBvcnQgeyBEYXRvT3ZlcmxheSwgRGF0b1RlbXBsYXRlUG9ydGFsIH0gZnJvbSAnLi4vYW5ndWxhci9vdmVybGF5JztcbmltcG9ydCB7IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgX3Njcm9sbFRvT3B0aW9uIH0gZnJvbSAnLi4vb3B0aW9ucy9vcHRpb25zLXV0aWxzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgbm9ybWFsaXplRGF0YSB9IGZyb20gJy4uL2ludGVybmFsL2RhdGEtbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBEYXRvQWNjb3JkaW9uQ29tcG9uZW50LCBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9hY2NvcmRpb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb25zL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0R3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9saXN0L2xpc3QudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IGlzQXJyb3dVcERvd24sIGlzRW50ZXIsIGlzRXNjYXBlIH0gZnJvbSAnLi4vcngvZXZlbnRzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcbmltcG9ydCB7IGlzU3RyaW5nLCBzaXplIH0gZnJvbSAnLi4vdXRpbHMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyB6SW5kZXhQbGVhc2UgfSBmcm9tICcuLi9pbnRlcm5hbC96LWluZGV4JztcbmltcG9ydCB7IGlzVGVzdEVudiB9IGZyb20gJy4uL2lzdGVzdC1lbnYnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IFBvcHBlck9wdGlvbnMgfSBmcm9tICcuLi9zZXJ2aWNlcy9wb3BwZXInO1xuaW1wb3J0IHsgc2V0RGltZW5zaW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2N1c3RvbS1kaW1lbnNpb25zJztcblxuY29uc3QgdmFsdWVBY2Nlc3NvciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdG9TZWxlY3RDb21wb25lbnQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHByb3ZpZGVyczogW3ZhbHVlQWNjZXNzb3IsIERhdG9PdmVybGF5XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGV4cG9ydEFzOiAnZGF0b1NlbGVjdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0b1NlbGVjdENvbXBvbmVudCBleHRlbmRzIEJhc2VDdXN0b21Db250cm9sXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqIFRoZSBkcm9wZG93biBjb250YWluZXIgZWxlbWVudCB3aGljaCBpcyB0aGUgcG9ydGFsICAqKi9cbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKVxuICBkcm9wZG93bjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogVGhlIG92ZXJsYXkgb3JpZ2luIHdoaWNoIGlzIG9uZSBvZiBkYXRvLXRyaWdnZXJzICoqL1xuICBAVmlld0NoaWxkKCdvdmVybGF5T3JpZ2luJylcbiAgb3JpZ2luOiBFbGVtZW50UmVmO1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b09wdGlvbnMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRvT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIG9wdGlvbnM6IFF1ZXJ5TGlzdDxEYXRvT3B0aW9uQ29tcG9uZW50PjtcblxuICAvKiogUXVlcnlMaXN0IG9mIGRhdG9BY2NvcmRpb25Hcm91cHMgY2hpbGRyZW4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IERhdG9BY2NvcmRpb25Db21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGFjY29yZGlvbjogUXVlcnlMaXN0PERhdG9BY2NvcmRpb25Db21wb25lbnQ+O1xuXG4gIC8qKiBRdWVyeUxpc3Qgb2YgZGF0b0dyb3VwcyBjaGlsZHJlbiAqL1xuICBAQ29udGVudENoaWxkcmVuKERhdG9Hcm91cENvbXBvbmVudClcbiAgZ3JvdXBzOiBRdWVyeUxpc3Q8RGF0b0dyb3VwQ29tcG9uZW50PjtcblxuICAvKiogQWxsb3dpbmcgY3VzdG9tIHRlbXBsYXRlIGJ5IHBhc3NpbmcgKmRhdG9BY3RpdmUgZGlyZWN0aXZlIHdoaWNoIGdldHMgdGhlIGFjdGl2ZSBhcyBjb250ZXh0ICovXG4gIEBDb250ZW50Q2hpbGQoRGF0b1NlbGVjdEFjdGl2ZURpcmVjdGl2ZSlcbiAgYWN0aXZlOiBEYXRvU2VsZWN0QWN0aXZlRGlyZWN0aXZlO1xuXG4gIC8qKiBUaGUga2V5IHRoYXQgc3RvcmVzIHRoZSBvcHRpb24gaWQgKi9cbiAgQElucHV0KClcbiAgaWRLZXkgPSAnaWQnO1xuXG4gIC8qKiBUaGUgbG9va3VwIGtleSBmb3IgdGhlIGxhYmVsICovXG4gIEBJbnB1dCgpXG4gIGxhYmVsS2V5ID0gJ2xhYmVsJztcblxuICAvKiogQSBwbGFjZWhvbGRlciBmb3IgdGhlIHRyaWdnZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnY29yZS5zZWxlY3QnO1xuXG4gIC8qKiBBIHBsYWNlaG9sZGVyIGZvciB0aGUgc2VhcmNoICovXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyID0gJ2NvcmUuc2VhcmNoJztcblxuICAvKiogQ3VzdG9tIHRleHQgd2hlbiB3ZSBkb24ndCBoYXZlIHJlc3VsdHMgKi9cbiAgQElucHV0KClcbiAgc2V0IG5vSXRlbXNMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBJZiBkZWZpbmVkLCBpbmRpY2F0ZXMgYnkgd2hpY2gga2V5IHRoZSBkYXRhIHNob3VsZCBiZSBub3JtYWxpemVkICovXG4gIEBJbnB1dCgpXG4gIGdyb3VwQnk6IHN0cmluZztcblxuICAvKiogQWRkL3JlbW92ZXMgc2VhcmNoIGlucHV0ICovXG4gIEBJbnB1dCgpXG4gIGlzQ29tYm8gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGl0J3MgYSBncm91cCAqL1xuICBASW5wdXQoKVxuICBpc0dyb3VwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERlY2lkZSB3aGV0aGVyIHRvIGZpbHRlciB0aGUgcmVzdWx0cyBpbnRlcm5hbGx5IGJhc2VkIG9uIHNlYXJjaCBxdWVyeS5cbiAgICogVXNlZnVsIGZvciBhc3luYyBmaWx0ZXJpbmcsIHdoZXJlIHdlIHNlYXJjaCB0aHJvdWdoIG1vcmUgY29tcGxleCBkYXRhLlxuICAgKi9cbiAgQElucHV0KClcbiAgaW50ZXJuYWxTZWFyY2ggPSB0cnVlO1xuXG4gIC8qKiBEZWJvdW5jZSB0aW1lIHRvIGVtaXQgc2VhcmNoIHF1ZXJpZXMgKi9cbiAgQElucHV0KClcbiAgZGVib3VuY2VUaW1lID0gMzAwO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgbG9hZGluZyBpbmRpY2F0b3IgKi9cbiAgQElucHV0KClcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgc2VsZWN0IGFsbCBjaGVja2JveCAqL1xuICBASW5wdXQoKVxuICBhbGxvd1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IHNlbGVjdCBhbGwgY2hpcC4gZW1wdHkgbWVhbnMgaXQncyBkaXNhYmxlZCAqL1xuICBASW5wdXQoKVxuICBzZWxlY3RBbGxDaGlwVHh0ID0gJyc7XG5cbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSBzZWxlY3QgKi9cbiAgQElucHV0KClcbiAgdHlwZTogU2VsZWN0VHlwZSA9IFNlbGVjdFR5cGUuU0lOR0xFO1xuXG4gIC8qKiBDbGllbnQgc2VhcmNoIHN0cmF0ZWd5ICovXG4gIEBJbnB1dCgpXG4gIHNlYXJjaFN0cmF0ZWd5OiBEYXRvU2VsZWN0U2VhcmNoU3RyYXRlZ3kgPSBkZWZhdWx0Q2xpZW50U2VhcmNoU3RyYXRlZ3k7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHBvc2l0aW9uIG9mIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBwbGFjZW1lbnQ6IFBvcHBlck9wdGlvbnNbJ3BsYWNlbWVudCddID0gJ2JvdHRvbS1zdGFydCc7XG5cbiAgQElucHV0KClcbiAgaW5maW5pdGVTY3JvbGxMb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqIExpbWl0IHRoZSBudW1iZXIgb2YgcmVzdWx0cyBzaG93biAqL1xuICBASW5wdXQoKVxuICBsaW1pdFRvID0gZGVmYXVsdE9wdGlvbnNEaXNwbGF5TGltaXQ7XG5cbiAgQElucHV0KCdsaW1pdFNlbGVjdGVkVG8nKVxuICBzZXQgbGltaXRTZWxlY3RlZChsaW1pdFNlbGVjdGVkVG86IG51bWJlcikge1xuICAgIHRoaXMubGltaXRTZWxlY3RlZFRvID0gbGltaXRTZWxlY3RlZFRvO1xuICAgIGlmICh0aGlzLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBbGxvdyBzb3J0aW5nIG9mIHNlbGVjdGVkIG9wdGlvbnMgaW4gbXVsdGkgbW9kZSAqL1xuICBASW5wdXQoKVxuICBpc1NvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqIEVsZW1lbnQgdG8gYXBwZW5kIHRoZSBvcHRpb25zIG92ZXJsYXkgdG8gKi9cbiAgQElucHV0KClcbiAgYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgc3RyaW5nO1xuXG4gIC8qKiBUaGUgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBkcm9wZG93biAqL1xuICBASW5wdXQoKVxuICBzZXQgZGF0YVNldChkYXRhOiBhbnlbXSkge1xuICAgIGlmICghdGhpcy5pbml0aWFsUnVuKSB7XG4gICAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YShkYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiogZGF0YSBub3JtYWxpemF0aW9uLCBpZiByZXF1aXJlZCwgd2lsbCBiZSBoYW5kbGVkIGJ5IG5nT25Jbml0IGluIHRoZSBpbml0aWFsIHJ1biAqL1xuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgLyoqIElmIGl0J3MgYXN5bmMgdXBkYXRlcywgY3JlYXRlIG1pY3JvIHRhc2sgaW4gb3JkZXIgdG8gcmUtc3Vic2NyaWJlIHRvIGNsaWNrcyAqL1xuICAgIGlmICh0aGlzLl9kYXRhSXNEaXJ0eSkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLm1hcmtBc0FjdGl2ZSh0aGlzLl9tb2RlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhSXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICAvKiogU2VhcmNoIGdyb3VwcyBhcyB3ZWxsIGFzIG9wdGlvbnMgKi9cbiAgQElucHV0KClcbiAgc2VhcmNoR3JvdXBMYWJlbHMgPSB0cnVlO1xuXG4gIC8qKiBBZGQgY3VzdG9tIGNsYXNzIHRvIHRoZSBzZWxlY3QgZHJvcERvd24gKi9cbiAgQElucHV0KClcbiAgZGF0b1NlbGVjdENsYXNzOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBzaG93IGVtcHR5IHJlc3VsdCB0ZXh0ICovXG4gIEBJbnB1dCgpXG4gIHNob3dFbXB0eVJlc3VsdHNUZXh0ID0gdHJ1ZTtcblxuICAvKipcbiAgICoga2VlcCBmb2N1cyBpbiBpbnB1dCBhZnRlciBzZWxlY3Rpbmcgb3B0aW9uXG4gICAqL1xuICBASW5wdXQoKVxuICBrZWVwRm9jdXMgPSBmYWxzZTtcblxuICAvKiogRW1pdCBzZWFyY2ggdmFsdWUgd2hlbiBpbnRlcm5hbCBzZWFyY2ggaXMgZmFsc2UgKi9cbiAgQE91dHB1dCgpXG4gIHNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gW3dpdGhBY3Rpb25zXSBpcyB0cnVlIGFuZCB0aGUgdXNlciBjbGlja3Mgc2F2ZSAqL1xuICBAT3V0cHV0KClcbiAgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgZmV0Y2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgbGltaXRTZWxlY3RlZFRvOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdldHRlcnMgYW5kIFNldHRlcnNcbiAgICovXG5cbiAgZ2V0IGNvbnRhaW5zR3JvdXBzKCkge1xuICAgIHJldHVybiB0aGlzLmdyb3VwcyAmJiB0aGlzLmdyb3Vwcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuXG4gIHNldCBvcGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGhhc1Jlc3VsdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc1Jlc3VsdHM7XG4gIH1cblxuICBzZXQgaGFzUmVzdWx0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hhc1Jlc3VsdHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZWwubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzU2luZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNlbGVjdFR5cGUuU0lOR0xFO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGkoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2VsZWN0VHlwZS5NVUxUSTtcbiAgfVxuXG4gIGdldCBfc2hvd0VtcHR5UmVzdWx0cygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RW1wdHlSZXN1bHRzVGV4dCAmJiB0aGlzLl9kYXRhICYmICghdGhpcy5oYXNSZXN1bHRzIHx8ICF0aGlzLl9kYXRhLmxlbmd0aCkgJiYgIXRoaXMuaXNHcm91cDtcbiAgfVxuXG4gIGdldCBfY291bnQoKSB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmdldFZpc2libGVPcHRpb25zKGZhbHNlKS5sZW5ndGg7XG4gICAgY29uc3QgYWN0aXZlcyA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICByZXR1cm4gYCgke2FjdGl2ZXN9LyR7dG90YWx9KWA7XG4gIH1cblxuICAvKiogV2hldGhlciBhbGwgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0FsbENoZWNrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKS5ldmVyeShvcHRpb24gPT4gdGhpcy5fbW9kZWwuaW5kZXhPZihvcHRpb24pID4gLTEpO1xuICB9XG5cbiAgZ2V0IHNob3dTZWxlY3RBbGxDaGlwKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubGVuZ3RoICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHNvbWUgdGhlIG9wdGlvbnMgYXJlIGNoZWNrZWQgKi9cbiAgZ2V0IF9pc0luZGV0ZXJtaW5hdGVseUNoZWNrZWQoKSB7XG4gICAgbGV0IHNvbWVDaGVja2VkLFxuICAgICAgc29tZU5vdENoZWNrZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZpc2libGVPcHRpb24gb2YgdGhpcy5nZXRWaXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICBpZiAodGhpcy5fbW9kZWwuaW5kZXhPZih2aXNpYmxlT3B0aW9uKSA+IC0xKSB7XG4gICAgICAgIHNvbWVDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWVOb3RDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzb21lQ2hlY2tlZCAmJiBzb21lTm90Q2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEZvcm1Db250cm9sIHdoaWNoIGxpc3RlbnMgZm9yIHNlYXJjaCB2YWx1ZSBjaGFuZ2VzICovXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcblxuICAvKiogRXhwb3NlIHRoZSBzZWFyY2ggdGVybSBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBoaWdobGlnaHQgZGlyZWN0aXZlICovXG4gIHNlYXJjaFRlcm0gPSAnJztcblxuICAvKipcbiAgICogUHJpdmF0ZSBQcm9wZXJ0aWVzXG4gICAqL1xuICBfbm9JdGVtc0xhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKCdjb3JlLm5vLWl0ZW1zJyk7XG5cbiAgLyoqIFN0b3JlIHRoZSBpbml0aWFsIGRhdGEgKi9cbiAgX2RhdGEgPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgd2UgYWxyZWFkeSBpbml0aWFsaXplZCB0aGUgZGF0YSxcbiAgICogIFRoaXMgaXMgb3B0aW1pemF0aW9uIGZvciBub24gYXN5bmMgY2FsbHMuXG4gICAqICovXG4gIF9kYXRhSXNEaXJ0eSA9IGZhbHNlO1xuXG4gIC8qKiBUcmlnZ2VycyB0aGUgZm9jdXMgb24gdGhlIGlucHV0ICovXG4gIF9mb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTdG9yZSB0aGUgYWN0aXZlIG9wdGlvbnMgKi9cbiAgX21vZGVsID0gW107XG5cbiAgLyoqIEVuYWJsZS9kaXNhYmxlIHRoZSBzZWxlY3QtdHJpZ2dlciAqL1xuICBfZGlzYWJsZWQ7XG5cbiAgLyoqIFdoZXRlciB0aGUgZHJvcGRvd24gaXMgb3BlbiAqL1xuICBfb3BlbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHdlIGhhdmUgc2VhcmNoIHJlc3VsdHMgKi9cbiAgX2hhc1Jlc3VsdHMgPSB0cnVlO1xuXG4gIC8qKiBJbmRpY2F0aW9uIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlcyAqL1xuICBfaW5pdGlhbE9wZW4gPSB0cnVlO1xuXG4gIC8qKiBXaGV0aGVyIGdlbmVyYXRlIGNhbmNlbC9zYXZlIGZvb3RlciAqL1xuICBfd2l0aEFjdGlvbnMgPSBmYWxzZTtcblxuICBfd2l0aEluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG5cbiAgLyoqIE5vdGlmeSB0aGUgbXVsdGkgdHJpZ2dlciB3aGVuIGNsaWNrIG91dHNpZGUgdG8gcmVtb3ZlIHRoZSBmb2N1cyAgKi9cbiAgX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuXG4gIC8qKiBEcm9wZG93biBzaXplIGNsYXNzICovXG4gIF9kcm9wZG93bkNsYXNzOiBzdHJpbmdbXTtcblxuICAvKiogdHJ1ZSB1bnRpbCBuZ09uSW5pdCAqL1xuICBwcml2YXRlIGluaXRpYWxSdW4gPSB0cnVlO1xuXG4gIC8qKiBTZWFyY2ggY29udHJvbCBzdWJzY3JpcHRpb24gKi9cbiAgcHJpdmF0ZSBzZWFyY2hTdWJzY3JpcHRpb247XG5cbiAgLyoqIENsaWNrcyBvcHRpb25zIHN1YnNjcmlwdGlvbiAqL1xuICBwcml2YXRlIGNsaWNrc1N1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPERhdG9PcHRpb25Db21wb25lbnQ+O1xuXG4gIHByaXZhdGUgaW5maW5pdGVTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGRhdG9PdmVybGF5OiBEYXRvT3ZlcmxheSxcbiAgICBAQXR0cmlidXRlKCduYWtlZCcpIHB1YmxpYyBfbmFrZWQsXG4gICAgQEF0dHJpYnV0ZSgnZGF0b1NpemUnKSBwdWJsaWMgc2l6ZSxcbiAgICBAQXR0cmlidXRlKCd3aWR0aCcpIHB1YmxpYyB3aWR0aDogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaXplID0gc2l6ZSB8fCAnbWQnO1xuICAgIHRoaXMuX2Ryb3Bkb3duQ2xhc3MgPSBbYGRhdG8tc2VsZWN0LSR7dGhpcy5zaXplfWBdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuZGF0b1NlbGVjdENsYXNzKSB7XG4gICAgICB0aGlzLl9kcm9wZG93bkNsYXNzLnB1c2godGhpcy5kYXRvU2VsZWN0Q2xhc3MpO1xuICAgIH1cblxuICAgIHRoaXMuX3dpdGhBY3Rpb25zID0gdGhpcy5zYXZlLm9ic2VydmVycy5sZW5ndGggPT09IDE7XG4gICAgdGhpcy5fd2l0aEluZmluaXRlU2Nyb2xsID0gdGhpcy5mZXRjaC5vYnNlcnZlcnMubGVuZ3RoID09PSAxO1xuICAgIHRoaXMubGlzdGVuVG9TZWFyY2goKTtcbiAgICB0aGlzLl9kYXRhID0gbm9ybWFsaXplRGF0YSh0aGlzLl9kYXRhLCB0aGlzLmxhYmVsS2V5LCB0aGlzLmdyb3VwQnkpO1xuICAgIHRoaXMuaW5pdGlhbFJ1biA9IGZhbHNlO1xuICAgIC8vIGhlaWdodCBpcyBiZWluZyBjb250cm9sbGVkIGJ5IHNpemUgcHJvcGVydHlcbiAgICBzZXREaW1lbnNpb25zKHRoaXMud2lkdGgsIG51bGwsIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgbWFya1RvdWNoZWQoKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLm9uVG91Y2hlZCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5kYXRvT3ZlcmxheS5kZXRhY2goKTtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIHRoaXMuX2ZvY3VzID0gZmFsc2U7XG4gICAgdGhpcy5fY2xpY2tPdXRzaWRlID0gdHJ1ZTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uICYmIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICAgKi9cbiAgdG9nZ2xlKCkge1xuICAgIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gICAgaWYgKHRoaXMub3BlbiAmJiAodGhpcy5pc011bHRpIHx8IHRoaXMuaXNDb21ibykpIHtcbiAgICAgIHRoaXMuX2ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShhY3RpdmVPcHRpb25zOiBhbnkgfCBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuX21vZGVsID0gYWN0aXZlT3B0aW9ucyA/IGNvZXJjZUFycmF5KGFjdGl2ZU9wdGlvbnMpIDogW107XG4gICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgY29uc3Qgb3ZlclRoZUxpbWl0ID0gdGhpcy5saW1pdFNlbGVjdGVkVG8gJiYgdGhpcy5pc011bHRpICYmIHRoaXMuX21vZGVsLmxlbmd0aCA+PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsLCB7IGRlc2VsZWN0QWxsOiB0cnVlIH0pO1xuICAgICAgb3ZlclRoZUxpbWl0ICYmIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgIH1cbiAgICAvKiogRm9yIGxhdGVyIHVwZGF0ZXMgKi9cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBvdmVybGF5XG4gICAqL1xuICBvcGVuRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgLyoqIENsb3NlIHRoZSBkcm9wZG93biB3aGVuIHdlIGNsaWNrIG9uIHRoZSB0cmlnZ2VyIGFuZCB3ZSBkb24ndCBoYXZlIHNlYXJjaCBvciBtdWx0aXBsZSAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgIXRoaXMuaXNDb21ibyAmJiB0aGlzLmlzU2luZ2xlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIERvbid0IGNsb3NlIHRoZSBkcm9wZG93biBpZiB3ZSBjbGljayBvbiB0aGUgaW5wdXQgYW5kIGl0J3Mgb3BlbiAqL1xuICAgIGlmICh0aGlzLm9wZW4gJiYgKHRoaXMuaXNNdWx0aSB8fCB0aGlzLmlzQ29tYm8pKSB7XG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0Lm5vZGVOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRvT3ZlcmxheS5jcmVhdGVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZU92ZXJsYXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmJhY2tEcm9wQ2xpY2skLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLm9wZW4gJiYgdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRvT3ZlcmxheS5hdHRhY2goeyBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50IH0sIHRoaXMuX2Ryb3Bkb3duQ2xhc3MpO1xuXG4gICAgdGhpcy50b2dnbGUoKTtcblxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gd2UgZmlyc3Qgb3BlbiB0aGUgZHJvcGRvd24gd2UgbmVlZCB0byBtYXJrIHRoZVxuICAgICAgICogRm9ybUNvbnRyb2wgdmFsdWVzIGFzIGFjdGl2ZXNcbiAgICAgICAqL1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxPcGVuKSB7XG4gICAgICAgIHRoaXMubWFya0FzQWN0aXZlKHRoaXMuX21vZGVsKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbE9wZW4gPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGltaXRTZWxlY3RlZFRvICYmIHRoaXMuX21vZGVsLmxlbmd0aCA9PT0gdGhpcy5saW1pdFNlbGVjdGVkVG8pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3dpdGhJbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZUluZmluaXRlU2Nyb2xsKCk7XG4gICAgfVxuXG4gICAgc2V0U3R5bGUocXVlcnkoJy5kYXRvLW92ZXJsYXknKSwgJ3pJbmRleCcsIHpJbmRleFBsZWFzZSgpKTtcbiAgICBjb25zdCBkcm9wZG93bkNvbnRhaW5lciA9IHF1ZXJ5KCcuZGF0by1zZWxlY3RfX2Ryb3Bkb3duLWNvbnRhaW5lcicpO1xuICAgIHNldFN0eWxlKGRyb3Bkb3duQ29udGFpbmVyLCAnd2lkdGgnLCBgJHt0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1weGApO1xuXG4gICAgLyoqIFByZXZlbnQgc2Nyb2xsIHdoaWxlIHRoZSBkcm9wZG93biBpcyBvcGVuICovXG4gICAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBpc01vYmlsZSgpID8gJ3RvdWNobW92ZScgOiAnc2Nyb2xsJztcbiAgICAgIGxldCBzY3JvbGxFdmVudCA9IGZyb21FdmVudCh3aW5kb3csIGV2ZW50TmFtZSk7XG4gICAgICBpZiAoaXNNb2JpbGUoKSkge1xuICAgICAgICBzY3JvbGxFdmVudCA9IHNjcm9sbEV2ZW50LnBpcGUoZmlsdGVyKGV2ZW50ID0+ICFkcm9wZG93bkNvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBzY3JvbGxFdmVudC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoZSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9PcHRpb25DbGljayh0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCk7XG4gIH1cblxuICBjaGVja0FsbChjaGVjazogYm9vbGVhbikge1xuICAgIGxldCBjaGVja2VkID0gY2hlY2s7XG4gICAgaWYgKHRoaXMuX2lzSW5kZXRlcm1pbmF0ZWx5Q2hlY2tlZCkge1xuICAgICAgY2hlY2tlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB2aXNpYmxlT3B0aW9ucyA9IHRoaXMuZ2V0VmlzaWJsZU9wdGlvbnMoKTtcbiAgICBjb25zdCBpc0FsbFZpc2libGUgPSB2aXNpYmxlT3B0aW9ucy5sZW5ndGggPT09IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoaXNBbGxWaXNpYmxlKSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IGNoZWNrZWQgPyB2aXNpYmxlT3B0aW9ucyA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBjb25zdCB0ZW1wID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vZGVsLmluZGV4T2Yob3B0aW9uKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tb2RlbCA9IFsuLi50aGlzLl9tb2RlbCwgLi4udGVtcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IHRoaXMuX21vZGVsLmZpbHRlcihvcHRpb24gPT4gdmlzaWJsZU9wdGlvbnMuaW5kZXhPZihvcHRpb24pID09PSAtMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHJlb3JkZXJPcHRpb25zKG5ld09yZGVyOiBhbnlbXSkge1xuICAgIHRoaXMuX21vZGVsID0gbmV3T3JkZXI7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gIH1cblxuICByZW1vdmVPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgdXBkYXRlRGlzYWJsZWQgPSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJiB0aGlzLl9tb2RlbC5sZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvO1xuICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gb3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICBjb25zdCBvcHRpb25Ub1JlbW92ZSA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgZGF0b09wdGlvbiA9PiBkYXRvT3B0aW9uLm9wdGlvbiAmJiBkYXRvT3B0aW9uLm9wdGlvblt0aGlzLmlkS2V5XSA9PT0gb3B0aW9uW3RoaXMuaWRLZXldXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFRvIHByZXZlbnQgY2FzZXMgd2hlbiB0aGUgb3B0aW9ucyBhcmUgbGltaXRlZCBhbmQgZG9lc250IGluY2x1ZGUgdGhlIGFjdGl2ZSBvcHRpb24sXG4gICAgICogdGhhdCBjYW4gYmUgcmVhY2hlZCBvbmx5IGJ5IHNlcnZlciBzZWFyY2guXG4gICAgICovXG4gICAgaWYgKG9wdGlvblRvUmVtb3ZlKSB7XG4gICAgICBvcHRpb25Ub1JlbW92ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB1cGRhdGVEaXNhYmxlZCAmJiB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcblxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fbW9kZWwpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuYXN5bmNVcGRhdGVEcm9wZG93blBvc2l0aW9uKCk7XG4gIH1cblxuICBwcmV2ZW50Qm9keVNjcm9sbChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIG92ZXJsYXkgdG8gZGlzcGxheSB0aGUgc2VsZWN0IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheSgpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBEYXRvVGVtcGxhdGVQb3J0YWwodGhpcy5kcm9wZG93bik7XG4gICAgbGV0IGFwcGVuZFRvRWxlbWVudDtcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5hcHBlbmRUbykpIHtcbiAgICAgIGFwcGVuZFRvRWxlbWVudCA9IGNsb3Nlc3QodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuYXBwZW5kVG8gYXMgc3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kVG9FbGVtZW50ID0gdGhpcy5hcHBlbmRUbztcbiAgICB9XG5cbiAgICB0aGlzLmRhdG9PdmVybGF5LmNyZWF0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGVtcGxhdGVQb3J0YWwsIGFwcGVuZFRvRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wcGVyIGRvZXNuJ3Qgc3VwcG9ydCBwZXJmZWN0LXNjcm9sbC1iYXIsIHNvIHdlIG5lZWQgdG8gZG8gaXQgbWFudWFsbHlcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUGVyZmVjdFNjcm9sbEJhcigpIHtcbiAgICBjb25zdCBwZXJmZWN0U2Nyb2xsQmFyUGFyZW50ID0gY2xvc2VzdCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgJy5wcycpO1xuICAgIGlmIChwZXJmZWN0U2Nyb2xsQmFyUGFyZW50KSB7XG4gICAgICBmcm9tRXZlbnQocGVyZmVjdFNjcm9sbEJhclBhcmVudCwgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRocm90dGxlVGltZSgxMCksXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdG9PdmVybGF5LnNjaGVkdWxlVXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmlzaWJsZU9wdGlvbnMoZ2V0UmF3T3B0aW9ucyA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLmZpbHRlcihkYXRvT3B0aW9uID0+ICFkYXRvT3B0aW9uLmRpc2FibGVkKTtcbiAgICBpZiAoZ2V0UmF3T3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGRhdG9PcHRpb24gPT4gZGF0b09wdGlvbi5vcHRpb24pO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBpbml0aWFsIGNvbnRyb2wgdmFsdWUgYXMgYWN0aXZlXG4gICAqL1xuICBwcml2YXRlIG1hcmtBc0FjdGl2ZShtb2RlbDogYW55W10sIG9wdGlvbnM6IHsgZGVzZWxlY3RBbGw6IGJvb2xlYW4gfSA9IHsgZGVzZWxlY3RBbGw6IGZhbHNlIH0pIHtcbiAgICBjb25zdCBhc0FycmF5ID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICBpZiAob3B0aW9ucy5kZXNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5yZXNldEFsbCgpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBtb2RlbCkge1xuICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaCA9IGFzQXJyYXkuZmluZChjdXJyZW50ID0+IGN1cnJlbnQub3B0aW9uICYmIGN1cnJlbnQub3B0aW9uW3RoaXMuaWRLZXldID09PSBvcHRpb25bdGhpcy5pZEtleV0pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmFjdGl2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgYWxsIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgc2hvd0FsbCgpIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGdyb3VwQ29tcG9uZW50czogTGlzdEdyb3VwQ29tcG9uZW50W10gPSB0aGlzLmdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwQ29tcG9uZW50IG9mIGdyb3VwQ29tcG9uZW50cykge1xuICAgICAgZ3JvdXBDb21wb25lbnQuX2hpZGRlbiA9IGZhbHNlO1xuXG4gICAgICAvKiBJZiB0aGlzIGFjY29yZGlvbiBncm91cCBoYXMgYmVlbiBleHBlbmRlZCBieSB0aGUgc2VhcmNoIGZ1bmN0aW9uLFxuICAgICAgICAgdGhlbiBjb2xsYXBzZSBpdCB0byB0aGUgb3JpZ2luYWwgc3RhdGVcbiAgICAgICovXG4gICAgICBpZiAoaXNBY2NvcmRpb24pIHtcbiAgICAgICAgY29uc3QgYW55R3JvdXAgPSBncm91cENvbXBvbmVudCBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGFueUdyb3VwLl9fZXhwZW5kZWQpIHtcbiAgICAgICAgICBhbnlHcm91cC5fX2V4cGVuZGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgYWNjb3JkaW9uR3JvdXAgPSBhbnlHcm91cCBhcyBEYXRvQWNjb3JkaW9uR3JvdXBDb21wb25lbnQ7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuY29udGVudC5kaXNhYmxlQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGF0b09wdGlvbiBvZiB0aGlzLm9wdGlvbnMudG9BcnJheSgpKSB7XG4gICAgICBkYXRvT3B0aW9uLmhpZGVBbmREaXNhYmxlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3Igb3B0aW9ucyBhbmQgcmV0dXJucyBpZiB3ZSBoYXZlIHJlc3VsdFxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBsZXQgaGFzUmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZ3JvdXBDb21wb25lbnRzQXJyYXk6IExpc3RHcm91cENvbXBvbmVudFtdID0gdGhpcy5nZXRHcm91cENvbXBvbmVudHNBcnJheSgpO1xuICAgIGNvbnN0IGhhc0dyb3VwcyA9IGdyb3VwQ29tcG9uZW50c0FycmF5Lmxlbmd0aDtcblxuICAgIGlmIChoYXNHcm91cHMpIHtcbiAgICAgIGhhc1Jlc3VsdCA9IHRoaXMuc2VhcmNoSW5Hcm91cHMoZ3JvdXBDb21wb25lbnRzQXJyYXksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzUmVzdWx0ID0gdGhpcy5zZWFyY2hJbk9wdGlvbnModmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBtYXRjaGluZyBncm91cHMgYW5kIGNoaWxkcmVuLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbkdyb3Vwcyhncm91cENvbXBvbmVudHNBcnJheTogTGlzdEdyb3VwQ29tcG9uZW50W10sIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0FjY29yZGlvbiA9IHRoaXMuaXNBY2NvcmRpb25Hcm91cCgpO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLl9kYXRhLmxlbmd0aDtcbiAgICBsZXQgaGFzUmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5fZGF0YVtpXTtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5nZXRHcm91cEtleShncm91cCk7XG4gICAgICBjb25zdCBncm91cE1hdGNoID0gdGhpcy5zZWFyY2hHcm91cExhYmVscyAmJiB0aGlzLnNlYXJjaFN0cmF0ZWd5KGdyb3VwLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG4gICAgICBjb25zdCBncm91cE9wdGlvbnMgPSBncm91cC5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gY2hpbGRbdGhpcy5pZEtleV0pO1xuICAgICAgLyogc2hvdy9oaWRlIHRoZSBvcHRpb25zICovXG4gICAgICBjb25zdCBzaG93R3JvdXAgPSB0aGlzLnNlYXJjaEluT3B0aW9ucyh2YWx1ZSwgZ3JvdXBPcHRpb25zLCBncm91cE1hdGNoKTtcblxuICAgICAgaWYgKHNob3dHcm91cCAmJiAhaGFzUmVzdWx0cykge1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogRmluZCB0aGUgcmlnaHQgY29tcG9uZW50LCBhY2NvcmRpbmcgdG8gdGhlIGludGVybmFsIGtleSBhc3NpZ25lZCBpbiB0aGUgcHJldmlvdXMgc2VhcmNoLlxuICAgICAgICAgV2hlbiBubyBtYXRjaCBpcyBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHRoZSBzYW1lIGluZGV4IGFzIHRoZSBncm91cCBvcHRpb24uXG4gICAgICAqICBUaGUgaW5kZXggaXMgY29uc2lkZXJlZCBsZXNzIHNhZmUsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSBhZnRlciBzb3J0aW5nLiAqL1xuICAgICAgY29uc3QgZ3JvdXBDb21wb25lbnQgPSBncm91cENvbXBvbmVudHNBcnJheS5maW5kKChnOiBhbnkpID0+IGcuX19rZXkgPT09IGdyb3VwS2V5KSB8fCBncm91cENvbXBvbmVudHNBcnJheVtpXTtcbiAgICAgIC8qIFNob3cvaGlkZSB0aGUgZ3JvdXAgKi9cbiAgICAgIGlmIChncm91cENvbXBvbmVudCkge1xuICAgICAgICBncm91cENvbXBvbmVudC5faGlkZGVuID0gIXNob3dHcm91cDtcbiAgICAgICAgLyogYXNzaWduIGFuIGludGVybmFsIGtleSB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlLCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciAoYWJvdmUpLiAqL1xuICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2tleSA9IGdyb3VwS2V5O1xuICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiBvbiBtYXRjaGluZyByZXN1bHRzICovXG4gICAgICAgIGlmIChpc0FjY29yZGlvbiAmJiBzaG93R3JvdXApIHtcbiAgICAgICAgICBjb25zdCBhY2NvcmRpb25Hcm91cCA9IGdyb3VwQ29tcG9uZW50IGFzIERhdG9BY2NvcmRpb25Hcm91cENvbXBvbmVudDtcblxuICAgICAgICAgIGlmICghYWNjb3JkaW9uR3JvdXAuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGFjY29yZGlvbkdyb3VwLmNvbnRlbnQuZGlzYWJsZUFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAvKiBFeHBhbmQgdGhlIGFjY29yZGlvbiAqL1xuICAgICAgICAgICAgYWNjb3JkaW9uR3JvdXAuZXhwYW5kKHRydWUpO1xuICAgICAgICAgICAgLyogTWFyayB0aGUgYWNjb3JkaW9uIGFzIGV4cGFuZGVkLCBzbyB3ZSBjYW4gcmV0dXJuIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGxhdGVyICovXG4gICAgICAgICAgICAoZ3JvdXBDb21wb25lbnQgYXMgYW55KS5fX2V4cGVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIG9wdGlvbnMgdG8gc2hvdyBvciBoaWRlIGVhY2ggYW5kIHJldHVybiBpZiByZXN1bHQgaGFzIGJlZW4gZm91bmQuXG4gICAqIENvbnNpZGVyIHdlIGhhdmUgYSBncm91cCB0aGF0IG1hdGNoIHdlIHNob3cgYWxsIG9mIGl0cyBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hJbk9wdGlvbnModmFsdWU6IHN0cmluZywgZ3JvdXBPcHRpb25zID0gW10sIGdyb3VwTWF0Y2ggPSBmYWxzZSkge1xuICAgIGxldCBoYXNSZXN1bHRzID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgY29uc3Qgb3B0aW9uSW5Hcm91cCA9IGdyb3VwT3B0aW9ucy5pbmRleE9mKGRhdG9PcHRpb24ub3B0aW9uICYmIGRhdG9PcHRpb24ub3B0aW9uW3RoaXMuaWRLZXldKSAhPT0gLTE7XG5cbiAgICAgIGlmIChncm91cE1hdGNoICYmIG9wdGlvbkluR3JvdXApIHtcbiAgICAgICAgZGF0b09wdGlvbi5oaWRlQW5kRGlzYWJsZWQoZmFsc2UpO1xuICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoIXNpemUoZ3JvdXBPcHRpb25zKSB8fCBvcHRpb25Jbkdyb3VwKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5zZWFyY2hTdHJhdGVneShkYXRvT3B0aW9uLCB2YWx1ZSwgdGhpcy5sYWJlbEtleSk7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdG9PcHRpb24uaGlkZUFuZERpc2FibGVkKGZhbHNlKTtcbiAgICAgICAgICBoYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNSZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IG9mIHRoZSBvcHRpb24gZ3JvdXAuIEl0IGNhbiBiZSB0aGUgZ3JvdXAgSWQgaWYgZXhpc3RzLCBvciB0aGUgbGFiZWwuXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwS2V5KG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24gJiYgKG9wdGlvblt0aGlzLmlkS2V5XSB8fCBvcHRpb25bdGhpcy5sYWJlbEtleV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBzZWFyY2ggY2hhbmdlcyBhbmQgZmlsdGVyIHRoZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3RlblRvU2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uID1cbiAgICAgIHRoaXMuaXNDb21ibyAmJlxuICAgICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmludGVybmFsU2VhcmNoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXN1bHRzID0gdGhpcy5zZWFyY2hPcHRpb25zKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2guZW1pdCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBvcHRpb24gY2xpY2sgYW5kIGNoYW5nZSB0aGUgc3RhdGUgYWNjb3JkaW5nbHlcbiAgICovXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9PcHRpb25DbGljayhvcHRpb25zOiBRdWVyeUxpc3Q8RGF0b09wdGlvbkNvbXBvbmVudD4pIHtcbiAgICB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbiAmJiB0aGlzLmNsaWNrc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgLyoqIEdhdGhlciBhbGwgdGhlIGNsaWNrcyAqL1xuICAgIGNvbnN0IGNsaWNrcyQgPSBvcHRpb25zLm1hcChvcHRpb24gPT5cbiAgICAgIG9wdGlvbi5jbGljayQucGlwZShcbiAgICAgICAgbWFwKChldmVudDogRXZlbnQpID0+ICh7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvKiogQ29uc2lkZXIgY2hhbmdlIGl0IHRvIHVzZSBldmVudCBkZWxlZ2F0aW9uICovXG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gPSBtZXJnZSguLi5jbGlja3MkKS5zdWJzY3JpYmUoKHsgb3B0aW9uLCBldmVudCB9KSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2sob3B0aW9uKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhvcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGlzRXNjYXBlKGV2ZW50KSAmJiB0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuX2NsaWNrT3V0c2lkZSA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAga2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoaXNFbnRlcihldmVudCkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMub3B0aW9ucy50b0FycmF5KClbaW5kZXhdO1xuICAgICAgdGhpcy5pc1NpbmdsZSA/IHRoaXMuaGFuZGxlU2luZ2xlQ2xpY2soYWN0aXZlKSA6IHRoaXMuaGFuZGxlTXVsdGlDbGljayhhY3RpdmUpO1xuICAgIH1cblxuICAgIGlmIChpc0Fycm93VXBEb3duKGV2ZW50KSkge1xuICAgICAgdGhpcy5rZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKTtcbiAgICAgIF9zY3JvbGxUb09wdGlvbih7XG4gICAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleDogdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCxcbiAgICAgICAgZ3JvdXBzOiB0aGlzLmdyb3VwcyxcbiAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFc2NhcGUoZXZlbnQpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEFsbCgpIHtcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgZGF0b09wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNpbmdsZUNsaWNrKGRhdG9PcHRpb246IERhdG9PcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAoIWRhdG9PcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGRhdG9PcHRpb24uYWN0aXZlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzZXRBbGwoKTtcbiAgICAgIGRhdG9PcHRpb24uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICB0aGlzLl9tb2RlbCA9IFtyYXdPcHRpb25dO1xuICAgIHRoaXMub25DaGFuZ2UocmF3T3B0aW9uKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU11bHRpQ2xpY2soZGF0b09wdGlvbjogRGF0b09wdGlvbkNvbXBvbmVudCkge1xuICAgIGlmICghZGF0b09wdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtb2RlbExlbmd0aCA9IHRoaXMuX21vZGVsLmxlbmd0aDtcbiAgICBjb25zdCB1cGRhdGVEaXNhYmxlZCA9XG4gICAgICB0aGlzLmxpbWl0U2VsZWN0ZWRUbyAmJlxuICAgICAgKG1vZGVsTGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbyB8fCAobW9kZWxMZW5ndGggPT09IHRoaXMubGltaXRTZWxlY3RlZFRvIC0gMSAmJiAhZGF0b09wdGlvbi5hY3RpdmUpKTtcbiAgICBkYXRvT3B0aW9uLmFjdGl2ZSA9ICFkYXRvT3B0aW9uLmFjdGl2ZTtcbiAgICBjb25zdCByYXdPcHRpb24gPSBkYXRvT3B0aW9uLm9wdGlvbjtcbiAgICBpZiAoZGF0b09wdGlvbi5hY3RpdmUpIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuY29uY2F0KHJhd09wdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5fbW9kZWwuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudFt0aGlzLmlkS2V5XSAhPT0gcmF3T3B0aW9uW3RoaXMuaWRLZXldKTtcbiAgICB9XG4gICAgdXBkYXRlRGlzYWJsZWQgJiYgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9tb2RlbCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5hc3luY1VwZGF0ZURyb3Bkb3duUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVJbmZpbml0ZVNjcm9sbCgpIHtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRvLXNlbGVjdF9fZHJvcGRvd24nKSwgJ3Njcm9sbCcpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApKVxuICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRhdG8tc2VsZWN0X19kcm9wZG93bicpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxZID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGhlaWdodCAtIHNjcm9sbFk7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IDAgfHwgb2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaC5lbWl0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uICYmIHRoaXMuc2VhcmNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24gJiYgdGhpcy5jbGlja3NTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmluZmluaXRlU3Vic2NyaXB0aW9uICYmIHRoaXMuaW5maW5pdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkICYmIHRoaXMuZGF0b092ZXJsYXkuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyb3VwIGNvbXBvbmVudCBpcyBBY2NvcmRpb25cbiAgICovXG4gIHByaXZhdGUgaXNBY2NvcmRpb25Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvcmRpb24gJiYgdGhpcy5hY2NvcmRpb24ubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGFuIGFycmF5IG9mIHRoZSBncm91cCBjb21wb25lbnRzXG4gICAqL1xuICBwcml2YXRlIGdldEdyb3VwQ29tcG9uZW50c0FycmF5KCk6IExpc3RHcm91cENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5pc0FjY29yZGlvbkdyb3VwKCkgPyB0aGlzLmFjY29yZGlvbi5maXJzdC5ncm91cHMudG9BcnJheSgpIDogdGhpcy5ncm91cHMgJiYgdGhpcy5ncm91cHMudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEaXNhYmxlZFN0YXRlKCkge1xuICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5fbW9kZWwubGVuZ3RoID09PSB0aGlzLmxpbWl0U2VsZWN0ZWRUbztcbiAgICBmb3IgKGNvbnN0IGRhdG9PcHRpb24gb2YgdGhpcy5vcHRpb25zLnRvQXJyYXkoKSkge1xuICAgICAgaWYgKCFkYXRvT3B0aW9uLmFjdGl2ZSkge1xuICAgICAgICBkYXRvT3B0aW9uLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHRoZSBvdmVybGF5IHdpbGwgYmUgdXBkYXRlIEFGVEVSIENoYW5nZSBEZXRlY3Rpb24gd2FzIGRvbmVcbiAgLy8gU28gdGhlIGl0ZW1zIGluIHRoZSBpbnB1dCAoYW5kIGl0cyBoZWlnaHQpIGlzIHVwZGF0ZVxuICBwcml2YXRlIGFzeW5jVXBkYXRlRHJvcGRvd25Qb3NpdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRvT3ZlcmxheSAmJiB0aGlzLmRhdG9PdmVybGF5LmF0dGFjaGVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGF0b092ZXJsYXkuc2NoZWR1bGVVcGRhdGUoKSwgMCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/esm2015/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
window.coreVersion = '22.9.
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
window.coreVersion = '22.9.5';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuOS41JzsiXX0=
|