bways-report 0.1.9 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +506 -313
- package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
- package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
- package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
- package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
- package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
- package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
- package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +16 -1
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +14 -2
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +13 -37
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +13 -50
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
- package/esm2022/lib/data-access/adapters/index.mjs +1 -1
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
- package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
- package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
- package/esm2022/lib/data-access/contracts/index.mjs +1 -1
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +53 -41
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +551 -123
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +11 -10
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +13 -6
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
- package/esm2022/lib/features/designer/designer.component.mjs +107 -69
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
- package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
- package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
- package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
- package/esm2022/lib/features/routing/report-routes.mjs +6 -6
- package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
- package/esm2022/lib/features/runtime/report-execution.service.mjs +52 -8
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +18 -21
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
- package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
- package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
- package/esm2022/lib/provide-reporting.mjs +9 -29
- package/fesm2022/bways-report.mjs +2072 -1088
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +14 -5
- package/lib/core/models/report-datasource.model.d.ts +5 -0
- package/lib/core/models/report-grid.model.d.ts +1 -1
- package/lib/core/services/report-overlay.service.d.ts +14 -0
- package/lib/core/services/report-session-context.service.d.ts +9 -0
- package/lib/core/tokens/designer-config.token.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +4 -0
- package/lib/core/utils/report-endpoint.util.d.ts +12 -0
- package/lib/core/utils/report-parameter.util.d.ts +13 -1
- package/lib/core/utils/report-request-scope.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
- package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
- package/lib/data-access/adapters/index.d.ts +1 -1
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
- package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
- package/lib/data-access/adapters/session-headers.d.ts +3 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
- package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
- package/lib/features/designer/designer.component.d.ts +16 -2
- package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
- package/lib/features/designer/services/designer-config.service.d.ts +13 -0
- package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
- package/lib/features/persistence/services/report-store.service.d.ts +15 -1
- package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
- package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +3 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +3 -2
- package/lib/features/runtime/report-runtime.component.d.ts +1 -0
- package/lib/features/runtime/rpt-report.component.d.ts +5 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
- package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
- package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
- package/package.json +9 -5
- package/styles/theme.css +184 -0
- package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
|
@@ -17,6 +17,7 @@ import { registerBuiltinComponents } from './primitives/register-builtins';
|
|
|
17
17
|
import { normalizeBwaysConfig, } from './core/config/bways-report-config';
|
|
18
18
|
/** Default configuration values. */
|
|
19
19
|
const DEFAULT_CONFIG = {
|
|
20
|
+
apiBaseUrl: '/api/reporting',
|
|
20
21
|
defaultPageSize: 25,
|
|
21
22
|
dateFormat: 'dd/MM/yyyy',
|
|
22
23
|
enableDesigner: false,
|
|
@@ -120,9 +121,7 @@ export const withMockAdapters = withLocalStorage;
|
|
|
120
121
|
function isBwaysReportConfig(arg) {
|
|
121
122
|
return (typeof arg === 'object' &&
|
|
122
123
|
arg !== null &&
|
|
123
|
-
'spEndpoint' in arg
|
|
124
|
-
'tablesEndpoint' in arg &&
|
|
125
|
-
'executeEndpoint' in arg);
|
|
124
|
+
['spEndpoint', 'tablesEndpoint', 'executeEndpoint', 'lookupEndpoint', 'reportsEndpoint', 'apisEndpoint', 'apiEndpoints', 'components', 'grid', 'chart', 'sessionProvider'].some(key => key in arg));
|
|
126
125
|
}
|
|
127
126
|
/**
|
|
128
127
|
* Provides the BWays-Report library to the Angular application.
|
|
@@ -169,6 +168,8 @@ function provideBwaysReportFromSimpleConfig(config) {
|
|
|
169
168
|
defaultPageSize: normalized.defaultPageSize,
|
|
170
169
|
dateFormat: normalized.dateFormat,
|
|
171
170
|
lookupTimeoutMs: normalized.lookupTimeoutMs,
|
|
171
|
+
executionTimeoutMs: normalized.executionTimeoutMs,
|
|
172
|
+
trustedApiOrigins: normalized.trustedApiOrigins,
|
|
172
173
|
enableDesigner: true,
|
|
173
174
|
allowedCategories: normalized.allowedCategories,
|
|
174
175
|
autoParameter: normalized.autoParameter,
|
|
@@ -212,12 +213,10 @@ function provideBwaysReportFromSimpleConfig(config) {
|
|
|
212
213
|
{ provide: ReportDataSourceAdapter, useClass: EndpointDataSourceAdapter },
|
|
213
214
|
{ provide: ReportLookupAdapter, useClass: EndpointLookupAdapter },
|
|
214
215
|
{ provide: MasterDataProvider, useClass: EndpointMasterDataAdapter },
|
|
215
|
-
//
|
|
216
|
+
// Database persistence is the default, using the reporting service reports route.
|
|
216
217
|
{
|
|
217
218
|
provide: ReportPersistenceAdapter,
|
|
218
|
-
useClass:
|
|
219
|
-
? EndpointPersistenceAdapter
|
|
220
|
-
: LocalStorageReportPersistenceAdapter,
|
|
219
|
+
useClass: EndpointPersistenceAdapter,
|
|
221
220
|
},
|
|
222
221
|
];
|
|
223
222
|
// Grid / Chart overrides
|
|
@@ -286,29 +285,10 @@ function provideBwaysReportFromOptions(options, features) {
|
|
|
286
285
|
}
|
|
287
286
|
// Unified merged configuration
|
|
288
287
|
providers.push({ provide: REPORTING_CONFIG, useValue: config });
|
|
289
|
-
//
|
|
290
|
-
if (!hasHttpFeature && !hasLocalFeature
|
|
288
|
+
// Offline adapters require an explicit feature; normal saves always reach the backend.
|
|
289
|
+
if (!hasHttpFeature && !hasLocalFeature) {
|
|
291
290
|
providers.push({ provide: ReportDataSourceAdapter, useClass: options.dataSourceAdapter ?? HttpReportDataSourceAdapter }, { provide: ReportPersistenceAdapter, useClass: options.persistenceAdapter ?? HttpReportPersistenceAdapter }, { provide: MasterDataProvider, useClass: options.masterDataProvider ?? HttpMasterDataAdapter }, { provide: ReportSchemaDiscoveryAdapter, useClass: options.schemaDiscoveryAdapter ?? HttpReportSchemaDiscoveryAdapter }, { provide: ReportLookupAdapter, useClass: options.lookupAdapter ?? HttpReportLookupAdapter });
|
|
292
291
|
}
|
|
293
|
-
else if (!hasHttpFeature && !hasLocalFeature) {
|
|
294
|
-
// If no backend apiBaseUrl and no feature passed, fallback to zero-backend sandbox mode
|
|
295
|
-
providers.push({
|
|
296
|
-
provide: ReportPersistenceAdapter,
|
|
297
|
-
useClass: options.persistenceAdapter ?? LocalStorageReportPersistenceAdapter,
|
|
298
|
-
}, {
|
|
299
|
-
provide: ReportDataSourceAdapter,
|
|
300
|
-
useClass: options.dataSourceAdapter ?? MockReportDataSourceAdapter,
|
|
301
|
-
}, {
|
|
302
|
-
provide: ReportSchemaDiscoveryAdapter,
|
|
303
|
-
useClass: options.schemaDiscoveryAdapter ?? HttpReportSchemaDiscoveryAdapter,
|
|
304
|
-
}, {
|
|
305
|
-
provide: ReportLookupAdapter,
|
|
306
|
-
useClass: options.lookupAdapter ?? HttpReportLookupAdapter,
|
|
307
|
-
}, {
|
|
308
|
-
provide: MasterDataProvider,
|
|
309
|
-
useClass: options.masterDataProvider ?? HttpMasterDataAdapter,
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
292
|
// Component overrides
|
|
313
293
|
if (options.gridComponent) {
|
|
314
294
|
providers.push({ provide: GRID_COMPONENT, useValue: options.gridComponent });
|
|
@@ -357,4 +337,4 @@ export const provideBwaysReporting = provideBwaysReport;
|
|
|
357
337
|
export const provideReporting = provideBwaysReport;
|
|
358
338
|
/** Semantic alias for BWays report providers */
|
|
359
339
|
export const bwaysReportProviders = provideBwaysReport;
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHNCQUFzQixHQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFFTCxvQkFB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Q3hGLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQUM7QUFFeEQsdURBQXVEO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBRW5ELGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwb3J0aW5nIGxpYnJhcnkgcm9vdCBwcm92aWRlciBmdW5jdGlvbiBhbmQgZmVhdHVyZSBmdW5jdGlvbnMuXG4gKlxuICogQ29uZmlndXJlcyB0aGUgbGlicmFyeSwgaXRzIHRva2VucywgYW5kIHJlZ2lzdGVycyBidWlsdC1pbiBwcmltaXRpdmVzLlxuICovXG5cbmltcG9ydCB7XG4gIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgaW5qZWN0LFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIFByb3ZpZGVyLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENIQVJUX0NPTVBPTkVOVCxcbiAgR1JJRF9DT01QT05FTlQsXG4gIFJFUE9SVElOR19DT05GSUcsXG4gIFJlcG9ydGluZ0NvbmZpZyxcbn0gZnJvbSAnLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7XG4gIFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsXG4gIFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbn0gZnJvbSAnLi9jb3JlL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhUHJvdmlkZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9tYXN0ZXItZGF0YS5wcm92aWRlcic7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdCc7XG5pbXBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBFbmRwb2ludERhdGFTb3VyY2VBZGFwdGVyLFxuICBFbmRwb2ludExvb2t1cEFkYXB0ZXIsXG4gIEVuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBFbmRwb2ludE1hc3RlckRhdGFBZGFwdGVyLFxuICBCV0FZU19SRVBPUlRfRU5EUE9JTlRTLFxufSBmcm9tICcuL2RhdGEtYWNjZXNzL2FkYXB0ZXJzJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi9jb3JlL3JlZ2lzdHJ5L2NvbXBvbmVudC1yZWdpc3RyeSc7XG5pbXBvcnQgeyByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzIH0gZnJvbSAnLi9wcmltaXRpdmVzL3JlZ2lzdGVyLWJ1aWx0aW5zJztcbmltcG9ydCB7XG4gIEJ3YXlzUmVwb3J0Q29uZmlnLFxuICBub3JtYWxpemVCd2F5c0NvbmZpZyxcbn0gZnJvbSAnLi9jb3JlL2NvbmZpZy9id2F5cy1yZXBvcnQtY29uZmlnJztcblxuLyoqIERlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMuICovXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVwb3J0aW5nQ29uZmlnID0ge1xuICBkZWZhdWx0UGFnZVNpemU6IDI1LFxuICBkYXRlRm9ybWF0OiAnZGQvTU0veXl5eScsXG4gIGVuYWJsZURlc2lnbmVyOiBmYWxzZSxcbiAgc2NoZW1hVmVyc2lvbjogMSxcbiAgbG9va3VwVGltZW91dE1zOiAzMDAwMDAsXG59O1xuXG4vKipcbiAqIEtpbmRzIG9mIHJlcG9ydGluZyBmZWF0dXJlcyBhdmFpbGFibGUgaW4gYHByb3ZpZGVCd2F5c1JlcG9ydGAuXG4gKi9cbmV4cG9ydCBlbnVtIFJlcG9ydGluZ0ZlYXR1cmVLaW5kIHtcbiAgSHR0cEFkYXB0ZXJzID0gMCxcbiAgTG9jYWxTdG9yYWdlID0gMSxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYHByb3ZpZGVCd2F5c1JlcG9ydCguLi4pYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdGZWF0dXJlPEtpbmRUIGV4dGVuZHMgUmVwb3J0aW5nRmVhdHVyZUtpbmQgPSBSZXBvcnRpbmdGZWF0dXJlS2luZD4ge1xuICDJtWtpbmQ6IEtpbmRUO1xuICDJtWNvbmZpZz86IFBhcnRpYWw8UmVwb3J0aW5nQ29uZmlnPjtcbiAgybVwcm92aWRlcnM6IFByb3ZpZGVyW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYnVpbHQtaW4gSFRUUCBhZGFwdGVycyB2aWEgYHdpdGhIdHRwQWRhcHRlcnMoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEFkYXB0ZXJzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBVUkwgZm9yIHRoZSBiYWNrZW5kIHJlcG9ydGluZyBSRVNUIEFQSSBlbmRwb2ludHMuXG4gICAqIEBleGFtcGxlICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZydcbiAgICovXG4gIGFwaUJhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBkYXRhYmFzZSBsb29rdXAgcXVlcmllcy5cbiAgICogRGVmYXVsdHMgdG8gMzAwMDAwbXMgKDUgbWludXRlcykuXG4gICAqL1xuICBsb29rdXBUaW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgYnVpbHQtaW4gSFRUUCBhZGFwdGVycyBmb3IgYmFja2VuZCBleGVjdXRpb24sIHBlcnNpc3RlbmNlLFxuICogc2NoZW1hIGRpc2NvdmVyeSwgbG9va3VwLCBhbmQgbWFzdGVyIGRhdGEgcXVlcmllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZVJlcG9ydGluZyhcbiAqICAgeyBkZWZhdWx0UGFnZVNpemU6IDUwIH0sXG4gKiAgIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaS9yZXBvcnRpbmcnIH0pXG4gKiApXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIdHRwQWRhcHRlcnMoXG4gIG9wdGlvbnM6IEh0dHBBZGFwdGVyc09wdGlvbnNcbik6IFJlcG9ydGluZ0ZlYXR1cmU8UmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzPiB7XG4gIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5hcGlCYXNlVXJsIHx8IHR5cGVvZiBvcHRpb25zLmFwaUJhc2VVcmwgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMuYXBpQmFzZVVybC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwiYXBpQmFzZVVybFwiIGlzIHJlcXVpcmVkIHdoZW4gY29uZmlndXJpbmcgd2l0aEh0dHBBZGFwdGVycygpLiBgICtcbiAgICAgIGBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGJhY2tlbmQgVVJMLCBlLmcuIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaS9yZXBvcnRpbmcnIH0pYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhblVybCA9IG9wdGlvbnMuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICByZXR1cm4ge1xuICAgIMm1a2luZDogUmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzLFxuICAgIMm1Y29uZmlnOiB7XG4gICAgICBhcGlCYXNlVXJsOiBjbGVhblVybCxcbiAgICAgIC4uLihvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyA/IHsgbG9va3VwVGltZW91dE1zOiBvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyB9IDoge30pLFxuICAgIH0sXG4gICAgybVwcm92aWRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRyxcbiAgICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgICBhcGlCYXNlVXJsOiBjbGVhblVybCxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5sb29rdXBUaW1lb3V0TXMgPyB7IGxvb2t1cFRpbWVvdXRNczogb3B0aW9ucy5sb29rdXBUaW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBaZXJvLWJhY2tlbmQgc2FuZGJveCBtb2RlIHVzaW5nIGJyb3dzZXIgTG9jYWxTdG9yYWdlIGZvciByZXBvcnQgZGVmaW5pdGlvbnNcbiAqIGFuZCBtb2NrIHJlYWxpc3RpYyBkYXRhc2V0cyBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuICpcbiAqIElkZWFsIGZvciBsb2NhbCBkZXZlbG9wbWVudCwgcHJvdG90eXBpbmcsIGFuZCBvZmZsaW5lIHRlc3Rpbmcgd2l0aG91dCBzcGlubmluZyB1cCBiYWNrZW5kcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZVJlcG9ydGluZyh3aXRoTG9jYWxTdG9yYWdlKCkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMb2NhbFN0b3JhZ2UoKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5Mb2NhbFN0b3JhZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICDJtWtpbmQ6IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqIEFsaWFzIGZvciB3aXRoTG9jYWxTdG9yYWdlICovXG5leHBvcnQgY29uc3Qgd2l0aE1vY2tBZGFwdGVycyA9IHdpdGhMb2NhbFN0b3JhZ2U7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgcHJvdmlkZUJ3YXlzUmVwb3J0KClgIChhbmQgYHByb3ZpZGVSZXBvcnRpbmcoKWApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlcG9ydGluZ0NvbmZpZz4ge1xuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCByZXN1bHQgZ3JpZHMuXG4gICAqIEJXYXlzLWdyaWQgaXMgdGhlIHJlY29tbWVuZGVkIGRlZmF1bHQuIEhvc3QgY2FuIHByb3ZpZGUgYW55IGdyaWQgY29tcG9uZW50LlxuICAgKi9cbiAgZ3JpZENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSBBbmd1bGFyIGNvbXBvbmVudCB0byB1c2UgZm9yIHJlbmRlcmluZyByZXBvcnQgdmlzdWFsIGNoYXJ0cy5cbiAgICogSG9zdCBjYW4gcHJvdmlkZSB0aGVpciBwcmVmZXJyZWQgY2hhcnQgY29tcG9uZW50LCBvciB1c2UgdGhlIGJ1aWx0LWluIFNWRyBjaGFydHMuXG4gICAqL1xuICBjaGFydENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGF0YSBzb3VyY2UgYWRhcHRlci4gKi9cbiAgZGF0YVNvdXJjZUFkYXB0ZXI/OiBUeXBlPFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYXN0ZXIgZGF0YSBwcm92aWRlci4gKi9cbiAgbWFzdGVyRGF0YVByb3ZpZGVyPzogVHlwZTxNYXN0ZXJEYXRhUHJvdmlkZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBlcnNpc3RlbmNlIGFkYXB0ZXIuICovXG4gIHBlcnNpc3RlbmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzY2hlbWEgZGlzY292ZXJ5IGFkYXB0ZXIuICovXG4gIHNjaGVtYURpc2NvdmVyeUFkYXB0ZXI/OiBUeXBlPFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxvb2t1cCBhZGFwdGVyLiAqL1xuICBsb29rdXBBZGFwdGVyPzogVHlwZTxSZXBvcnRMb29rdXBBZGFwdGVyPjtcblxuICAvKipcbiAgICogSW5saW5lIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIG9yIGZhY3RvcnkgZnVuY3Rpb246XG4gICAqIGUuZy4gYHNlc3Npb246ICgpID0+ICh7IGJyYW5jaElkOiBhdXRoLmJyYW5jaElkKCksIHVzZXI6IGF1dGgudXNlcigpIH0pYFxuICAgKi9cbiAgc2Vzc2lvbj86IFNlc3Npb25Db250ZXh0U291cmNlIHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbidzIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIChlLmcuIHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAsIHVzZXJJZDogJ3Vzci0xJyB9KS5cbiAgICovXG4gIHNlc3Npb25Db250ZXh0PzogU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEhvc3QgYXBwbGljYXRpb24gc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRQcm92aWRlcj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj47XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgU2Vzc2lvbkNvbnRleHRTb3VyY2Ugd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRGYWN0b3J5PzogKCkgPT4gU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG59XG5cbi8qKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBhbHRlcm5hdGl2ZSBuYW1pbmcgYWxpYXNlcyAqL1xuZXhwb3J0IHR5cGUgUHJvdmlkZVJlcG9ydGluZ09wdGlvbnMgPSBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zO1xuZXhwb3J0IHR5cGUgUHJvdmlkZUJ3YXlzUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBkZXRlY3QgdGhlIHNpbXBsaWZpZWQgYEJ3YXlzUmVwb3J0Q29uZmlnYCBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gaXNCd2F5c1JlcG9ydENvbmZpZyhcbiAgYXJnOiBCd2F5c1JlcG9ydENvbmZpZyB8IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnNcbik6IGFyZyBpcyBCd2F5c1JlcG9ydENvbmZpZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiZcbiAgICBhcmcgIT09IG51bGwgJiZcbiAgICAnc3BFbmRwb2ludCcgaW4gYXJnICYmXG4gICAgJ3RhYmxlc0VuZHBvaW50JyBpbiBhcmcgJiZcbiAgICAnZXhlY3V0ZUVuZHBvaW50JyBpbiBhcmdcbiAgKTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgQldheXMtUmVwb3J0IGxpYnJhcnkgdG8gdGhlIEFuZ3VsYXIgYXBwbGljYXRpb24uXG4gKlxuICogKipTaW1wbGUgY29uZmlnIChyZWNvbW1lbmRlZCBmb3IgbW9zdCBwcm9qZWN0cyk6KipcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3ZpZGVCd2F5c1JlcG9ydCh7XG4gKiAgIHNwRW5kcG9pbnQ6ICAgICAgJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLFxuICogICB0YWJsZXNFbmRwb2ludDogICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLFxuICogICBleGVjdXRlRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJyxcbiAqICAgcmVwb3J0c0VuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycsXG4gKiAgIGNvbXBvbmVudHM6IFsnZm9ybUlucHV0cycsICdhY3Rpb25CdXR0b25zJ10sXG4gKiAgIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpLFxuICogfSlcbiAqIGBgYFxuICpcbiAqICoqQWR2YW5jZWQgY29uZmlnIChleGlzdGluZyBhZGFwdGVyIHBhdHRlcm4pOioqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlQndheXNSZXBvcnQoXG4gKiAgIHsgYXBpQmFzZVVybDogJy9hcGkvcmVwb3J0aW5nJyB9LFxuICogICB3aXRoSHR0cEFkYXB0ZXJzKHsgYXBpQmFzZVVybDogJy9hcGkvcmVwb3J0aW5nJyB9KVxuICogKVxuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBFaXRoZXIgYSBgQndheXNSZXBvcnRDb25maWdgIChzaW1wbGUpIG9yIGBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zYCAoYWR2YW5jZWQpLlxuICogQHBhcmFtIGZlYXR1cmVzIC0gT3B0aW9uYWwgZmVhdHVyZXMgbGlrZSBgd2l0aEh0dHBBZGFwdGVycyguLi4pYCBvciBgd2l0aExvY2FsU3RvcmFnZSgpYC5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50IHByb3ZpZGVycyBmb3IgdGhlIHJlcG9ydGluZyBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUJ3YXlzUmVwb3J0KFxuICBvcHRpb25zOiBCd2F5c1JlcG9ydENvbmZpZyB8IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgPSB7fSBhcyBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zLFxuICAuLi5mZWF0dXJlczogUmVwb3J0aW5nRmVhdHVyZVtdXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIC8vIOKUgOKUgOKUgCBTaW1wbGUgY29uZmlnIHBhdGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIGlmIChpc0J3YXlzUmVwb3J0Q29uZmlnKG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21TaW1wbGVDb25maWcob3B0aW9ucyk7XG4gIH1cblxuICAvLyDilIDilIDilIAgQWR2YW5jZWQgLyBsZWdhY3kgY29uZmlnIHBhdGgg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIHJldHVybiBwcm92aWRlQndheXNSZXBvcnRGcm9tT3B0aW9ucyhvcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbi8qKlxuICogV2lyZXMgdXAgZW5kcG9pbnQtYmFzZWQgYWRhcHRlcnMgZnJvbSB0aGUgc2ltcGxpZmllZCBgQndheXNSZXBvcnRDb25maWdgLlxuICovXG5mdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnRGcm9tU2ltcGxlQ29uZmlnKGNvbmZpZzogQndheXNSZXBvcnRDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCd2F5c0NvbmZpZyhjb25maWcpO1xuXG4gIGNvbnN0IHJlcG9ydGluZ0NvbmZpZzogUmVwb3J0aW5nQ29uZmlnID0ge1xuICAgIC4uLkRFRkFVTFRfQ09ORklHLFxuICAgIGRlZmF1bHRQYWdlU2l6ZTogbm9ybWFsaXplZC5kZWZhdWx0UGFnZVNpemUsXG4gICAgZGF0ZUZvcm1hdDogbm9ybWFsaXplZC5kYXRlRm9ybWF0LFxuICAgIGxvb2t1cFRpbWVvdXRNczogbm9ybWFsaXplZC5sb29rdXBUaW1lb3V0TXMsXG4gICAgZW5hYmxlRGVzaWduZXI6IHRydWUsXG4gICAgYWxsb3dlZENhdGVnb3JpZXM6IG5vcm1hbGl6ZWQuYWxsb3dlZENhdGVnb3JpZXMsXG4gICAgYXV0b1BhcmFtZXRlcjogbm9ybWFsaXplZC5hdXRvUGFyYW1ldGVyLFxuICAgIHJvdXRlQmFzZTogbm9ybWFsaXplZC5yb3V0ZUJhc2UsXG4gIH07XG5cbiAgY29uc3QgcHJvdmlkZXJzOiBQcm92aWRlcltdID0gW1xuICAgIC8vIEJ1aWx0aW4gY29tcG9uZW50IHJlZ2lzdHJhdGlvblxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogKCkgPT4ge1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IGluamVjdChDb21wb25lbnRSZWdpc3RyeSk7XG4gICAgICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMocmVnaXN0cnkpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3doZWVsJyxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGFjdGl2ZUVsLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWwuYmx1cigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBwYXNzaXZlOiB0cnVlIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBDb3JlIGNvbmZpZ3VyYXRpb25cbiAgICB7IHByb3ZpZGU6IFJFUE9SVElOR19DT05GSUcsIHVzZVZhbHVlOiByZXBvcnRpbmdDb25maWcgfSxcblxuICAgIC8vIEVuZHBvaW50IFVSTHMgZm9yIHRoZSBhZGFwdGVyc1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsXG4gICAgICB1c2VWYWx1ZToge1xuICAgICAgICBzcEVuZHBvaW50OiBub3JtYWxpemVkLnNwRW5kcG9pbnQsXG4gICAgICAgIHRhYmxlc0VuZHBvaW50OiBub3JtYWxpemVkLnRhYmxlc0VuZHBvaW50LFxuICAgICAgICBleGVjdXRlRW5kcG9pbnQ6IG5vcm1hbGl6ZWQuZXhlY3V0ZUVuZHBvaW50LFxuICAgICAgICBsb29rdXBFbmRwb2ludDogbm9ybWFsaXplZC5sb29rdXBFbmRwb2ludCxcbiAgICAgICAgcmVwb3J0c0VuZHBvaW50OiBub3JtYWxpemVkLnJlcG9ydHNFbmRwb2ludCxcbiAgICAgICAgYXBpc0VuZHBvaW50OiBub3JtYWxpemVkLmFwaXNFbmRwb2ludCxcbiAgICAgICAgYXBpRW5kcG9pbnRzOiBub3JtYWxpemVkLmFwaUVuZHBvaW50cyxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIC8vIEVuZHBvaW50LWJhc2VkIGFkYXB0ZXJzXG4gICAgeyBwcm92aWRlOiBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLCB1c2VDbGFzczogRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0sXG4gICAgeyBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlciwgdXNlQ2xhc3M6IEVuZHBvaW50RGF0YVNvdXJjZUFkYXB0ZXIgfSxcbiAgICB7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBFbmRwb2ludExvb2t1cEFkYXB0ZXIgfSxcbiAgICB7IHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlciwgdXNlQ2xhc3M6IEVuZHBvaW50TWFzdGVyRGF0YUFkYXB0ZXIgfSxcblxuICAgIC8vIFBlcnNpc3RlbmNlOiB1c2UgZW5kcG9pbnQgYWRhcHRlciBpZiByZXBvcnRzRW5kcG9pbnQgaXMgc2V0LCBvdGhlcndpc2UgbG9jYWxTdG9yYWdlXG4gICAge1xuICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgdXNlQ2xhc3M6IG5vcm1hbGl6ZWQucmVwb3J0c0VuZHBvaW50XG4gICAgICAgID8gRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXJcbiAgICAgICAgOiBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgfSxcbiAgXTtcblxuICAvLyBHcmlkIC8gQ2hhcnQgb3ZlcnJpZGVzXG4gIGlmIChub3JtYWxpemVkLmdyaWRDb21wb25lbnQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IEdSSURfQ09NUE9ORU5ULCB1c2VWYWx1ZTogbm9ybWFsaXplZC5ncmlkQ29tcG9uZW50IH0pO1xuICB9XG4gIGlmIChub3JtYWxpemVkLmNoYXJ0Q29tcG9uZW50KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBDSEFSVF9DT01QT05FTlQsIHVzZVZhbHVlOiBub3JtYWxpemVkLmNoYXJ0Q29tcG9uZW50IH0pO1xuICB9XG5cbiAgLy8gU2Vzc2lvbiBjb250ZXh0IC8gcHJvdmlkZXJcbiAgY29uc3Qgc2Vzc2lvblRhcmdldCA9IG5vcm1hbGl6ZWQuc2Vzc2lvblByb3ZpZGVyID8/IG5vcm1hbGl6ZWQuc2Vzc2lvbjtcbiAgaWYgKHNlc3Npb25UYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIHNlc3Npb25UYXJnZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGlzQ2xhc3MgPSAvXmNsYXNzXFxzLy50ZXN0KEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlc3Npb25UYXJnZXQpKTtcbiAgICAgIGlmIChpc0NsYXNzKSB7XG4gICAgICAgIHByb3ZpZGVycy5wdXNoKHNlc3Npb25UYXJnZXQgYXMgVHlwZTxhbnk+KTtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwgdXNlRXhpc3Rpbmc6IHNlc3Npb25UYXJnZXQgYXMgVHlwZTxhbnk+IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VGYWN0b3J5OiBzZXNzaW9uVGFyZ2V0IGFzICgpID0+IGFueSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogc2Vzc2lvblRhcmdldCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVycyk7XG59XG5cbi8qKlxuICogT3JpZ2luYWwgYWR2YW5jZWQgY29uZmlnIHBhdGgg4oCUIHVuY2hhbmdlZCBiZWhhdmlvci5cbiAqL1xuZnVuY3Rpb24gcHJvdmlkZUJ3YXlzUmVwb3J0RnJvbU9wdGlvbnMoXG4gIG9wdGlvbnM6IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMsXG4gIGZlYXR1cmVzOiBSZXBvcnRpbmdGZWF0dXJlW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgY29uZmlnOiBSZXBvcnRpbmdDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5vcHRpb25zIH07XG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgIGlmIChmZWF0dXJlLsm1Y29uZmlnKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbmZpZywgZmVhdHVyZS7JtWNvbmZpZyk7XG4gICAgfVxuICB9XG4gIGlmIChjb25maWcuYXBpQmFzZVVybCkge1xuICAgIGNvbmZpZy5hcGlCYXNlVXJsID0gY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIH1cblxuICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZVZhbHVlOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0KENvbXBvbmVudFJlZ2lzdHJ5KTtcbiAgICAgICAgcmVnaXN0ZXJCdWlsdGluQ29tcG9uZW50cyhyZWdpc3RyeSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAnd2hlZWwnLFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBhY3RpdmVFbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgIGlmIChhY3RpdmVFbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgYWN0aXZlRWwudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbC5ibHVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHBhc3NpdmU6IHRydWUgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCBoYXNIdHRwRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYuybVraW5kID09PSBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMpO1xuICBjb25zdCBoYXNMb2NhbEZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLsm1a2luZCA9PT0gUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlKTtcblxuICAvLyBBcHBlbmQgZmVhdHVyZSBwcm92aWRlcnMgKGV4Y2x1ZGluZyBzdGFuZGFsb25lIFJFUE9SVElOR19DT05GSUcgc28gbWVyZ2VkIGNvbmZpZyB3aW5zKVxuICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcbiAgICBjb25zdCBub25Db25maWdQcm92aWRlcnMgPSBmZWF0dXJlLsm1cHJvdmlkZXJzLmZpbHRlcihcbiAgICAgIChwKSA9PiAhKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsICYmICdwcm92aWRlJyBpbiBwICYmIHAucHJvdmlkZSA9PT0gUkVQT1JUSU5HX0NPTkZJRylcbiAgICApO1xuICAgIHByb3ZpZGVycy5wdXNoKC4uLm5vbkNvbmZpZ1Byb3ZpZGVycyk7XG4gIH1cblxuICAvLyBVbmlmaWVkIG1lcmdlZCBjb25maWd1cmF0aW9uXG4gIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9KTtcblxuICAvLyBBdXRvLXByb3Zpc2lvbiBIVFRQIGFkYXB0ZXJzIGlmIGFwaUJhc2VVcmwgd2FzIHN1cHBsaWVkIGFzIGEgMS1saW5lIG9wdGlvblxuICBpZiAoIWhhc0h0dHBGZWF0dXJlICYmICFoYXNMb2NhbEZlYXR1cmUgJiYgb3B0aW9ucy5hcGlCYXNlVXJsKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciA/PyBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5sb29rdXBBZGFwdGVyID8/IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKCFoYXNIdHRwRmVhdHVyZSAmJiAhaGFzTG9jYWxGZWF0dXJlKSB7XG4gICAgLy8gSWYgbm8gYmFja2VuZCBhcGlCYXNlVXJsIGFuZCBubyBmZWF0dXJlIHBhc3NlZCwgZmFsbGJhY2sgdG8gemVyby1iYWNrZW5kIHNhbmRib3ggbW9kZVxuICAgIHByb3ZpZGVycy5wdXNoKFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlciA/PyBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgPz8gTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgPz8gSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBvdmVycmlkZXNcbiAgaWYgKG9wdGlvbnMuZ3JpZENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogR1JJRF9DT01QT05FTlQsIHVzZVZhbHVlOiBvcHRpb25zLmdyaWRDb21wb25lbnQgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jaGFydENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogQ0hBUlRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogb3B0aW9ucy5jaGFydENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IGFkYXB0ZXIgb3ZlcnJpZGVzIGFsd2F5cyB3aW5cbiAgaWYgKG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmxvb2t1cEFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgfSk7XG4gIH1cblxuICAvLyBEeW5hbWljIFNlc3Npb24gQ29udGV4dCBQcm92aWRlcnNcbiAgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fUFJPVklERVIsIHVzZUNsYXNzOiBvcHRpb25zLnNlc3Npb25Db250ZXh0UHJvdmlkZXIgfSk7XG4gIH1cblxuICAvLyBGbGV4aWJsZSBpbmxpbmUgc2Vzc2lvbiBzeW50YXg6IHNlc3Npb246ICgpID0+ICh7IC4uLiB9KVxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uIGFzICgpID0+IGFueSB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IG9wdGlvbnMuc2Vzc2lvbiB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0RmFjdG9yeSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dEZhY3RvcnkgfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dCB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqIEFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlQndheXNSZXBvcnRpbmcgPSBwcm92aWRlQndheXNSZXBvcnQ7XG5cbi8qKiBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlUmVwb3J0aW5nID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuXG4vKiogU2VtYW50aWMgYWxpYXMgZm9yIEJXYXlzIHJlcG9ydCBwcm92aWRlcnMgKi9cbmV4cG9ydCBjb25zdCBid2F5c1JlcG9ydFByb3ZpZGVycyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcbiJdfQ==
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHNCQUFzQixHQUN2QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFFTCxvQkFB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VSxFQUFFLENBQUM7UUFDMUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDekMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQUM7QUFFeEQsdURBQXVEO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBRW5ELGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwb3J0aW5nIGxpYnJhcnkgcm9vdCBwcm92aWRlciBmdW5jdGlvbiBhbmQgZmVhdHVyZSBmdW5jdGlvbnMuXG4gKlxuICogQ29uZmlndXJlcyB0aGUgbGlicmFyeSwgaXRzIHRva2VucywgYW5kIHJlZ2lzdGVycyBidWlsdC1pbiBwcmltaXRpdmVzLlxuICovXG5cbmltcG9ydCB7XG4gIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgaW5qZWN0LFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIFByb3ZpZGVyLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENIQVJUX0NPTVBPTkVOVCxcbiAgR1JJRF9DT01QT05FTlQsXG4gIFJFUE9SVElOR19DT05GSUcsXG4gIFJlcG9ydGluZ0NvbmZpZyxcbn0gZnJvbSAnLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7XG4gIFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsXG4gIFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbn0gZnJvbSAnLi9jb3JlL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhUHJvdmlkZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9tYXN0ZXItZGF0YS5wcm92aWRlcic7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdCc7XG5pbXBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBFbmRwb2ludERhdGFTb3VyY2VBZGFwdGVyLFxuICBFbmRwb2ludExvb2t1cEFkYXB0ZXIsXG4gIEVuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBFbmRwb2ludE1hc3RlckRhdGFBZGFwdGVyLFxuICBCV0FZU19SRVBPUlRfRU5EUE9JTlRTLFxufSBmcm9tICcuL2RhdGEtYWNjZXNzL2FkYXB0ZXJzJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi9jb3JlL3JlZ2lzdHJ5L2NvbXBvbmVudC1yZWdpc3RyeSc7XG5pbXBvcnQgeyByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzIH0gZnJvbSAnLi9wcmltaXRpdmVzL3JlZ2lzdGVyLWJ1aWx0aW5zJztcbmltcG9ydCB7XG4gIEJ3YXlzUmVwb3J0Q29uZmlnLFxuICBub3JtYWxpemVCd2F5c0NvbmZpZyxcbn0gZnJvbSAnLi9jb3JlL2NvbmZpZy9id2F5cy1yZXBvcnQtY29uZmlnJztcblxuLyoqIERlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMuICovXG5jb25zdCBERUZBVUxUX0NPTkZJRzogUmVwb3J0aW5nQ29uZmlnID0ge1xuICBhcGlCYXNlVXJsOiAnL2FwaS9yZXBvcnRpbmcnLFxuICBkZWZhdWx0UGFnZVNpemU6IDI1LFxuICBkYXRlRm9ybWF0OiAnZGQvTU0veXl5eScsXG4gIGVuYWJsZURlc2lnbmVyOiBmYWxzZSxcbiAgc2NoZW1hVmVyc2lvbjogMSxcbiAgbG9va3VwVGltZW91dE1zOiAzMDAwMDAsXG59O1xuXG4vKipcbiAqIEtpbmRzIG9mIHJlcG9ydGluZyBmZWF0dXJlcyBhdmFpbGFibGUgaW4gYHByb3ZpZGVCd2F5c1JlcG9ydGAuXG4gKi9cbmV4cG9ydCBlbnVtIFJlcG9ydGluZ0ZlYXR1cmVLaW5kIHtcbiAgSHR0cEFkYXB0ZXJzID0gMCxcbiAgTG9jYWxTdG9yYWdlID0gMSxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmVhdHVyZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gYHByb3ZpZGVCd2F5c1JlcG9ydCguLi4pYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRpbmdGZWF0dXJlPEtpbmRUIGV4dGVuZHMgUmVwb3J0aW5nRmVhdHVyZUtpbmQgPSBSZXBvcnRpbmdGZWF0dXJlS2luZD4ge1xuICDJtWtpbmQ6IEtpbmRUO1xuICDJtWNvbmZpZz86IFBhcnRpYWw8UmVwb3J0aW5nQ29uZmlnPjtcbiAgybVwcm92aWRlcnM6IFByb3ZpZGVyW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYnVpbHQtaW4gSFRUUCBhZGFwdGVycyB2aWEgYHdpdGhIdHRwQWRhcHRlcnMoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEFkYXB0ZXJzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBVUkwgZm9yIHRoZSBiYWNrZW5kIHJlcG9ydGluZyBSRVNUIEFQSSBlbmRwb2ludHMuXG4gICAqIEBleGFtcGxlICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZydcbiAgICovXG4gIGFwaUJhc2VVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBkYXRhYmFzZSBsb29rdXAgcXVlcmllcy5cbiAgICogRGVmYXVsdHMgdG8gMzAwMDAwbXMgKDUgbWludXRlcykuXG4gICAqL1xuICBsb29rdXBUaW1lb3V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgYnVpbHQtaW4gSFRUUCBhZGFwdGVycyBmb3IgYmFja2VuZCBleGVjdXRpb24sIHBlcnNpc3RlbmNlLFxuICogc2NoZW1hIGRpc2NvdmVyeSwgbG9va3VwLCBhbmQgbWFzdGVyIGRhdGEgcXVlcmllcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZVJlcG9ydGluZyhcbiAqICAgeyBkZWZhdWx0UGFnZVNpemU6IDUwIH0sXG4gKiAgIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaS9yZXBvcnRpbmcnIH0pXG4gKiApXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhIdHRwQWRhcHRlcnMoXG4gIG9wdGlvbnM6IEh0dHBBZGFwdGVyc09wdGlvbnNcbik6IFJlcG9ydGluZ0ZlYXR1cmU8UmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzPiB7XG4gIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5hcGlCYXNlVXJsIHx8IHR5cGVvZiBvcHRpb25zLmFwaUJhc2VVcmwgIT09ICdzdHJpbmcnIHx8IG9wdGlvbnMuYXBpQmFzZVVybC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwiYXBpQmFzZVVybFwiIGlzIHJlcXVpcmVkIHdoZW4gY29uZmlndXJpbmcgd2l0aEh0dHBBZGFwdGVycygpLiBgICtcbiAgICAgIGBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGJhY2tlbmQgVVJMLCBlLmcuIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaS9yZXBvcnRpbmcnIH0pYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBjbGVhblVybCA9IG9wdGlvbnMuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICByZXR1cm4ge1xuICAgIMm1a2luZDogUmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzLFxuICAgIMm1Y29uZmlnOiB7XG4gICAgICBhcGlCYXNlVXJsOiBjbGVhblVybCxcbiAgICAgIC4uLihvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyA/IHsgbG9va3VwVGltZW91dE1zOiBvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyB9IDoge30pLFxuICAgIH0sXG4gICAgybVwcm92aWRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRyxcbiAgICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgICBhcGlCYXNlVXJsOiBjbGVhblVybCxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5sb29rdXBUaW1lb3V0TXMgPyB7IGxvb2t1cFRpbWVvdXRNczogb3B0aW9ucy5sb29rdXBUaW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBaZXJvLWJhY2tlbmQgc2FuZGJveCBtb2RlIHVzaW5nIGJyb3dzZXIgTG9jYWxTdG9yYWdlIGZvciByZXBvcnQgZGVmaW5pdGlvbnNcbiAqIGFuZCBtb2NrIHJlYWxpc3RpYyBkYXRhc2V0cyBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuICpcbiAqIElkZWFsIGZvciBsb2NhbCBkZXZlbG9wbWVudCwgcHJvdG90eXBpbmcsIGFuZCBvZmZsaW5lIHRlc3Rpbmcgd2l0aG91dCBzcGlubmluZyB1cCBiYWNrZW5kcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZVJlcG9ydGluZyh3aXRoTG9jYWxTdG9yYWdlKCkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMb2NhbFN0b3JhZ2UoKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5Mb2NhbFN0b3JhZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICDJtWtpbmQ6IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqIEFsaWFzIGZvciB3aXRoTG9jYWxTdG9yYWdlICovXG5leHBvcnQgY29uc3Qgd2l0aE1vY2tBZGFwdGVycyA9IHdpdGhMb2NhbFN0b3JhZ2U7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgcHJvdmlkZUJ3YXlzUmVwb3J0KClgIChhbmQgYHByb3ZpZGVSZXBvcnRpbmcoKWApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlcG9ydGluZ0NvbmZpZz4ge1xuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCByZXN1bHQgZ3JpZHMuXG4gICAqIEJXYXlzLWdyaWQgaXMgdGhlIHJlY29tbWVuZGVkIGRlZmF1bHQuIEhvc3QgY2FuIHByb3ZpZGUgYW55IGdyaWQgY29tcG9uZW50LlxuICAgKi9cbiAgZ3JpZENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSBBbmd1bGFyIGNvbXBvbmVudCB0byB1c2UgZm9yIHJlbmRlcmluZyByZXBvcnQgdmlzdWFsIGNoYXJ0cy5cbiAgICogSG9zdCBjYW4gcHJvdmlkZSB0aGVpciBwcmVmZXJyZWQgY2hhcnQgY29tcG9uZW50LCBvciB1c2UgdGhlIGJ1aWx0LWluIFNWRyBjaGFydHMuXG4gICAqL1xuICBjaGFydENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGF0YSBzb3VyY2UgYWRhcHRlci4gKi9cbiAgZGF0YVNvdXJjZUFkYXB0ZXI/OiBUeXBlPFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYXN0ZXIgZGF0YSBwcm92aWRlci4gKi9cbiAgbWFzdGVyRGF0YVByb3ZpZGVyPzogVHlwZTxNYXN0ZXJEYXRhUHJvdmlkZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBlcnNpc3RlbmNlIGFkYXB0ZXIuICovXG4gIHBlcnNpc3RlbmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzY2hlbWEgZGlzY292ZXJ5IGFkYXB0ZXIuICovXG4gIHNjaGVtYURpc2NvdmVyeUFkYXB0ZXI/OiBUeXBlPFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxvb2t1cCBhZGFwdGVyLiAqL1xuICBsb29rdXBBZGFwdGVyPzogVHlwZTxSZXBvcnRMb29rdXBBZGFwdGVyPjtcblxuICAvKipcbiAgICogSW5saW5lIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIG9yIGZhY3RvcnkgZnVuY3Rpb246XG4gICAqIGUuZy4gYHNlc3Npb246ICgpID0+ICh7IGJyYW5jaElkOiBhdXRoLmJyYW5jaElkKCksIHVzZXI6IGF1dGgudXNlcigpIH0pYFxuICAgKi9cbiAgc2Vzc2lvbj86IFNlc3Npb25Db250ZXh0U291cmNlIHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbidzIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIChlLmcuIHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAsIHVzZXJJZDogJ3Vzci0xJyB9KS5cbiAgICovXG4gIHNlc3Npb25Db250ZXh0PzogU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEhvc3QgYXBwbGljYXRpb24gc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRQcm92aWRlcj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj47XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgU2Vzc2lvbkNvbnRleHRTb3VyY2Ugd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRGYWN0b3J5PzogKCkgPT4gU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG59XG5cbi8qKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBhbHRlcm5hdGl2ZSBuYW1pbmcgYWxpYXNlcyAqL1xuZXhwb3J0IHR5cGUgUHJvdmlkZVJlcG9ydGluZ09wdGlvbnMgPSBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zO1xuZXhwb3J0IHR5cGUgUHJvdmlkZUJ3YXlzUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBkZXRlY3QgdGhlIHNpbXBsaWZpZWQgYEJ3YXlzUmVwb3J0Q29uZmlnYCBzaGFwZS5cbiAqL1xuZnVuY3Rpb24gaXNCd2F5c1JlcG9ydENvbmZpZyhcbiAgYXJnOiBCd2F5c1JlcG9ydENvbmZpZyB8IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnNcbik6IGFyZyBpcyBCd2F5c1JlcG9ydENvbmZpZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiZcbiAgICBhcmcgIT09IG51bGwgJiZcbiAgICBbJ3NwRW5kcG9pbnQnLCAndGFibGVzRW5kcG9pbnQnLCAnZXhlY3V0ZUVuZHBvaW50JywgJ2xvb2t1cEVuZHBvaW50JywgJ3JlcG9ydHNFbmRwb2ludCcsICdhcGlzRW5kcG9pbnQnLCAnYXBpRW5kcG9pbnRzJywgJ2NvbXBvbmVudHMnLCAnZ3JpZCcsICdjaGFydCcsICdzZXNzaW9uUHJvdmlkZXInXS5zb21lKGtleSA9PiBrZXkgaW4gYXJnKVxuICApO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBCV2F5cy1SZXBvcnQgbGlicmFyeSB0byB0aGUgQW5ndWxhciBhcHBsaWNhdGlvbi5cbiAqXG4gKiAqKlNpbXBsZSBjb25maWcgKHJlY29tbWVuZGVkIGZvciBtb3N0IHByb2plY3RzKToqKlxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZUJ3YXlzUmVwb3J0KHtcbiAqICAgc3BFbmRwb2ludDogICAgICAnL2FwaS9yZXBvcnRpbmcvcHJvY2VkdXJlcycsXG4gKiAgIHRhYmxlc0VuZHBvaW50OiAgJy9hcGkvcmVwb3J0aW5nL3RhYmxlcycsXG4gKiAgIGV4ZWN1dGVFbmRwb2ludDogJy9hcGkvcmVwb3J0aW5nL2V4ZWN1dGUnLFxuICogICByZXBvcnRzRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9yZXBvcnRzJyxcbiAqICAgY29tcG9uZW50czogWydmb3JtSW5wdXRzJywgJ2FjdGlvbkJ1dHRvbnMnXSxcbiAqICAgc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKCksXG4gKiB9KVxuICogYGBgXG4gKlxuICogKipBZHZhbmNlZCBjb25maWcgKGV4aXN0aW5nIGFkYXB0ZXIgcGF0dGVybik6KipcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByb3ZpZGVCd2F5c1JlcG9ydChcbiAqICAgeyBhcGlCYXNlVXJsOiAnL2FwaS9yZXBvcnRpbmcnIH0sXG4gKiAgIHdpdGhIdHRwQWRhcHRlcnMoeyBhcGlCYXNlVXJsOiAnL2FwaS9yZXBvcnRpbmcnIH0pXG4gKiApXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEVpdGhlciBhIGBCd2F5c1JlcG9ydENvbmZpZ2AgKHNpbXBsZSkgb3IgYFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnNgIChhZHZhbmNlZCkuXG4gKiBAcGFyYW0gZmVhdHVyZXMgLSBPcHRpb25hbCBmZWF0dXJlcyBsaWtlIGB3aXRoSHR0cEFkYXB0ZXJzKC4uLilgIG9yIGB3aXRoTG9jYWxTdG9yYWdlKClgLlxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciB0aGUgcmVwb3J0aW5nIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnQoXG4gIG9wdGlvbnM6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyA9IHt9IGFzIFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMsXG4gIC4uLmZlYXR1cmVzOiBSZXBvcnRpbmdGZWF0dXJlW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgLy8g4pSA4pSA4pSAIFNpbXBsZSBjb25maWcgcGF0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgaWYgKGlzQndheXNSZXBvcnRDb25maWcob3B0aW9ucykpIHtcbiAgICByZXR1cm4gcHJvdmlkZUJ3YXlzUmVwb3J0RnJvbVNpbXBsZUNvbmZpZyhvcHRpb25zKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBBZHZhbmNlZCAvIGxlZ2FjeSBjb25maWcgcGF0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgcmV0dXJuIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21PcHRpb25zKG9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuLyoqXG4gKiBXaXJlcyB1cCBlbmRwb2ludC1iYXNlZCBhZGFwdGVycyBmcm9tIHRoZSBzaW1wbGlmaWVkIGBCd2F5c1JlcG9ydENvbmZpZ2AuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21TaW1wbGVDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUJ3YXlzQ29uZmlnKGNvbmZpZyk7XG5cbiAgY29uc3QgcmVwb3J0aW5nQ29uZmlnOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gICAgLi4uREVGQVVMVF9DT05GSUcsXG4gICAgZGVmYXVsdFBhZ2VTaXplOiBub3JtYWxpemVkLmRlZmF1bHRQYWdlU2l6ZSxcbiAgICBkYXRlRm9ybWF0OiBub3JtYWxpemVkLmRhdGVGb3JtYXQsXG4gICAgbG9va3VwVGltZW91dE1zOiBub3JtYWxpemVkLmxvb2t1cFRpbWVvdXRNcyxcbiAgICBleGVjdXRpb25UaW1lb3V0TXM6IG5vcm1hbGl6ZWQuZXhlY3V0aW9uVGltZW91dE1zLFxuICAgIHRydXN0ZWRBcGlPcmlnaW5zOiBub3JtYWxpemVkLnRydXN0ZWRBcGlPcmlnaW5zLFxuICAgIGVuYWJsZURlc2lnbmVyOiB0cnVlLFxuICAgIGFsbG93ZWRDYXRlZ29yaWVzOiBub3JtYWxpemVkLmFsbG93ZWRDYXRlZ29yaWVzLFxuICAgIGF1dG9QYXJhbWV0ZXI6IG5vcm1hbGl6ZWQuYXV0b1BhcmFtZXRlcixcbiAgICByb3V0ZUJhc2U6IG5vcm1hbGl6ZWQucm91dGVCYXNlLFxuICB9O1xuXG4gIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICAvLyBCdWlsdGluIGNvbXBvbmVudCByZWdpc3RyYXRpb25cbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICAgICAgICByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzKHJlZ2lzdHJ5KTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICd3aGVlbCcsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgaWYgKGFjdGl2ZUVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBhY3RpdmVFbC50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsLmJsdXIoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgcGFzc2l2ZTogdHJ1ZSB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgLy8gQ29yZSBjb25maWd1cmF0aW9uXG4gICAgeyBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLCB1c2VWYWx1ZTogcmVwb3J0aW5nQ29uZmlnIH0sXG5cbiAgICAvLyBFbmRwb2ludCBVUkxzIGZvciB0aGUgYWRhcHRlcnNcbiAgICB7XG4gICAgICBwcm92aWRlOiBCV0FZU19SRVBPUlRfRU5EUE9JTlRTLFxuICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgc3BFbmRwb2ludDogbm9ybWFsaXplZC5zcEVuZHBvaW50LFxuICAgICAgICB0YWJsZXNFbmRwb2ludDogbm9ybWFsaXplZC50YWJsZXNFbmRwb2ludCxcbiAgICAgICAgZXhlY3V0ZUVuZHBvaW50OiBub3JtYWxpemVkLmV4ZWN1dGVFbmRwb2ludCxcbiAgICAgICAgbG9va3VwRW5kcG9pbnQ6IG5vcm1hbGl6ZWQubG9va3VwRW5kcG9pbnQsXG4gICAgICAgIHJlcG9ydHNFbmRwb2ludDogbm9ybWFsaXplZC5yZXBvcnRzRW5kcG9pbnQsXG4gICAgICAgIGFwaXNFbmRwb2ludDogbm9ybWFsaXplZC5hcGlzRW5kcG9pbnQsXG4gICAgICAgIGFwaUVuZHBvaW50czogbm9ybWFsaXplZC5hcGlFbmRwb2ludHMsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAvLyBFbmRwb2ludC1iYXNlZCBhZGFwdGVyc1xuICAgIHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IEVuZHBvaW50U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9LFxuICAgIHsgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHVzZUNsYXNzOiBFbmRwb2ludERhdGFTb3VyY2VBZGFwdGVyIH0sXG4gICAgeyBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLCB1c2VDbGFzczogRW5kcG9pbnRMb29rdXBBZGFwdGVyIH0sXG4gICAgeyBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsIHVzZUNsYXNzOiBFbmRwb2ludE1hc3RlckRhdGFBZGFwdGVyIH0sXG5cbiAgICAvLyBEYXRhYmFzZSBwZXJzaXN0ZW5jZSBpcyB0aGUgZGVmYXVsdCwgdXNpbmcgdGhlIHJlcG9ydGluZyBzZXJ2aWNlIHJlcG9ydHMgcm91dGUuXG4gICAge1xuICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgdXNlQ2xhc3M6IEVuZHBvaW50UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gR3JpZCAvIENoYXJ0IG92ZXJyaWRlc1xuICBpZiAobm9ybWFsaXplZC5ncmlkQ29tcG9uZW50KSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBHUklEX0NPTVBPTkVOVCwgdXNlVmFsdWU6IG5vcm1hbGl6ZWQuZ3JpZENvbXBvbmVudCB9KTtcbiAgfVxuICBpZiAobm9ybWFsaXplZC5jaGFydENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogQ0hBUlRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogbm9ybWFsaXplZC5jaGFydENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIC8vIFNlc3Npb24gY29udGV4dCAvIHByb3ZpZGVyXG4gIGNvbnN0IHNlc3Npb25UYXJnZXQgPSBub3JtYWxpemVkLnNlc3Npb25Qcm92aWRlciA/PyBub3JtYWxpemVkLnNlc3Npb247XG4gIGlmIChzZXNzaW9uVGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBzZXNzaW9uVGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBpc0NsYXNzID0gL15jbGFzc1xccy8udGVzdChGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZXNzaW9uVGFyZ2V0KSk7XG4gICAgICBpZiAoaXNDbGFzcykge1xuICAgICAgICBwcm92aWRlcnMucHVzaChzZXNzaW9uVGFyZ2V0IGFzIFR5cGU8YW55Pik7XG4gICAgICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fUFJPVklERVIsIHVzZUV4aXN0aW5nOiBzZXNzaW9uVGFyZ2V0IGFzIFR5cGU8YW55PiB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogc2Vzc2lvblRhcmdldCBhcyAoKSA9PiBhbnkgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IHNlc3Npb25UYXJnZXQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuXG4vKipcbiAqIE9yaWdpbmFsIGFkdmFuY2VkIGNvbmZpZyBwYXRoIOKAlCB1bmNoYW5nZWQgYmVoYXZpb3IuXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVCd2F5c1JlcG9ydEZyb21PcHRpb25zKFxuICBvcHRpb25zOiBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zLFxuICBmZWF0dXJlczogUmVwb3J0aW5nRmVhdHVyZVtdXG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIGNvbnN0IGNvbmZpZzogUmVwb3J0aW5nQ29uZmlnID0geyAuLi5ERUZBVUxUX0NPTkZJRywgLi4ub3B0aW9ucyB9O1xuICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcbiAgICBpZiAoZmVhdHVyZS7JtWNvbmZpZykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb25maWcsIGZlYXR1cmUuybVjb25maWcpO1xuICAgIH1cbiAgfVxuICBpZiAoY29uZmlnLmFwaUJhc2VVcmwpIHtcbiAgICBjb25maWcuYXBpQmFzZVVybCA9IGNvbmZpZy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXJzOiBQcm92aWRlcltdID0gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VWYWx1ZTogKCkgPT4ge1xuICAgICAgICBjb25zdCByZWdpc3RyeSA9IGluamVjdChDb21wb25lbnRSZWdpc3RyeSk7XG4gICAgICAgIHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMocmVnaXN0cnkpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3doZWVsJyxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICBpZiAoYWN0aXZlRWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGFjdGl2ZUVsLnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlRWwuYmx1cigpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBwYXNzaXZlOiB0cnVlIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgaGFzSHR0cEZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLsm1a2luZCA9PT0gUmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzKTtcbiAgY29uc3QgaGFzTG9jYWxGZWF0dXJlID0gZmVhdHVyZXMuc29tZSgoZikgPT4gZi7JtWtpbmQgPT09IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZSk7XG5cbiAgLy8gQXBwZW5kIGZlYXR1cmUgcHJvdmlkZXJzIChleGNsdWRpbmcgc3RhbmRhbG9uZSBSRVBPUlRJTkdfQ09ORklHIHNvIG1lcmdlZCBjb25maWcgd2lucylcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgY29uc3Qgbm9uQ29uZmlnUHJvdmlkZXJzID0gZmVhdHVyZS7JtXByb3ZpZGVycy5maWx0ZXIoXG4gICAgICAocCkgPT4gISh0eXBlb2YgcCA9PT0gJ29iamVjdCcgJiYgcCAhPT0gbnVsbCAmJiAncHJvdmlkZScgaW4gcCAmJiBwLnByb3ZpZGUgPT09IFJFUE9SVElOR19DT05GSUcpXG4gICAgKTtcbiAgICBwcm92aWRlcnMucHVzaCguLi5ub25Db25maWdQcm92aWRlcnMpO1xuICB9XG5cbiAgLy8gVW5pZmllZCBtZXJnZWQgY29uZmlndXJhdGlvblxuICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVElOR19DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSk7XG5cbiAgLy8gT2ZmbGluZSBhZGFwdGVycyByZXF1aXJlIGFuIGV4cGxpY2l0IGZlYXR1cmU7IG5vcm1hbCBzYXZlcyBhbHdheXMgcmVhY2ggdGhlIGJhY2tlbmQuXG4gIGlmICghaGFzSHR0cEZlYXR1cmUgJiYgIWhhc0xvY2FsRmVhdHVyZSkge1xuICAgIHByb3ZpZGVycy5wdXNoKFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgPz8gSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyID8/IEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgPz8gSHR0cE1hc3RlckRhdGFBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLnNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMubG9va3VwQWRhcHRlciA/PyBIdHRwUmVwb3J0TG9va3VwQWRhcHRlciB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBvdmVycmlkZXNcbiAgaWYgKG9wdGlvbnMuZ3JpZENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogR1JJRF9DT01QT05FTlQsIHVzZVZhbHVlOiBvcHRpb25zLmdyaWRDb21wb25lbnQgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jaGFydENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogQ0hBUlRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogb3B0aW9ucy5jaGFydENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IGFkYXB0ZXIgb3ZlcnJpZGVzIGFsd2F5cyB3aW5cbiAgaWYgKG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmxvb2t1cEFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgfSk7XG4gIH1cblxuICAvLyBEeW5hbWljIFNlc3Npb24gQ29udGV4dCBQcm92aWRlcnNcbiAgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fUFJPVklERVIsIHVzZUNsYXNzOiBvcHRpb25zLnNlc3Npb25Db250ZXh0UHJvdmlkZXIgfSk7XG4gIH1cblxuICAvLyBGbGV4aWJsZSBpbmxpbmUgc2Vzc2lvbiBzeW50YXg6IHNlc3Npb246ICgpID0+ICh7IC4uLiB9KVxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uIGFzICgpID0+IGFueSB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IG9wdGlvbnMuc2Vzc2lvbiB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0RmFjdG9yeSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dEZhY3RvcnkgfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dCB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqIEFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlQndheXNSZXBvcnRpbmcgPSBwcm92aWRlQndheXNSZXBvcnQ7XG5cbi8qKiBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlUmVwb3J0aW5nID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuXG4vKiogU2VtYW50aWMgYWxpYXMgZm9yIEJXYXlzIHJlcG9ydCBwcm92aWRlcnMgKi9cbmV4cG9ydCBjb25zdCBid2F5c1JlcG9ydFByb3ZpZGVycyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcbiJdfQ==
|