ontimize-web-ngx 15.6.0-next.2 → 15.6.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +1 -1
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +2 -2
- package/esm2020/lib/components/form/o-form.component.mjs +6 -4
- package/esm2020/lib/components/grid/o-grid.component.mjs +3 -2
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +2 -2
- package/esm2020/lib/components/list/o-list.component.mjs +3 -2
- package/esm2020/lib/components/o-service-base-component.class.mjs +2 -2
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
- package/esm2020/lib/components/table/extensions/o-table.dao.mjs +6 -4
- package/esm2020/lib/components/table/o-table.component.mjs +3 -2
- package/esm2020/lib/config/o-providers.mjs +3 -2
- package/esm2020/lib/injection-tokens/index.mjs +17 -0
- package/esm2020/lib/interfaces/base-response.interface.mjs +1 -1
- package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +1 -1
- package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -1
- package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +3 -2
- package/esm2020/lib/services/base-service.class.mjs +3 -3
- package/esm2020/lib/services/factories.mjs +13 -46
- package/esm2020/lib/services/index.mjs +2 -2
- package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +2 -2
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +10 -15
- package/esm2020/lib/services/request-adapter/base-request-argument.adapter.mjs +12 -0
- package/esm2020/lib/services/request-adapter/base-request-argument.interface.mjs +2 -0
- package/esm2020/lib/services/request-adapter/index.mjs +5 -0
- package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +70 -0
- package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +19 -0
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +1 -1
- package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
- package/esm2020/lib/util/errors.mjs +2 -2
- package/esm2020/lib/util/index.mjs +2 -1
- package/esm2020/lib/util/injection-token.utils.mjs +4 -0
- package/esm2020/lib/util/util.mjs +15 -4
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/ontimize-web-ngx.mjs +4444 -4435
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +4108 -4099
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/filter-builder/o-filter-builder.component.d.ts +1 -1
- package/lib/injection-tokens/index.d.ts +29 -0
- package/lib/interfaces/base-response.interface.d.ts +0 -2
- package/lib/interfaces/form-layout-manager.interface.d.ts +1 -1
- package/lib/interfaces/jsonapi-response.interface.d.ts +47 -7
- package/lib/interfaces/service-response.interface.d.ts +2 -0
- package/lib/services/base-service.class.d.ts +2 -2
- package/lib/services/factories.d.ts +7 -28
- package/lib/services/index.d.ts +1 -1
- package/lib/services/jsonapi/jsonapi.service.d.ts +3 -4
- package/lib/services/{query-arguments/base-query-argument.adapter.d.ts → request-adapter/base-request-argument.adapter.d.ts} +2 -1
- package/lib/services/{query-arguments/base-query-argument.interface.d.ts → request-adapter/base-request-argument.interface.d.ts} +1 -1
- package/lib/services/request-adapter/index.d.ts +4 -0
- package/lib/services/request-adapter/jsonapi-request-arguments.adapter.d.ts +13 -0
- package/lib/services/request-adapter/ontimize-request-arguments.adapter.d.ts +8 -0
- package/lib/services/state/o-filter-builder-component-state.service.d.ts +1 -1
- package/lib/util/index.d.ts +1 -0
- package/lib/util/injection-token.utils.d.ts +2 -0
- package/lib/util/util.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/theme.scss +69 -69
- package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +0 -9
- package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +0 -2
- package/esm2020/lib/services/query-arguments/index.mjs +0 -5
- package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +0 -62
- package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +0 -19
- package/lib/services/query-arguments/index.d.ts +0 -4
- package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +0 -12
- package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +0 -8
|
@@ -4,7 +4,7 @@ import { MediaObserver } from '@angular/flex-layout';
|
|
|
4
4
|
import { MatPaginator } from '@angular/material/paginator';
|
|
5
5
|
import { Subscription } from 'rxjs';
|
|
6
6
|
import { BooleanInputConverter } from '../../decorators/input-converter';
|
|
7
|
-
import { ComponentStateServiceProvider,
|
|
7
|
+
import { ComponentStateServiceProvider, OntimizeServiceProvider } from '../../services/factories';
|
|
8
8
|
import { OGridComponentStateService } from '../../services/state/o-grid-component-state.service';
|
|
9
9
|
import { Codes } from '../../util/codes';
|
|
10
10
|
import { ServiceUtils } from '../../util/service.utils';
|
|
@@ -14,6 +14,7 @@ import { AbstractOServiceComponent } from '../o-service-component.class';
|
|
|
14
14
|
import { OMatSort } from '../table/extensions/sort/o-mat-sort';
|
|
15
15
|
import { OGridItemComponent } from './grid-item/o-grid-item.component';
|
|
16
16
|
import { OGridItemDirective } from './grid-item/o-grid-item.directive';
|
|
17
|
+
import { O_COMPONENT_STATE_SERVICE } from '../../injection-tokens';
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
19
|
import * as i1 from "@angular/common";
|
|
19
20
|
import * as i2 from "../input/search-input/o-search-input.component";
|
|
@@ -391,4 +392,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
391
392
|
type: ViewChild,
|
|
392
393
|
args: [MatPaginator]
|
|
393
394
|
}] } });
|
|
394
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0gsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFLakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHdkUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUc7SUFFbkMsTUFBTTtJQUVOLDhCQUE4QjtJQUU5QixxQkFBcUI7SUFFckIsbUNBQW1DO0lBRW5DLHlCQUF5QjtJQUV6QiwwQ0FBMEM7SUFFMUMsa0NBQWtDO0lBRWxDLCtCQUErQjtJQUUvQix3QkFBd0I7SUFFeEIsMEJBQTBCO0lBRTFCLHdCQUF3QjtJQUV4Qiw2Q0FBNkM7SUFFN0MsK0NBQStDO0lBRS9DLG9DQUFvQztDQUNyQyxDQUFDO0FBR0YsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQWtCOUMsTUFBTSxPQUFPLGNBQWUsU0FBUSx5QkFBcUQ7SUFtQ3ZGLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksZUFBZSxDQUFDLEdBQUc7UUFDckIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUF1QkQsSUFBSSxTQUFTLENBQUMsS0FBa0I7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBWUQsWUFDRSxRQUFrQixFQUNsQixLQUFpQixFQUNxQyxJQUFvQjtRQUUxRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQTlGckIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUduQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUc5QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLGVBQVUsR0FBWSxJQUFJLENBQUM7UUFFM0IsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFHdkIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFHckMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHdkIsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRzdDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRTFCLHlCQUFvQixHQUFxQixRQUFRLENBQUM7UUFDekQsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDaEIsMkJBQXNCLEdBQTJCLFNBQVMsQ0FBQztRQThCM0QscUJBQWdCLEdBQWUsRUFBRSxDQUFDO1FBS2xDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLGlCQUFpQixDQUFDO1FBRTlCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQVVuQyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUU3QixpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBY3hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJTSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUN2QztJQUNILENBQUM7SUFFTSxlQUFlO1FBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzNCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSx1QkFBdUI7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFxQixFQUFFLEVBQUU7WUFDbEYsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN2QixRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQ3pCLEtBQUssSUFBSSxDQUFDO29CQUNWLEtBQUssSUFBSTt3QkFDUCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDUixLQUFLLElBQUk7d0JBQ1AsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7d0JBQ3RCLE1BQU07b0JBQ1IsS0FBSyxJQUFJLENBQUM7b0JBQ1YsS0FBSyxJQUFJO3dCQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2lCQUN6QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxTQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7WUFDakMsU0FBUyxHQUFHO2dCQUNWLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztnQkFDL0QsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSw0QkFBNEI7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVTLHNCQUFzQixDQUFDLFNBQWdCO1FBQy9DLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVNLHlCQUF5QixDQUFDLElBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQzVEO1lBQ0QsSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDRjtJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUF3QjtRQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxJQUF3QjtRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxPQUFPO1FBQ1osS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQW1CO2dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUzthQUN2QixDQUFDO1lBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFHTSxpQkFBaUIsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7UUFDaEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEQsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxrQkFBa0IsQ0FBQyxHQUFXO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsY0FBd0I7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsVUFBVTtlQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBYTtRQUNwQyxJQUFJLE1BQU0sQ0FBQztRQUNYLElBQUksVUFBVSxHQUFHLGdCQUFnQixHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUN6QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsVUFBVSxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEdBQUc7UUFDUixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVTLGtCQUFrQixDQUFDLElBQVcsRUFBRSxPQUFpQjtRQUN6RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZGO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVTLGdDQUFnQztRQUN4QyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFFUyx5QkFBeUI7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUEyQixFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMvRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFzQjtRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBQ00sbUJBQW1CLENBQUMsR0FBUTtRQUNqQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ3BHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRVMsMEJBQTBCLENBQUMsU0FBZ0I7UUFDbkQsSUFBSSxNQUFhLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5RTthQUFNO1lBQ0wsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzsyR0EzV1UsY0FBYyxvRUErRkgsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzsrRkEvRjNDLGNBQWMsbzFCQWRkO1FBQ1QsdUJBQXVCO1FBQ3ZCLDZCQUE2QjtRQUM3QixFQUFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUU7S0FDN0UsNEZBa0VpQyxrQkFBa0IsK0VBSXpDLFlBQVksd0VBRlQsa0JBQWtCLHVFQ3RKbEMscTlNQXVIQTtBRHRCRTtJQUFDLHFCQUFxQixFQUFFOzttREFDWTtBQUVwQztJQUFDLHFCQUFxQixFQUFFOztvREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztnREFDUztBQUVqQztJQUFDLHFCQUFxQixFQUFFOztrREFDVTtBQUlsQztJQUFDLHFCQUFxQixFQUFFOztxREFDYTtBQUVyQztJQUFDLHFCQUFxQixFQUFFOztvREFDTTtBQUU5QjtJQUFDLHFCQUFxQixFQUFFOzs2REFDcUI7QUFFN0M7SUFBQyxxQkFBcUIsRUFBRTs7dURBQ1M7MkZBN0J0QixjQUFjO2tCQWhCMUIsU0FBUzsrQkFDRSxRQUFRLGFBQ1A7d0JBQ1QsdUJBQXVCO3dCQUN2Qiw2QkFBNkI7d0JBQzdCLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRTtxQkFDN0UsVUFDTyxxQkFBcUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixnQkFBZ0IsRUFBRSxNQUFNO3dCQUN4QixzQkFBc0IsRUFBRSxhQUFhO3FCQUN0Qzs7MEJBaUdFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzs0Q0F6Ri9DLFdBQVcsTUFHWCxZQUFZLE1BR1osUUFBUSxNQUdSLFVBQVUsTUFLVixhQUFhLE1BR3BCLFlBQVksTUFHTCxxQkFBcUIsTUFHNUIsZUFBZSxNQTRCUixjQUFjO3NCQURwQixlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFHOUMsa0JBQWtCO3NCQUR4QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFHekIsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUdyaWRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9HcmlkQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWdyaWQtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0dyaWRQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tZ3JpZC1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuLi90YWJsZS9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPR3JpZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtaXRlbS9vLWdyaWQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0dyaWRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWl0ZW0vby1ncmlkLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fR1JJRCA9IFtcbiAgLy8gY29sczogQW1vdW50IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQgbGlzdC4gRGVmYXVsdCBpbiBleHRyYSBzbWFsbCBhbmQgc21hbGwgc2NyZWVuIGlzIDEsIGluIG1lZGl1bSBzY3JlZW4gaXMgMiwgaW4gbGFyZ2Ugc2NyZWVuIGlzIDMgYW5kIGV4dHJhIGxhcmdlIHNjcmVlbiBpcyA0LlxuICAnY29scycsXG4gIC8vIHNob3ctcGFnZS1zaXplOldoZXRoZXIgdG8gaGlkZSB0aGUgcGFnZSBzaXplIHNlbGVjdGlvbiBVSSBmcm9tIHRoZSB1c2VyLlxuICAnc2hvd1BhZ2VTaXplOiBzaG93LXBhZ2Utc2l6ZScsXG4gIC8vIHNob3ctc29ydDp3aGV0aGVyIG9yIG5vdCB0aGUgc29ydCBzZWxlY3QgaXMgc2hvd24gaW4gdGhlIHRvb2xiYXJcbiAgJ3Nob3dTb3J0OiBvcmRlcmFibGUnLFxuICAvLyBzb3J0YWJsZVtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydGFibGVDb2x1bW5zOiBzb3J0YWJsZS1jb2x1bW5zJyxcbiAgLy8gc29ydENvbHVtbnNbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgc29ydGluZ2NvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydENvbHVtbjogc29ydC1jb2x1bW4nLFxuICAvLyBxdWljay1maWx0ZXItY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1aWNrRmlsdGVyQ29sdW1uczogcXVpY2stZmlsdGVyLWNvbHVtbnMnLFxuICAvLyAgZ3JpZC1pdGVtLWhlaWdodFtzdHJpbmddOiBTZXQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Ygcm93IGhlaWdodCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlLi4gRGVmYXVsdDogMToxLlxuICAnZ3JpZEl0ZW1IZWlnaHQ6IGdyaWQtaXRlbS1oZWlnaHQnLFxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuICAvLyBndXR0ZXJTaXplOiBTaXplIG9mIHRoZSBncmlkIGxpc3QncyBndXR0ZXIgaW4gcGl4ZWxzLlxuICAnZ3V0dGVyU2l6ZTpndXR0ZXItc2l6ZScsXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgZm9vdGVyIHdoZW4gdGhlIGNvbnRlbnQgaXMgZ3JlYXRoZXIgdGhhbiBpdHMgb3duIGhlaWdodC4gRGVmYXVsdDogbm8uXG4gICdmaXhlZEhlYWRlcjpmaXhlZC1oZWFkZXInLFxuICAvLyBzaG93LWZvb3RlcjpJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZm9vdGVyOkRlZmF1bHQ6dHJ1ZVxuICAnc2hvd0Zvb3RlcjpzaG93LWZvb3RlcicsXG4gIC8vIGluc2VydC1idXR0b24tcG9zaXRpb24gWyB0b3AgfCBib3R0b20gXTogcG9zaXRpb24gb2YgdGhlIGluc2VydCBidXR0b24uIERlZmF1bHQ6ICdib3R0b20nXG4gICdpbnNlcnRCdXR0b25Qb3NpdGlvbjppbnNlcnQtYnV0dG9uLXBvc2l0aW9uJyxcbiAgLy8gaW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUgW25vfHllc106IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBwb3NpdGlvbiBvZiB0aGUgaW5zZXJ0IGJ1dHRvbiBpcyBmbG9hdGluZyAuIERlZmF1bHQ6ICd5ZXMnXG4gICdpbnNlcnRCdXR0b25GbG9hdGFibGU6aW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUnLFxuICAvLyBzaG93LWJ1dHRvbnMtdGV4dCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHRleHQgb2YgYnV0dG9ucy4gRGVmYXVsdDogbm8uXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0J1xuXTtcblxuXG5jb25zdCBQQUdFX1NJWkVfT1BUSU9OUyA9IFs4LCAxNiwgMjQsIDMyLCA2NF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZ3JpZCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9HcmlkQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19HUklELFxuICB0ZW1wbGF0ZVVybDogJy4vby1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZ3JpZF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5vLWdyaWQtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9HcmlkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSAzMjtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGZpeGVkSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93UGFnZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93Rm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZ3JpZEl0ZW1IZWlnaHQgPSAnMToxJztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGluc2VydEJ1dHRvbkZsb2F0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dCdXR0b25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbnNlcnRCdXR0b25Qb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBwYWdpbmF0aW9uQ29udHJvbHMgPSBmYWxzZTtcbiAgcHVibGljIGd1dHRlclNpemUgPSAnMXB4JztcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XG4gIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHMgfHwgdGhpcy5fY29sc0RlZmF1bHQ7XG4gIH1cbiAgc2V0IGNvbHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3J0YWJsZUNvbHVtbnMoKTogU1FMT3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRhYmxlQ29sdW1ucztcbiAgfVxuICBzZXQgc29ydGFibGVDb2x1bW5zKHZhbCkge1xuICAgIGxldCBwYXJzZWQgPSBbXTtcbiAgICBpZiAoIVV0aWwuaXNBcnJheSh2YWwpKSB7XG4gICAgICBwYXJzZWQgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyhTdHJpbmcodmFsKSk7XG4gICAgfVxuICAgIHRoaXMuX3NvcnRhYmxlQ29sdW1ucyA9IHBhcnNlZDtcbiAgfVxuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbHVtbnM6IHN0cmluZztcbiAgLyogRW5kIElucHV0cyAqL1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBPR3JpZEl0ZW1Db21wb25lbnQpKVxuICBwdWJsaWMgaW5wdXRHcmlkSXRlbXM6IFF1ZXJ5TGlzdDxPR3JpZEl0ZW1Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE9HcmlkSXRlbURpcmVjdGl2ZSlcbiAgcHVibGljIGdyaWRJdGVtRGlyZWN0aXZlczogUXVlcnlMaXN0PE9HcmlkSXRlbURpcmVjdGl2ZT47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxuICBwdWJsaWMgbWF0cGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyogUGFyc2VkIElucHV0cyAqL1xuICBwcm90ZWN0ZWQgX3NvcnRhYmxlQ29sdW1uczogU1FMT3JkZXJbXSA9IFtdO1xuICBwdWJsaWMgc29ydENvbHVtbk9yZGVyOiBTUUxPcmRlcjtcbiAgLyogRW5kIHBhcnNlZCBJbnB1dHMgKi9cblxuICBwcm90ZWN0ZWQgX2NvbHM7XG4gIHByb3RlY3RlZCBfY29sc0RlZmF1bHQgPSAxO1xuICBfcGFnZVNpemVPcHRpb25zID0gUEFHRV9TSVpFX09QVElPTlM7XG4gIHByb3RlY3RlZCBzb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHB1YmxpYyBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNldCBncmlkSXRlbXModmFsdWU6IElHcmlkSXRlbVtdKSB7XG4gICAgdGhpcy5fZ3JpZEl0ZW1zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ3JpZEl0ZW1zKCk6IElHcmlkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ncmlkSXRlbXM6IElHcmlkSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgbWVkaWE6IE1lZGlhT2JzZXJ2ZXI7XG5cbiAgcHJvdGVjdGVkIG9NYXRTb3J0OiBPTWF0U29ydDtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPR3JpZFBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgYWN0aW9uc1Blcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLm9NYXRTb3J0ID0gbmV3IE9NYXRTb3J0KCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyaWRQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgICB0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMpO1xuICAgIHRoaXMuc2V0QnV0dG9uUGVybWlzc2lvbnModGhpcy5hY3Rpb25zUGVybWlzc2lvbnMpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNvcnRDb2x1bW4pKSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSB0aGlzLnN0YXRlLnNvcnRDb2x1bW47XG4gICAgfVxuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1uKCk7XG5cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gdGhpcy5xdWVyeVJvd3MpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZXhpc3RpbmdPcHRpb24pKSB7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMuc29ydCgoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgLSBqKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUpID9cbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA6XG4gICAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgdGhpcy5zZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VDdXN0b21QZXJtaXNzaW9ucyh0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucywgJ1tvLWdyaWQtdG9vbGJhcl0nKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbXMgPSB0aGlzLmlucHV0R3JpZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbnB1dEdyaWRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShxdWVyeUNoYW5nZXMgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbXMgPSBxdWVyeUNoYW5nZXMuX3Jlc3VsdHM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTWVkaWFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lZGlhLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoY2hhbmdlOiBNZWRpYUNoYW5nZVtdKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlICYmIGNoYW5nZVswXSkge1xuICAgICAgICBzd2l0Y2ggKGNoYW5nZVswXS5tcUFsaWFzKSB7XG4gICAgICAgICAgY2FzZSAneHMnOlxuICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICBsZXQgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHt9O1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gMDtcbiAgICAgIHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpIDogMCxcbiAgICAgICAgbGVuZ3RoOiBNYXRoLm1heCh0aGlzLnF1ZXJ5Um93cywgdGhpcy5kYXRhUmVzcG9uc2VBcnJheS5sZW5ndGgpLFxuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmRhdGFSZXNwb25zZUFycmF5ID0gW107XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW5PcmRlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLm9NYXRTb3J0LmdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGFBcnJheSwgW3RoaXMuc29ydENvbHVtbk9yZGVyXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spIHtcbiAgICAgICAgaXRlbS5vbkNsaWNrKGdyaWRJdGVtID0+IHRoaXMub25JdGVtRGV0YWlsQ2xpY2soZ3JpZEl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKSB7XG4gICAgICAgIGl0ZW0ub25Eb3VibGVDbGljayhncmlkSXRlbSA9PiB0aGlzLm9uSXRlbURldGFpbERibENsaWNrKGdyaWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbERibENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbURibENsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSArPSAxO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3NcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dCh7IHBhZ2VOdW1iZXI6IHRoaXMuZGF0YVNlcnZpY2U/LmdldFBhZ2luYXRpb25Db250ZXh0KCkucGFnZU51bWJlciArIDEgfSk7XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSh2b2lkIDAsIHRydWUpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogT1F1ZXJ5UGFyYW1zIHtcbiAgICBjb25zdCBxdWVyeUFyZ3VtZW50cyA9IHN1cGVyLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlciwgb3ZyckFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0Q29sdW1uKSkge1xuICAgICAgcXVlcnlBcmd1bWVudHMuc29ydCA9IHRoaXMuc29ydENvbHVtbk9yZGVyID8gW3RoaXMuc29ydENvbHVtbk9yZGVyXSA6IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VTb3J0Q29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IChTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW4pIHx8IFtdKVswXTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgocGFyc2VkKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoaW5kZXgpICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRPcmRlckNvbHVtbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHRoaXMuc29ydENvbHVtbk9yZGVyKTtcbiAgfVxuXG4gIHNldCBjdXJyZW50T3JkZXJDb2x1bW4odmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNvcnRDb2x1bW5PcmRlciA9IHRoaXMuc29ydGFibGVDb2x1bW5zW3ZhbF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgoc29ydGFibGVDb2x1bW46IFNRTE9yZGVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRhYmxlQ29sdW1uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvcnRhYmxlQ29sdW1uc1xuICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uY29sdW1uTmFtZSA9PT0gc29ydGFibGVDb2x1bW4uY29sdW1uTmFtZVxuICAgICAgICAmJiBpdGVtLmFzY2VuZGVudCA9PT0gc29ydGFibGVDb2x1bW4uYXNjZW5kZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5nZXREYXRhVG9TdG9yZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRPcHRpb25UZXh0KGNvbDogU1FMT3JkZXIpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGNvbFRleHRLZXkgPSBgR1JJRC5TT1JUX0JZXyR7Y29sLmNvbHVtbk5hbWUudG9VcHBlckNhc2UoKX1fYCArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gY29sVGV4dEtleSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29sVGV4dEtleSA9ICdHUklELlNPUlRfQllfJyArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSwgWyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbC5jb2x1bW5OYW1lKSB8fCAnJyldKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgIXJlcGxhY2UpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzID8gZGF0YSA6ICh0aGlzLmRhdGFSZXNwb25zZUFycmF5IHx8IFtdKS5jb25jYXQoZGF0YSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdyaWRJdGVtRGlyZWN0aXZlc0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLmZvckVhY2goKGVsZW1lbnQ6IE9HcmlkSXRlbURpcmVjdGl2ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRJdGVtRGF0YSh0aGlzLmRhdGFBcnJheVtpbmRleF0pO1xuICAgICAgICBlbGVtZW50LnNldEdyaWRDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q29sdW1uQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5jdXJyZW50T3JkZXJDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcnIgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMsIHRydWUpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRBY3RpdmVDb2x1bW5zKHBhcnNlZEFycik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdDogYW55W107XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cywgdGhpcy5xdWVyeVJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKDAsIHRoaXMucXVlcnlSb3dzICogKHRoaXMuY3VycmVudFBhZ2UgKyAxKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiaXNWaXNpYmxlKCk/ICcnIDogJ25vbmUnXCIgY2xhc3M9XCJvLWdyaWQtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gIDwhLS1UT09MQkFSLS0+XG4gIDxvLWRhdGEtdG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tZ3JpZC10b29sYmFyXCIgW3RpdGxlXT1cInRpdGxlXCIgW3Nob3ctdGl0bGVdPVwiaGFzVGl0bGUoKVwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QnV0dG9uc1RleHQ7ZWxzZSBzaG93QnV0dG9uc1dpdGhvdXRUZXh0XCI+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1hZGQtYnV0dG9uIG8tZ3JpZC1idXR0b24gdGV4dFwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdBREQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFJlZnJlc2hCdXR0b25cIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCIgKm5nSWY9XCJyZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnUkVGUkVTSCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Nob3dCdXR0b25zV2l0aG91dFRleHQ+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRJbnNlcnRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gby1ncmlkLWFkZC1idXR0b24gbm8tdGV4dFwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tYnV0dG9uIHJlZnJlc2gtLT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkUmVmcmVzaEJ1dHRvblwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiby1ncmlkLWJ1dHRvbiBuby10ZXh0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS1PLUdSSUQtUEFHSU5BVE9SLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2VTaXplXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtcGFnZS1zaXplLWxhYmVsXCI+e3sgJ0dSSUQuSVRFTVNfUEVSX1BBR0UnIHwgb1RyYW5zbGF0ZSB9fTo8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1wYWdlXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJcIiAjcGFnZVNpemVTZWxlY3QgWyh2YWx1ZSldPVwicXVlcnlSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZWQoKVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInBhZ2VcIj5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tTy1HUklELVNPUlQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtc29ydFwiICpuZ0lmPVwic2hvd1NvcnQgJiYgc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1zb3J0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5zb3J0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LXNlbGVjdCAjc29ydFNlbGVjdCBbdmFsdWVdPVwiY3VycmVudE9yZGVyQ29sdW1uXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzb3J0Q29sdW1uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdHUklELlNPUlRfQlknIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzb3J0YWJsZUNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBnZXRTb3J0T3B0aW9uVGV4dChjb2x1bW4pIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1lbmRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLWdyaWQtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxvLXNlYXJjaC1pbnB1dCAqbmdJZj1cInF1aWNrRmlsdGVyXCIgW2NvbHVtbnNdPVwicXVpY2tGaWx0ZXJDb2x1bW5zXCIgW2ZpbHRlci1jYXNlLXNlbnNpdGl2ZV09XCJmaWx0ZXJDYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgW3Nob3ctY2FzZS1zZW5zaXRpdmUtY2hlY2tib3hdPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCIgW3BsYWNlaG9sZGVyXT1cInF1aWNrRmlsdGVyUGxhY2Vob2xkZXJcIiBbYXBwZWFyYW5jZV09XCJxdWlja0ZpbHRlckFwcGVhcmFuY2VcIlxuICAgICAgICBmbG9hdC1sYWJlbD1cIm5ldmVyXCI+PC9vLXNlYXJjaC1pbnB1dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiPlxuICAgIDwhLS1ubyByZXN1bHRzLS0+XG4gICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1uby1yZXN1bHRzIGZpbGwtcmVtYWluaW5nXCIgKm5nSWY9XCJncmlkSXRlbXMubGVuZ3RoID09PSAwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiIGxheW91dC1wYWRkaW5nPlxuICAgICAge3snR1JJRC5FTVBUWScgfCBvVHJhbnNsYXRlfX1cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlciAmJiBzZWFyY2hJbnB1dENvbXBvbmVudCAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpICYmIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCkubGVuZ3RoID4gMFwiPlxuICAgICAgICB7eyAnR1JJRC5FTVBUWV9VU0lOR19GSUxURVInIHwgb1RyYW5zbGF0ZSA6IHsgdmFsdWVzOiBbIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCldIH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tTUFULUdSSUQtTElTVC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cImNvbHNcIiBbZ3V0dGVyU2l6ZV09XCJndXR0ZXJTaXplXCIgW3Jvd0hlaWdodF09XCJncmlkSXRlbUhlaWdodFwiIGNsYXNzPVwiby1tYXQtZ3JpZC1saXN0IGZpbGwtcmVtYWluaW5nXCJcbiAgICAgICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxtYXQtZ3JpZC10aWxlIG8tZ3JpZC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyaWRJdGVtc1wiIFtjb2xzcGFuXT1cIml0ZW0uY29sc3BhblwiIFtyb3dzcGFuXT1cIml0ZW0ucm93c3BhblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKm5nSWY9XCJpbnNlcnRCdXR0b24gJiYgaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCIgbWF0LWZhYiAoY2xpY2spPVwiYWRkKClcIlxuICAgICAgY2xhc3M9XCJvLWdyaWQtYWRkLWZsb2F0YWJsZS1idXR0b25cIiBbY2xhc3Muby1ncmlkLWFkZC1ib3R0b20tZmxvYXRhYmxlLWJ1dHRvbl09XCJpbnNlcnRCdXR0b25Qb3NpdGlvbiA9PT0nYm90dG9tJ1wiXG4gICAgICBbY2xhc3Muby1ncmlkLWFkZC10b3AtZmxvYXRhYmxlLWJ1dHRvbl09XCJpbnNlcnRCdXR0b25Qb3NpdGlvbiA9PT0ndG9wJ1wiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBHUklEIEZPT1RFUiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIXBhZ2luYXRpb25Db250cm9scyAmJiBzaG93Rm9vdGVyICYmIChsb2FkaW5nIHwgYXN5bmMpPT09ZmFsc2VcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJvLWdyaWQtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uICpuZ0lmPVwiZ2V0RGF0YUFycmF5KCkubGVuZ3RoIDwgdG90YWxSZWNvcmRzICYmIGdldERhdGFBcnJheSgpLmxlbmd0aD4wXCIgKGNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICBjbGFzcz1cIm1hdC1yYWlzZWQtYnV0dG9uXCI+XG4gICAgICAgIHt7ICdHUklELkJVVFRPTl9ORVhUJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiby1ncmlkLXRvdGFsc1wiPnt7ICdHUklELlRFWFRfU0hPV05fSVRFTVMnIHwgb1RyYW5zbGF0ZSA6e3ZhbHVlczogW2dldERhdGFBcnJheSgpLmxlbmd0aCwgdG90YWxSZWNvcmRzXX1cbiAgICAgICAgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXBhZ2luYXRvciBjbGFzcz1cIm8tbWF0LXBhZ2luYXRvclwiICNwYWdpbmF0b3IgKm5nSWY9XCJwYWdpbmF0aW9uQ29udHJvbHMgJiYgc2hvd0Zvb3RlclwiIFtsZW5ndGhdPVwidG90YWxSZWNvcmRzXCIgW3BhZ2VTaXplXT1cInF1ZXJ5Um93c1wiXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtwYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VcIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCI+PC9tYXQtcGFnaW5hdG9yPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmcgfCBhc3luY1wiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBlbmRcIiBjbGFzcz1cIm8tbG9hZGluZy1ibG9ja2VyXCI+XG4gICAgPGRpdiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtjbGFzcy5vLXNwaW5uZXItY29udGFpbmVyLWNvbnRyb2xzXT1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgIDxvLWdyaWQtc2tlbGV0b24+PC9vLWdyaWQtc2tlbGV0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cbjwvZGl2PlxuIl19
|
|
395
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvby1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBSVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFLakcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixD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O3VCQUFDLGtCQUFrQjtnQkFHekIsWUFBWTtzQkFEbEIsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhQ2hhbmdlLCBNZWRpYU9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgSUdyaWRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLWdyaWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9HcmlkQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tZ3JpZC1jb21wb25lbnQtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgT0dyaWRDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLWdyaWQtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1Blcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0dyaWRQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tZ3JpZC1wZXJtaXNzaW9ucy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuLi90YWJsZS9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPR3JpZEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2dyaWQtaXRlbS9vLWdyaWQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0dyaWRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWl0ZW0vby1ncmlkLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmltcG9ydCB7IE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9pbmplY3Rpb24tdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fR1JJRCA9IFtcbiAgLy8gY29sczogQW1vdW50IG9mIGNvbHVtbnMgaW4gdGhlIGdyaWQgbGlzdC4gRGVmYXVsdCBpbiBleHRyYSBzbWFsbCBhbmQgc21hbGwgc2NyZWVuIGlzIDEsIGluIG1lZGl1bSBzY3JlZW4gaXMgMiwgaW4gbGFyZ2Ugc2NyZWVuIGlzIDMgYW5kIGV4dHJhIGxhcmdlIHNjcmVlbiBpcyA0LlxuICAnY29scycsXG4gIC8vIHNob3ctcGFnZS1zaXplOldoZXRoZXIgdG8gaGlkZSB0aGUgcGFnZSBzaXplIHNlbGVjdGlvbiBVSSBmcm9tIHRoZSB1c2VyLlxuICAnc2hvd1BhZ2VTaXplOiBzaG93LXBhZ2Utc2l6ZScsXG4gIC8vIHNob3ctc29ydDp3aGV0aGVyIG9yIG5vdCB0aGUgc29ydCBzZWxlY3QgaXMgc2hvd24gaW4gdGhlIHRvb2xiYXJcbiAgJ3Nob3dTb3J0OiBvcmRlcmFibGUnLFxuICAvLyBzb3J0YWJsZVtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBmaWx0ZXIsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydGFibGVDb2x1bW5zOiBzb3J0YWJsZS1jb2x1bW5zJyxcbiAgLy8gc29ydENvbHVtbnNbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgc29ydGluZ2NvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc29ydENvbHVtbjogc29ydC1jb2x1bW4nLFxuICAvLyBxdWljay1maWx0ZXItY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1aWNrRmlsdGVyQ29sdW1uczogcXVpY2stZmlsdGVyLWNvbHVtbnMnLFxuICAvLyAgZ3JpZC1pdGVtLWhlaWdodFtzdHJpbmddOiBTZXQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2Ygcm93IGhlaWdodCBmcm9tIHRoZSB1c2VyLXByb3ZpZGVkIHZhbHVlLi4gRGVmYXVsdDogMToxLlxuICAnZ3JpZEl0ZW1IZWlnaHQ6IGdyaWQtaXRlbS1oZWlnaHQnLFxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuICAvLyBndXR0ZXJTaXplOiBTaXplIG9mIHRoZSBncmlkIGxpc3QncyBndXR0ZXIgaW4gcGl4ZWxzLlxuICAnZ3V0dGVyU2l6ZTpndXR0ZXItc2l6ZScsXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgZm9vdGVyIHdoZW4gdGhlIGNvbnRlbnQgaXMgZ3JlYXRoZXIgdGhhbiBpdHMgb3duIGhlaWdodC4gRGVmYXVsdDogbm8uXG4gICdmaXhlZEhlYWRlcjpmaXhlZC1oZWFkZXInLFxuICAvLyBzaG93LWZvb3RlcjpJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gc2hvdyB0aGUgZm9vdGVyOkRlZmF1bHQ6dHJ1ZVxuICAnc2hvd0Zvb3RlcjpzaG93LWZvb3RlcicsXG4gIC8vIGluc2VydC1idXR0b24tcG9zaXRpb24gWyB0b3AgfCBib3R0b20gXTogcG9zaXRpb24gb2YgdGhlIGluc2VydCBidXR0b24uIERlZmF1bHQ6ICdib3R0b20nXG4gICdpbnNlcnRCdXR0b25Qb3NpdGlvbjppbnNlcnQtYnV0dG9uLXBvc2l0aW9uJyxcbiAgLy8gaW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUgW25vfHllc106IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBwb3NpdGlvbiBvZiB0aGUgaW5zZXJ0IGJ1dHRvbiBpcyBmbG9hdGluZyAuIERlZmF1bHQ6ICd5ZXMnXG4gICdpbnNlcnRCdXR0b25GbG9hdGFibGU6aW5zZXJ0LWJ1dHRvbi1mbG9hdGFibGUnLFxuICAvLyBzaG93LWJ1dHRvbnMtdGV4dCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHRleHQgb2YgYnV0dG9ucy4gRGVmYXVsdDogbm8uXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0J1xuXTtcblxuXG5jb25zdCBQQUdFX1NJWkVfT1BUSU9OUyA9IFs4LCAxNiwgMjQsIDMyLCA2NF07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tZ3JpZCcsXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9HcmlkQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19HUklELFxuICB0ZW1wbGF0ZVVybDogJy4vby1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tZ3JpZF0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5vLWdyaWQtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9HcmlkQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPR3JpZENvbXBvbmVudFN0YXRlU2VydmljZT4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSAzMjtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGZpeGVkSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93UGFnZVNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHNob3dTb3J0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzaG93Rm9vdGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZ3JpZEl0ZW1IZWlnaHQgPSAnMToxJztcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGluc2VydEJ1dHRvbkZsb2F0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dCdXR0b25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpbnNlcnRCdXR0b25Qb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyA9ICdib3R0b20nO1xuICBwYWdpbmF0aW9uQ29udHJvbHMgPSBmYWxzZTtcbiAgcHVibGljIGd1dHRlclNpemUgPSAnMXB4JztcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnb3V0bGluZSc7XG4gIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHMgfHwgdGhpcy5fY29sc0RlZmF1bHQ7XG4gIH1cbiAgc2V0IGNvbHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3J0YWJsZUNvbHVtbnMoKTogU1FMT3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRhYmxlQ29sdW1ucztcbiAgfVxuICBzZXQgc29ydGFibGVDb2x1bW5zKHZhbCkge1xuICAgIGxldCBwYXJzZWQgPSBbXTtcbiAgICBpZiAoIVV0aWwuaXNBcnJheSh2YWwpKSB7XG4gICAgICBwYXJzZWQgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyhTdHJpbmcodmFsKSk7XG4gICAgfVxuICAgIHRoaXMuX3NvcnRhYmxlQ29sdW1ucyA9IHBhcnNlZDtcbiAgfVxuXG4gIHB1YmxpYyBxdWlja0ZpbHRlckNvbHVtbnM6IHN0cmluZztcbiAgLyogRW5kIElucHV0cyAqL1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBPR3JpZEl0ZW1Db21wb25lbnQpKVxuICBwdWJsaWMgaW5wdXRHcmlkSXRlbXM6IFF1ZXJ5TGlzdDxPR3JpZEl0ZW1Db21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKE9HcmlkSXRlbURpcmVjdGl2ZSlcbiAgcHVibGljIGdyaWRJdGVtRGlyZWN0aXZlczogUXVlcnlMaXN0PE9HcmlkSXRlbURpcmVjdGl2ZT47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKVxuICBwdWJsaWMgbWF0cGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyogUGFyc2VkIElucHV0cyAqL1xuICBwcm90ZWN0ZWQgX3NvcnRhYmxlQ29sdW1uczogU1FMT3JkZXJbXSA9IFtdO1xuICBwdWJsaWMgc29ydENvbHVtbk9yZGVyOiBTUUxPcmRlcjtcbiAgLyogRW5kIHBhcnNlZCBJbnB1dHMgKi9cblxuICBwcm90ZWN0ZWQgX2NvbHM7XG4gIHByb3RlY3RlZCBfY29sc0RlZmF1bHQgPSAxO1xuICBfcGFnZVNpemVPcHRpb25zID0gUEFHRV9TSVpFX09QVElPTlM7XG4gIHByb3RlY3RlZCBzb3J0Q29sdW1uOiBzdHJpbmc7XG4gIHB1YmxpYyBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNldCBncmlkSXRlbXModmFsdWU6IElHcmlkSXRlbVtdKSB7XG4gICAgdGhpcy5fZ3JpZEl0ZW1zID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ3JpZEl0ZW1zKCk6IElHcmlkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JpZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ncmlkSXRlbXM6IElHcmlkSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgbWVkaWE6IE1lZGlhT2JzZXJ2ZXI7XG5cbiAgcHJvdGVjdGVkIG9NYXRTb3J0OiBPTWF0U29ydDtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPR3JpZFBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgYWN0aW9uc1Blcm1pc3Npb25zOiBPUGVybWlzc2lvbnNbXTtcblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMubWVkaWEgPSB0aGlzLmluamVjdG9yLmdldChNZWRpYU9ic2VydmVyKTtcbiAgICB0aGlzLm9NYXRTb3J0ID0gbmV3IE9NYXRTb3J0KCk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogT0dyaWRDb21wb25lbnRTdGF0ZUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RhdGU7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyaWRQZXJtaXNzaW9ucyh0aGlzLm9hdHRyLCB0aGlzLmFjdFJvdXRlKTtcbiAgICB0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uc1Blcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnMpO1xuICAgIHRoaXMuc2V0QnV0dG9uUGVybWlzc2lvbnModGhpcy5hY3Rpb25zUGVybWlzc2lvbnMpO1xuICB9XG5cblxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbHVtbnMpKSB7XG4gICAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLnNvcnRDb2x1bW4pKSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4gPSB0aGlzLnN0YXRlLnNvcnRDb2x1bW47XG4gICAgfVxuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1uKCk7XG5cbiAgICBjb25zdCBleGlzdGluZ09wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbiA9PT0gdGhpcy5xdWVyeVJvd3MpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZXhpc3RpbmdPcHRpb24pKSB7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMucHVzaCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICB0aGlzLl9wYWdlU2l6ZU9wdGlvbnMuc29ydCgoaTogbnVtYmVyLCBqOiBudW1iZXIpID0+IGkgLSBqKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmZpbHRlckNhc2VTZW5zaXRpdmUpID9cbiAgICAgIHRoaXMuc3RhdGUuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA6XG4gICAgICB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgdGhpcy5zZXRHcmlkSXRlbURpcmVjdGl2ZXNEYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb01lZGlhQ2hhbmdlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJRdWlja0ZpbHRlcih0aGlzLnNlYXJjaElucHV0Q29tcG9uZW50KTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5tYW5hZ2VDdXN0b21QZXJtaXNzaW9ucyh0aGlzLmFjdGlvbnNQZXJtaXNzaW9ucywgJ1tvLWdyaWQtdG9vbGJhcl0nKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbXMgPSB0aGlzLmlucHV0R3JpZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy5pbnB1dEdyaWRJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZShxdWVyeUNoYW5nZXMgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbXMgPSBxdWVyeUNoYW5nZXMuX3Jlc3VsdHM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZVRvTWVkaWFDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm1lZGlhLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgoY2hhbmdlOiBNZWRpYUNoYW5nZVtdKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlICYmIGNoYW5nZVswXSkge1xuICAgICAgICBzd2l0Y2ggKGNoYW5nZVswXS5tcUFsaWFzKSB7XG4gICAgICAgICAgY2FzZSAneHMnOlxuICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgIHRoaXMuX2NvbHNEZWZhdWx0ID0gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICB0aGlzLl9jb2xzRGVmYXVsdCA9IDQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRGF0YSgpOiB2b2lkIHtcbiAgICBsZXQgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHt9O1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gMDtcbiAgICAgIHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb25Db250cm9scyA/ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpIDogMCxcbiAgICAgICAgbGVuZ3RoOiBNYXRoLm1heCh0aGlzLnF1ZXJ5Um93cywgdGhpcy5kYXRhUmVzcG9uc2VBcnJheS5sZW5ndGgpLFxuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmRhdGFSZXNwb25zZUFycmF5ID0gW107XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YUZyb21BcnJheShkYXRhQXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnRDb2x1bW5PcmRlcikpIHtcbiAgICAgIHJldHVybiB0aGlzLm9NYXRTb3J0LmdldFNvcnRlZERhdGFCeVNRTE9yZGVyKGRhdGFBcnJheSwgW3RoaXMuc29ydENvbHVtbk9yZGVyXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhQXJyYXk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShpdGVtOiBPR3JpZEl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spIHtcbiAgICAgICAgaXRlbS5vbkNsaWNrKGdyaWRJdGVtID0+IHRoaXMub25JdGVtRGV0YWlsQ2xpY2soZ3JpZEl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIGlmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKSB7XG4gICAgICAgIGl0ZW0ub25Eb3VibGVDbGljayhncmlkSXRlbSA9PiB0aGlzLm9uSXRlbURldGFpbERibENsaWNrKGdyaWRJdGVtKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbUNsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG9uSXRlbURldGFpbERibENsaWNrKGl0ZW06IE9HcmlkSXRlbURpcmVjdGl2ZSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlSXRlbURibENsaWNrKGl0ZW0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbG9hZE1vcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSArPSAxO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3NcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dCh7IHBhZ2VOdW1iZXI6IHRoaXMuZGF0YVNlcnZpY2U/LmdldFBhZ2luYXRpb25Db250ZXh0KCkucGFnZU51bWJlciArIDEgfSk7XG4gICAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSh2b2lkIDAsIHRydWUpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHVibGljIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogT1F1ZXJ5UGFyYW1zIHtcbiAgICBjb25zdCBxdWVyeUFyZ3VtZW50cyA9IHN1cGVyLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlciwgb3ZyckFyZ3MpO1xuXG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0Q29sdW1uKSkge1xuICAgICAgcXVlcnlBcmd1bWVudHMuc29ydCA9IHRoaXMuc29ydENvbHVtbk9yZGVyID8gW3RoaXMuc29ydENvbHVtbk9yZGVyXSA6IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VTb3J0Q29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IChTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW4pIHx8IFtdKVswXTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgocGFyc2VkKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoaW5kZXgpICYmIGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uT3JkZXIgPSBwYXJzZWQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRPcmRlckNvbHVtbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZpbmRTb3J0YWJsZUNvbHVtbkluZGV4KHRoaXMuc29ydENvbHVtbk9yZGVyKTtcbiAgfVxuXG4gIHNldCBjdXJyZW50T3JkZXJDb2x1bW4odmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNvcnRDb2x1bW5PcmRlciA9IHRoaXMuc29ydGFibGVDb2x1bW5zW3ZhbF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZmluZFNvcnRhYmxlQ29sdW1uSW5kZXgoc29ydGFibGVDb2x1bW46IFNRTE9yZGVyKTogbnVtYmVyIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRhYmxlQ29sdW1uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvcnRhYmxlQ29sdW1uc1xuICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uY29sdW1uTmFtZSA9PT0gc29ydGFibGVDb2x1bW4uY29sdW1uTmFtZVxuICAgICAgICAmJiBpdGVtLmFzY2VuZGVudCA9PT0gc29ydGFibGVDb2x1bW4uYXNjZW5kZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhVG9TdG9yZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5nZXREYXRhVG9TdG9yZSgpO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRPcHRpb25UZXh0KGNvbDogU1FMT3JkZXIpOiBzdHJpbmcge1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGNvbFRleHRLZXkgPSBgR1JJRC5TT1JUX0JZXyR7Y29sLmNvbHVtbk5hbWUudG9VcHBlckNhc2UoKX1fYCArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gY29sVGV4dEtleSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29sVGV4dEtleSA9ICdHUklELlNPUlRfQllfJyArIChjb2wuYXNjZW5kZW50ID8gJ0FTQycgOiAnREVTQycpO1xuICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoY29sVGV4dEtleSwgWyh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KGNvbC5jb2x1bW5OYW1lKSB8fCAnJyldKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlQXJyYXkoZGF0YTogYW55W10sIHJlcGxhY2U/OiBib29sZWFuKSB7XG4gICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgaWYgKHRoaXMucGFnZWFibGUgJiYgIXJlcGxhY2UpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzID8gZGF0YSA6ICh0aGlzLmRhdGFSZXNwb25zZUFycmF5IHx8IFtdKS5jb25jYXQoZGF0YSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmVzdWx0ID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdyaWRJdGVtRGlyZWN0aXZlc0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkSXRlbURpcmVjdGl2ZXMudG9BcnJheSgpLmZvckVhY2goKGVsZW1lbnQ6IE9HcmlkSXRlbURpcmVjdGl2ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRJdGVtRGF0YSh0aGlzLmRhdGFBcnJheVtpbmRleF0pO1xuICAgICAgICBlbGVtZW50LnNldEdyaWRDb21wb25lbnQodGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJHcmlkSXRlbURpcmVjdGl2ZShlbGVtZW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBhZ2VTaXplQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzb3J0Q29sdW1uQ2hhbmdlZChldmVudDogTWF0U2VsZWN0Q2hhbmdlKSB7XG4gICAgdGhpcy5jdXJyZW50T3JkZXJDb2x1bW4gPSBldmVudC52YWx1ZTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyRGF0YSgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJRdWlja0ZpbHRlcihhcmc6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLnJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMpKSB7XG4gICAgICBjb25zdCBwYXJzZWRBcnIgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5zdGF0ZS5xdWlja0ZpbHRlckFjdGl2ZUNvbHVtbnMsIHRydWUpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudC5zZXRBY3RpdmVDb2x1bW5zKHBhcnNlZEFycik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFBhZ2luYXRpb25EYXRhRnJvbUFycmF5KGRhdGFBcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IHJlc3VsdDogYW55W107XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cywgdGhpcy5xdWVyeVJvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBkYXRhQXJyYXkuc3BsaWNlKDAsIHRoaXMucXVlcnlSb3dzICogKHRoaXMuY3VycmVudFBhZ2UgKyAxKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmRpc3BsYXldPVwiaXNWaXNpYmxlKCk/ICcnIDogJ25vbmUnXCIgY2xhc3M9XCJvLWdyaWQtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiPlxuXG4gIDwhLS1UT09MQkFSLS0+XG4gIDxvLWRhdGEtdG9vbGJhciAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tZ3JpZC10b29sYmFyXCIgW3RpdGxlXT1cInRpdGxlXCIgW3Nob3ctdGl0bGVdPVwiaGFzVGl0bGUoKVwiPlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1zdGFydD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QnV0dG9uc1RleHQ7ZWxzZSBzaG93QnV0dG9uc1dpdGhvdXRUZXh0XCI+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1hZGQtYnV0dG9uIG8tZ3JpZC1idXR0b24gdGV4dFwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdBREQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPCEtLWJ1dHRvbiByZWZyZXNoLS0+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUmVmcmVzaFwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZFJlZnJlc2hCdXR0b25cIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCIgKm5nSWY9XCJyZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gdGV4dFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnUkVGUkVTSCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctdGVtcGxhdGUgI3Nob3dCdXR0b25zV2l0aG91dFRleHQ+XG4gICAgICAgIDwhLS0gYnV0dG9uIG5ldy0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uICYmICFpbnNlcnRCdXR0b25GbG9hdGFibGVcIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWRJbnNlcnRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm8tZ3JpZC1idXR0b24gby1ncmlkLWFkZC1idXR0b24gbm8tdGV4dFwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tYnV0dG9uIHJlZnJlc2gtLT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkUmVmcmVzaEJ1dHRvblwiIChjbGljayk9XCJyZWxvYWREYXRhKClcIiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiby1ncmlkLWJ1dHRvbiBuby10ZXh0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDwhLS1PLUdSSUQtUEFHSU5BVE9SLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1ncmlkLXBhZ2luYXRvclwiICpuZ0lmPVwic2hvd1BhZ2VTaXplXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtcGFnZS1zaXplLWxhYmVsXCI+e3sgJ0dSSUQuSVRFTVNfUEVSX1BBR0UnIHwgb1RyYW5zbGF0ZSB9fTo8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1wYWdlXCI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJcIiAjcGFnZVNpemVTZWxlY3QgWyh2YWx1ZSldPVwicXVlcnlSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZWQoKVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInBhZ2VcIj5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tTy1HUklELVNPUlQtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWdyaWQtc29ydFwiICpuZ0lmPVwic2hvd1NvcnQgJiYgc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiby1ncmlkLXNlbGVjdC1zb3J0XCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5zb3J0PC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LXNlbGVjdCAjc29ydFNlbGVjdCBbdmFsdWVdPVwiY3VycmVudE9yZGVyQ29sdW1uXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzb3J0Q29sdW1uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiIHt7ICdHUklELlNPUlRfQlknIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBzb3J0YWJsZUNvbHVtbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiaVwiPlxuICAgICAgICAgICAgICB7eyBnZXRTb3J0T3B0aW9uVGV4dChjb2x1bW4pIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby1ncmlkLXRvb2xiYXJdW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1lbmRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLWdyaWQtdG9vbGJhcl1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1zdGFydF1cIj5cbiAgICA8L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLWVuZD5cbiAgICAgIDxvLXNlYXJjaC1pbnB1dCAqbmdJZj1cInF1aWNrRmlsdGVyXCIgW2NvbHVtbnNdPVwicXVpY2tGaWx0ZXJDb2x1bW5zXCIgW2ZpbHRlci1jYXNlLXNlbnNpdGl2ZV09XCJmaWx0ZXJDYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgW3Nob3ctY2FzZS1zZW5zaXRpdmUtY2hlY2tib3hdPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCIgW3BsYWNlaG9sZGVyXT1cInF1aWNrRmlsdGVyUGxhY2Vob2xkZXJcIiBbYXBwZWFyYW5jZV09XCJxdWlja0ZpbHRlckFwcGVhcmFuY2VcIlxuICAgICAgICBmbG9hdC1sYWJlbD1cIm5ldmVyXCI+PC9vLXNlYXJjaC1pbnB1dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGxvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiPlxuICAgIDwhLS1ubyByZXN1bHRzLS0+XG4gICAgPGRpdiBjbGFzcz1cIm8tZ3JpZC1uby1yZXN1bHRzIGZpbGwtcmVtYWluaW5nXCIgKm5nSWY9XCJncmlkSXRlbXMubGVuZ3RoID09PSAwXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiIGxheW91dC1wYWRkaW5nPlxuICAgICAge3snR1JJRC5FTVBUWScgfCBvVHJhbnNsYXRlfX1cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWlja0ZpbHRlciAmJiBzZWFyY2hJbnB1dENvbXBvbmVudCAmJiBzZWFyY2hJbnB1dENvbXBvbmVudC5nZXRWYWx1ZSgpICYmIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCkubGVuZ3RoID4gMFwiPlxuICAgICAgICB7eyAnR1JJRC5FTVBUWV9VU0lOR19GSUxURVInIHwgb1RyYW5zbGF0ZSA6IHsgdmFsdWVzOiBbIHNlYXJjaElucHV0Q29tcG9uZW50LmdldFZhbHVlKCldIH0gfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tTUFULUdSSUQtTElTVC0tPlxuICAgIDxtYXQtZ3JpZC1saXN0IFtjb2xzXT1cImNvbHNcIiBbZ3V0dGVyU2l6ZV09XCJndXR0ZXJTaXplXCIgW3Jvd0hlaWdodF09XCJncmlkSXRlbUhlaWdodFwiIGNsYXNzPVwiby1tYXQtZ3JpZC1saXN0IGZpbGwtcmVtYWluaW5nXCJcbiAgICAgICpuZ0lmPVwiZ3JpZEl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxtYXQtZ3JpZC10aWxlIG8tZ3JpZC1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyaWRJdGVtc1wiIFtjb2xzcGFuXT1cIml0ZW0uY29sc3BhblwiIFtyb3dzcGFuXT1cIml0ZW0ucm93c3BhblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtZ3JpZC10aWxlPlxuICAgIDwvbWF0LWdyaWQtbGlzdD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKm5nSWY9XCJpbnNlcnRCdXR0b24gJiYgaW5zZXJ0QnV0dG9uRmxvYXRhYmxlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkSW5zZXJ0QnV0dG9uXCIgbWF0LWZhYiAoY2xpY2spPVwiYWRkKClcIlxuICAgICAgY2xhc3M9XCJvLWdyaWQtYWRkLWZsb2F0YWJsZS1idXR0b25cIiBbY2xhc3Muby1ncmlkLWFkZC1ib3R0b20tZmxvYXRhYmxlLWJ1dHRvbl09XCJpbnNlcnRCdXR0b25Qb3NpdGlvbiA9PT0nYm90dG9tJ1wiXG4gICAgICBbY2xhc3Muby1ncmlkLWFkZC10b3AtZmxvYXRhYmxlLWJ1dHRvbl09XCJpbnNlcnRCdXR0b25Qb3NpdGlvbiA9PT0ndG9wJ1wiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBHUklEIEZPT1RFUiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIXBhZ2luYXRpb25Db250cm9scyAmJiBzaG93Rm9vdGVyICYmIChsb2FkaW5nIHwgYXN5bmMpPT09ZmFsc2VcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJvLWdyaWQtZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uICpuZ0lmPVwiZ2V0RGF0YUFycmF5KCkubGVuZ3RoIDwgdG90YWxSZWNvcmRzICYmIGdldERhdGFBcnJheSgpLmxlbmd0aD4wXCIgKGNsaWNrKT1cImxvYWRNb3JlKClcIlxuICAgICAgICBjbGFzcz1cIm1hdC1yYWlzZWQtYnV0dG9uXCI+XG4gICAgICAgIHt7ICdHUklELkJVVFRPTl9ORVhUJyB8IG9UcmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiby1ncmlkLXRvdGFsc1wiPnt7ICdHUklELlRFWFRfU0hPV05fSVRFTVMnIHwgb1RyYW5zbGF0ZSA6e3ZhbHVlczogW2dldERhdGFBcnJheSgpLmxlbmd0aCwgdG90YWxSZWNvcmRzXX1cbiAgICAgICAgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXBhZ2luYXRvciBjbGFzcz1cIm8tbWF0LXBhZ2luYXRvclwiICNwYWdpbmF0b3IgKm5nSWY9XCJwYWdpbmF0aW9uQ29udHJvbHMgJiYgc2hvd0Zvb3RlclwiIFtsZW5ndGhdPVwidG90YWxSZWNvcmRzXCIgW3BhZ2VTaXplXT1cInF1ZXJ5Um93c1wiXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtwYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VcIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCI+PC9tYXQtcGFnaW5hdG9yPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmcgfCBhc3luY1wiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBlbmRcIiBjbGFzcz1cIm8tbG9hZGluZy1ibG9ja2VyXCI+XG4gICAgPGRpdiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtjbGFzcy5vLXNwaW5uZXItY29udGFpbmVyLWNvbnRyb2xzXT1cImhhc0NvbnRyb2xzKClcIiBjbGFzcz1cIm8tc3Bpbm5lci1jb250YWluZXJcIj5cbiAgICAgIDxvLWdyaWQtc2tlbGV0b24+PC9vLWdyaWQtc2tlbGV0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cbjwvZGl2PlxuIl19
|
|
@@ -171,7 +171,7 @@ export class OFormServiceComponent extends OFormDataComponent {
|
|
|
171
171
|
}
|
|
172
172
|
this.loaderSubscription = this.load();
|
|
173
173
|
this.queryArguments = this.getQueryArguments(filter);
|
|
174
|
-
this.querySubscription = this.dataService[this.queryMethod](...this.dataService.
|
|
174
|
+
this.querySubscription = this.dataService[this.queryMethod](...this.dataService.requestArgumentAdapter.parseQueryParameters(this.queryArguments))
|
|
175
175
|
.subscribe((resp) => {
|
|
176
176
|
if (resp.isSuccessful()) {
|
|
177
177
|
this.cacheQueried = true;
|
|
@@ -364,4 +364,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
364
364
|
type: ViewChild,
|
|
365
365
|
args: [OContextMenuComponent]
|
|
366
366
|
}] } });
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUszRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUdwRSxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCx5QkFBeUI7SUFDekIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyx5QkFBeUI7SUFFekIsaUNBQWlDO0lBRWpDLHlDQUF5QztJ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dGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgTmdab25lLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Vycm9yRGlhbG9nTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZXJyb3ItZGlhbG9nLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBGb3JtVmFsdWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZm9ybS12YWx1ZS1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1wYXJhbXMudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0NvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dG1lbnUvby1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL28tZm9ybS1kYXRhLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gIC8vIHN0YXRpYy1kYXRhIFtBcnJheTxhbnk+XSA6IHdheSB0byBwb3B1bGF0ZSB3aXRoIHN0YXRpYyBkYXRhLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3N0YXRpY0RhdGE6IHN0YXRpYy1kYXRhJyxcbiAgJ2VudGl0eScsXG4gICdzZXJ2aWNlJyxcbiAgJ2NvbHVtbnMnLFxuICAndmFsdWVDb2x1bW46IHZhbHVlLWNvbHVtbicsXG4gICd2YWx1ZUNvbHVtblR5cGU6IHZhbHVlLWNvbHVtbi10eXBlJyxcbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcbiAgLy8gVmlzaWJsZSBjb2x1bW5zIGludG8gc2VsZWN0aW9uIGRpYWxvZyBmcm9tIHBhcmFtZXRlciAnY29sdW1ucycuIFdpdGggZW1wdHkgcGFyYW1ldGVyIGFsbCBjb2x1bW5zIGFyZSB2aXNpYmxlLlxuICAndmlzaWJsZUNvbHVtbnM6IHZpc2libGUtY29sdW1ucycsXG4gIC8vIFZpc2libGUgY29sdW1ucyBpbiB0ZXh0IGZpZWxkLiBCeSBkZWZhdWx0LCBpdCBpcyB0aGUgcGFyYW1ldGVyIHZhbHVlIG9mIHZpc2libGUgY29sdW1ucy5cbiAgJ2Rlc2NyaXB0aW9uQ29sdW1uczogZGVzY3JpcHRpb24tY29sdW1ucycsXG5cbiAgJ3NlcGFyYXRvcicsXG5cbiAgJ3F1ZXJ5T25Jbml0OiBxdWVyeS1vbi1pbml0JyxcbiAgJ3F1ZXJ5T25CaW5kOiBxdWVyeS1vbi1iaW5kJyxcbiAgJ3F1ZXJ5T25FdmVudDogcXVlcnktb24tZXZlbnQnLFxuXG4gIC8vIHF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBxdWVyaWVzLiBEZWZhdWx0OiBxdWVyeS5cbiAgJ3F1ZXJ5TWV0aG9kOiBxdWVyeS1tZXRob2QnLFxuXG4gICdzZXJ2aWNlVHlwZTogc2VydmljZS10eXBlJyxcblxuICAvLyBxdWVyeS13aXRoLW51bGwtcGFyZW50LWtleXMgW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gdHJpZ2dlciBxdWVyeSBtZXRob2Qgd2hlbiBwYXJlbnQta2V5cyBmaWx0ZXIgaXMgbnVsbC4gRGVmYXVsdDogZmFsc2VcbiAgJ3F1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzOiBxdWVyeS13aXRoLW51bGwtcGFyZW50LWtleXMnLFxuXG4gIC8vIHNldC12YWx1ZS1vbi12YWx1ZS1jaGFuZ2UgW3N0cmluZ106IEZvcm0gY29tcG9uZW50IGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50IGNoYW5nZXMgZHVlIHRvIHVzZXIgaW50ZXJhY3Rpb24uIFNlcGFyYXRlZCBieSAnOycuIEFjY2VwdGVkIGZvcm1hdDogYXR0ciB8IGNvbHVtbk5hbWU6YXR0clxuICAnc2V0VmFsdWVPblZhbHVlQ2hhbmdlOiBzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyxcblxuICAvLyBbZnVuY3Rpb25dOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHF1ZXJ5IGVycm9yLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1ZXJ5RmFsbGJhY2tGdW5jdGlvbjogcXVlcnktZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiBpbnNlcnQtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICd1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiB1cGRhdGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdkZWxldGVGYWxsYmFja0Z1bmN0aW9uOiBkZWxldGUtZmFsbGJhY2stZnVuY3Rpb24nXG5cbiAgJ3RyYW5zbGF0ZScsXG5cbiAgLy8gc29ydCBbc3RyaW5nXTogc29ydGluZyBBU0Mgb3IgREVTQy4gRGVmYXVsdDogbm8gdmFsdWVcbiAgJ3NvcnQnLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gICdvblNldFZhbHVlT25WYWx1ZUNoYW5nZScsXG4gICdvbkRhdGFMb2FkZWQnXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlRcbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1TZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgT0Zvcm1EYXRhQ29tcG9uZW50IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIHN0YXRpY0RhdGE6IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB2YWx1ZUNvbHVtblR5cGU6IHN0cmluZyA9IENvZGVzLlRZUEVfSU5UO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VwYXJhdG9yOiBzdHJpbmcgPSBDb2Rlcy5TUEFDRV9TRVBBUkFUT1I7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcXVlcnlPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHF1ZXJ5T25CaW5kOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnQ6IGFueTtcbiAgcHJvdGVjdGVkIHF1ZXJ5TWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldFZhbHVlT25WYWx1ZUNoYW5nZTogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlGYWxsYmFja0Z1bmN0aW9uOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc29ydDogJ0FTQycgfCAnREVTQyc7XG5cbiAgLyogT3V0cHV0cyAqL1xuICBwdWJsaWMgb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgLyogSW50ZXJuYWwgdmFyaWFibGVzICovXG4gIHB1YmxpYyBkYXRhQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBjb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHZpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlc2NyaXB0aW9uQ29sQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcbiAgcHVibGljIGxvYWRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjYWNoZVF1ZXJpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9wS2V5c0VxdWl2ID0ge307XG4gIHByb3RlY3RlZCBfc2V0VmFsdWVPblZhbHVlQ2hhbmdlRXF1aXYgPSB7fTtcbiAgcHJvdGVjdGVkIF9mb3JtRGF0YVN1YmNyaWJlO1xuICBwcm90ZWN0ZWQgX2N1cnJlbnRJbmRleDtcbiAgcHJvdGVjdGVkIG9FcnJvckRpYWxvZ01hbmFnZXI6IE9FcnJvckRpYWxvZ01hbmFnZXI7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uRGF0YUxvYWQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIGRlbGF5TG9hZCA9IDI1MDtcbiAgcHVibGljIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9Db250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuICBxdWVyeUFyZ3VtZW50czogYW55O1xuICBAVmlld0NoaWxkKE9Db250ZXh0TWVudUNvbXBvbmVudClcbiAgc2V0IG9Db250ZXh0TWVudVJlZih2YWx1ZTogT0NvbnRleHRNZW51Q29tcG9uZW50KSB7XG4gICAgdGhpcy5vQ29udGV4dE1lbnUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzO1xuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIgPSBpbmplY3Rvci5nZXQoT0Vycm9yRGlhbG9nTWFuYWdlcik7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQuYWRkKHRoaXMub25EYXRhTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN5bmNEYXRhSW5kZXgoZmFsc2UpKSk7XG5cbiAgICB0aGlzLmNhY2hlUXVlcmllZCA9IGZhbHNlO1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcblxuICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMudmlzaWJsZUNvbHVtbnMsIHRydWUpO1xuICAgIGlmIChVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnZpc2libGVDb2xBcnJheSkpIHtcbiAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpbmcgdmFsdWUgdG8gdmlzaWJsZUNvbHVtbnMgdG8gcHJvcGFnYXRlIHRoZSBwYXJhbWV0ZXIuXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSB0aGlzLmNvbEFycmF5O1xuICAgIH1cblxuICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlc2NyaXB0aW9uQ29sdW1ucyk7XG4gICAgaWYgKFV0aWwuaXNBcnJheUVtcHR5KHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSkpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IHRoaXMudmlzaWJsZUNvbEFycmF5O1xuICAgIH1cblxuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSk7XG5cbiAgICBjb25zdCBzZXRWYWx1ZVNldEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc2V0VmFsdWVPblZhbHVlQ2hhbmdlKTtcbiAgICB0aGlzLl9zZXRWYWx1ZU9uVmFsdWVDaGFuZ2VFcXVpdiA9IFV0aWwucGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHNldFZhbHVlU2V0QXJyYXkpO1xuXG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLnF1ZXJ5T25CaW5kKSB7XG4gICAgICB0aGlzLl9mb3JtRGF0YVN1YmNyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5xdWVyeURhdGEoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlPbkV2ZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8IHRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cblxuXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5fZm9ybURhdGFTdWJjcmliZSkge1xuICAgICAgdGhpcy5fZm9ybURhdGFTdWJjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAvLyBTZXQgdmFsdWUgZm9yICdzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyBjb21wb25lbnRzXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRTZWxlY3RlZFJlY29yZCgpO1xuICAgIHRoaXMub25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgIGNvbnN0IHNldFZhbHVlU2V0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2KTtcbiAgICBpZiAoc2V0VmFsdWVTZXRLZXlzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZm9ybUNvbXBvbmVudHMgPSB0aGlzLmZvcm0uZ2V0Q29tcG9uZW50cygpO1xuICAgICAgc2V0VmFsdWVTZXRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgY29tcCA9IGZvcm1Db21wb25lbnRzW3RoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2W2tleV1dO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcCkpIHtcbiAgICAgICAgICBjb21wLnNldFZhbHVlKFV0aWwuaXNEZWZpbmVkKHJlY29yZCkgPyByZWNvcmRba2V5XSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIFV0aWxpdHkgbWV0aG9kcyAqL1xuICBjb25maWd1cmVTZXJ2aWNlKCkge1xuICAgIGxldCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgYmFzZVNlcnZpY2U6IE9udGltaXplU2VydmljZSwgZW50aXR5OiB0aGlzLmVudGl0eSwgc2VydmljZTogdGhpcy5zZXJ2aWNlLCBzZXJ2aWNlVHlwZTogdGhpcy5zZXJ2aWNlVHlwZSB9O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzKSkge1xuICAgICAgY29uZmlndXJlU2VydmljZUFyZ3MgPSB7IC4uLmNvbmZpZ3VyZVNlcnZpY2VBcmdzLCAuLi50aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzIH07XG4gICAgfVxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBVdGlsLmNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3MpO1xuXG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeShjb2x1bW5zPzogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFV0aWwuaXNEZWZpbmVkKGNvbHVtbnMpID8gY29sdW1ucyA6IHRoaXMuY29sQXJyYXk7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHRoaXMudmFsdWVDb2x1bW4pID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy52YWx1ZUNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBxdWVyeURhdGEoZmlsdGVyPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEodGhpcy5xdWVyeU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSB8fCAhdGhpcy5lbnRpdHkpIHtcbiAgICAgIGNvbnNvbGUud2FybignU2VydmljZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCEgYWJvcnRpbmcgcXVlcnknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihmaWx0ZXIgfHwge30sIFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0odGhpcy5fcEtleXNFcXVpdiwgdGhpcy5mb3JtKSk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlciwgdGhpcy5fcEtleXNFcXVpdikgJiYgIXRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5sb2FkKCk7XG5cbiAgICAgIHRoaXMucXVlcnlBcmd1bWVudHMgPSB0aGlzLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcik7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5TWV0aG9kXSguLi50aGlzLmRhdGFTZXJ2aWNlLnF1ZXJ5QXJndW1lbnRBZGFwdGVyLnBhcnNlUXVlcnlQYXJhbWV0ZXJzKHRoaXMucXVlcnlBcmd1bWVudHMpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgdGhpcy5jYWNoZVF1ZXJpZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhQXJyYXkocmVzcC5kYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24oZXJyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyLm9wZW5FcnJvckRpYWxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHt9KTogT1F1ZXJ5UGFyYW1zIHtcbiAgICBjb25zdCBjb21wRmlsdGVyID0gZmlsdGVyO1xuICAgIGNvbnN0IHF1ZXJ5Q29scyA9IHRoaXMuZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IG92cnJBcmdzPy5zcWx0eXBlcyA/PyB0aGlzLmZvcm0/LmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpID8/IHt9O1xuXG4gICAgcmV0dXJuIHsgZmlsdGVyOiBjb21wRmlsdGVyLCBjb2x1bW5zOiBxdWVyeUNvbHMsIGVudGl0eTogdGhpcy5lbnRpdHksIHNxbFR5cGVzOiBzcWxUeXBlcyB9O1xuICB9XG5cbiAgZ2V0RGF0YUFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSB0aGlzLnNvcnREYXRhKGRhdGEpO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc09iamVjdChkYXRhKSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRhdGFBcnJheSA9IFtkYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgaGFzIHJlY2VpdmVkIG5vdCBzdXBwb3J0ZWQgc2VydmljZSBkYXRhLiBTdXBwb3J0ZWQgZGF0YSBhcmUgQXJyYXkgb3Igbm90IGVtcHR5IE9iamVjdCcpO1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5vbkRhdGFMb2FkZWQuZW1pdCh0aGlzLmRhdGFBcnJheSk7XG4gIH1cblxuICBzeW5jRGF0YUluZGV4KHF1ZXJ5SWZOb3RGb3VuZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9jdXJyZW50SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMudmFsdWUpICYmICF0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmRhdGFBcnJheSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IFtdO1xuICAgICAgICAgIHRoaXMudmFsdWUudmFsdWUuZm9yRWFjaCgoaXRlbVZhbHVlLCBpbmRleFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gaXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleFt0aGlzLl9jdXJyZW50SW5kZXgubGVuZ3RoXSA9IGluZGV4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gdGhpcy52YWx1ZS52YWx1ZSkge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSB0aGlzLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5fY3VycmVudEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHF1ZXJ5SWZOb3RGb3VuZCAmJlxuICAgICAgICAgIHRoaXMucXVlcnlPbkJpbmQgJiYgdGhpcy5kYXRhQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwICYmICF0aGlzLmNhY2hlUXVlcmllZCkge1xuICAgICAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXF1ZXJ5SWZOb3RGb3VuZCAmJiB0aGlzLmRhdGFBcnJheSAmJiB0aGlzLmRhdGFBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJdCB3YXMgc2V0IHRoZSB2YWx1ZSAnICsgdGhpcy52YWx1ZS52YWx1ZSArICcgdG8gdGhlIGNvbXBvbmVudCAnICsgdGhpcy5vYXR0ciArICcgYnV0IHRoaXMgdmFsdWUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGEgYXJyYXkgYW5kIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlQnlWYWx1ZUNvbHVtblR5cGUodmFsOiBhbnkpIHtcbiAgICBsZXQgdmFsdWUgPSB2YWw7XG5cbiAgICBpZiAodGhpcy52YWx1ZUNvbHVtblR5cGUgPT09IENvZGVzLlRZUEVfSU5UKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpKSB7XG4gICAgICAgIHZhbHVlID0gcGFyc2VkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRWYWx1ZSh2YWw6IGFueSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNldERhdGEodmFsOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWwpO1xuICAgIHN1cGVyLnNldERhdGEodmFsdWUpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRSZWNvcmQoKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlQ29sdW1uXSA9PT0gc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsb2FkKCk6IGFueSB7XG4gICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgY29uc3QgbG9hZE9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh0cnVlKTtcbiAgICAgIH0sIHRoaXMuZGVsYXlMb2FkKTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgfSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbG9hZE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHZhbCBhcyBib29sZWFuO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsIGFzIGJvb2xlYW4pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIG9uRm9ybUNvbnRyb2xDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLm9sZFZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5vbkZvcm1Db250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGl0ZW06IGFueSA9IHt9KTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY1R4dCA9ICcnO1xuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkgJiYgdGhpcy5kZXNjcmlwdGlvbkNvbEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheS5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0eHQgPSBpdGVtW2NvbF07XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0eHQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlICYmIHRoaXMudHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICAgICAgdHh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0eHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZXNjVHh0ICs9IHR4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGRlc2NUeHQgKz0gdGhpcy5zZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY1R4dC50cmltKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0RGlyZWN0aW9uID0gdGhpcy5zb3J0LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkFTQ19TT1JUICYmIHNvcnREaXJlY3Rpb24gIT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IGRhdGEuc29ydCgoYSwgYikgPT4gVXRpbC5jb21wYXJlKHRoaXMuZ2V0T3B0aW9uRGVzY3JpcHRpb25WYWx1ZShhKSwgdGhpcy5nZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGIpKSk7XG4gICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IENvZGVzLkRFU0NfU09SVCkge1xuICAgICAgc29ydGVkRGF0YS5yZXZlcnNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWREYXRhO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICB9XG5cbn1cbiJdfQ==
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXQvby1mb3JtLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUszRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUdwRSxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCx5QkFBeUI7SUFDekIsUUFBUTtJQUNSLFNBQVM7SUFDVCxTQUFTO0lBQ1QsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyx5QkFBeUI7SUFFekIsaUNBQWlDO0lBRWpDLHlDQUF5QztJ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dGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgTmdab25lLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT0Vycm9yRGlhbG9nTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZXJyb3ItZGlhbG9nLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBGb3JtVmFsdWVPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvZm9ybS12YWx1ZS1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1wYXJhbXMudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0NvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dG1lbnUvby1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL28tZm9ybS1kYXRhLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gIC8vIHN0YXRpYy1kYXRhIFtBcnJheTxhbnk+XSA6IHdheSB0byBwb3B1bGF0ZSB3aXRoIHN0YXRpYyBkYXRhLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3N0YXRpY0RhdGE6IHN0YXRpYy1kYXRhJyxcbiAgJ2VudGl0eScsXG4gICdzZXJ2aWNlJyxcbiAgJ2NvbHVtbnMnLFxuICAndmFsdWVDb2x1bW46IHZhbHVlLWNvbHVtbicsXG4gICd2YWx1ZUNvbHVtblR5cGU6IHZhbHVlLWNvbHVtbi10eXBlJyxcbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcbiAgLy8gVmlzaWJsZSBjb2x1bW5zIGludG8gc2VsZWN0aW9uIGRpYWxvZyBmcm9tIHBhcmFtZXRlciAnY29sdW1ucycuIFdpdGggZW1wdHkgcGFyYW1ldGVyIGFsbCBjb2x1bW5zIGFyZSB2aXNpYmxlLlxuICAndmlzaWJsZUNvbHVtbnM6IHZpc2libGUtY29sdW1ucycsXG4gIC8vIFZpc2libGUgY29sdW1ucyBpbiB0ZXh0IGZpZWxkLiBCeSBkZWZhdWx0LCBpdCBpcyB0aGUgcGFyYW1ldGVyIHZhbHVlIG9mIHZpc2libGUgY29sdW1ucy5cbiAgJ2Rlc2NyaXB0aW9uQ29sdW1uczogZGVzY3JpcHRpb24tY29sdW1ucycsXG5cbiAgJ3NlcGFyYXRvcicsXG5cbiAgJ3F1ZXJ5T25Jbml0OiBxdWVyeS1vbi1pbml0JyxcbiAgJ3F1ZXJ5T25CaW5kOiBxdWVyeS1vbi1iaW5kJyxcbiAgJ3F1ZXJ5T25FdmVudDogcXVlcnktb24tZXZlbnQnLFxuXG4gIC8vIHF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBxdWVyaWVzLiBEZWZhdWx0OiBxdWVyeS5cbiAgJ3F1ZXJ5TWV0aG9kOiBxdWVyeS1tZXRob2QnLFxuXG4gICdzZXJ2aWNlVHlwZTogc2VydmljZS10eXBlJyxcblxuICAvLyBxdWVyeS13aXRoLW51bGwtcGFyZW50LWtleXMgW3N0cmluZ11beWVzfG5vfHRydWV8ZmFsc2VdOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gdHJpZ2dlciBxdWVyeSBtZXRob2Qgd2hlbiBwYXJlbnQta2V5cyBmaWx0ZXIgaXMgbnVsbC4gRGVmYXVsdDogZmFsc2VcbiAgJ3F1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzOiBxdWVyeS13aXRoLW51bGwtcGFyZW50LWtleXMnLFxuXG4gIC8vIHNldC12YWx1ZS1vbi12YWx1ZS1jaGFuZ2UgW3N0cmluZ106IEZvcm0gY29tcG9uZW50IGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50IGNoYW5nZXMgZHVlIHRvIHVzZXIgaW50ZXJhY3Rpb24uIFNlcGFyYXRlZCBieSAnOycuIEFjY2VwdGVkIGZvcm1hdDogYXR0ciB8IGNvbHVtbk5hbWU6YXR0clxuICAnc2V0VmFsdWVPblZhbHVlQ2hhbmdlOiBzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyxcblxuICAvLyBbZnVuY3Rpb25dOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHF1ZXJ5IGVycm9yLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1ZXJ5RmFsbGJhY2tGdW5jdGlvbjogcXVlcnktZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiBpbnNlcnQtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICd1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiB1cGRhdGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdkZWxldGVGYWxsYmFja0Z1bmN0aW9uOiBkZWxldGUtZmFsbGJhY2stZnVuY3Rpb24nXG5cbiAgJ3RyYW5zbGF0ZScsXG5cbiAgLy8gc29ydCBbc3RyaW5nXTogc29ydGluZyBBU0Mgb3IgREVTQy4gRGVmYXVsdDogbm8gdmFsdWVcbiAgJ3NvcnQnLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQgPSBbXG4gICdvblNldFZhbHVlT25WYWx1ZUNoYW5nZScsXG4gICdvbkRhdGFMb2FkZWQnXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fU0VSVklDRV9DT01QT05FTlRcbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1TZXJ2aWNlQ29tcG9uZW50IGV4dGVuZHMgT0Zvcm1EYXRhQ29tcG9uZW50IHtcblxuICAvKiBJbnB1dHMgKi9cbiAgcHJvdGVjdGVkIHN0YXRpY0RhdGE6IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBlbnRpdHk6IHN0cmluZztcbiAgcHJvdGVjdGVkIHNlcnZpY2U6IHN0cmluZztcbiAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIHZhbHVlQ29sdW1uOiBzdHJpbmc7XG4gIHByb3RlY3RlZCB2YWx1ZUNvbHVtblR5cGU6IHN0cmluZyA9IENvZGVzLlRZUEVfSU5UO1xuICBwcm90ZWN0ZWQgcGFyZW50S2V5czogc3RyaW5nO1xuICBwcm90ZWN0ZWQgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VwYXJhdG9yOiBzdHJpbmcgPSBDb2Rlcy5TUEFDRV9TRVBBUkFUT1I7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwcm90ZWN0ZWQgcXVlcnlPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHJvdGVjdGVkIHF1ZXJ5T25CaW5kOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnQ6IGFueTtcbiAgcHJvdGVjdGVkIHF1ZXJ5TWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5RVUVSWV9NRVRIT0Q7XG4gIHByb3RlY3RlZCBzZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNldFZhbHVlT25WYWx1ZUNoYW5nZTogc3RyaW5nO1xuICBwdWJsaWMgcXVlcnlGYWxsYmFja0Z1bmN0aW9uOiAoZXJyb3I6IGFueSkgPT4gdm9pZDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIHRyYW5zbGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc29ydDogJ0FTQycgfCAnREVTQyc7XG5cbiAgLyogT3V0cHV0cyAqL1xuICBwdWJsaWMgb25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIHB1YmxpYyBvbkRhdGFMb2FkZWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG5cbiAgLyogSW50ZXJuYWwgdmFyaWFibGVzICovXG4gIHB1YmxpYyBkYXRhQXJyYXk6IGFueVtdID0gW107XG4gIHByb3RlY3RlZCBjb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHJvdGVjdGVkIHZpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGRlc2NyaXB0aW9uQ29sQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcbiAgcHVibGljIGxvYWRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjYWNoZVF1ZXJpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF9wS2V5c0VxdWl2ID0ge307XG4gIHByb3RlY3RlZCBfc2V0VmFsdWVPblZhbHVlQ2hhbmdlRXF1aXYgPSB7fTtcbiAgcHJvdGVjdGVkIF9mb3JtRGF0YVN1YmNyaWJlO1xuICBwcm90ZWN0ZWQgX2N1cnJlbnRJbmRleDtcbiAgcHJvdGVjdGVkIG9FcnJvckRpYWxvZ01hbmFnZXI6IE9FcnJvckRpYWxvZ01hbmFnZXI7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uRGF0YUxvYWQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIGRlbGF5TG9hZCA9IDI1MDtcbiAgcHVibGljIGxvYWRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIG9Db250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuICBxdWVyeUFyZ3VtZW50czogYW55O1xuICBAVmlld0NoaWxkKE9Db250ZXh0TWVudUNvbXBvbmVudClcbiAgc2V0IG9Db250ZXh0TWVudVJlZih2YWx1ZTogT0NvbnRleHRNZW51Q29tcG9uZW50KSB7XG4gICAgdGhpcy5vQ29udGV4dE1lbnUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzO1xuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoZm9ybSwgZWxSZWYsIGluamVjdG9yKTtcbiAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIHRoaXMuZWxSZWYgPSBlbFJlZjtcbiAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIgPSBpbmplY3Rvci5nZXQoT0Vycm9yRGlhbG9nTWFuYWdlcik7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQuYWRkKHRoaXMub25EYXRhTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN5bmNEYXRhSW5kZXgoZmFsc2UpKSk7XG5cbiAgICB0aGlzLmNhY2hlUXVlcmllZCA9IGZhbHNlO1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcblxuICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMudmlzaWJsZUNvbHVtbnMsIHRydWUpO1xuICAgIGlmIChVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnZpc2libGVDb2xBcnJheSkpIHtcbiAgICAgIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpbmcgdmFsdWUgdG8gdmlzaWJsZUNvbHVtbnMgdG8gcHJvcGFnYXRlIHRoZSBwYXJhbWV0ZXIuXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSB0aGlzLmNvbEFycmF5O1xuICAgIH1cblxuICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlc2NyaXB0aW9uQ29sdW1ucyk7XG4gICAgaWYgKFV0aWwuaXNBcnJheUVtcHR5KHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSkpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSA9IHRoaXMudmlzaWJsZUNvbEFycmF5O1xuICAgIH1cblxuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSk7XG5cbiAgICBjb25zdCBzZXRWYWx1ZVNldEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuc2V0VmFsdWVPblZhbHVlQ2hhbmdlKTtcbiAgICB0aGlzLl9zZXRWYWx1ZU9uVmFsdWVDaGFuZ2VFcXVpdiA9IFV0aWwucGFyc2VQYXJlbnRLZXlzRXF1aXZhbGVuY2VzKHNldFZhbHVlU2V0QXJyYXkpO1xuXG4gICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLnF1ZXJ5T25CaW5kKSB7XG4gICAgICB0aGlzLl9mb3JtRGF0YVN1YmNyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5xdWVyeURhdGEoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucXVlcnlPbkV2ZW50ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8IHRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cblxuXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5fZm9ybURhdGFTdWJjcmliZSkge1xuICAgICAgdGhpcy5fZm9ybURhdGFTdWJjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlPbkV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxvYWRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uRGF0YUxvYWQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgc3VwZXIuZW1pdE9uVmFsdWVDaGFuZ2UodHlwZSwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAvLyBTZXQgdmFsdWUgZm9yICdzZXQtdmFsdWUtb24tdmFsdWUtY2hhbmdlJyBjb21wb25lbnRzXG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5nZXRTZWxlY3RlZFJlY29yZCgpO1xuICAgIHRoaXMub25TZXRWYWx1ZU9uVmFsdWVDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgIGNvbnN0IHNldFZhbHVlU2V0S2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2KTtcbiAgICBpZiAoc2V0VmFsdWVTZXRLZXlzLmxlbmd0aCkge1xuICAgICAgY29uc3QgZm9ybUNvbXBvbmVudHMgPSB0aGlzLmZvcm0uZ2V0Q29tcG9uZW50cygpO1xuICAgICAgc2V0VmFsdWVTZXRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgY29tcCA9IGZvcm1Db21wb25lbnRzW3RoaXMuX3NldFZhbHVlT25WYWx1ZUNoYW5nZUVxdWl2W2tleV1dO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29tcCkpIHtcbiAgICAgICAgICBjb21wLnNldFZhbHVlKFV0aWwuaXNEZWZpbmVkKHJlY29yZCkgPyByZWNvcmRba2V5XSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qIFV0aWxpdHkgbWV0aG9kcyAqL1xuICBjb25maWd1cmVTZXJ2aWNlKCkge1xuICAgIGxldCBjb25maWd1cmVTZXJ2aWNlQXJnczogT0NvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgYmFzZVNlcnZpY2U6IE9udGltaXplU2VydmljZSwgZW50aXR5OiB0aGlzLmVudGl0eSwgc2VydmljZTogdGhpcy5zZXJ2aWNlLCBzZXJ2aWNlVHlwZTogdGhpcy5zZXJ2aWNlVHlwZSB9O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzKSkge1xuICAgICAgY29uZmlndXJlU2VydmljZUFyZ3MgPSB7IC4uLmNvbmZpZ3VyZVNlcnZpY2VBcmdzLCAuLi50aGlzLmNvbmZpZ3VyZVNlcnZpY2VBcmdzIH07XG4gICAgfVxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBVdGlsLmNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3MpO1xuXG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeShjb2x1bW5zPzogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFV0aWwuaXNEZWZpbmVkKGNvbHVtbnMpID8gY29sdW1ucyA6IHRoaXMuY29sQXJyYXk7XG4gICAgaWYgKHJlc3VsdC5pbmRleE9mKHRoaXMudmFsdWVDb2x1bW4pID09PSAtMSkge1xuICAgICAgcmVzdWx0LnB1c2godGhpcy52YWx1ZUNvbHVtbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBxdWVyeURhdGEoZmlsdGVyPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEodGhpcy5xdWVyeU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSB8fCAhdGhpcy5lbnRpdHkpIHtcbiAgICAgIGNvbnNvbGUud2FybignU2VydmljZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCEgYWJvcnRpbmcgcXVlcnknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihmaWx0ZXIgfHwge30sIFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0odGhpcy5fcEtleXNFcXVpdiwgdGhpcy5mb3JtKSk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlciwgdGhpcy5fcEtleXNFcXVpdikgJiYgIXRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5sb2FkKCk7XG5cbiAgICAgIHRoaXMucXVlcnlBcmd1bWVudHMgPSB0aGlzLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcik7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVt0aGlzLnF1ZXJ5TWV0aG9kXSguLi50aGlzLmRhdGFTZXJ2aWNlLnJlcXVlc3RBcmd1bWVudEFkYXB0ZXIucGFyc2VRdWVyeVBhcmFtZXRlcnModGhpcy5xdWVyeUFyZ3VtZW50cykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IFNlcnZpY2VSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlUXVlcmllZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFBcnJheShyZXNwLmRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5sb2FkZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbihlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIub3BlbkVycm9yRGlhbG9nKGVycik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXI6IG9iamVjdCwgb3ZyckFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge30pOiBPUXVlcnlQYXJhbXMge1xuICAgIGNvbnN0IGNvbXBGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgY29uc3QgcXVlcnlDb2xzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0gb3ZyckFyZ3M/LnNxbHR5cGVzID8/IHRoaXMuZm9ybT8uZ2V0QXR0cmlidXRlc1NRTFR5cGVzKCkgPz8ge307XG5cbiAgICByZXR1cm4geyBmaWx0ZXI6IGNvbXBGaWx0ZXIsIGNvbHVtbnM6IHF1ZXJ5Q29scywgZW50aXR5OiB0aGlzLmVudGl0eSwgc3FsVHlwZXM6IHNxbFR5cGVzIH07XG4gIH1cblxuICBnZXREYXRhQXJyYXkoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmRhdGFBcnJheTtcbiAgfVxuXG4gIHNldERhdGFBcnJheShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0FycmF5KGRhdGEpKSB7XG4gICAgICB0aGlzLmRhdGFBcnJheSA9IHRoaXMuc29ydERhdGEoZGF0YSk7XG4gICAgfSBlbHNlIGlmIChVdGlsLmlzT2JqZWN0KGRhdGEpICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudCBoYXMgcmVjZWl2ZWQgbm90IHN1cHBvcnRlZCBzZXJ2aWNlIGRhdGEuIFN1cHBvcnRlZCBkYXRhIGFyZSBBcnJheSBvciBub3QgZW1wdHkgT2JqZWN0Jyk7XG4gICAgICB0aGlzLmRhdGFBcnJheSA9IFtdO1xuICAgIH1cbiAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KHRoaXMuZGF0YUFycmF5KTtcbiAgfVxuXG4gIHN5bmNEYXRhSW5kZXgocXVlcnlJZk5vdEZvdW5kOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuX2N1cnJlbnRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy52YWx1ZSkgJiYgIXRoaXMuaXNFbXB0eSgpICYmIHRoaXMuZGF0YUFycmF5KSB7XG4gICAgICB0aGlzLmRhdGFBcnJheS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ID0gW107XG4gICAgICAgICAgdGhpcy52YWx1ZS52YWx1ZS5mb3JFYWNoKChpdGVtVmFsdWUsIGluZGV4VmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSBpdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4W3RoaXMuX2N1cnJlbnRJbmRleC5sZW5ndGhdID0gaW5kZXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSB0aGlzLnZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fY3VycmVudEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1bdGhpcy52YWx1ZUNvbHVtbl0gPT09IHRoaXMudmFsdWUudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocXVlcnlJZk5vdEZvdW5kICYmXG4gICAgICAgICAgdGhpcy5xdWVyeU9uQmluZCAmJiB0aGlzLmRhdGFBcnJheSAmJiB0aGlzLmRhdGFBcnJheS5sZW5ndGggPT09IDAgJiYgIXRoaXMuY2FjaGVRdWVyaWVkKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICAgICAgfSBlbHNlIGlmICghcXVlcnlJZk5vdEZvdW5kICYmIHRoaXMuZGF0YUFycmF5ICYmIHRoaXMuZGF0YUFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0l0IHdhcyBzZXQgdGhlIHZhbHVlICcgKyB0aGlzLnZhbHVlLnZhbHVlICsgJyB0byB0aGUgY29tcG9uZW50ICcgKyB0aGlzLm9hdHRyICsgJyBidXQgdGhpcyB2YWx1ZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YSBhcnJheSBhbmQgdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byB1bmRlZmluZWQnKTtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VCeVZhbHVlQ29sdW1uVHlwZSh2YWw6IGFueSkge1xuICAgIGxldCB2YWx1ZSA9IHZhbDtcblxuICAgIGlmICh0aGlzLnZhbHVlQ29sdW1uVHlwZSA9PT0gQ29kZXMuVFlQRV9JTlQpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldFZhbHVlKHZhbDogYW55LCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZUJ5VmFsdWVDb2x1bW5UeXBlKHZhbCk7XG4gICAgc3VwZXIuc2V0VmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2V0RGF0YSh2YWw6IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZUJ5VmFsdWVDb2x1bW5UeXBlKHZhbCk7XG4gICAgc3VwZXIuc2V0RGF0YSh2YWx1ZSk7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJlY29yZCgpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNlbGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmdldERhdGFBcnJheSgpLmZpbmQoaXRlbSA9PiBpdGVtW3RoaXMudmFsdWVDb2x1bW5dID09PSBzZWxlY3RlZFZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGxvYWQoKTogYW55IHtcbiAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBjb25zdCBsb2FkT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHRydWUpO1xuICAgICAgfSwgdGhpcy5kZWxheUxvYWQpO1xuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICB9KTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBsb2FkT2JzZXJ2YWJsZS5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdmFsIGFzIGJvb2xlYW47XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh2YWwgYXMgYm9vbGVhbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgb25Gb3JtQ29udHJvbENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMub2xkVmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm9uRm9ybUNvbnRyb2xDaGFuZ2UodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldE9wdGlvbkRlc2NyaXB0aW9uVmFsdWUoaXRlbTogYW55ID0ge30pOiBzdHJpbmcge1xuICAgIGxldCBkZXNjVHh0ID0gJyc7XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheSAmJiB0aGlzLmRlc2NyaXB0aW9uQ29sQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbkNvbEFycmF5LmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHR4dCA9IGl0ZW1bY29sXTtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHR4dCkpIHtcbiAgICAgICAgICBpZiAodGhpcy50cmFuc2xhdGUgJiYgdGhpcy50cmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0eHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHR4dCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlc2NUeHQgKz0gdHh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuZGVzY3JpcHRpb25Db2xBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgZGVzY1R4dCArPSB0aGlzLnNlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZXNjVHh0LnRyaW0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0RGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuc29ydCkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoc29ydERpcmVjdGlvbiAhPT0gQ29kZXMuQVNDX1NPUlQgJiYgc29ydERpcmVjdGlvbiAhPT0gQ29kZXMuREVTQ19TT1JUKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0ZWREYXRhID0gZGF0YS5zb3J0KChhLCBiKSA9PiBVdGlsLmNvbXBhcmUodGhpcy5nZXRPcHRpb25EZXNjcmlwdGlvblZhbHVlKGEpLCB0aGlzLmdldE9wdGlvbkRlc2NyaXB0aW9uVmFsdWUoYikpKTtcbiAgICBpZiAoc29ydERpcmVjdGlvbiA9PT0gQ29kZXMuREVTQ19TT1JUKSB7XG4gICAgICBzb3J0ZWREYXRhLnJldmVyc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRlZERhdGE7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gIH1cblxufVxuIl19
|