http-request-manager 15.0.12 → 15.0.17
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/README.md +274 -117
- package/esm2022/lib/http-request-manager.module.mjs +6 -6
- package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +3 -3
- package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +1 -3
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +80 -0
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +42 -0
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +88 -0
- package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +11 -0
- package/esm2022/lib/{file-downloader-action → http-request-services-demo/request-manager-demo/file-downloader}/spinner/spinner.component.mjs +1 -1
- package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.mjs +2 -2
- package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.mjs +8 -4
- package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +85 -46
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +38 -36
- package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +1 -9
- package/esm2022/lib/interceptors/request-error.interceptor.mjs +2 -2
- package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +12 -10
- package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +2 -2
- package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +26 -20
- package/esm2022/lib/services/request-manager-services/request.service.mjs +26 -38
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +1 -1
- package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +2 -1
- package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +4 -4
- package/esm2022/lib/services/utils/object-merger.service.mjs +39 -23
- package/esm2022/lib/services/utils/utils.service.mjs +1 -1
- package/fesm2022/http-request-manager.mjs +310 -256
- package/fesm2022/http-request-manager.mjs.map +1 -1
- package/http-request-manager-15.0.17.tgz +0 -0
- package/lib/http-request-manager.module.d.ts +2 -2
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +26 -0
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +13 -0
- package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +27 -0
- package/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.d.ts +7 -3
- package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +19 -10
- package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +16 -4
- package/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.d.ts +0 -1
- package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +3 -3
- package/lib/services/request-manager-services/http-manager.service.d.ts +3 -3
- package/lib/services/request-manager-services/request.service.d.ts +0 -1
- package/lib/services/request-manager-state-service/models/api-request.model.d.ts +5 -3
- package/lib/services/utils/object-merger.service.d.ts +8 -3
- package/package.json +1 -1
- package/esm2022/lib/file-downloader-action/download-action/download-action.component.mjs +0 -79
- package/esm2022/lib/file-downloader-action/file-download-action.component.mjs +0 -78
- package/esm2022/lib/file-downloader-action/file-download-action.module.mjs +0 -42
- package/esm2022/lib/file-downloader-action/models/download-labels-model.mjs +0 -11
- package/http-request-manager-15.0.12.tgz +0 -0
- package/lib/file-downloader-action/download-action/download-action.component.d.ts +0 -26
- package/lib/file-downloader-action/file-download-action.component.d.ts +0 -22
- package/lib/file-downloader-action/file-download-action.module.d.ts +0 -13
- /package/lib/{file-downloader-action → http-request-services-demo/request-manager-demo/file-downloader}/models/download-labels-model.d.ts +0 -0
- /package/lib/{file-downloader-action → http-request-services-demo/request-manager-demo/file-downloader}/spinner/spinner.component.d.ts +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inject, Injectable } from '@angular/core';
|
|
2
2
|
import { catchError, throwError } from 'rxjs';
|
|
3
|
-
import {
|
|
3
|
+
import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class RequestErrorInterceptor {
|
|
6
6
|
constructor() {
|
|
@@ -46,4 +46,4 @@ export class RequestErrorInterceptor {
|
|
|
46
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RequestErrorInterceptor, decorators: [{
|
|
47
47
|
type: Injectable
|
|
48
48
|
}] });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1lcnJvci5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvaW50ZXJjZXB0b3JzL3JlcXVlc3QtZXJyb3IuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTs7QUFHN0YsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUdFLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7S0FxRGxEO0lBbkRDLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRWhELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBRTFCLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUV0QyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsNkNBQTZDO2dCQUN0RCxNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQzFCLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFdBQVc7YUFDaEMsQ0FBQyxDQUFBO1lBRUYsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFFN0MsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFBO2dCQUNyQyxZQUFZLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQTtnQkFFNUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7b0JBQzdCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVTtpQkFDdkIsQ0FBQyxDQUFBO2dCQUVGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO2FBRTdDO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7Z0JBRTlCLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtnQkFDdEMsWUFBWSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7Z0JBRTVFLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO29CQUM3QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7aUJBQ3ZCLENBQUMsQ0FBQTtnQkFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQTthQUU3QztZQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWhDLENBQUMsQ0FBQyxDQUVILENBQUE7SUFDSCxDQUFDOytHQXJEVSx1QkFBdUI7bUhBQXZCLHVCQUF1Qjs7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXG5cbmltcG9ydCB7IFRvYXN0Q29sb3JzLCBUb2FzdERpc3BsYXksIFRvYXN0TWVzc2FnZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAndG9hc3QtbWVzc2FnZS1kaXNwbGF5J1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVxdWVzdEVycm9ySW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuXG4gIHRvYXN0TWVzc2FnZSA9IGluamVjdChUb2FzdE1lc3NhZ2VEaXNwbGF5U2VydmljZSlcblxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcblxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpLnBpcGUoXG5cbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlFcnJvciA9IFRvYXN0RGlzcGxheS5hZGFwdCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1RoaXMgaXMgYSB0b2FzdCBtZXNzYWdlLiBUaGlzIGlzIGFuIEVycm9yISEnLFxuICAgICAgICAgIGFjdGlvbjogJ09LJyxcbiAgICAgICAgICBjb2xvcjogVG9hc3RDb2xvcnMuU1VDQ0VTUyxcbiAgICAgICAgICBpY29uOiAnaW5mbycsXG4gICAgICAgICAgZHVyYXRpb246IDUgKiAxMDAwLCAvLzUgc2Vjb25kc1xuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPj0gNDAwICYmIGVycm9yLnN0YXR1cyA8IDUwMCkge1xuXG4gICAgICAgICAgZGlzcGxheUVycm9yLmNvbG9yID0gVG9hc3RDb2xvcnMuV0FSTlxuICAgICAgICAgIGRpc3BsYXlFcnJvci5tZXNzYWdlID0gZXJyb3IuZXJyb3IgfHwgYCR7ZXJyb3Iuc3RhdHVzfTogJHtlcnJvci5zdGF0dXNUZXh0fWBcblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NsaWVudCBFcnJvcjonLCB7XG4gICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aGlzLnRvYXN0TWVzc2FnZS50b2FzdE1lc3NhZ2UoZGlzcGxheUVycm9yKVxuXG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhdHVzID49IDUwMCkge1xuXG4gICAgICAgICAgZGlzcGxheUVycm9yLmNvbG9yID0gVG9hc3RDb2xvcnMuRVJST1JcbiAgICAgICAgICBkaXNwbGF5RXJyb3IubWVzc2FnZSA9IGVycm9yLmVycm9yIHx8IGAke2Vycm9yLnN0YXR1c306ICR7ZXJyb3Iuc3RhdHVzVGV4dH1gXG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdTZXJ2ZXIgRXJyb3I6Jywge1xuICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLmVycm9yLFxuICAgICAgICAgICAgdGV4dDogZXJyb3Iuc3RhdHVzVGV4dCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgdGhpcy50b2FzdE1lc3NhZ2UudG9hc3RNZXNzYWdlKGRpc3BsYXlFcnJvcilcblxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG5cbiAgICAgIH0pXG5cbiAgICApXG4gIH1cblxufVxuXG5cbiJdfQ==
|
package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Inject, Injectable, inject } from '@angular/core';
|
|
1
|
+
import { Inject, Injectable, Optional, inject } from '@angular/core';
|
|
2
2
|
import { ComponentStore } from '@ngrx/component-store';
|
|
3
3
|
import { withLatestFrom, map, tap } from 'rxjs/operators';
|
|
4
4
|
import { UtilsService } from '../utils/utils.service';
|
|
@@ -35,9 +35,9 @@ export class LocalStorageManagerService extends ComponentStore {
|
|
|
35
35
|
}));
|
|
36
36
|
timer$.subscribe();
|
|
37
37
|
}
|
|
38
|
-
constructor(
|
|
38
|
+
constructor(configOptions) {
|
|
39
39
|
super(storage);
|
|
40
|
-
this.
|
|
40
|
+
this.configOptions = configOptions;
|
|
41
41
|
this.storageName = 'storage';
|
|
42
42
|
this.storageSettingsName = 'global-storage';
|
|
43
43
|
this.defaultOptions = SettingOptions.adapt();
|
|
@@ -89,7 +89,7 @@ export class LocalStorageManagerService extends ComponentStore {
|
|
|
89
89
|
}));
|
|
90
90
|
this.setStore = this.updater((state, store) => {
|
|
91
91
|
const settings = StorageOption.adapt(store);
|
|
92
|
-
settings.options = this.objectMergerService.
|
|
92
|
+
settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
|
|
93
93
|
const type = store.options.storage;
|
|
94
94
|
const hasStore = this.hasGlobalStorage(type, store.id);
|
|
95
95
|
store.name = this.validStoreName(store.name);
|
|
@@ -112,7 +112,7 @@ export class LocalStorageManagerService extends ComponentStore {
|
|
|
112
112
|
});
|
|
113
113
|
this.createStore = this.updater((state, store) => {
|
|
114
114
|
const settings = StorageOption.adapt(store);
|
|
115
|
-
settings.options = this.objectMergerService.
|
|
115
|
+
settings.options = this.objectMergerService.mergeStorageOptions(settings.options);
|
|
116
116
|
const foundStore = state?.settings.some(item => item.name === store.name);
|
|
117
117
|
const expires = (settings.options?.expiresIn) ? this.utils.expires(settings.options?.expiresIn) : 0;
|
|
118
118
|
if (settings.options)
|
|
@@ -197,9 +197,9 @@ export class LocalStorageManagerService extends ComponentStore {
|
|
|
197
197
|
}
|
|
198
198
|
return typeof parsed === 'object' && parsed !== null;
|
|
199
199
|
};
|
|
200
|
-
this.storageName =
|
|
201
|
-
this.storageSettingsName =
|
|
202
|
-
this.defaultOptions =
|
|
200
|
+
this.storageName = configOptions?.LocalStorageOptions?.storageName || this.storageName;
|
|
201
|
+
this.storageSettingsName = configOptions?.LocalStorageOptions?.storageSettingsName || this.storageSettingsName;
|
|
202
|
+
this.defaultOptions = configOptions?.LocalStorageOptions?.options || this.defaultOptions;
|
|
203
203
|
this.retrieveState();
|
|
204
204
|
this.startTimer();
|
|
205
205
|
}
|
|
@@ -287,14 +287,16 @@ export class LocalStorageManagerService extends ComponentStore {
|
|
|
287
287
|
ngOnDestroy() {
|
|
288
288
|
this.persistence$.unsubscribe();
|
|
289
289
|
}
|
|
290
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
290
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
291
291
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, providedIn: 'root' }); }
|
|
292
292
|
}
|
|
293
293
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalStorageManagerService, decorators: [{
|
|
294
294
|
type: Injectable,
|
|
295
295
|
args: [{ providedIn: 'root' }]
|
|
296
296
|
}], ctorParameters: function () { return [{ type: i1.ConfigOptions, decorators: [{
|
|
297
|
+
type: Optional
|
|
298
|
+
}, {
|
|
297
299
|
type: Inject,
|
|
298
300
|
args: [CONFIG_SETTINGS_TOKEN]
|
|
299
301
|
}] }]; } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBRWxHLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBUXJFLE1BQU0sT0FBTyxHQUFVO0lBQ3JCLFdBQVcsRUFBRSxFQUFFO0lBQ2YsYUFBYSxFQUFFLEVBQUU7SUFDakIsUUFBUSxFQUFFLEVBQUU7Q0FDYixDQUFDO0FB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SyxFQUFFLENBQUMsQ0FBQTtRQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBRS9CLENBQUM7SUFFUSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakMsQ0FBQzsrR0FwWVUsMEJBQTBCLGtCQTRHakIscUJBQXFCO21IQTVHOUIsMEJBQTBCLGNBRGIsTUFBTTs7NEZBQ25CLDBCQUEwQjtrQkFEdEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTZHbkIsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyB3aXRoTGF0ZXN0RnJvbSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU3RvcmFnZU9wdGlvbiwgU3RvcmFnZVR5cGUgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3NldHRpbmctb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yYWdlRGF0YSB9IGZyb20gJy4vbW9kZWxzL3N0b3JhZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVGVzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9lbmNyeXB0aW9uL2VuY3J5cHRpb24tdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ORklHX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbmZpZy10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzJztcbmltcG9ydCB7IE9iamVjdE1lcmdlclNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vYmplY3QtbWVyZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9jYWxTdG9yZXM6IFN0b3JhZ2VEYXRhW11cbiAgc2Vzc2lvblN0b3JlczogU3RvcmFnZURhdGFbXVxuICBzZXR0aW5nczogU3RvcmFnZU9wdGlvbltdXG59XG5cbmNvbnN0IHN0b3JhZ2U6IFN0YXRlID0ge1xuICBsb2NhbFN0b3JlczogW10sXG4gIHNlc3Npb25TdG9yZXM6IFtdLFxuICBzZXR0aW5nczogW10sXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8U3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBzdG9yYWdlTmFtZSA9ICdzdG9yYWdlJ1xuICBzdG9yYWdlU2V0dGluZ3NOYW1lID0gJ2dsb2JhbC1zdG9yYWdlJ1xuICBkZWZhdWx0T3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KClcblxuICBzdGF0ZVJldHJpZXZlZCA9IGZhbHNlXG4gIGVuY3J5cHRlZCA9IGZhbHNlXG5cbiAgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpXG4gIHV0aWxzID0gaW5qZWN0KFV0aWxzU2VydmljZSlcbiAgb2JqZWN0TWVyZ2VyU2VydmljZSA9IGluamVjdChPYmplY3RNZXJnZXJTZXJ2aWNlKVxuICBlbmNyeXB0aW9uID0gaW5qZWN0KFN5bW1ldHJpY2FsRW5jcnlwdGlvblNlcnZpY2UpXG4gIGVuY3J5cHRpb25UZXN0ID0gaW5qZWN0KEVuY3J5cHRpb25UZXN0U2VydmljZSlcblxuICAvLyBTRUxFQ1RPUlNcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGEkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZSlcblxuICByZWFkb25seSBzdG9yZXMkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5zZXR0aW5ncylcblxuICByZWFkb25seSBzdG9yZUV4aXN0cyQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4gIGRhdGEuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUpID8gdHJ1ZSA6IGZhbHNlXG4gIClcblxuICByZWFkb25seSBzdG9yZSQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4ge1xuXG4gICAgICBjb25zdCBmb3VuZFN0b3JlID0gZGF0YS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcblxuICAgICAgaWYoZm91bmRTdG9yZSkge1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdChmb3VuZFN0b3JlLm9wdGlvbnMpXG5cbiAgICAgICAgY29uc3QgZm91bmQgPSBmb3VuZFN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTFxuICAgICAgICAgID8gZGF0YS5sb2NhbFN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcbiAgICAgICAgICA6IGRhdGEuc2Vzc2lvblN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcblxuICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVN0b3JlKHsgbmFtZTogc3RvcmUgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmFwcD8uYXBwSUQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIEFwcCBJRCBmb3VuZCAtIEFwcElkIG5vdCBQcm92aWRlZCcpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlRGF0YSA9IChvcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChmb3VuZC5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBmb3VuZC5kYXRhXG4gICAgICAgIHJldHVybiAodGhpcy5pc1N0cmluZyhzdG9yYWdlRGF0YSkpID8gSlNPTi5wYXJzZShzdG9yYWdlRGF0YSk6IHN0b3JhZ2VEYXRhXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICB9XG4gIClcblxuICByZWFkb25seSBzZXR0aW5ncyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiAoc3RhdGUpID8gc3RhdGUuc2V0dGluZ3MgOiBzdG9yYWdlLnNldHRpbmdzKVxuXG4gIHJlYWRvbmx5IHNldHRpbmckID0gKHN0b3JlOiBzdHJpbmcpID0+IHRoaXMuc2VsZWN0KFxuICAgIHRoaXMuZGF0YSQsXG4gICAgKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZFNldHRpbmcgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcbiAgICAgIHJldHVybiAoZm91bmRTZXR0aW5nKSA/IGZvdW5kU2V0dGluZyA6IG51bGxcbiAgICB9XG4gIClcblxuICBwZXJzaXN0ZW5jZSQgPSB0aGlzLmRhdGEkXG4gIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgaWYodGhpcy5zdGF0ZVJldHJpZXZlZCkgdGhpcy5wZXJzaXN0U3RhdGUoZGF0YSlcbiAgfSlcblxuICBzdGFydFRpbWVyKCkge1xuICAgIGNvbnN0IHRpbWVyJCA9IGludGVydmFsKDEwMDAgKiAzKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5kYXRhJCksXG4gICAgICBtYXAoKFtfLCBzdGF0ZV0pID0+IHN0YXRlKSxcbiAgICAgIHRhcCgoc3RhdGUpID0+IHtcblxuICAgICAgICBjb25zdCBleHBpcmVkOiBTdG9yYWdlT3B0aW9uW10gPSB0aGlzLmV4cGlyZWQoc3RhdGUpID8gdGhpcy5leHBpcmVkKHN0YXRlKSA6IFtdXG5cbiAgICAgICAgaWYgKGV4cGlyZWQubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgY29uc3QgaWRzID0gZXhwaXJlZC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhdGU6IFN0YXRlID0ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBsb2NhbFN0b3Jlczogc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNlc3Npb25TdG9yZXM6IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNldHRpbmdzOiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNpc3RTdGF0ZSh1cGRhdGVkU3RhdGUpXG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh1cGRhdGVkU3RhdGUpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGltZXIkLnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdXBkYXRlZFN0YXRlOiBTdGF0ZSkgPT4gKHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gIH0pKVxuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09ORklHX1NFVFRJTkdTX1RPS0VOKSBwcml2YXRlIGNvbmZpZzogQ29uZmlnT3B0aW9ucykge1xuXG4gICAgc3VwZXIoc3RvcmFnZSlcblxuICAgIHRoaXMuc3RvcmFnZU5hbWUgPSBjb25maWcuTG9jYWxTdG9yYWdlT3B0aW9ucz8uc3RvcmFnZU5hbWUgfHwgdGhpcy5zdG9yYWdlTmFtZVxuICAgIHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSA9IGNvbmZpZy5Mb2NhbFN0b3JhZ2VPcHRpb25zPy5zdG9yYWdlU2V0dGluZ3NOYW1lIHx8IHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZVxuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBjb25maWcuTG9jYWxTdG9yYWdlT3B0aW9ucz8ub3B0aW9ucyB8fCB0aGlzLmRlZmF1bHRPcHRpb25zXG5cbiAgICB0aGlzLnJldHJpZXZlU3RhdGUoKVxuICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gIH1cblxuICByZWFkb25seSBzZXRTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMgfSk6IGFueSA9PiB7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IFN0b3JhZ2VPcHRpb24uYWRhcHQoc3RvcmUpXG4gICAgc2V0dGluZ3Mub3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZU9wdGlvbnM8U2V0dGluZ09wdGlvbnM+KHNldHRpbmdzLm9wdGlvbnMgfHwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdGhpcy5kZWZhdWx0T3B0aW9ucylcblxuICAgIGNvbnN0IHR5cGUgPSBzdG9yZS5vcHRpb25zLnN0b3JhZ2VcbiAgICBjb25zdCBoYXNTdG9yZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZSh0eXBlLCBzdG9yZS5pZClcblxuICAgIHN0b3JlLm5hbWUgPSB0aGlzLnZhbGlkU3RvcmVOYW1lKHN0b3JlLm5hbWUpXG5cbiAgICBpZighaGFzU3RvcmUpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gc3VjaCBTdG9yZTogJHtzdG9yZS5uYW1lfWApXG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9IGVsc2Uge1xuXG4gICAgY29uc3Qgc3RyID0gdGhpcy5lbmNyeXB0aW9uVGVzdC5pc0VuY3J5cHRlZChzdG9yZS5kYXRhKSA/IHN0b3JlLmRhdGEgOiBKU09OLnN0cmluZ2lmeShzdG9yZS5kYXRhKVxuICAgIGNvbnN0IGRhdGFTdHIgPSAodGhpcy5pc09iamVjdE9yQXJyYXkoc3RyKSkgPyAoc3RvcmUub3B0aW9ucy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RyLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhIDogc3RvcmUuZGF0YVxuXG4gICAgY29uc3QgbG9jYWxEYXRhID0gKGRhdGFTdHIgJiYgc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG4gICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSAoZGF0YVN0ciAmJiBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5TRVNTSU9OKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLCAuLi5sb2NhbERhdGFdLFxuICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgfVxuXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgaWQ/OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucyB9KTogYW55ID0+IHtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gU3RvcmFnZU9wdGlvbi5hZGFwdChzdG9yZSlcbiAgICBzZXR0aW5ncy5vcHRpb25zID0gdGhpcy5vYmplY3RNZXJnZXJTZXJ2aWNlLm1lcmdlT3B0aW9uczxTZXR0aW5nT3B0aW9ucz4oc2V0dGluZ3Mub3B0aW9ucyB8fCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0aGlzLmRlZmF1bHRPcHRpb25zKVxuXG4gICAgY29uc3QgZm91bmRTdG9yZSA9IHN0YXRlPy5zZXR0aW5ncy5zb21lKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgZXhwaXJlcyA9IChzZXR0aW5ncy5vcHRpb25zPy5leHBpcmVzSW4pID8gdGhpcy51dGlscy5leHBpcmVzKHNldHRpbmdzLm9wdGlvbnM/LmV4cGlyZXNJbikgOiAwXG4gICAgaWYoc2V0dGluZ3Mub3B0aW9ucykgc2V0dGluZ3Mub3B0aW9ucy5leHBpcmVzID0gZXhwaXJlc1xuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGlmKGZvdW5kU3RvcmUpIHtcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpZighdGhpcy5pc09iamVjdE9yQXJyYXkoc3RvcmUuZGF0YSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdEYXRhIG11c3QgYmEgYW4gT2JqZWN0IG9yIEFycmF5JylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0b3JlLmRhdGEgPSAodGhpcy5pc1N0cmluZyhzdG9yZS5kYXRhKSkgPyBKU09OLnBhcnNlKHN0b3JlLmRhdGEpIDogc3RvcmUuZGF0YVxuICAgICAgY29uc3QgZGF0YVN0ciA9IChzdG9yZS5vcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdG9yZS5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBzdG9yZS5kYXRhXG5cbiAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gKHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc3RhdGUuc2V0dGluZ3MsIC4uLltzZXR0aW5nc11dLFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgfSlcblxuICByZWFkb25seSB1cGRhdGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSB9KTogYW55ID0+IHtcblxuICAgICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKVxuXG4gICAgICBpZihzZXR0aW5ncykge1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlXG4gICAgICAgIGNvbnN0IGhhc1N0b3JlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHR5cGUsIHNldHRpbmdzLmlkIHx8ICcnKVxuXG4gICAgICAgIGlmKCFoYXNTdG9yZSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgTm8gc3VjaCBTdG9yZTogJHtzdG9yZS5uYW1lfWApXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IChzZXR0aW5ncy5vcHRpb25zPy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RvcmUuZGF0YSwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YVxuXG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBbeyBkYXRhOiBkYXRhU3RyLCBpZDogc2V0dGluZ3MuaWQgfV0gOiBbXVxuICAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgICAgICBzdGF0ZS5sb2NhbFN0b3JlcyA9IHN0YXRlLmxvY2FsU3RvcmVzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IHNldHRpbmdzLmlkKVxuICAgICAgICBzdGF0ZS5zZXNzaW9uU3RvcmVzID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBzZXR0aW5ncy5pZClcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnN0YXRlLnNlc3Npb25TdG9yZXMsIC4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlXG5cbiAgfSlcblxuICByZWFkb25seSBkZWxldGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBuYW1lOiBzdHJpbmcgfSk6IGFueSA9PiB7XG5cbiAgICBzdG9yZS5uYW1lID0gdGhpcy52YWxpZFN0b3JlTmFtZShzdG9yZS5uYW1lKVxuXG4gICAgY29uc3QgaWQgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZS5uYW1lKT8uaWRcblxuICAgIGlmKGlkKSB7XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gc3RhdGUuc2V0dGluZ3MuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gc3RhdGUuc2Vzc2lvblN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBpZClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGxvY2FsU3RvcmVzOiBbLi4ubG9jYWxEYXRhXSxcbiAgICAgICAgc2Vzc2lvblN0b3JlczogWy4uLnNlc3Npb25EYXRhXSxcbiAgICAgICAgc2V0dGluZ3M6IFsuLi5zZXR0aW5nc10sXG4gICAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVzZXRTdG9yZSgpIHtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgbG9jYWxTdG9yZXM6IFtdLFxuICAgICAgc2Vzc2lvblN0b3JlczogW10sXG4gICAgICBzZXR0aW5nczogW10sXG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGUobmV3U3RhdGUpXG4gICAgICB0aGlzLnBlcnNpc3RTdGF0ZShuZXdTdGF0ZSlcblxuICB9XG5cbiAgcHJpdmF0ZSBwZXJzaXN0U3RhdGUoc3RhdGU6IFN0YXRlfG51bGwpIHtcblxuICAgIGlmKCFzdGF0ZSkgcmV0dXJuXG5cbiAgICBjb25zdCBzdHJMb2NhbCA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLmxvY2FsU3RvcmVzKVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUsIHN0ckxvY2FsKVxuXG4gICAgY29uc3Qgc3RyU2Vzc2lvbiA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLnNlc3Npb25TdG9yZXMpXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBzdHJTZXNzaW9uKVxuXG4gICAgY29uc3Qgc2V0dGluZ3NTdHIgPSB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdGF0ZS5zZXR0aW5ncywgdGhpcy5hcHAuYXBwSUQpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lLCBzZXR0aW5nc1N0ciB8fCAnJylcblxuICB9XG5cbiAgcHJpdmF0ZSBleHBpcmVkKHN0YXRlOiBTdGF0ZXxudWxsKSB7XG5cbiAgICBpZighc3RhdGUpIHJldHVybiBbXVxuICAgIHJldHVybiBzdGF0ZS5zZXR0aW5ncz8uZmlsdGVyKGl0ZW0gPT4gKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSA+IDAgJiYgdGhpcy51dGlscy5oYXNFeHBpcmVkKGl0ZW0ub3B0aW9ucz8uZXhwaXJlcyB8fCAwKSlcblxuICB9XG5cbiAgcmV0cmlldmVTdGF0ZSgpIHtcblxuICAgIGNvbnN0IHN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSlcblxuICAgIGNvbnN0IGxvY2FsU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcbiAgICBjb25zdCBzZXNzaW9uU3RyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuXG4gICAgY29uc3QgbG9jYWxEYXRhOiBTdG9yYWdlRGF0YVtdID0gKGxvY2FsU3RyKSA/IEpTT04ucGFyc2UobG9jYWxTdHIpIDogbnVsbFxuICAgIGNvbnN0IHNlc3Npb25EYXRhOiBTdG9yYWdlRGF0YVtdID0gKHNlc3Npb25TdHIpID8gSlNPTi5wYXJzZShzZXNzaW9uU3RyKSA6IG51bGxcblxuICAgIGNvbnN0IGRlY3J5cHRlZFN0ciA9IHN0ciA/IHRoaXMuZW5jcnlwdGlvbi5kZWNyeXB0KHN0ciwgdGhpcy5hcHAuYXBwSUQpIDogbnVsbFxuICAgIGNvbnN0IHNldHRpbmdzOiBTdG9yYWdlT3B0aW9uW10gPSAoZGVjcnlwdGVkU3RyICYmIGRlY3J5cHRlZFN0ciAhPT0gbnVsbCkgPyBKU09OLnBhcnNlKGRlY3J5cHRlZFN0cikgOiBbXVxuXG4gICAgc2V0dGluZ3MuZm9yRWFjaChzdG9yZSA9PiB7XG5cbiAgICAgIGNvbnN0IGV4cGlyZWQgPSAgKHN0b3JlLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChzdG9yZS5vcHRpb25zPy5leHBpcmVzIHx8IDApXG5cbiAgICAgIGlmKCFleHBpcmVkKSB7XG5cbiAgICAgICAgY29uc3QgaGFzU3RvcmFnZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZShzdG9yZS5vcHRpb25zPy5zdG9yYWdlLCBzdG9yZS5pZCB8fCAnJylcblxuICAgICAgICBpZighaGFzU3RvcmFnZSkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlU3RvcmUoeyBpZDogc3RvcmUuaWQsIG5hbWU6IHN0b3JlLm5hbWUsIGRhdGE6IFtdLCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucy5hZGFwdChzdG9yZS5vcHRpb25zKX0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmVEYXRhID0gKHN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTCkgPyBsb2NhbERhdGEuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHN0b3JlLmlkKSA6IHNlc3Npb25EYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBzdG9yZS5pZClcbiAgICAgICAgICB0aGlzLnNldFN0b3JlKHsgaWQ6IHN0b3JlLmlkIHx8ICcnLCBuYW1lOiBzdG9yZS5uYW1lLCBkYXRhOiBzdG9yZURhdGE/LmRhdGEsIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zLmFkYXB0KHN0b3JlLm9wdGlvbnMpIH0pXG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfSlcblxuICAgIHRoaXMuc3RhdGVSZXRyaWV2ZWQgPSB0cnVlXG5cbiAgfVxuXG4gIHByaXZhdGUgaXNPYmplY3RPckFycmF5ID0gKG9iajogYW55KSA9PiB7XG5cbiAgICBsZXQgcGFyc2VkO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZShvYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgIGNvbnN0IGFsbFN0cmluZ3NPck9iamVjdHNPck51bWJlcnMgPSBwYXJzZWQuZXZlcnkoaXRlbSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsIHx8XG4gICAgICAgICAgdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInXG4gICAgICApO1xuICAgICAgcmV0dXJuIGFsbFN0cmluZ3NPck9iamVjdHNPck51bWJlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnICYmIHBhcnNlZCAhPT0gbnVsbDtcblxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZyAob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBTdHJpbmddJylcbiAgfVxuXG4gIHByaXZhdGUgZml4QW5kUGFyc2VKU09OKGpzb25TdHJpbmc6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgZml4ZWRTdHJpbmcgPSBqc29uU3RyaW5nXG4gICAgICAucmVwbGFjZSgvJy9nLCAnXCInKVxuICAgICAgLnJlcGxhY2UoLyhbeyxdXFxzKikoXFx3KylcXHMqOi9nLCAnJDFcIiQyXCI6JylcbiAgICAgIC5yZXBsYWNlKC8sXFxzKihcXH18XFxdKS9nLCAnJDEnKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShmaXhlZFN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gcGFyc2UgSlNPTjogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRTdG9yZU5hbWUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAudG9Mb3dlckNhc2UoKSAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG4gICAgICAucmVwbGFjZSgvW14gLX5dL2csICcnKTsgLy8gUmVtb3ZlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXG4gIH1cblxuICBwcml2YXRlIGhhc0dsb2JhbFN0b3JhZ2UodHlwZTogU3RvcmFnZVR5cGUgPSBTdG9yYWdlVHlwZS5HTE9CQUwsIGlkOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHN0ckRhdGE6IFN0b3JhZ2VPcHRpb25bXSA9IFtdXG5cbiAgICBpZih0eXBlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpIHtcbiAgICAgIGNvbnN0IHN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgICBzdHJEYXRhLnB1c2goLi4uKHN0ciA/IEpTT04ucGFyc2Uoc3RyKSA6IFtdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuICAgICAgc3RyRGF0YS5wdXNoKC4uLihzdHIgPyBKU09OLnBhcnNlKHN0cikgOiBbXSkpXG4gICAgfVxuXG4gICAgY29uc3QgZm91bmQgPSBzdHJEYXRhLmZpbmQoc3RvcmUgPT4gc3RvcmUuaWQgPT09IGlkKVxuICAgIHJldHVybiAoZm91bmQpID8gdHJ1ZSA6IGZhbHNlXG5cbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucGVyc2lzdGVuY2UkLnVuc3Vic2NyaWJlKClcbiAgfVxuXG59XG4iXX0=
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci1zZXJ2aWNlL2xvY2FsLXN0b3JhZ2UtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVsRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQVFyRSxNQUFNLE9BQU8sR0FBVTtJQUNyQixXQUFXLEVBQUUsRUFBRTtJQUNmLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLFFBQVEsRUFBRSxFQUFFO0NB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QyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBRS9CLENBQUM7SUFFUSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDakMsQ0FBQzsrR0FwWVUsMEJBQTBCLGtCQTZHTCxxQkFBcUI7bUhBN0cxQywwQkFBMEIsY0FEYixNQUFNOzs0RkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBOEduQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRTdG9yZSB9IGZyb20gJ0BuZ3J4L2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyB3aXRoTGF0ZXN0RnJvbSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL3V0aWxzL2VuY3J5cHRpb24vc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHsgU3RvcmFnZU9wdGlvbiwgU3RvcmFnZVR5cGUgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQgeyBTZXR0aW5nT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzL3NldHRpbmctb3B0aW9ucy5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yYWdlRGF0YSB9IGZyb20gJy4vbW9kZWxzL3N0b3JhZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVGVzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9lbmNyeXB0aW9uL2VuY3J5cHRpb24tdGVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09ORklHX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbmZpZy10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXNlcnZpY2VzJztcbmltcG9ydCB7IE9iamVjdE1lcmdlclNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vYmplY3QtbWVyZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9jYWxTdG9yZXM6IFN0b3JhZ2VEYXRhW11cbiAgc2Vzc2lvblN0b3JlczogU3RvcmFnZURhdGFbXVxuICBzZXR0aW5nczogU3RvcmFnZU9wdGlvbltdXG59XG5cbmNvbnN0IHN0b3JhZ2U6IFN0YXRlID0ge1xuICBsb2NhbFN0b3JlczogW10sXG4gIHNlc3Npb25TdG9yZXM6IFtdLFxuICBzZXR0aW5nczogW10sXG59O1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZU1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgQ29tcG9uZW50U3RvcmU8U3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBzdG9yYWdlTmFtZSA9ICdzdG9yYWdlJ1xuICBzdG9yYWdlU2V0dGluZ3NOYW1lID0gJ2dsb2JhbC1zdG9yYWdlJ1xuICBkZWZhdWx0T3B0aW9ucyA9IFNldHRpbmdPcHRpb25zLmFkYXB0KClcblxuICBzdGF0ZVJldHJpZXZlZCA9IGZhbHNlXG4gIGVuY3J5cHRlZCA9IGZhbHNlXG5cbiAgYXBwID0gaW5qZWN0KEFwcFNlcnZpY2UpXG4gIHV0aWxzID0gaW5qZWN0KFV0aWxzU2VydmljZSlcbiAgb2JqZWN0TWVyZ2VyU2VydmljZSA9IGluamVjdChPYmplY3RNZXJnZXJTZXJ2aWNlKVxuICBlbmNyeXB0aW9uID0gaW5qZWN0KFN5bW1ldHJpY2FsRW5jcnlwdGlvblNlcnZpY2UpXG4gIGVuY3J5cHRpb25UZXN0ID0gaW5qZWN0KEVuY3J5cHRpb25UZXN0U2VydmljZSlcblxuICAvLyBTRUxFQ1RPUlNcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGEkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZSlcblxuICByZWFkb25seSBzdG9yZXMkID0gdGhpcy5zZWxlY3QoKHN0YXRlKSA9PiBzdGF0ZS5zZXR0aW5ncylcblxuICByZWFkb25seSBzdG9yZUV4aXN0cyQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4gIGRhdGEuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUpID8gdHJ1ZSA6IGZhbHNlXG4gIClcblxuICByZWFkb25seSBzdG9yZSQgPSAoc3RvcmU6IHN0cmluZykgPT4gdGhpcy5zZWxlY3QoXG4gICAgdGhpcy5kYXRhJCxcbiAgICAoZGF0YSkgPT4ge1xuXG4gICAgICBjb25zdCBmb3VuZFN0b3JlID0gZGF0YS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcblxuICAgICAgaWYoZm91bmRTdG9yZSkge1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBTZXR0aW5nT3B0aW9ucy5hZGFwdChmb3VuZFN0b3JlLm9wdGlvbnMpXG5cbiAgICAgICAgY29uc3QgZm91bmQgPSBmb3VuZFN0b3JlLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkdMT0JBTFxuICAgICAgICAgID8gZGF0YS5sb2NhbFN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcbiAgICAgICAgICA6IGRhdGEuc2Vzc2lvblN0b3Jlcy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZm91bmRTdG9yZS5pZCkgYXMgU3RvcmFnZURhdGFcblxuICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZVN0b3JlKHsgbmFtZTogc3RvcmUgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCF0aGlzLmFwcD8uYXBwSUQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIEFwcCBJRCBmb3VuZCAtIEFwcElkIG5vdCBQcm92aWRlZCcpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9yYWdlRGF0YSA9IChvcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChmb3VuZC5kYXRhLCB0aGlzLmFwcC5hcHBJRCkgOiBmb3VuZC5kYXRhXG4gICAgICAgIHJldHVybiAodGhpcy5pc1N0cmluZyhzdG9yYWdlRGF0YSkpID8gSlNPTi5wYXJzZShzdG9yYWdlRGF0YSk6IHN0b3JhZ2VEYXRhXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICB9XG4gIClcblxuICByZWFkb25seSBzZXR0aW5ncyQgPSB0aGlzLnNlbGVjdChzdGF0ZSA9PiAoc3RhdGUpID8gc3RhdGUuc2V0dGluZ3MgOiBzdG9yYWdlLnNldHRpbmdzKVxuXG4gIHJlYWRvbmx5IHNldHRpbmckID0gKHN0b3JlOiBzdHJpbmcpID0+IHRoaXMuc2VsZWN0KFxuICAgIHRoaXMuZGF0YSQsXG4gICAgKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCBmb3VuZFNldHRpbmcgPSBzdGF0ZS5zZXR0aW5ncy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBzdG9yZSlcbiAgICAgIHJldHVybiAoZm91bmRTZXR0aW5nKSA/IGZvdW5kU2V0dGluZyA6IG51bGxcbiAgICB9XG4gIClcblxuICBwZXJzaXN0ZW5jZSQgPSB0aGlzLmRhdGEkXG4gIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgaWYodGhpcy5zdGF0ZVJldHJpZXZlZCkgdGhpcy5wZXJzaXN0U3RhdGUoZGF0YSlcbiAgfSlcblxuICBzdGFydFRpbWVyKCkge1xuICAgIGNvbnN0IHRpbWVyJCA9IGludGVydmFsKDEwMDAgKiAzKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5kYXRhJCksXG4gICAgICBtYXAoKFtfLCBzdGF0ZV0pID0+IHN0YXRlKSxcbiAgICAgIHRhcCgoc3RhdGUpID0+IHtcblxuICAgICAgICBjb25zdCBleHBpcmVkOiBTdG9yYWdlT3B0aW9uW10gPSB0aGlzLmV4cGlyZWQoc3RhdGUpID8gdGhpcy5leHBpcmVkKHN0YXRlKSA6IFtdXG5cbiAgICAgICAgaWYgKGV4cGlyZWQubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgY29uc3QgaWRzID0gZXhwaXJlZC5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhdGU6IFN0YXRlID0ge1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBsb2NhbFN0b3Jlczogc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNlc3Npb25TdG9yZXM6IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKChpdGVtKSA9PiAhaWRzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgICAgIHNldHRpbmdzOiBzdGF0ZS5zZXR0aW5ncy5maWx0ZXIoKGl0ZW0pID0+ICFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLnBlcnNpc3RTdGF0ZSh1cGRhdGVkU3RhdGUpXG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh1cGRhdGVkU3RhdGUpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGltZXIkLnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlID0gdGhpcy51cGRhdGVyKChzdGF0ZSwgdXBkYXRlZFN0YXRlOiBTdGF0ZSkgPT4gKHtcbiAgICAuLi51cGRhdGVkU3RhdGUsXG4gIH0pKVxuXG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChDT05GSUdfU0VUVElOR1NfVE9LRU4pIHByaXZhdGUgY29uZmlnT3B0aW9ucz86IENvbmZpZ09wdGlvbnMpIHtcblxuICAgIHN1cGVyKHN0b3JhZ2UpXG5cbiAgICB0aGlzLnN0b3JhZ2VOYW1lID0gY29uZmlnT3B0aW9ucz8uTG9jYWxTdG9yYWdlT3B0aW9ucz8uc3RvcmFnZU5hbWUgfHwgdGhpcy5zdG9yYWdlTmFtZVxuICAgIHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSA9IGNvbmZpZ09wdGlvbnM/LkxvY2FsU3RvcmFnZU9wdGlvbnM/LnN0b3JhZ2VTZXR0aW5nc05hbWUgfHwgdGhpcy5zdG9yYWdlU2V0dGluZ3NOYW1lXG4gICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IGNvbmZpZ09wdGlvbnM/LkxvY2FsU3RvcmFnZU9wdGlvbnM/Lm9wdGlvbnMgfHwgdGhpcy5kZWZhdWx0T3B0aW9uc1xuXG4gICAgdGhpcy5yZXRyaWV2ZVN0YXRlKClcbiAgICB0aGlzLnN0YXJ0VGltZXIoKVxuICB9XG5cbiAgcmVhZG9ubHkgc2V0U3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zIH0pOiBhbnkgPT4ge1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBTdG9yYWdlT3B0aW9uLmFkYXB0KHN0b3JlKVxuICAgIHNldHRpbmdzLm9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VTdG9yYWdlT3B0aW9ucyhzZXR0aW5ncy5vcHRpb25zKVxuXG4gICAgY29uc3QgdHlwZSA9IHN0b3JlLm9wdGlvbnMuc3RvcmFnZVxuICAgIGNvbnN0IGhhc1N0b3JlID0gdGhpcy5oYXNHbG9iYWxTdG9yYWdlKHR5cGUsIHN0b3JlLmlkKVxuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGlmKCFoYXNTdG9yZSkge1xuICAgICAgY29uc29sZS53YXJuKGBObyBzdWNoIFN0b3JlOiAke3N0b3JlLm5hbWV9YClcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0gZWxzZSB7XG5cbiAgICBjb25zdCBzdHIgPSB0aGlzLmVuY3J5cHRpb25UZXN0LmlzRW5jcnlwdGVkKHN0b3JlLmRhdGEpID8gc3RvcmUuZGF0YSA6IEpTT04uc3RyaW5naWZ5KHN0b3JlLmRhdGEpXG4gICAgY29uc3QgZGF0YVN0ciA9ICh0aGlzLmlzT2JqZWN0T3JBcnJheShzdHIpKSA/IChzdG9yZS5vcHRpb25zLmVuY3J5cHRlZCkgPyB0aGlzLmVuY3J5cHRpb24uZW5jcnlwdChzdHIsIHRoaXMuYXBwLmFwcElEKSA6IHN0b3JlLmRhdGEgOiBzdG9yZS5kYXRhXG5cbiAgICBjb25zdCBsb2NhbERhdGEgPSAoZGF0YVN0ciAmJiBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChkYXRhU3RyICYmIHNldHRpbmdzLm9wdGlvbnM/LnN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLlNFU1NJT04pID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxvY2FsU3RvcmVzOiBbLi4uc3RhdGUubG9jYWxTdG9yZXMsIC4uLmxvY2FsRGF0YV0sXG4gICAgICBzZXNzaW9uU3RvcmVzOiBbLi4uc3RhdGUuc2Vzc2lvblN0b3JlcywgLi4uc2Vzc2lvbkRhdGFdLFxuICAgICAgc2V0dGluZ3M6IFsuLi5zdGF0ZS5zZXR0aW5ncywgLi4uW3NldHRpbmdzXV0sXG4gICAgICB9XG5cbiAgICB9XG5cbiAgfSlcblxuICByZWFkb25seSBjcmVhdGVTdG9yZSA9IHRoaXMudXBkYXRlcigoc3RhdGU6IFN0YXRlLCBzdG9yZTogeyBpZD86IHN0cmluZywgbmFtZTogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM6IFNldHRpbmdPcHRpb25zIH0pOiBhbnkgPT4ge1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBTdG9yYWdlT3B0aW9uLmFkYXB0KHN0b3JlKVxuICAgIHNldHRpbmdzLm9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VTdG9yYWdlT3B0aW9ucyhzZXR0aW5ncy5vcHRpb25zKVxuICAgIGNvbnN0IGZvdW5kU3RvcmUgPSBzdGF0ZT8uc2V0dGluZ3Muc29tZShpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUubmFtZSlcblxuICAgIGNvbnN0IGV4cGlyZXMgPSAoc2V0dGluZ3Mub3B0aW9ucz8uZXhwaXJlc0luKSA/IHRoaXMudXRpbHMuZXhwaXJlcyhzZXR0aW5ncy5vcHRpb25zPy5leHBpcmVzSW4pIDogMFxuICAgIGlmKHNldHRpbmdzLm9wdGlvbnMpIHNldHRpbmdzLm9wdGlvbnMuZXhwaXJlcyA9IGV4cGlyZXNcblxuICAgIHN0b3JlLm5hbWUgPSB0aGlzLnZhbGlkU3RvcmVOYW1lKHN0b3JlLm5hbWUpXG5cbiAgICBpZihmb3VuZFN0b3JlKSB7XG4gICAgICByZXR1cm4gc3RhdGVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIXRoaXMuaXNPYmplY3RPckFycmF5KHN0b3JlLmRhdGEpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRGF0YSBtdXN0IGJhIGFuIE9iamVjdCBvciBBcnJheScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdG9yZS5kYXRhID0gKHRoaXMuaXNTdHJpbmcoc3RvcmUuZGF0YSkpID8gSlNPTi5wYXJzZShzdG9yZS5kYXRhKSA6IHN0b3JlLmRhdGFcbiAgICAgIGNvbnN0IGRhdGFTdHIgPSAoc3RvcmUub3B0aW9ucy5lbmNyeXB0ZWQpID8gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RvcmUuZGF0YSwgdGhpcy5hcHAuYXBwSUQpIDogc3RvcmUuZGF0YVxuXG4gICAgICBjb25zdCBsb2NhbERhdGEgPSAoc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IChzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5TRVNTSU9OKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLCAuLi5sb2NhbERhdGFdLFxuICAgICAgICBzZXNzaW9uU3RvcmVzOiBbLi4uc3RhdGUuc2Vzc2lvblN0b3JlcywgLi4uc2Vzc2lvbkRhdGFdLFxuICAgICAgICBzZXR0aW5nczogWy4uLnN0YXRlLnNldHRpbmdzLCAuLi5bc2V0dGluZ3NdXSxcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gIH0pXG5cbiAgcmVhZG9ubHkgdXBkYXRlU3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgbmFtZTogc3RyaW5nLCBkYXRhOiBhbnkgfSk6IGFueSA9PiB7XG5cbiAgICAgIHN0b3JlLm5hbWUgPSB0aGlzLnZhbGlkU3RvcmVOYW1lKHN0b3JlLm5hbWUpXG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gc3RhdGUuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUubmFtZSlcblxuICAgICAgaWYoc2V0dGluZ3MpIHtcblxuICAgICAgICBjb25zdCB0eXBlID0gc2V0dGluZ3Mub3B0aW9ucz8uc3RvcmFnZVxuICAgICAgICBjb25zdCBoYXNTdG9yZSA9IHRoaXMuaGFzR2xvYmFsU3RvcmFnZSh0eXBlLCBzZXR0aW5ncy5pZCB8fCAnJylcblxuICAgICAgICBpZighaGFzU3RvcmUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE5vIHN1Y2ggU3RvcmU6ICR7c3RvcmUubmFtZX1gKVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGNvbnN0IGRhdGFTdHIgPSAoc2V0dGluZ3Mub3B0aW9ucz8uZW5jcnlwdGVkKSA/IHRoaXMuZW5jcnlwdGlvbi5lbmNyeXB0KHN0b3JlLmRhdGEsIHRoaXMuYXBwLmFwcElEKSA6IHN0b3JlLmRhdGFcblxuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSAoZGF0YVN0ciAmJiBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gW3sgZGF0YTogZGF0YVN0ciwgaWQ6IHNldHRpbmdzLmlkIH1dIDogW11cbiAgICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSAoZGF0YVN0ciAmJiBzZXR0aW5ncy5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5TRVNTSU9OKSA/IFt7IGRhdGE6IGRhdGFTdHIsIGlkOiBzZXR0aW5ncy5pZCB9XSA6IFtdXG5cbiAgICAgICAgc3RhdGUubG9jYWxTdG9yZXMgPSBzdGF0ZS5sb2NhbFN0b3Jlcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkICE9PSBzZXR0aW5ncy5pZClcbiAgICAgICAgc3RhdGUuc2Vzc2lvblN0b3JlcyA9IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gc2V0dGluZ3MuaWQpXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2NhbFN0b3JlczogWy4uLnN0YXRlLmxvY2FsU3RvcmVzLCAuLi5sb2NhbERhdGFdLFxuICAgICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zdGF0ZS5zZXNzaW9uU3RvcmVzLCAuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIHJldHVybiBzdGF0ZVxuXG4gIH0pXG5cbiAgcmVhZG9ubHkgZGVsZXRlU3RvcmUgPSB0aGlzLnVwZGF0ZXIoKHN0YXRlOiBTdGF0ZSwgc3RvcmU6IHsgbmFtZTogc3RyaW5nIH0pOiBhbnkgPT4ge1xuXG4gICAgc3RvcmUubmFtZSA9IHRoaXMudmFsaWRTdG9yZU5hbWUoc3RvcmUubmFtZSlcblxuICAgIGNvbnN0IGlkID0gc3RhdGUuc2V0dGluZ3MuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gc3RvcmUubmFtZSk/LmlkXG5cbiAgICBpZihpZCkge1xuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHN0YXRlLnNldHRpbmdzLmZpbHRlcihpdGVtID0+IGl0ZW0uaWQgIT09IGlkKVxuICAgICAgY29uc3QgbG9jYWxEYXRhID0gc3RhdGUubG9jYWxTdG9yZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHN0YXRlLnNlc3Npb25TdG9yZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCAhPT0gaWQpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2NhbFN0b3JlczogWy4uLmxvY2FsRGF0YV0sXG4gICAgICAgIHNlc3Npb25TdG9yZXM6IFsuLi5zZXNzaW9uRGF0YV0sXG4gICAgICAgIHNldHRpbmdzOiBbLi4uc2V0dGluZ3NdLFxuICAgICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGBObyBzdWNoIFN0b3JlOiAke3N0b3JlLm5hbWV9YClcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cblxuICB9KVxuXG4gIHJlc2V0U3RvcmUoKSB7XG5cbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGxvY2FsU3RvcmVzOiBbXSxcbiAgICAgIHNlc3Npb25TdG9yZXM6IFtdLFxuICAgICAgc2V0dGluZ3M6IFtdLFxuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKG5ld1N0YXRlKVxuICAgICAgdGhpcy5wZXJzaXN0U3RhdGUobmV3U3RhdGUpXG5cbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdFN0YXRlKHN0YXRlOiBTdGF0ZXxudWxsKSB7XG5cbiAgICBpZighc3RhdGUpIHJldHVyblxuXG4gICAgY29uc3Qgc3RyTG9jYWwgPSBKU09OLnN0cmluZ2lmeShzdGF0ZS5sb2NhbFN0b3JlcylcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lLCBzdHJMb2NhbClcblxuICAgIGNvbnN0IHN0clNlc3Npb24gPSBKU09OLnN0cmluZ2lmeShzdGF0ZS5zZXNzaW9uU3RvcmVzKVxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSwgc3RyU2Vzc2lvbilcblxuICAgIGNvbnN0IHNldHRpbmdzU3RyID0gdGhpcy5lbmNyeXB0aW9uLmVuY3J5cHQoc3RhdGUuc2V0dGluZ3MsIHRoaXMuYXBwLmFwcElEKVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZVNldHRpbmdzTmFtZSwgc2V0dGluZ3NTdHIgfHwgJycpXG5cbiAgfVxuXG4gIHByaXZhdGUgZXhwaXJlZChzdGF0ZTogU3RhdGV8bnVsbCkge1xuXG4gICAgaWYoIXN0YXRlKSByZXR1cm4gW11cbiAgICByZXR1cm4gc3RhdGUuc2V0dGluZ3M/LmZpbHRlcihpdGVtID0+IChpdGVtLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkgPiAwICYmIHRoaXMudXRpbHMuaGFzRXhwaXJlZChpdGVtLm9wdGlvbnM/LmV4cGlyZXMgfHwgMCkpXG5cbiAgfVxuXG4gIHJldHJpZXZlU3RhdGUoKSB7XG5cbiAgICBjb25zdCBzdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VTZXR0aW5nc05hbWUpXG5cbiAgICBjb25zdCBsb2NhbFN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZU5hbWUpXG4gICAgY29uc3Qgc2Vzc2lvblN0ciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcblxuICAgIGNvbnN0IGxvY2FsRGF0YTogU3RvcmFnZURhdGFbXSA9IChsb2NhbFN0cikgPyBKU09OLnBhcnNlKGxvY2FsU3RyKSA6IG51bGxcbiAgICBjb25zdCBzZXNzaW9uRGF0YTogU3RvcmFnZURhdGFbXSA9IChzZXNzaW9uU3RyKSA/IEpTT04ucGFyc2Uoc2Vzc2lvblN0cikgOiBudWxsXG5cbiAgICBjb25zdCBkZWNyeXB0ZWRTdHIgPSBzdHIgPyB0aGlzLmVuY3J5cHRpb24uZGVjcnlwdChzdHIsIHRoaXMuYXBwLmFwcElEKSA6IG51bGxcbiAgICBjb25zdCBzZXR0aW5nczogU3RvcmFnZU9wdGlvbltdID0gKGRlY3J5cHRlZFN0ciAmJiBkZWNyeXB0ZWRTdHIgIT09IG51bGwpID8gSlNPTi5wYXJzZShkZWNyeXB0ZWRTdHIpIDogW11cblxuICAgIHNldHRpbmdzLmZvckVhY2goc3RvcmUgPT4ge1xuXG4gICAgICBjb25zdCBleHBpcmVkID0gIChzdG9yZS5vcHRpb25zPy5leHBpcmVzIHx8IDApID4gMCAmJiB0aGlzLnV0aWxzLmhhc0V4cGlyZWQoc3RvcmUub3B0aW9ucz8uZXhwaXJlcyB8fCAwKVxuXG4gICAgICBpZighZXhwaXJlZCkge1xuXG4gICAgICAgIGNvbnN0IGhhc1N0b3JhZ2UgPSB0aGlzLmhhc0dsb2JhbFN0b3JhZ2Uoc3RvcmUub3B0aW9ucz8uc3RvcmFnZSwgc3RvcmUuaWQgfHwgJycpXG5cbiAgICAgICAgaWYoIWhhc1N0b3JhZ2UpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVN0b3JlKHsgaWQ6IHN0b3JlLmlkLCBuYW1lOiBzdG9yZS5uYW1lLCBkYXRhOiBbXSwgb3B0aW9uczogU2V0dGluZ09wdGlvbnMuYWRhcHQoc3RvcmUub3B0aW9ucyl9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN0b3JlRGF0YSA9IChzdG9yZS5vcHRpb25zPy5zdG9yYWdlID09PSBTdG9yYWdlVHlwZS5HTE9CQUwpID8gbG9jYWxEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBzdG9yZS5pZCkgOiBzZXNzaW9uRGF0YS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gc3RvcmUuaWQpXG4gICAgICAgICAgdGhpcy5zZXRTdG9yZSh7IGlkOiBzdG9yZS5pZCB8fCAnJywgbmFtZTogc3RvcmUubmFtZSwgZGF0YTogc3RvcmVEYXRhPy5kYXRhLCBvcHRpb25zOiBTZXR0aW5nT3B0aW9ucy5hZGFwdChzdG9yZS5vcHRpb25zKSB9KVxuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH0pXG5cbiAgICB0aGlzLnN0YXRlUmV0cmlldmVkID0gdHJ1ZVxuXG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0T3JBcnJheSA9IChvYmo6IGFueSkgPT4ge1xuXG4gICAgbGV0IHBhcnNlZDtcblxuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2Uob2JqKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICBjb25zdCBhbGxTdHJpbmdzT3JPYmplY3RzT3JOdW1iZXJzID0gcGFyc2VkLmV2ZXJ5KGl0ZW0gPT5cbiAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCB8fFxuICAgICAgICAgIHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiBhbGxTdHJpbmdzT3JPYmplY3RzT3JOdW1iZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlb2YgcGFyc2VkID09PSAnb2JqZWN0JyAmJiBwYXJzZWQgIT09IG51bGw7XG5cbiAgfVxuXG4gIHByaXZhdGUgaXNTdHJpbmcgKG9iajogYW55KSB7XG4gICAgcmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXScpXG4gIH1cblxuICBwcml2YXRlIGZpeEFuZFBhcnNlSlNPTihqc29uU3RyaW5nOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGZpeGVkU3RyaW5nID0ganNvblN0cmluZ1xuICAgICAgLnJlcGxhY2UoLycvZywgJ1wiJylcbiAgICAgIC5yZXBsYWNlKC8oW3ssXVxccyopKFxcdyspXFxzKjovZywgJyQxXCIkMlwiOicpXG4gICAgICAucmVwbGFjZSgvLFxccyooXFx9fFxcXSkvZywgJyQxJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZml4ZWRTdHJpbmcpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHBhcnNlIEpTT046ICcgKyBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkU3RvcmVOYW1lKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgLnRvTG93ZXJDYXNlKCkgLy8gQ29udmVydCB0byBsb3dlcmNhc2VcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuICAgICAgLnJlcGxhY2UoL1teIC1+XS9nLCAnJyk7IC8vIFJlbW92ZSBub24tQVNDSUkgY2hhcmFjdGVyc1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNHbG9iYWxTdG9yYWdlKHR5cGU6IFN0b3JhZ2VUeXBlID0gU3RvcmFnZVR5cGUuR0xPQkFMLCBpZDogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBzdHJEYXRhOiBTdG9yYWdlT3B0aW9uW10gPSBbXVxuXG4gICAgaWYodHlwZSA9PT0gU3RvcmFnZVR5cGUuR0xPQkFMKSB7XG4gICAgICBjb25zdCBzdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VOYW1lKVxuICAgICAgc3RyRGF0YS5wdXNoKC4uLihzdHIgPyBKU09OLnBhcnNlKHN0cikgOiBbXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlTmFtZSlcbiAgICAgIHN0ckRhdGEucHVzaCguLi4oc3RyID8gSlNPTi5wYXJzZShzdHIpIDogW10pKVxuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kID0gc3RyRGF0YS5maW5kKHN0b3JlID0+IHN0b3JlLmlkID09PSBpZClcbiAgICByZXR1cm4gKGZvdW5kKSA/IHRydWUgOiBmYWxzZVxuXG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnBlcnNpc3RlbmNlJC51bnN1YnNjcmliZSgpXG4gIH1cblxufVxuIl19
|
|
@@ -7,7 +7,7 @@ export class SettingOptions {
|
|
|
7
7
|
this.encrypted = encrypted;
|
|
8
8
|
}
|
|
9
9
|
static adapt(item) {
|
|
10
|
-
return new SettingOptions((item?.storage) ? item.storage : StorageType.GLOBAL, (item?.expires) ? item.expires : 0, (item?.expiresIn) ? item.expiresIn : '', (item?.encrypted) ? item
|
|
10
|
+
return new SettingOptions((item?.storage) ? item.storage : StorageType.GLOBAL, (item?.expires) ? item.expires : 0, (item?.expiresIn) ? item.expiresIn : '', (item?.encrypted) ? item?.encrypted : false);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1vcHRpb25zLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLW1hbmFnZXItc2VydmljZS9tb2RlbHMvc2V0dGluZy1vcHRpb25zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQVNqRCxNQUFNLE9BQU8sY0FBYztJQUV6QixZQUNTLE9BQXFCLEVBQ3JCLE9BQWdCLEVBQ2hCLFNBQWtCLEVBQ2xCLFNBQW1CO1FBSG5CLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUFTO1FBQ2xCLGNBQVMsR0FBVCxTQUFTLENBQVU7SUFDekIsQ0FBQztJQUVKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBVTtRQUVyQixPQUFPLElBQUksY0FBYyxDQUN2QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFDbkQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdkMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDNUMsQ0FBQTtJQUVILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSBcIi4vc3RvcmFnZS10eXBlLmVudW1cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdPcHRpb25zSW50ZXJmYWNlIHtcbiAgc3RvcmFnZT86IFN0b3JhZ2VUeXBlXG4gIGV4cGlyZXM/OiBudW1iZXJcbiAgZXhwaXJlc0luPzogc3RyaW5nXG4gIGVuY3J5cHRlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNsYXNzIFNldHRpbmdPcHRpb25zIGltcGxlbWVudHMgU2V0dGluZ09wdGlvbnNJbnRlcmZhY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdG9yYWdlPzogU3RvcmFnZVR5cGUsXG4gICAgcHVibGljIGV4cGlyZXM/OiBudW1iZXIsXG4gICAgcHVibGljIGV4cGlyZXNJbj86IHN0cmluZyxcbiAgICBwdWJsaWMgZW5jcnlwdGVkPzogYm9vbGVhbixcbiAgKSB7fVxuXG4gIHN0YXRpYyBhZGFwdChpdGVtPzogYW55KTogU2V0dGluZ09wdGlvbnMge1xuXG4gICAgcmV0dXJuIG5ldyBTZXR0aW5nT3B0aW9ucyhcbiAgICAgIChpdGVtPy5zdG9yYWdlKSA/IGl0ZW0uc3RvcmFnZSA6IFN0b3JhZ2VUeXBlLkdMT0JBTCxcbiAgICAgIChpdGVtPy5leHBpcmVzKSA/IGl0ZW0uZXhwaXJlcyA6IDAsXG4gICAgICAoaXRlbT8uZXhwaXJlc0luKSA/IGl0ZW0uZXhwaXJlc0luIDogJycsXG4gICAgICAoaXRlbT8uZW5jcnlwdGVkKSA/IGl0ZW0/LmVuY3J5cHRlZCA6IGZhbHNlLFxuICAgIClcblxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -5,10 +5,9 @@ import { tap, map, finalize, catchError } from 'rxjs/operators';
|
|
|
5
5
|
import { ApiRequest } from '../request-manager-state-service/models/api-request.model';
|
|
6
6
|
import { RequestService } from './request.service';
|
|
7
7
|
import { requestPolling, countdown, delayedRetry } from './rxjs-operators';
|
|
8
|
+
import { ToastColors, ToastDisplay, ToastMessageDisplayService } from 'toast-message-display';
|
|
8
9
|
import { CONFIG_SETTINGS_TOKEN } from '../../models/config-token.model';
|
|
9
|
-
import { ConfigOptions } from '../../models';
|
|
10
10
|
import { ObjectMergerService } from '../utils/object-merger.service';
|
|
11
|
-
import { ToastMessageDisplayService, ToastDisplay, ToastColors } from 'toast-message-display';
|
|
12
11
|
import * as i0 from "@angular/core";
|
|
13
12
|
import * as i1 from "../../models";
|
|
14
13
|
export class HTTPManagerService extends RequestService {
|
|
@@ -25,19 +24,21 @@ export class HTTPManagerService extends RequestService {
|
|
|
25
24
|
this.data = new BehaviorSubject(null);
|
|
26
25
|
this.data$ = this.data.asObservable();
|
|
27
26
|
this.polling$ = new Subject();
|
|
28
|
-
this.config =
|
|
29
|
-
this.config = (configOptions) ?
|
|
27
|
+
this.config = ApiRequest.adapt();
|
|
28
|
+
this.config = (configOptions) ? ApiRequest.adapt(configOptions.httpRequestOptions) : this.config;
|
|
30
29
|
}
|
|
31
30
|
// REQUESTS
|
|
32
31
|
getRequest(options, params) {
|
|
33
32
|
this.isPending.next(true);
|
|
34
33
|
this.data.next(null);
|
|
34
|
+
if (options?.path)
|
|
35
|
+
options.path = (params) ? [...options.path, ...params] : options.path;
|
|
35
36
|
options = (options) ? options : ApiRequest.adapt();
|
|
36
|
-
const updatedOptions = this.objectMergerService.mergeOptions(options
|
|
37
|
+
const updatedOptions = this.objectMergerService.mergeOptions(options);
|
|
37
38
|
const func = this.getRecordRequest;
|
|
38
39
|
const requests = this.createRequest(func, updatedOptions);
|
|
39
|
-
return this.createObservable(updatedOptions, requests, func.name)
|
|
40
|
-
.pipe(finalize(() => this.isPending.next(false)), catchError((err) => {
|
|
40
|
+
return this.createObservable(updatedOptions, requests, func.name)
|
|
41
|
+
.pipe(tap(data => this.data.next(data))).pipe(finalize(() => this.isPending.next(false)), catchError((err) => {
|
|
41
42
|
if (updatedOptions.displayError)
|
|
42
43
|
this.handleErrorWithSnackBar(err);
|
|
43
44
|
this.isPending.next(false);
|
|
@@ -47,8 +48,10 @@ export class HTTPManagerService extends RequestService {
|
|
|
47
48
|
postRequest(data, options, params) {
|
|
48
49
|
this.isPending.next(true);
|
|
49
50
|
this.data.next(null);
|
|
51
|
+
if (options?.path)
|
|
52
|
+
options.path = (params) ? [...options.path, ...params] : options.path;
|
|
50
53
|
options = (options) ? options : ApiRequest.adapt();
|
|
51
|
-
const updatedOptions = this.objectMergerService.mergeOptions(options
|
|
54
|
+
const updatedOptions = this.objectMergerService.mergeOptions(options);
|
|
52
55
|
const func = this.createRecordRequest;
|
|
53
56
|
const requests = this.createRequest(func, updatedOptions, data);
|
|
54
57
|
return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))
|
|
@@ -62,8 +65,10 @@ export class HTTPManagerService extends RequestService {
|
|
|
62
65
|
putRequest(data, options, params) {
|
|
63
66
|
this.isPending.next(true);
|
|
64
67
|
this.data.next(null);
|
|
68
|
+
if (options?.path)
|
|
69
|
+
options.path = (params) ? [...options.path, ...params] : options.path;
|
|
65
70
|
options = (options) ? options : ApiRequest.adapt();
|
|
66
|
-
const updatedOptions = this.objectMergerService.mergeOptions(options
|
|
71
|
+
const updatedOptions = this.objectMergerService.mergeOptions(options);
|
|
67
72
|
const func = this.updateRecordRequest;
|
|
68
73
|
const requests = this.createRequest(func, updatedOptions, data);
|
|
69
74
|
return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))
|
|
@@ -77,8 +82,10 @@ export class HTTPManagerService extends RequestService {
|
|
|
77
82
|
deleteRequest(options, params) {
|
|
78
83
|
this.isPending.next(true);
|
|
79
84
|
this.data.next(null);
|
|
85
|
+
if (options?.path)
|
|
86
|
+
options.path = (params) ? [...options.path, ...params] : options.path;
|
|
80
87
|
options = (options) ? options : ApiRequest.adapt();
|
|
81
|
-
const updatedOptions = this.objectMergerService.mergeOptions(options
|
|
88
|
+
const updatedOptions = this.objectMergerService.mergeOptions(options);
|
|
82
89
|
const func = this.deleteRecordRequest;
|
|
83
90
|
const requests = this.createRequest(func, updatedOptions);
|
|
84
91
|
return this.createObservable(updatedOptions, requests, func.name).pipe(tap(data => this.data.next(data)))
|
|
@@ -89,14 +96,12 @@ export class HTTPManagerService extends RequestService {
|
|
|
89
96
|
return this.handleError(err);
|
|
90
97
|
}));
|
|
91
98
|
}
|
|
92
|
-
downloadRequest(options, params) {
|
|
99
|
+
downloadRequest(options, params, saveAs) {
|
|
93
100
|
this.isPending.next(true);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
path: params ? [...options.path, ...params] : options.path,
|
|
99
|
-
};
|
|
101
|
+
if (options?.path)
|
|
102
|
+
options.path = (params) ? [...options.path, ...params] : options.path;
|
|
103
|
+
options = (options) ? options : ApiRequest.adapt({ saveAs });
|
|
104
|
+
const updatedOptions = this.objectMergerService.mergeOptions(options);
|
|
100
105
|
const func = this.downloadFileRequest;
|
|
101
106
|
const requests = this.createRequest(func, updatedOptions);
|
|
102
107
|
return this.createObservable(updatedOptions, requests, func.name)
|
|
@@ -146,8 +151,8 @@ export class HTTPManagerService extends RequestService {
|
|
|
146
151
|
return this.handleError(err);
|
|
147
152
|
}
|
|
148
153
|
return throwError(() => err);
|
|
149
|
-
}), options.retry
|
|
150
|
-
? delayedRetry((options
|
|
154
|
+
}), (options?.retry && options.retry.times > 0)
|
|
155
|
+
? delayedRetry((options.retry.delay || 3) * 1000, (options.retry.times || 0) - 1)
|
|
151
156
|
: (source) => source);
|
|
152
157
|
}
|
|
153
158
|
createRequest(func, options, data) {
|
|
@@ -175,6 +180,7 @@ export class HTTPManagerService extends RequestService {
|
|
|
175
180
|
}
|
|
176
181
|
// MISC
|
|
177
182
|
handleError(error) {
|
|
183
|
+
this.error.next(error.message || `${error.status} - ${error.statusText}`);
|
|
178
184
|
return throwError(() => error);
|
|
179
185
|
}
|
|
180
186
|
handleErrorWithSnackBar(error) {
|
|
@@ -205,4 +211,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
205
211
|
type: Inject,
|
|
206
212
|
args: [CONFIG_SETTINGS_TOKEN]
|
|
207
213
|
}] }]; } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9odHRwLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFLOUYsTUFBTSxPQUFPLGtCQUFzQixTQUFRLGNBQWM7SUFtQnZELFlBQStELGFBQTZCO1FBQzFGLEtBQUssRUFBRSxDQUFDO1FBRHFELGtC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OzswQkFvQmMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBtYXAsIGZpbmFsaXplLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBcGlSZXF1ZXN0IH0gZnJvbSAnLi4vcmVxdWVzdC1tYW5hZ2VyLXN0YXRlLXNlcnZpY2UvbW9kZWxzL2FwaS1yZXF1ZXN0Lm1vZGVsJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgcmVxdWVzdFBvbGxpbmcsIGNvdW50ZG93biwgZGVsYXllZFJldHJ5IH0gZnJvbSAnLi9yeGpzLW9wZXJhdG9ycyc7XG5cblxuaW1wb3J0IHsgQ09ORklHX1NFVFRJTkdTX1RPS0VOIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbmZpZy10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdPcHRpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IE9iamVjdE1lcmdlclNlcnZpY2UgfSBmcm9tICcuLi91dGlscy9vYmplY3QtbWVyZ2VyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBUb2FzdE1lc3NhZ2VEaXNwbGF5U2VydmljZSwgVG9hc3REaXNwbGF5LCBUb2FzdENvbG9ycyB9IGZyb20gJ3RvYXN0LW1lc3NhZ2UtZGlzcGxheSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBIVFRQTWFuYWdlclNlcnZpY2U8VD4gZXh0ZW5kcyBSZXF1ZXN0U2VydmljZSB7XG5cbiAgdG9hc3RNZXNzYWdlID0gaW5qZWN0KFRvYXN0TWVzc2FnZURpc3BsYXlTZXJ2aWNlKVxuICBuZ19pbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgb2JqZWN0TWVyZ2VyU2VydmljZSA9IGluamVjdChPYmplY3RNZXJnZXJTZXJ2aWNlKVxuXG4gIHByaXZhdGUgY291bnRkb3duID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBjb3VudGRvd24kID0gdGhpcy5jb3VudGRvd24uYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBlcnJvciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBlcnJvciQgPSB0aGlzLmVycm9yLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKVxuICBkYXRhJCA9IHRoaXMuZGF0YS5hc09ic2VydmFibGUoKVxuXG4gIHByaXZhdGUgcG9sbGluZyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbmZpZyA9IENvbmZpZ09wdGlvbnMuYWRhcHQoKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KENPTkZJR19TRVRUSU5HU19UT0tFTikgcHJpdmF0ZSBjb25maWdPcHRpb25zPzogQ29uZmlnT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSAoY29uZmlnT3B0aW9ucykgPyBDb25maWdPcHRpb25zLmFkYXB0KGNvbmZpZ09wdGlvbnMpIDogQ29uZmlnT3B0aW9ucy5hZGFwdCgpXG4gIH1cblxuICAvLyBSRVFVRVNUU1xuXG4gIGdldFJlcXVlc3Q8VD4ob3B0aW9ucz86IEFwaVJlcXVlc3QsIHBhcmFtcz86IGFueVtdKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGF0YS5uZXh0KG51bGwpXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zPEFwaVJlcXVlc3Q+KG9wdGlvbnMsIHRoaXMuY29uZmlnLmh0dHBSZXF1ZXN0T3B0aW9ucylcblxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmdldFJlY29yZFJlcXVlc3Q7XG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKHRhcChkYXRhID0+IHRoaXMuZGF0YS5uZXh0KGRhdGEpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGlmKHVwZGF0ZWRPcHRpb25zLmRpc3BsYXlFcnJvcikgdGhpcy5oYW5kbGVFcnJvcldpdGhTbmFja0JhcihlcnIpXG4gICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgcG9zdFJlcXVlc3Q8VCBleHRlbmRzIHsgaWQ/OiBudW1iZXJ8c3RyaW5nIH0+KGRhdGE6IFQsIG9wdGlvbnM6IEFwaVJlcXVlc3QsIHBhcmFtcz86IGFueVtdKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGF0YS5uZXh0KG51bGwpXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zPEFwaVJlcXVlc3Q+KG9wdGlvbnMsIHRoaXMuY29uZmlnLmh0dHBSZXF1ZXN0T3B0aW9ucylcblxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmNyZWF0ZVJlY29yZFJlcXVlc3Q7XG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucywgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKHRhcChkYXRhID0+IHRoaXMuZGF0YS5uZXh0KGRhdGEpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGlmKHVwZGF0ZWRPcHRpb25zLmRpc3BsYXlFcnJvcikgdGhpcy5oYW5kbGVFcnJvcldpdGhTbmFja0JhcihlcnIpXG4gICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgcHV0UmVxdWVzdDxUIGV4dGVuZHMgeyBpZD86IG51bWJlcnxzdHJpbmcgfT4oZGF0YTogVCwgb3B0aW9uczogQXBpUmVxdWVzdCwgcGFyYW1zPzogYW55W10pIHtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kYXRhLm5leHQobnVsbClcblxuICAgIG9wdGlvbnMgPSAob3B0aW9ucyk/IG9wdGlvbnMgOiBBcGlSZXF1ZXN0LmFkYXB0KClcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZU9wdGlvbnM8QXBpUmVxdWVzdD4ob3B0aW9ucywgdGhpcy5jb25maWcuaHR0cFJlcXVlc3RPcHRpb25zKVxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLnVwZGF0ZVJlY29yZFJlcXVlc3Q7XG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucywgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKHRhcChkYXRhID0+IHRoaXMuZGF0YS5uZXh0KGRhdGEpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGlmKHVwZGF0ZWRPcHRpb25zLmRpc3BsYXlFcnJvcikgdGhpcy5oYW5kbGVFcnJvcldpdGhTbmFja0JhcihlcnIpXG4gICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgIH0pXG4gICAgICApXG4gIH1cblxuICBkZWxldGVSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIHBhcmFtcz86IGFueVtdKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGF0YS5uZXh0KG51bGwpXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zPEFwaVJlcXVlc3Q+KG9wdGlvbnMsIHRoaXMuY29uZmlnLmh0dHBSZXF1ZXN0T3B0aW9ucylcblxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRlbGV0ZVJlY29yZFJlcXVlc3Q7XG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVPYnNlcnZhYmxlPFQ+KHVwZGF0ZWRPcHRpb25zLCByZXF1ZXN0cywgZnVuYy5uYW1lKS5waXBlKHRhcChkYXRhID0+IHRoaXMuZGF0YS5uZXh0KGRhdGEpKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGlmKHVwZGF0ZWRPcHRpb25zLmRpc3BsYXlFcnJvcikgdGhpcy5oYW5kbGVFcnJvcldpdGhTbmFja0JhcihlcnIpXG4gICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgZG93bmxvYWRSZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIHBhcmFtcz86IGFueVtdKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgb3B0aW9ucyA9IChvcHRpb25zKT8gb3B0aW9ucyA6IEFwaVJlcXVlc3QuYWRhcHQoKVxuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zPEFwaVJlcXVlc3Q+KG9wdGlvbnMsIHRoaXMuY29uZmlnLmh0dHBSZXF1ZXN0T3B0aW9ucylcblxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0ge1xuICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICAgIHBhdGg6IHBhcmFtcyA/IFsuLi5vcHRpb25zLnBhdGgsIC4uLnBhcmFtc10gOiBvcHRpb25zLnBhdGgsXG4gICAgfTtcblxuICAgIGNvbnN0IGZ1bmMgPSB0aGlzLmRvd25sb2FkRmlsZVJlcXVlc3Q7XG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IHRoaXMuY3JlYXRlUmVxdWVzdChmdW5jLCB1cGRhdGVkT3B0aW9ucylcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU9ic2VydmFibGU8VD4odXBkYXRlZE9wdGlvbnMsIHJlcXVlc3RzLCBmdW5jLm5hbWUpXG4gICAgLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvci5uZXh0KHRydWUpXG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICB9KVxuICAgIClcblxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPYnNlcnZhYmxlPFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QsIHJlcXVlc3QkOiBPYnNlcnZhYmxlPFQ+LCBmdW5jTmFtZTogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBwb2xsaW5nID0gb3B0aW9ucy5wb2xsaW5nID8gKG9wdGlvbnMucG9sbGluZyA+IDAgPyB0cnVlIDogZmFsc2UpIDogZmFsc2U7XG4gICAgY29uc3QgaXNQb2xsaW5nID1cbiAgICAgIHBvbGxpbmcgJiZcbiAgICAgICEoZnVuY05hbWUgPT09ICdkZWxldGVSZWNvcmRSZXF1ZXN0JyB8fCBmdW5jTmFtZSA9PT0gJ3VwZGF0ZVJlY29yZFJlcXVlc3QnIHx8IGZ1bmNOYW1lID09PSAnY3JlYXRlUmVjb3JkUmVxdWVzdCcpXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5wb2xsaW5nJC5uZXh0KCk7XG5cbiAgICBjb25zdCBwb2xsaW5nJCA9XG4gICAgICAoaXNQb2xsaW5nICYmIG9wdGlvbnMucG9sbGluZykgfHwgMCA+PSAzXG4gICAgICAgID8gcmVxdWVzdCQucGlwZShcbiAgICAgICAgICAgIHJlcXVlc3RQb2xsaW5nKChvcHRpb25zLnBvbGxpbmcgfHwgMCkgKyAxLCB0aGlzLnBvbGxpbmckLCB0aGlzLmlzUGVuZGluZyksXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jb3VudGRvd24ubmV4dCgwKSksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucG9sbGluZykgcmV0dXJuO1xuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IG9wdGlvbnMucG9sbGluZyA/IG9wdGlvbnMucG9sbGluZyA6IDA7XG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDT1VOVDonLCBjb3VudCk7XG4gICAgICAgICAgICAgIGNvdW50ZG93bihjb3VudClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIG1hcCgoeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdYWDonLCBjb3VudCwgeCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbGxpbmdJblNlYyA9IG9wdGlvbnMucG9sbGluZyB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlQ29tcGxldGVkID0gKChwb2xsaW5nSW5TZWMgLSB4KSAvIHBvbGxpbmdJblNlYykgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBlcmNlbnRhZ2VDb21wbGV0ZWQpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY291bnREb3duVmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jb3VudGRvd24udmFsdWUsIGNvdW50RG93blZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnRkb3duLm5leHQoY291bnREb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICA6IHJlcXVlc3QkLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpXG4gICAgICAgICAgKVxuXG4gICAgcmV0dXJuIHBvbGxpbmckLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSwgY2F1Z2h0OiBPYnNlcnZhYmxlPFQ+KSA9PiB7XG5cbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5lcnJvci5uZXh0KHRydWUpO1xuICAgICAgICAgIGlmKGlzUG9sbGluZykgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgfSksXG4gICAgICBvcHRpb25zLnJldHJ5Py50aW1lcyA+IDBcbiAgICAgICAgPyBkZWxheWVkUmV0cnkoKG9wdGlvbnM/LnJldHJ5LmRlbGF5IHx8IDMpICogMTAwMCwgKG9wdGlvbnM/LnJldHJ5LnRpbWVzIHx8IDApIC0gMSlcbiAgICAgICAgOiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiBzb3VyY2VcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0KGZ1bmM6IEZ1bmN0aW9uLCBvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhPzogYW55IHwgYW55W10pIHtcbiAgICBjb25zdCBkYXRhSXRlbSA9IHRoaXMucHJlcGFyZVJlcXVlc3REYXRhKG9wdGlvbnMsIGRhdGEsIGZ1bmMubmFtZSk7XG4gICAgcmV0dXJuIGZ1bmMuYmluZCh0aGlzKShkYXRhSXRlbS5vcHRpb25zLCBkYXRhSXRlbS5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlcXVlc3REYXRhKG9wdGlvbnM6IEFwaVJlcXVlc3QsIGRhdGE6IGFueSwgZnVuY05hbWU6IHN0cmluZykge1xuXG4gICAgaWYgKChvcHRpb25zLm1hcHBlciAmJiBmdW5jTmFtZSA9PT0gJ3VwZGF0ZVJlY29yZFJlcXVlc3QnKSB8fCBmdW5jTmFtZSA9PT0gJ2NyZWF0ZVJlY29yZFJlcXVlc3QnKSB7XG4gICAgICBpZiAob3B0aW9ucz8ubWFwcGVyKSB7XG4gICAgICAgIGRhdGEgPSBvcHRpb25zLm1hcHBlclxuICAgICAgICAgID8gQXJyYXkuaXNBcnJheShkYXRhKVxuICAgICAgICAgICAgPyBtYXAoKGl0ZW0pID0+IG9wdGlvbnMubWFwcGVyKGl0ZW0pKVxuICAgICAgICAgICAgOiBvcHRpb25zLm1hcHBlcihkYXRhKVxuICAgICAgICAgIDogZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgZGF0YSA9IEFycmF5LmlzQXJyYXkoZGF0YSlcbiAgICAgICAgICAgID8gbWFwKChpdGVtKSA9PiBvcHRpb25zLmFkYXB0ZXIoaXRlbSkpXG4gICAgICAgICAgICA6IG9wdGlvbnMuYWRhcHRlcihkYXRhKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG9wdGlvbnM6IG9wdGlvbnMsIGRhdGE6IGRhdGEgfTtcbiAgfVxuXG4gIC8vIE1JU0NcblxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBSZXNwb25zZSB8IGFueSkge1xuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyb3I6IFJlc3BvbnNlIHwgYW55KSB7XG5cbiAgICBjb25zdCBkaXNwbGF5RXJyb3IgPSBUb2FzdERpc3BsYXkuYWRhcHQoe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB8fCBgJHtlcnJvci5zdGF0dXN9IC0gJHtlcnJvci5zdGF0dXNUZXh0fWAsXG4gICAgICAgICAgICBhY3Rpb246ICdPSycsXG4gICAgICAgICAgICBjb2xvcjogVG9hc3RDb2xvcnMuRVJST1IsXG4gICAgICAgICAgICBpY29uOiAnZXJyb3InLFxuICAgICAgICAgICAgZHVyYXRpb246IDUgKiAxMDAwLCAvLzUgc2Vjb25kc1xuICAgICAgICAgIH0pXG5cbiAgICB0aGlzLnRvYXN0TWVzc2FnZS50b2FzdE1lc3NhZ2UoZGlzcGxheUVycm9yKVxuXG4gIH1cblxuICBwcml2YXRlIHN0b3BQb2xsaW5nKCkge1xuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpO1xuICAgIHRoaXMucG9sbGluZyQubmV4dCgpO1xuICB9XG59XG4iXX0=
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9odHRwLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBS3JFLE1BQU0sT0FBTyxrQkFBc0IsU0FBUSxjQUFjO0lBbUJ2RCxZQUErRCxhQUE2QjtRQUMxRixLQUFLLEVBQUUsQ0FBQTtRQURzRCxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFqQjVGLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFDakQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDOUIsd0JBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFFekMsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25ELGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRW5DLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNwRCxXQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUzQixTQUFJLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUE7UUFDN0MsVUFBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFeEIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFdkMsV0FBTSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUkxQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDbEcsQ0FBQztJQUVELFdBQVc7SUFFWCxVQUFVLENBQUksT0FBb0IsRUFBRSxNQUFjO1FBRWhELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBCLElBQUcsT0FBTyxFQUFFLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFFdkYsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFckUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRW5DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTFELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFJLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNuRSxJQUFJLENBQ0gsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDbEMsQ0FBQyxJQUFJLENBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUcsY0FBYyxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBbUMsSUFBTyxFQUFFLE9BQW1CLEVBQUUsTUFBYztRQUV4RixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVwQixJQUFHLE9BQU8sRUFBRSxJQUFJO1lBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBRXZGLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXJFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUV0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUksY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDekcsSUFBSSxDQUNILFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMxQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFHLGNBQWMsQ0FBQyxZQUFZO2dCQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNMLENBQUM7SUFFRCxVQUFVLENBQW1DLElBQU8sRUFBRSxPQUFtQixFQUFFLE1BQWM7UUFFdkYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFcEIsSUFBRyxPQUFPLEVBQUUsSUFBSTtZQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUV2RixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFJLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3pHLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDMUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBRyxjQUFjLENBQUMsWUFBWTtnQkFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDNUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUNILENBQUE7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFJLE9BQW1CLEVBQUUsTUFBYztRQUVsRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVwQixJQUFHLE9BQU8sRUFBRSxJQUFJO1lBQUUsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBRXZGLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXJFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUV0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUUxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBSSxjQUFjLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN6RyxJQUFJLENBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUcsY0FBYyxDQUFDLFlBQVk7Z0JBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBSSxPQUFtQixFQUFFLE1BQWMsRUFBRSxNQUFlO1FBRXJFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFCLElBQUcsT0FBTyxFQUFFLElBQUk7WUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUE7UUFFdkYsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDM0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFFdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFFekQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUksY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ25FLElBQUksQ0FDSCxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUVILENBQUM7SUFFTyxnQkFBZ0IsQ0FBSSxPQUFtQixFQUFFLFFBQXVCLEVBQUUsUUFBZ0I7UUFFeEYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9FLE1BQU0sU0FBUyxHQUNiLE9BQU87WUFDUCxDQUFDLENBQUMsUUFBUSxLQUFLLHFCQUFxQixJQUFJLFFBQVEsS0FBSyxxQkFBcUIsSUFBSSxRQUFRLEtBQUsscUJBQXFCLENBQUM7WUFDL0csQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsS0FBSyxDQUFDO1FBRVosSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVyQixNQUFNLFFBQVEsR0FDWixDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ1gsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNqQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztvQkFBRSxPQUFPO2dCQUM3QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BELGdDQUFnQztnQkFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQztxQkFDYixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7b0JBQ2hCLGdDQUFnQztvQkFDaEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7b0JBQzFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ3RFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FDSDtxQkFDQSxTQUFTLENBQUMsQ0FBQyxjQUFzQixFQUFFLEVBQUU7b0JBQ3BDLHFEQUFxRDtvQkFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQ0g7WUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDWCxVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFdEIsSUFBSSxHQUFHLFlBQVksaUJBQWlCLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlCO2dCQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUVILENBQUE7UUFFUCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQ2xCLFVBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxNQUFxQixFQUFFLEVBQUU7WUFFN0MsSUFBSSxHQUFHLFlBQVksaUJBQWlCLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixJQUFHLFNBQVM7b0JBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDOUI7WUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsRUFDRixDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakYsQ0FBQyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFjLEVBQUUsT0FBbUIsRUFBRSxJQUFrQjtRQUMzRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUFtQixFQUFFLElBQVMsRUFBRSxRQUFnQjtRQUV6RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxRQUFRLEtBQUsscUJBQXFCLENBQUMsSUFBSSxRQUFRLEtBQUsscUJBQXFCLEVBQUU7WUFDaEcsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUNuQixJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU07b0JBQ25CLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3QkFDbkIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDckMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ1Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFO2dCQUNwQixJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQzVCO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87SUFFQyxXQUFXLENBQUMsS0FBcUI7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDekUsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQXFCO1FBRW5ELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDaEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDakUsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLE9BQU87WUFDYixRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxXQUFXO1NBQ2hDLENBQUMsQ0FBQTtRQUVSLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRTlDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0ExUVUsa0JBQWtCLGtCQW1CRyxxQkFBcUI7bUhBbkIxQyxrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBb0JjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCwgbWFwLCBmaW5hbGl6ZSwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IHJlcXVlc3RQb2xsaW5nLCBjb3VudGRvd24sIGRlbGF5ZWRSZXRyeSB9IGZyb20gJy4vcnhqcy1vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUb2FzdENvbG9ycywgVG9hc3REaXNwbGF5LCBUb2FzdE1lc3NhZ2VEaXNwbGF5U2VydmljZSB9IGZyb20gJ3RvYXN0LW1lc3NhZ2UtZGlzcGxheSc7XG5cbmltcG9ydCB7IENPTkZJR19TRVRUSU5HU19UT0tFTiB9IGZyb20gJy4uLy4uL21vZGVscy9jb25maWctdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnT3B0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPYmplY3RNZXJnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXRpbHMvb2JqZWN0LW1lcmdlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEhUVFBNYW5hZ2VyU2VydmljZTxUPiBleHRlbmRzIFJlcXVlc3RTZXJ2aWNlIHtcblxuICB0b2FzdE1lc3NhZ2UgPSBpbmplY3QoVG9hc3RNZXNzYWdlRGlzcGxheVNlcnZpY2UpXG4gIG5nX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuICBvYmplY3RNZXJnZXJTZXJ2aWNlID0gaW5qZWN0KE9iamVjdE1lcmdlclNlcnZpY2UpXG5cbiAgcHJpdmF0ZSBjb3VudGRvd24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIGNvdW50ZG93biQgPSB0aGlzLmNvdW50ZG93bi5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGVycm9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGVycm9yJCA9IHRoaXMuZXJyb3IuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpXG4gIGRhdGEkID0gdGhpcy5kYXRhLmFzT2JzZXJ2YWJsZSgpXG5cbiAgcHJpdmF0ZSBwb2xsaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uZmlnID0gQXBpUmVxdWVzdC5hZGFwdCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoQ09ORklHX1NFVFRJTkdTX1RPS0VOKSBwcml2YXRlIGNvbmZpZ09wdGlvbnM/OiBDb25maWdPcHRpb25zKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnID0gKGNvbmZpZ09wdGlvbnMpID8gQXBpUmVxdWVzdC5hZGFwdChjb25maWdPcHRpb25zLmh0dHBSZXF1ZXN0T3B0aW9ucykgOiB0aGlzLmNvbmZpZ1xuICB9XG5cbiAgLy8gUkVRVUVTVFNcblxuICBnZXRSZXF1ZXN0PFQ+KG9wdGlvbnM/OiBBcGlSZXF1ZXN0LCBwYXJhbXM/OiBhbnlbXSkge1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRhdGEubmV4dChudWxsKVxuXG4gICAgaWYob3B0aW9ucz8ucGF0aCkgb3B0aW9ucy5wYXRoID0gKHBhcmFtcykgPyBbLi4ub3B0aW9ucy5wYXRoLCAuLi5wYXJhbXNdIDogb3B0aW9ucy5wYXRoXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5nZXRSZWNvcmRSZXF1ZXN0O1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3QoZnVuYywgdXBkYXRlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZTxUPih1cGRhdGVkT3B0aW9ucywgcmVxdWVzdHMsIGZ1bmMubmFtZSlcbiAgICAucGlwZShcbiAgICAgIHRhcChkYXRhID0+IHRoaXMuZGF0YS5uZXh0KGRhdGEpKVxuICAgICkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZih1cGRhdGVkT3B0aW9ucy5kaXNwbGF5RXJyb3IpIHRoaXMuaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyKVxuICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHBvc3RSZXF1ZXN0PFQgZXh0ZW5kcyB7IGlkPzogbnVtYmVyfHN0cmluZyB9PihkYXRhOiBULCBvcHRpb25zOiBBcGlSZXF1ZXN0LCBwYXJhbXM/OiBhbnlbXSkge1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRhdGEubmV4dChudWxsKVxuXG4gICAgaWYob3B0aW9ucz8ucGF0aCkgb3B0aW9ucy5wYXRoID0gKHBhcmFtcykgPyBbLi4ub3B0aW9ucy5wYXRoLCAuLi5wYXJhbXNdIDogb3B0aW9ucy5wYXRoXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5jcmVhdGVSZWNvcmRSZXF1ZXN0O1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3QoZnVuYywgdXBkYXRlZE9wdGlvbnMsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZTxUPih1cGRhdGVkT3B0aW9ucywgcmVxdWVzdHMsIGZ1bmMubmFtZSkucGlwZSh0YXAoZGF0YSA9PiB0aGlzLmRhdGEubmV4dChkYXRhKSkpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZih1cGRhdGVkT3B0aW9ucy5kaXNwbGF5RXJyb3IpIHRoaXMuaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyKVxuICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIHB1dFJlcXVlc3Q8VCBleHRlbmRzIHsgaWQ/OiBudW1iZXJ8c3RyaW5nIH0+KGRhdGE6IFQsIG9wdGlvbnM6IEFwaVJlcXVlc3QsIHBhcmFtcz86IGFueVtdKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGF0YS5uZXh0KG51bGwpXG5cbiAgICBpZihvcHRpb25zPy5wYXRoKSBvcHRpb25zLnBhdGggPSAocGFyYW1zKSA/IFsuLi5vcHRpb25zLnBhdGgsIC4uLnBhcmFtc10gOiBvcHRpb25zLnBhdGhcblxuICAgIG9wdGlvbnMgPSAob3B0aW9ucyk/IG9wdGlvbnMgOiBBcGlSZXF1ZXN0LmFkYXB0KClcbiAgICBjb25zdCB1cGRhdGVkT3B0aW9ucyA9IHRoaXMub2JqZWN0TWVyZ2VyU2VydmljZS5tZXJnZU9wdGlvbnMob3B0aW9ucylcbiAgICBjb25zdCBmdW5jID0gdGhpcy51cGRhdGVSZWNvcmRSZXF1ZXN0O1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3QoZnVuYywgdXBkYXRlZE9wdGlvbnMsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZTxUPih1cGRhdGVkT3B0aW9ucywgcmVxdWVzdHMsIGZ1bmMubmFtZSkucGlwZSh0YXAoZGF0YSA9PiB0aGlzLmRhdGEubmV4dChkYXRhKSkpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZih1cGRhdGVkT3B0aW9ucy5kaXNwbGF5RXJyb3IpIHRoaXMuaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyKVxuICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICB9KVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBwYXJhbXM/OiBhbnlbXSkge1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRhdGEubmV4dChudWxsKVxuXG4gICAgaWYob3B0aW9ucz8ucGF0aCkgb3B0aW9ucy5wYXRoID0gKHBhcmFtcykgPyBbLi4ub3B0aW9ucy5wYXRoLCAuLi5wYXJhbXNdIDogb3B0aW9ucy5wYXRoXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCgpXG4gICAgY29uc3QgdXBkYXRlZE9wdGlvbnMgPSB0aGlzLm9iamVjdE1lcmdlclNlcnZpY2UubWVyZ2VPcHRpb25zKG9wdGlvbnMpXG5cbiAgICBjb25zdCBmdW5jID0gdGhpcy5kZWxldGVSZWNvcmRSZXF1ZXN0O1xuXG4gICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzLmNyZWF0ZVJlcXVlc3QoZnVuYywgdXBkYXRlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZTxUPih1cGRhdGVkT3B0aW9ucywgcmVxdWVzdHMsIGZ1bmMubmFtZSkucGlwZSh0YXAoZGF0YSA9PiB0aGlzLmRhdGEubmV4dChkYXRhKSkpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBpZih1cGRhdGVkT3B0aW9ucy5kaXNwbGF5RXJyb3IpIHRoaXMuaGFuZGxlRXJyb3JXaXRoU25hY2tCYXIoZXJyKVxuICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgfVxuXG4gIGRvd25sb2FkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBwYXJhbXM/OiBhbnlbXSwgc2F2ZUFzPzogc3RyaW5nKSB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgaWYob3B0aW9ucz8ucGF0aCkgb3B0aW9ucy5wYXRoID0gKHBhcmFtcykgPyBbLi4ub3B0aW9ucy5wYXRoLCAuLi5wYXJhbXNdIDogb3B0aW9ucy5wYXRoXG5cbiAgICBvcHRpb25zID0gKG9wdGlvbnMpPyBvcHRpb25zIDogQXBpUmVxdWVzdC5hZGFwdCh7IHNhdmVBcyB9KVxuICAgIGNvbnN0IHVwZGF0ZWRPcHRpb25zID0gdGhpcy5vYmplY3RNZXJnZXJTZXJ2aWNlLm1lcmdlT3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgZnVuYyA9IHRoaXMuZG93bmxvYWRGaWxlUmVxdWVzdDtcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpcy5jcmVhdGVSZXF1ZXN0KGZ1bmMsIHVwZGF0ZWRPcHRpb25zKVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZTxUPih1cGRhdGVkT3B0aW9ucywgcmVxdWVzdHMsIGZ1bmMubmFtZSlcbiAgICAucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICB0aGlzLmVycm9yLm5leHQodHJ1ZSlcbiAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgKVxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9ic2VydmFibGU8VD4ob3B0aW9uczogQXBpUmVxdWVzdCwgcmVxdWVzdCQ6IE9ic2VydmFibGU8VD4sIGZ1bmNOYW1lOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHBvbGxpbmcgPSBvcHRpb25zLnBvbGxpbmcgPyAob3B0aW9ucy5wb2xsaW5nID4gMCA/IHRydWUgOiBmYWxzZSkgOiBmYWxzZTtcbiAgICBjb25zdCBpc1BvbGxpbmcgPVxuICAgICAgcG9sbGluZyAmJlxuICAgICAgIShmdW5jTmFtZSA9PT0gJ2RlbGV0ZVJlY29yZFJlcXVlc3QnIHx8IGZ1bmNOYW1lID09PSAndXBkYXRlUmVjb3JkUmVxdWVzdCcgfHwgZnVuY05hbWUgPT09ICdjcmVhdGVSZWNvcmRSZXF1ZXN0JylcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLnBvbGxpbmckLm5leHQoKTtcblxuICAgIGNvbnN0IHBvbGxpbmckID1cbiAgICAgIChpc1BvbGxpbmcgJiYgb3B0aW9ucy5wb2xsaW5nKSB8fCAwID49IDNcbiAgICAgICAgPyByZXF1ZXN0JC5waXBlKFxuICAgICAgICAgICAgcmVxdWVzdFBvbGxpbmcoKG9wdGlvbnMucG9sbGluZyB8fCAwKSArIDEsIHRoaXMucG9sbGluZyQsIHRoaXMuaXNQZW5kaW5nKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmNvdW50ZG93bi5uZXh0KDApKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wb2xsaW5nKSByZXR1cm47XG4gICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gb3B0aW9ucy5wb2xsaW5nID8gb3B0aW9ucy5wb2xsaW5nIDogMDtcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0NPVU5UOicsIGNvdW50KTtcbiAgICAgICAgICAgICAgY291bnRkb3duKGNvdW50KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgbWFwKCh4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1hYOicsIGNvdW50LCB4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9sbGluZ0luU2VjID0gb3B0aW9ucy5wb2xsaW5nIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VDb21wbGV0ZWQgPSAoKHBvbGxpbmdJblNlYyAtIHgpIC8gcG9sbGluZ0luU2VjKSAqIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQocGVyY2VudGFnZUNvbXBsZXRlZCk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjb3VudERvd25WYWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNvdW50ZG93bi52YWx1ZSwgY291bnREb3duVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb3VudGRvd24ubmV4dChjb3VudERvd25WYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApXG4gICAgICAgIDogcmVxdWVzdCQucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKSlcbiAgICAgICAgICApXG5cbiAgICByZXR1cm4gcG9sbGluZyQucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55LCBjYXVnaHQ6IE9ic2VydmFibGU8VD4pID0+IHtcblxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLmVycm9yLm5leHQodHJ1ZSk7XG4gICAgICAgICAgaWYoaXNQb2xsaW5nKSB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KSxcbiAgICAgIChvcHRpb25zPy5yZXRyeSAmJiBvcHRpb25zLnJldHJ5LnRpbWVzID4gMClcbiAgICAgICAgPyBkZWxheWVkUmV0cnkoKG9wdGlvbnMucmV0cnkuZGVsYXkgfHwgMykgKiAxMDAwLCAob3B0aW9ucy5yZXRyeS50aW1lcyB8fCAwKSAtIDEpXG4gICAgICAgIDogKHNvdXJjZTogT2JzZXJ2YWJsZTxUPikgPT4gc291cmNlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVxdWVzdChmdW5jOiBGdW5jdGlvbiwgb3B0aW9uczogQXBpUmVxdWVzdCwgZGF0YT86IGFueSB8IGFueVtdKSB7XG4gICAgY29uc3QgZGF0YUl0ZW0gPSB0aGlzLnByZXBhcmVSZXF1ZXN0RGF0YShvcHRpb25zLCBkYXRhLCBmdW5jLm5hbWUpO1xuICAgIHJldHVybiBmdW5jLmJpbmQodGhpcykoZGF0YUl0ZW0ub3B0aW9ucywgZGF0YUl0ZW0uZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXF1ZXN0RGF0YShvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnksIGZ1bmNOYW1lOiBzdHJpbmcpIHtcblxuICAgIGlmICgob3B0aW9ucy5tYXBwZXIgJiYgZnVuY05hbWUgPT09ICd1cGRhdGVSZWNvcmRSZXF1ZXN0JykgfHwgZnVuY05hbWUgPT09ICdjcmVhdGVSZWNvcmRSZXF1ZXN0Jykge1xuICAgICAgaWYgKG9wdGlvbnM/Lm1hcHBlcikge1xuICAgICAgICBkYXRhID0gb3B0aW9ucy5tYXBwZXJcbiAgICAgICAgICA/IEFycmF5LmlzQXJyYXkoZGF0YSlcbiAgICAgICAgICAgID8gbWFwKChpdGVtKSA9PiBvcHRpb25zLm1hcHBlcihpdGVtKSlcbiAgICAgICAgICAgIDogb3B0aW9ucy5tYXBwZXIoZGF0YSlcbiAgICAgICAgICA6IGRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcHRpb25zPy5hZGFwdGVyKSB7XG4gICAgICAgIGRhdGEgPSBBcnJheS5pc0FycmF5KGRhdGEpXG4gICAgICAgICAgICA/IG1hcCgoaXRlbSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgICAgOiBvcHRpb25zLmFkYXB0ZXIoZGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBvcHRpb25zOiBvcHRpb25zLCBkYXRhOiBkYXRhIH07XG4gIH1cblxuICAvLyBNSVNDXG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogUmVzcG9uc2UgfCBhbnkpIHtcbiAgICB0aGlzLmVycm9yLm5leHQoZXJyb3IubWVzc2FnZSB8fCBgJHtlcnJvci5zdGF0dXN9IC0gJHtlcnJvci5zdGF0dXNUZXh0fWApXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yV2l0aFNuYWNrQmFyKGVycm9yOiBSZXNwb25zZSB8IGFueSkge1xuXG4gICAgY29uc3QgZGlzcGxheUVycm9yID0gVG9hc3REaXNwbGF5LmFkYXB0KHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfHwgYCR7ZXJyb3Iuc3RhdHVzfSAtICR7ZXJyb3Iuc3RhdHVzVGV4dH1gLFxuICAgICAgICAgICAgYWN0aW9uOiAnT0snLFxuICAgICAgICAgICAgY29sb3I6IFRvYXN0Q29sb3JzLkVSUk9SLFxuICAgICAgICAgICAgaWNvbjogJ2Vycm9yJyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiA1ICogMTAwMCwgLy81IHNlY29uZHNcbiAgICAgICAgICB9KVxuXG4gICAgdGhpcy50b2FzdE1lc3NhZ2UudG9hc3RNZXNzYWdlKGRpc3BsYXlFcnJvcilcblxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUG9sbGluZygpIHtcbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnBvbGxpbmckLm5leHQoKTtcbiAgfVxufVxuIl19
|