bways-report 0.1.4 → 0.1.6

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.
Files changed (42) hide show
  1. package/README.md +75 -35
  2. package/esm2022/lib/core/services/index.mjs +3 -1
  3. package/esm2022/lib/core/services/report-data-discovery.service.mjs +135 -0
  4. package/esm2022/lib/core/services/report-storage.service.mjs +63 -0
  5. package/esm2022/lib/core/tokens/index.mjs +2 -1
  6. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  7. package/esm2022/lib/core/tokens/storage.token.mjs +128 -0
  8. package/esm2022/lib/core/utils/identifier-humanizer.mjs +15 -4
  9. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +17 -8
  10. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +16 -44
  11. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +3 -371
  12. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +69 -1023
  13. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +345 -213
  14. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +39 -32
  15. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +35 -679
  16. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +97 -949
  17. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +112 -585
  18. package/esm2022/lib/features/designer/designer.component.mjs +3 -3
  19. package/esm2022/lib/features/designer/services/designer-state.service.mjs +62 -2
  20. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +115 -19
  21. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +31 -423
  22. package/esm2022/lib/provide-reporting.mjs +20 -5
  23. package/fesm2022/bways-report.mjs +2263 -5342
  24. package/fesm2022/bways-report.mjs.map +1 -1
  25. package/lib/core/services/index.d.ts +2 -0
  26. package/lib/core/services/report-data-discovery.service.d.ts +38 -0
  27. package/lib/core/services/report-storage.service.d.ts +26 -0
  28. package/lib/core/tokens/index.d.ts +2 -0
  29. package/lib/core/tokens/reporting-config.token.d.ts +2 -0
  30. package/lib/core/tokens/storage.token.d.ts +48 -0
  31. package/lib/data-access/adapters/http-lookup.adapter.d.ts +2 -1
  32. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +1 -0
  33. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +5 -1
  34. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  35. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +3 -0
  36. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +31 -1
  37. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +19 -0
  38. package/lib/features/designer/services/designer-state.service.d.ts +12 -1
  39. package/lib/features/runtime/report-grid-bridge.component.d.ts +8 -58
  40. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +3 -0
  41. package/lib/provide-reporting.d.ts +6 -0
  42. package/package.json +9 -1
@@ -20,6 +20,7 @@ const DEFAULT_CONFIG = {
20
20
  dateFormat: 'dd/MM/yyyy',
21
21
  enableDesigner: false,
22
22
  schemaVersion: 1,
23
+ lookupTimeoutMs: 300000,
23
24
  };
24
25
  /**
25
26
  * Kinds of reporting features available in `provideBwaysReport`.
@@ -49,10 +50,17 @@ export function withHttpAdapters(options) {
49
50
  const cleanUrl = options.apiBaseUrl.replace(/\/+$/, '');
50
51
  return {
51
52
  ɵkind: ReportingFeatureKind.HttpAdapters,
53
+ ɵconfig: {
54
+ apiBaseUrl: cleanUrl,
55
+ ...(options.lookupTimeoutMs ? { lookupTimeoutMs: options.lookupTimeoutMs } : {}),
56
+ },
52
57
  ɵproviders: [
53
58
  {
54
59
  provide: REPORTING_CONFIG,
55
- useValue: { apiBaseUrl: cleanUrl },
60
+ useValue: {
61
+ apiBaseUrl: cleanUrl,
62
+ ...(options.lookupTimeoutMs ? { lookupTimeoutMs: options.lookupTimeoutMs } : {}),
63
+ },
56
64
  },
57
65
  {
58
66
  provide: ReportDataSourceAdapter,
@@ -119,11 +127,15 @@ export const withMockAdapters = withLocalStorage;
119
127
  */
120
128
  export function provideBwaysReport(options = {}, ...features) {
121
129
  const config = { ...DEFAULT_CONFIG, ...options };
130
+ for (const feature of features) {
131
+ if (feature.ɵconfig) {
132
+ Object.assign(config, feature.ɵconfig);
133
+ }
134
+ }
122
135
  if (config.apiBaseUrl) {
123
136
  config.apiBaseUrl = config.apiBaseUrl.replace(/\/+$/, '');
124
137
  }
125
138
  const providers = [
126
- { provide: REPORTING_CONFIG, useValue: config },
127
139
  {
128
140
  provide: ENVIRONMENT_INITIALIZER,
129
141
  multi: true,
@@ -135,10 +147,13 @@ export function provideBwaysReport(options = {}, ...features) {
135
147
  ];
136
148
  const hasHttpFeature = features.some((f) => f.ɵkind === ReportingFeatureKind.HttpAdapters);
137
149
  const hasLocalFeature = features.some((f) => f.ɵkind === ReportingFeatureKind.LocalStorage);
138
- // Append feature providers
150
+ // Append feature providers (excluding standalone REPORTING_CONFIG so merged config wins)
139
151
  for (const feature of features) {
140
- providers.push(...feature.ɵproviders);
152
+ const nonConfigProviders = feature.ɵproviders.filter((p) => !(typeof p === 'object' && p !== null && 'provide' in p && p.provide === REPORTING_CONFIG));
153
+ providers.push(...nonConfigProviders);
141
154
  }
155
+ // Unified merged configuration
156
+ providers.push({ provide: REPORTING_CONFIG, useValue: config });
142
157
  // Auto-provision HTTP adapters if apiBaseUrl was supplied as a 1-line option
143
158
  if (!hasHttpFeature && !hasLocalFeature && options.apiBaseUrl) {
144
159
  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 });
@@ -210,4 +225,4 @@ export const provideBwaysReporting = provideBwaysReport;
210
225
  export const provideReporting = provideBwaysReport;
211
226
  /** Semantic alias for BWays report providers */
212
227
  export const bwaysReportProviders = provideBwaysReport;
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixHQUM1QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLG9DQUFvQztBQUNwQyxNQUFNLGNBQWMsR0FBb0I7SUFDdEMsZUFBZSxFQUFFLEVBQUU7SUFDbkIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLEtBQUs7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QUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUM7SUFDakcsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBRXhELHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUVuRCxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydGluZyBsaWJyYXJ5IHJvb3QgcHJvdmlkZXIgZnVuY3Rpb24gYW5kIGZlYXR1cmUgZnVuY3Rpb25zLlxuICpcbiAqIENvbmZpZ3VyZXMgdGhlIGxpYnJhcnksIGl0cyB0b2tlbnMsIGFuZCByZWdpc3RlcnMgYnVpbHQtaW4gcHJpbWl0aXZlcy5cbiAqL1xuXG5pbXBvcnQge1xuICBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIGluamVjdCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBQcm92aWRlcixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDSEFSVF9DT01QT05FTlQsXG4gIEdSSURfQ09NUE9ORU5ULFxuICBSRVBPUlRJTkdfQ09ORklHLFxuICBSZXBvcnRpbmdDb25maWcsXG59IGZyb20gJy4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRQcm92aWRlcixcbiAgU2Vzc2lvbkNvbnRleHRTb3VyY2UsXG59IGZyb20gJy4vY29yZS90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVByb3ZpZGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydExvb2t1cEFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnkgfSBmcm9tICcuL2NvcmUvcmVnaXN0cnkvY29tcG9uZW50LXJlZ2lzdHJ5JztcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMgfSBmcm9tICcuL3ByaW1pdGl2ZXMvcmVnaXN0ZXItYnVpbHRpbnMnO1xuXG4vKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gIGRlZmF1bHRQYWdlU2l6ZTogMjUsXG4gIGRhdGVGb3JtYXQ6ICdkZC9NTS95eXl5JyxcbiAgZW5hYmxlRGVzaWduZXI6IGZhbHNlLFxuICBzY2hlbWFWZXJzaW9uOiAxLFxufTtcblxuLyoqXG4gKiBLaW5kcyBvZiByZXBvcnRpbmcgZmVhdHVyZXMgYXZhaWxhYmxlIGluIGBwcm92aWRlQndheXNSZXBvcnRgLlxuICovXG5leHBvcnQgZW51bSBSZXBvcnRpbmdGZWF0dXJlS2luZCB7XG4gIEh0dHBBZGFwdGVycyA9IDAsXG4gIExvY2FsU3RvcmFnZSA9IDEsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZlYXR1cmUgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGBwcm92aWRlQndheXNSZXBvcnQoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0aW5nRmVhdHVyZTxLaW5kVCBleHRlbmRzIFJlcG9ydGluZ0ZlYXR1cmVLaW5kID0gUmVwb3J0aW5nRmVhdHVyZUtpbmQ+IHtcbiAgybVraW5kOiBLaW5kVDtcbiAgybVwcm92aWRlcnM6IFByb3ZpZGVyW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYnVpbHQtaW4gSFRUUCBhZGFwdGVycyB2aWEgYHdpdGhIdHRwQWRhcHRlcnMoLi4uKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cEFkYXB0ZXJzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBVUkwgZm9yIHRoZSBiYWNrZW5kIHJlcG9ydGluZyBSRVNUIEFQSSBlbmRwb2ludHMuXG4gICAqIEBleGFtcGxlICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZydcbiAgICovXG4gIGFwaUJhc2VVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIGZvciBiYWNrZW5kIGV4ZWN1dGlvbiwgcGVyc2lzdGVuY2UsXG4gKiBzY2hlbWEgZGlzY292ZXJ5LCBsb29rdXAsIGFuZCBtYXN0ZXIgZGF0YSBxdWVyaWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKFxuICogICB7IGRlZmF1bHRQYWdlU2l6ZTogNTAgfSxcbiAqICAgd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlcbiAqIClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBBZGFwdGVycyhcbiAgb3B0aW9uczogSHR0cEFkYXB0ZXJzT3B0aW9uc1xuKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnM+IHtcbiAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFwaUJhc2VVcmwgfHwgdHlwZW9mIG9wdGlvbnMuYXBpQmFzZVVybCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5hcGlCYXNlVXJsLnRyaW0oKSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW2J3YXlzLXJlcG9ydF0gXCJhcGlCYXNlVXJsXCIgaXMgcmVxdWlyZWQgd2hlbiBjb25maWd1cmluZyB3aXRoSHR0cEFkYXB0ZXJzKCkuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgYmFja2VuZCBVUkwsIGUuZy4gd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuVXJsID0gb3B0aW9ucy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gIHJldHVybiB7XG4gICAgybVraW5kOiBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMsXG4gICAgybVwcm92aWRlcnM6IFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRyxcbiAgICAgICAgdXNlVmFsdWU6IHsgYXBpQmFzZVVybDogY2xlYW5VcmwgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBaZXJvLWJhY2tlbmQgc2FuZGJveCBtb2RlIHVzaW5nIGJyb3dzZXIgTG9jYWxTdG9yYWdlIGZvciByZXBvcnQgZGVmaW5pdGlvbnNcbiAqIGFuZCBtb2NrIHJlYWxpc3RpYyBkYXRhc2V0cyBmb3IgcXVlcnkgZXhlY3V0aW9uLlxuICpcbiAqIElkZWFsIGZvciBsb2NhbCBkZXZlbG9wbWVudCwgcHJvdG90eXBpbmcsIGFuZCBvZmZsaW5lIHRlc3Rpbmcgd2l0aG91dCBzcGlubmluZyB1cCBiYWNrZW5kcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJvdmlkZVJlcG9ydGluZyh3aXRoTG9jYWxTdG9yYWdlKCkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMb2NhbFN0b3JhZ2UoKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5Mb2NhbFN0b3JhZ2U+IHtcbiAgcmV0dXJuIHtcbiAgICDJtWtpbmQ6IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqIEFsaWFzIGZvciB3aXRoTG9jYWxTdG9yYWdlICovXG5leHBvcnQgY29uc3Qgd2l0aE1vY2tBZGFwdGVycyA9IHdpdGhMb2NhbFN0b3JhZ2U7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgcHJvdmlkZUJ3YXlzUmVwb3J0KClgIChhbmQgYHByb3ZpZGVSZXBvcnRpbmcoKWApLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPFJlcG9ydGluZ0NvbmZpZz4ge1xuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCByZXN1bHQgZ3JpZHMuXG4gICAqIEJXYXlzLWdyaWQgaXMgdGhlIHJlY29tbWVuZGVkIGRlZmF1bHQuIEhvc3QgY2FuIHByb3ZpZGUgYW55IGdyaWQgY29tcG9uZW50LlxuICAgKi9cbiAgZ3JpZENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSBBbmd1bGFyIGNvbXBvbmVudCB0byB1c2UgZm9yIHJlbmRlcmluZyByZXBvcnQgdmlzdWFsIGNoYXJ0cy5cbiAgICogSG9zdCBjYW4gcHJvdmlkZSB0aGVpciBwcmVmZXJyZWQgY2hhcnQgY29tcG9uZW50LCBvciB1c2UgdGhlIGJ1aWx0LWluIFNWRyBjaGFydHMuXG4gICAqL1xuICBjaGFydENvbXBvbmVudD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGF0YSBzb3VyY2UgYWRhcHRlci4gKi9cbiAgZGF0YVNvdXJjZUFkYXB0ZXI/OiBUeXBlPFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYXN0ZXIgZGF0YSBwcm92aWRlci4gKi9cbiAgbWFzdGVyRGF0YVByb3ZpZGVyPzogVHlwZTxNYXN0ZXJEYXRhUHJvdmlkZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBlcnNpc3RlbmNlIGFkYXB0ZXIuICovXG4gIHBlcnNpc3RlbmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzY2hlbWEgZGlzY292ZXJ5IGFkYXB0ZXIuICovXG4gIHNjaGVtYURpc2NvdmVyeUFkYXB0ZXI/OiBUeXBlPFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxvb2t1cCBhZGFwdGVyLiAqL1xuICBsb29rdXBBZGFwdGVyPzogVHlwZTxSZXBvcnRMb29rdXBBZGFwdGVyPjtcblxuICAvKipcbiAgICogSW5saW5lIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIG9yIGZhY3RvcnkgZnVuY3Rpb246XG4gICAqIGUuZy4gYHNlc3Npb246ICgpID0+ICh7IGJyYW5jaElkOiBhdXRoLmJyYW5jaElkKCksIHVzZXI6IGF1dGgudXNlcigpIH0pYFxuICAgKi9cbiAgc2Vzc2lvbj86IFNlc3Npb25Db250ZXh0U291cmNlIHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbidzIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIChlLmcuIHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAsIHVzZXJJZDogJ3Vzci0xJyB9KS5cbiAgICovXG4gIHNlc3Npb25Db250ZXh0PzogU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEhvc3QgYXBwbGljYXRpb24gc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRQcm92aWRlcj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj47XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgU2Vzc2lvbkNvbnRleHRTb3VyY2Ugd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHRGYWN0b3J5PzogKCkgPT4gU2Vzc2lvbkNvbnRleHRTb3VyY2U7XG59XG5cbi8qKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBhbHRlcm5hdGl2ZSBuYW1pbmcgYWxpYXNlcyAqL1xuZXhwb3J0IHR5cGUgUHJvdmlkZVJlcG9ydGluZ09wdGlvbnMgPSBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zO1xuZXhwb3J0IHR5cGUgUHJvdmlkZUJ3YXlzUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIEJXYXlzLVJlcG9ydCBsaWJyYXJ5IHRvIHRoZSBBbmd1bGFyIGFwcGxpY2F0aW9uLlxuICpcbiAqIFN1cHBvcnRzIG1vZGVybiBpZGlvbWF0aWMgZmVhdHVyZSBmdW5jdGlvbnMsIGUuZy46XG4gKiBgcHJvdmlkZVJlcG9ydGluZyh7IGFwaUJhc2VVcmw6ICcvYXBpL3JlcG9ydGluZycgfSlgXG4gKiBvciB6ZXJvLWJhY2tlbmQgc2FuZGJveCBtb2RlOlxuICogYHByb3ZpZGVSZXBvcnRpbmcod2l0aExvY2FsU3RvcmFnZSgpKWBcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gYW5kIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25zLlxuICogQHBhcmFtIGZlYXR1cmVzIC0gT3B0aW9uYWwgZmVhdHVyZXMgbGlrZSBgd2l0aEh0dHBBZGFwdGVycyguLi4pYCBvciBgd2l0aExvY2FsU3RvcmFnZSgpYC5cbiAqIEByZXR1cm5zIEVudmlyb25tZW50IHByb3ZpZGVycyBmb3IgdGhlIHJlcG9ydGluZyBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUJ3YXlzUmVwb3J0KFxuICBvcHRpb25zOiBQcm92aWRlQndheXNSZXBvcnRPcHRpb25zID0ge30sXG4gIC4uLmZlYXR1cmVzOiBSZXBvcnRpbmdGZWF0dXJlW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgY29uc3QgY29uZmlnOiBSZXBvcnRpbmdDb25maWcgPSB7IC4uLkRFRkFVTFRfQ09ORklHLCAuLi5vcHRpb25zIH07XG4gIGlmIChjb25maWcuYXBpQmFzZVVybCkge1xuICAgIGNvbmZpZy5hcGlCYXNlVXJsID0gY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIH1cblxuICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAgeyBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZVZhbHVlOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5qZWN0KENvbXBvbmVudFJlZ2lzdHJ5KTtcbiAgICAgICAgcmVnaXN0ZXJCdWlsdGluQ29tcG9uZW50cyhyZWdpc3RyeSk7XG4gICAgICB9LFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgaGFzSHR0cEZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLsm1a2luZCA9PT0gUmVwb3J0aW5nRmVhdHVyZUtpbmQuSHR0cEFkYXB0ZXJzKTtcbiAgY29uc3QgaGFzTG9jYWxGZWF0dXJlID0gZmVhdHVyZXMuc29tZSgoZikgPT4gZi7JtWtpbmQgPT09IFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZSk7XG5cbiAgLy8gQXBwZW5kIGZlYXR1cmUgcHJvdmlkZXJzXG4gIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuICAgIHByb3ZpZGVycy5wdXNoKC4uLmZlYXR1cmUuybVwcm92aWRlcnMpO1xuICB9XG5cbiAgLy8gQXV0by1wcm92aXNpb24gSFRUUCBhZGFwdGVycyBpZiBhcGlCYXNlVXJsIHdhcyBzdXBwbGllZCBhcyBhIDEtbGluZSBvcHRpb25cbiAgaWYgKCFoYXNIdHRwRmVhdHVyZSAmJiAhaGFzTG9jYWxGZWF0dXJlICYmIG9wdGlvbnMuYXBpQmFzZVVybCkge1xuICAgIHByb3ZpZGVycy5wdXNoKFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgPz8gSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyID8/IEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgPz8gSHR0cE1hc3RlckRhdGFBZGFwdGVyIH0sXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLnNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMubG9va3VwQWRhcHRlciA/PyBIdHRwUmVwb3J0TG9va3VwQWRhcHRlciB9XG4gICAgKTtcbiAgfSBlbHNlIGlmICghaGFzSHR0cEZlYXR1cmUgJiYgIWhhc0xvY2FsRmVhdHVyZSkge1xuICAgIC8vIElmIG5vIGJhY2tlbmQgYXBpQmFzZVVybCBhbmQgbm8gZmVhdHVyZSBwYXNzZWQsIGZhbGxiYWNrIHRvIHplcm8tYmFja2VuZCBzYW5kYm94IG1vZGVcbiAgICBwcm92aWRlcnMucHVzaChcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogb3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIgPz8gTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLmRhdGFTb3VyY2VBZGFwdGVyID8/IE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLnNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogb3B0aW9ucy5sb29rdXBBZGFwdGVyID8/IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLFxuICAgICAgICB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgPz8gSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvLyBDb21wb25lbnQgb3ZlcnJpZGVzXG4gIGlmIChvcHRpb25zLmdyaWRDb21wb25lbnQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IEdSSURfQ09NUE9ORU5ULCB1c2VWYWx1ZTogb3B0aW9ucy5ncmlkQ29tcG9uZW50IH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuY2hhcnRDb21wb25lbnQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IENIQVJUX0NPTVBPTkVOVCwgdXNlVmFsdWU6IG9wdGlvbnMuY2hhcnRDb21wb25lbnQgfSk7XG4gIH1cblxuICAvLyBFeHBsaWNpdCBhZGFwdGVyIG92ZXJyaWRlcyBhbHdheXMgd2luXG4gIGlmIChvcHRpb25zLmRhdGFTb3VyY2VBZGFwdGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IE1hc3RlckRhdGFQcm92aWRlciwgdXNlQ2xhc3M6IG9wdGlvbnMubWFzdGVyRGF0YVByb3ZpZGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnNjaGVtYURpc2NvdmVyeUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLnNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5sb29rdXBBZGFwdGVyKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5sb29rdXBBZGFwdGVyIH0pO1xuICB9XG5cbiAgLy8gRHluYW1pYyBTZXNzaW9uIENvbnRleHQgUHJvdmlkZXJzXG4gIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLCB1c2VDbGFzczogb3B0aW9ucy5zZXNzaW9uQ29udGV4dFByb3ZpZGVyIH0pO1xuICB9XG5cbiAgLy8gRmxleGlibGUgaW5saW5lIHNlc3Npb24gc3ludGF4OiBzZXNzaW9uOiAoKSA9PiAoeyAuLi4gfSlcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnNlc3Npb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZUZhY3Rvcnk6IG9wdGlvbnMuc2Vzc2lvbiBhcyAoKSA9PiBhbnkgfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZVZhbHVlOiBvcHRpb25zLnNlc3Npb24gfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dEZhY3RvcnkpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHVzZUZhY3Rvcnk6IG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRGYWN0b3J5IH0pO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IG9wdGlvbnMuc2Vzc2lvbkNvbnRleHQgfSk7XG4gIH1cblxuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVycyk7XG59XG5cbi8qKiBBbGlhcyBmb3IgcHJvdmlkZUJ3YXlzUmVwb3J0ICovXG5leHBvcnQgY29uc3QgcHJvdmlkZUJ3YXlzUmVwb3J0aW5nID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuXG4vKiogQmFja3dhcmQtY29tcGF0aWJsZSBhbGlhcyBmb3IgcHJvdmlkZUJ3YXlzUmVwb3J0ICovXG5leHBvcnQgY29uc3QgcHJvdmlkZVJlcG9ydGluZyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcblxuLyoqIFNlbWFudGljIGFsaWFzIGZvciBCV2F5cyByZXBvcnQgcHJvdmlkZXJzICovXG5leHBvcnQgY29uc3QgYndheXNSZXBvcnRQcm92aWRlcnMgPSBwcm92aWRlQndheXNSZXBvcnQ7XG4iXX0=
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9wcm92aWRlLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGdCQUFnQixHQUVqQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsdUJBQXVCLEdBR3hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxxQkFBcUIsRUFDckIsb0NBQW9DLEVBQ3BDLDJCQUEyQixHQUM1QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNFLG9DQUFvQztBQUNwQyxNQUFNLGNBQWMsR0FBb0I7SUFDdEMsZUFBZSxFQUFFLEVBQUU7SUFDbkIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLEtBQUs7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LElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDO0FBRXhELHVEQUF1RDtBQUN2RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQUVuRCxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydGluZyBsaWJyYXJ5IHJvb3QgcHJvdmlkZXIgZnVuY3Rpb24gYW5kIGZlYXR1cmUgZnVuY3Rpb25zLlxuICpcbiAqIENvbmZpZ3VyZXMgdGhlIGxpYnJhcnksIGl0cyB0b2tlbnMsIGFuZCByZWdpc3RlcnMgYnVpbHQtaW4gcHJpbWl0aXZlcy5cbiAqL1xuXG5pbXBvcnQge1xuICBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIGluamVjdCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBQcm92aWRlcixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDSEFSVF9DT01QT05FTlQsXG4gIEdSSURfQ09NUE9ORU5ULFxuICBSRVBPUlRJTkdfQ09ORklHLFxuICBSZXBvcnRpbmdDb25maWcsXG59IGZyb20gJy4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRQcm92aWRlcixcbiAgU2Vzc2lvbkNvbnRleHRTb3VyY2UsXG59IGZyb20gJy4vY29yZS90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVByb3ZpZGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvbWFzdGVyLWRhdGEucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydExvb2t1cEFkYXB0ZXIgfSBmcm9tICcuL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHtcbiAgSHR0cFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnkgfSBmcm9tICcuL2NvcmUvcmVnaXN0cnkvY29tcG9uZW50LXJlZ2lzdHJ5JztcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbHRpbkNvbXBvbmVudHMgfSBmcm9tICcuL3ByaW1pdGl2ZXMvcmVnaXN0ZXItYnVpbHRpbnMnO1xuXG4vKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcy4gKi9cbmNvbnN0IERFRkFVTFRfQ09ORklHOiBSZXBvcnRpbmdDb25maWcgPSB7XG4gIGRlZmF1bHRQYWdlU2l6ZTogMjUsXG4gIGRhdGVGb3JtYXQ6ICdkZC9NTS95eXl5JyxcbiAgZW5hYmxlRGVzaWduZXI6IGZhbHNlLFxuICBzY2hlbWFWZXJzaW9uOiAxLFxuICBsb29rdXBUaW1lb3V0TXM6IDMwMDAwMCxcbn07XG5cbi8qKlxuICogS2luZHMgb2YgcmVwb3J0aW5nIGZlYXR1cmVzIGF2YWlsYWJsZSBpbiBgcHJvdmlkZUJ3YXlzUmVwb3J0YC5cbiAqL1xuZXhwb3J0IGVudW0gUmVwb3J0aW5nRmVhdHVyZUtpbmQge1xuICBIdHRwQWRhcHRlcnMgPSAwLFxuICBMb2NhbFN0b3JhZ2UgPSAxLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmZWF0dXJlIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBgcHJvdmlkZUJ3YXlzUmVwb3J0KC4uLilgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGluZ0ZlYXR1cmU8S2luZFQgZXh0ZW5kcyBSZXBvcnRpbmdGZWF0dXJlS2luZCA9IFJlcG9ydGluZ0ZlYXR1cmVLaW5kPiB7XG4gIMm1a2luZDogS2luZFQ7XG4gIMm1Y29uZmlnPzogUGFydGlhbDxSZXBvcnRpbmdDb25maWc+O1xuICDJtXByb3ZpZGVyczogUHJvdmlkZXJbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIHZpYSBgd2l0aEh0dHBBZGFwdGVycyguLi4pYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQWRhcHRlcnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBmb3IgdGhlIGJhY2tlbmQgcmVwb3J0aW5nIFJFU1QgQVBJIGVuZHBvaW50cy5cbiAgICogQGV4YW1wbGUgJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGkvcmVwb3J0aW5nJ1xuICAgKi9cbiAgYXBpQmFzZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGRhdGFiYXNlIGxvb2t1cCBxdWVyaWVzLlxuICAgKiBEZWZhdWx0cyB0byAzMDAwMDBtcyAoNSBtaW51dGVzKS5cbiAgICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBidWlsdC1pbiBIVFRQIGFkYXB0ZXJzIGZvciBiYWNrZW5kIGV4ZWN1dGlvbiwgcGVyc2lzdGVuY2UsXG4gKiBzY2hlbWEgZGlzY292ZXJ5LCBsb29rdXAsIGFuZCBtYXN0ZXIgZGF0YSBxdWVyaWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKFxuICogICB7IGRlZmF1bHRQYWdlU2l6ZTogNTAgfSxcbiAqICAgd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlcbiAqIClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEh0dHBBZGFwdGVycyhcbiAgb3B0aW9uczogSHR0cEFkYXB0ZXJzT3B0aW9uc1xuKTogUmVwb3J0aW5nRmVhdHVyZTxSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnM+IHtcbiAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmFwaUJhc2VVcmwgfHwgdHlwZW9mIG9wdGlvbnMuYXBpQmFzZVVybCAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5hcGlCYXNlVXJsLnRyaW0oKSA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgW2J3YXlzLXJlcG9ydF0gXCJhcGlCYXNlVXJsXCIgaXMgcmVxdWlyZWQgd2hlbiBjb25maWd1cmluZyB3aXRoSHR0cEFkYXB0ZXJzKCkuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgYmFja2VuZCBVUkwsIGUuZy4gd2l0aEh0dHBBZGFwdGVycyh7IGFwaUJhc2VVcmw6ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpL3JlcG9ydGluZycgfSlgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsZWFuVXJsID0gb3B0aW9ucy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gIHJldHVybiB7XG4gICAgybVraW5kOiBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMsXG4gICAgybVjb25maWc6IHtcbiAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgLi4uKG9wdGlvbnMubG9va3VwVGltZW91dE1zID8geyBsb29rdXBUaW1lb3V0TXM6IG9wdGlvbnMubG9va3VwVGltZW91dE1zIH0gOiB7fSksXG4gICAgfSxcbiAgICDJtXByb3ZpZGVyczogW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSRVBPUlRJTkdfQ09ORklHLFxuICAgICAgICB1c2VWYWx1ZToge1xuICAgICAgICAgIGFwaUJhc2VVcmw6IGNsZWFuVXJsLFxuICAgICAgICAgIC4uLihvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyA/IHsgbG9va3VwVGltZW91dE1zOiBvcHRpb25zLmxvb2t1cFRpbWVvdXRNcyB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLFxuICAgICAgICB1c2VDbGFzczogSHR0cE1hc3RlckRhdGFBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKipcbiAqIFplcm8tYmFja2VuZCBzYW5kYm94IG1vZGUgdXNpbmcgYnJvd3NlciBMb2NhbFN0b3JhZ2UgZm9yIHJlcG9ydCBkZWZpbml0aW9uc1xuICogYW5kIG1vY2sgcmVhbGlzdGljIGRhdGFzZXRzIGZvciBxdWVyeSBleGVjdXRpb24uXG4gKlxuICogSWRlYWwgZm9yIGxvY2FsIGRldmVsb3BtZW50LCBwcm90b3R5cGluZywgYW5kIG9mZmxpbmUgdGVzdGluZyB3aXRob3V0IHNwaW5uaW5nIHVwIGJhY2tlbmRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwcm92aWRlUmVwb3J0aW5nKHdpdGhMb2NhbFN0b3JhZ2UoKSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aExvY2FsU3RvcmFnZSgpOiBSZXBvcnRpbmdGZWF0dXJlPFJlcG9ydGluZ0ZlYXR1cmVLaW5kLkxvY2FsU3RvcmFnZT4ge1xuICByZXR1cm4ge1xuICAgIMm1a2luZDogUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlLFxuICAgIMm1cHJvdmlkZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IExvY2FsU3RvcmFnZVJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgICB1c2VDbGFzczogTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG4vKiogQWxpYXMgZm9yIHdpdGhMb2NhbFN0b3JhZ2UgKi9cbmV4cG9ydCBjb25zdCB3aXRoTW9ja0FkYXB0ZXJzID0gd2l0aExvY2FsU3RvcmFnZTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBwcm92aWRlQndheXNSZXBvcnQoKWAgKGFuZCBgcHJvdmlkZVJlcG9ydGluZygpYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8UmVwb3J0aW5nQ29uZmlnPiB7XG4gIC8qKlxuICAgKiBUaGUgQW5ndWxhciBjb21wb25lbnQgdG8gdXNlIGZvciByZW5kZXJpbmcgcmVwb3J0IHJlc3VsdCBncmlkcy5cbiAgICogQldheXMtZ3JpZCBpcyB0aGUgcmVjb21tZW5kZWQgZGVmYXVsdC4gSG9zdCBjYW4gcHJvdmlkZSBhbnkgZ3JpZCBjb21wb25lbnQuXG4gICAqL1xuICBncmlkQ29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIEFuZ3VsYXIgY29tcG9uZW50IHRvIHVzZSBmb3IgcmVuZGVyaW5nIHJlcG9ydCB2aXN1YWwgY2hhcnRzLlxuICAgKiBIb3N0IGNhbiBwcm92aWRlIHRoZWlyIHByZWZlcnJlZCBjaGFydCBjb21wb25lbnQsIG9yIHVzZSB0aGUgYnVpbHQtaW4gU1ZHIGNoYXJ0cy5cbiAgICovXG4gIGNoYXJ0Q29tcG9uZW50PzogVHlwZTx1bmtub3duPjtcblxuICAvKiogSG9zdCdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkYXRhIHNvdXJjZSBhZGFwdGVyLiAqL1xuICBkYXRhU291cmNlQWRhcHRlcj86IFR5cGU8UmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hc3RlciBkYXRhIHByb3ZpZGVyLiAqL1xuICBtYXN0ZXJEYXRhUHJvdmlkZXI/OiBUeXBlPE1hc3RlckRhdGFQcm92aWRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGVyc2lzdGVuY2UgYWRhcHRlci4gKi9cbiAgcGVyc2lzdGVuY2VBZGFwdGVyPzogVHlwZTxSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXI+O1xuXG4gIC8qKiBIb3N0J3MgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNjaGVtYSBkaXNjb3ZlcnkgYWRhcHRlci4gKi9cbiAgc2NoZW1hRGlzY292ZXJ5QWRhcHRlcj86IFR5cGU8UmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcj47XG5cbiAgLyoqIEhvc3QncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbG9va3VwIGFkYXB0ZXIuICovXG4gIGxvb2t1cEFkYXB0ZXI/OiBUeXBlPFJlcG9ydExvb2t1cEFkYXB0ZXI+O1xuXG4gIC8qKlxuICAgKiBJbmxpbmUgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgb3IgZmFjdG9yeSBmdW5jdGlvbjpcbiAgICogZS5nLiBgc2Vzc2lvbjogKCkgPT4gKHsgYnJhbmNoSWQ6IGF1dGguYnJhbmNoSWQoKSwgdXNlcjogYXV0aC51c2VyKCkgfSlgXG4gICAqL1xuICBzZXNzaW9uPzogU2Vzc2lvbkNvbnRleHRTb3VyY2UgfCAoKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXG4gIC8qKlxuICAgKiBIb3N0IGFwcGxpY2F0aW9uJ3Mgc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4geyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCwgdXNlcklkOiAndXNyLTEnIH0pLlxuICAgKi9cbiAgc2Vzc2lvbkNvbnRleHQ/OiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcblxuICAvKipcbiAgICogSG9zdCBhcHBsaWNhdGlvbiBzZXJ2aWNlIGNsYXNzIGltcGxlbWVudGluZyBgU2Vzc2lvbkNvbnRleHRQcm92aWRlcmAuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dFByb3ZpZGVyPzogVHlwZTxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPjtcblxuICAvKipcbiAgICogRmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBTZXNzaW9uQ29udGV4dFNvdXJjZSB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGNvbnRleHQuXG4gICAqL1xuICBzZXNzaW9uQ29udGV4dEZhY3Rvcnk/OiAoKSA9PiBTZXNzaW9uQ29udGV4dFNvdXJjZTtcbn1cblxuLyoqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIGFsdGVybmF0aXZlIG5hbWluZyBhbGlhc2VzICovXG5leHBvcnQgdHlwZSBQcm92aWRlUmVwb3J0aW5nT3B0aW9ucyA9IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnM7XG5leHBvcnQgdHlwZSBQcm92aWRlQndheXNSZXBvcnRpbmdPcHRpb25zID0gUHJvdmlkZUJ3YXlzUmVwb3J0T3B0aW9ucztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgQldheXMtUmVwb3J0IGxpYnJhcnkgdG8gdGhlIEFuZ3VsYXIgYXBwbGljYXRpb24uXG4gKlxuICogU3VwcG9ydHMgbW9kZXJuIGlkaW9tYXRpYyBmZWF0dXJlIGZ1bmN0aW9ucywgZS5nLjpcbiAqIGBwcm92aWRlUmVwb3J0aW5nKHsgYXBpQmFzZVVybDogJy9hcGkvcmVwb3J0aW5nJyB9KWBcbiAqIG9yIHplcm8tYmFja2VuZCBzYW5kYm94IG1vZGU6XG4gKiBgcHJvdmlkZVJlcG9ydGluZyh3aXRoTG9jYWxTdG9yYWdlKCkpYFxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBhbmQgYWRhcHRlciBpbXBsZW1lbnRhdGlvbnMuXG4gKiBAcGFyYW0gZmVhdHVyZXMgLSBPcHRpb25hbCBmZWF0dXJlcyBsaWtlIGB3aXRoSHR0cEFkYXB0ZXJzKC4uLilgIG9yIGB3aXRoTG9jYWxTdG9yYWdlKClgLlxuICogQHJldHVybnMgRW52aXJvbm1lbnQgcHJvdmlkZXJzIGZvciB0aGUgcmVwb3J0aW5nIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQndheXNSZXBvcnQoXG4gIG9wdGlvbnM6IFByb3ZpZGVCd2F5c1JlcG9ydE9wdGlvbnMgPSB7fSxcbiAgLi4uZmVhdHVyZXM6IFJlcG9ydGluZ0ZlYXR1cmVbXVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICBjb25zdCBjb25maWc6IFJlcG9ydGluZ0NvbmZpZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLm9wdGlvbnMgfTtcbiAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgaWYgKGZlYXR1cmUuybVjb25maWcpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY29uZmlnLCBmZWF0dXJlLsm1Y29uZmlnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbmZpZy5hcGlCYXNlVXJsKSB7XG4gICAgY29uZmlnLmFwaUJhc2VVcmwgPSBjb25maWcuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICAgICAgICByZWdpc3RlckJ1aWx0aW5Db21wb25lbnRzKHJlZ2lzdHJ5KTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCBoYXNIdHRwRmVhdHVyZSA9IGZlYXR1cmVzLnNvbWUoKGYpID0+IGYuybVraW5kID09PSBSZXBvcnRpbmdGZWF0dXJlS2luZC5IdHRwQWRhcHRlcnMpO1xuICBjb25zdCBoYXNMb2NhbEZlYXR1cmUgPSBmZWF0dXJlcy5zb21lKChmKSA9PiBmLsm1a2luZCA9PT0gUmVwb3J0aW5nRmVhdHVyZUtpbmQuTG9jYWxTdG9yYWdlKTtcblxuICAvLyBBcHBlbmQgZmVhdHVyZSBwcm92aWRlcnMgKGV4Y2x1ZGluZyBzdGFuZGFsb25lIFJFUE9SVElOR19DT05GSUcgc28gbWVyZ2VkIGNvbmZpZyB3aW5zKVxuICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcbiAgICBjb25zdCBub25Db25maWdQcm92aWRlcnMgPSBmZWF0dXJlLsm1cHJvdmlkZXJzLmZpbHRlcihcbiAgICAgIChwKSA9PiAhKHR5cGVvZiBwID09PSAnb2JqZWN0JyAmJiBwICE9PSBudWxsICYmICdwcm92aWRlJyBpbiBwICYmIHAucHJvdmlkZSA9PT0gUkVQT1JUSU5HX0NPTkZJRylcbiAgICApO1xuICAgIHByb3ZpZGVycy5wdXNoKC4uLm5vbkNvbmZpZ1Byb3ZpZGVycyk7XG4gIH1cblxuICAvLyBVbmlmaWVkIG1lcmdlZCBjb25maWd1cmF0aW9uXG4gIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUSU5HX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9KTtcblxuICAvLyBBdXRvLXByb3Zpc2lvbiBIVFRQIGFkYXB0ZXJzIGlmIGFwaUJhc2VVcmwgd2FzIHN1cHBsaWVkIGFzIGEgMS1saW5lIG9wdGlvblxuICBpZiAoIWhhc0h0dHBGZWF0dXJlICYmICFoYXNMb2NhbEZlYXR1cmUgJiYgb3B0aW9ucy5hcGlCYXNlVXJsKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goXG4gICAgICB7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciA/PyBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIgPz8gSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIgfSxcbiAgICAgIHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9LFxuICAgICAgeyBwcm92aWRlOiBSZXBvcnRMb29rdXBBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5sb29rdXBBZGFwdGVyID8/IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKCFoYXNIdHRwRmVhdHVyZSAmJiAhaGFzTG9jYWxGZWF0dXJlKSB7XG4gICAgLy8gSWYgbm8gYmFja2VuZCBhcGlCYXNlVXJsIGFuZCBubyBmZWF0dXJlIHBhc3NlZCwgZmFsbGJhY2sgdG8gemVyby1iYWNrZW5kIHNhbmRib3ggbW9kZVxuICAgIHByb3ZpZGVycy5wdXNoKFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLnBlcnNpc3RlbmNlQWRhcHRlciA/PyBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIgPz8gTW9ja1JlcG9ydERhdGFTb3VyY2VBZGFwdGVyLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgICAgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciA/PyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgPz8gSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBNYXN0ZXJEYXRhUHJvdmlkZXIsXG4gICAgICAgIHVzZUNsYXNzOiBvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlciA/PyBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIENvbXBvbmVudCBvdmVycmlkZXNcbiAgaWYgKG9wdGlvbnMuZ3JpZENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogR1JJRF9DT01QT05FTlQsIHVzZVZhbHVlOiBvcHRpb25zLmdyaWRDb21wb25lbnQgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jaGFydENvbXBvbmVudCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogQ0hBUlRfQ09NUE9ORU5ULCB1c2VWYWx1ZTogb3B0aW9ucy5jaGFydENvbXBvbmVudCB9KTtcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IGFkYXB0ZXIgb3ZlcnJpZGVzIGFsd2F5cyB3aW5cbiAgaWYgKG9wdGlvbnMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB1c2VDbGFzczogb3B0aW9ucy5kYXRhU291cmNlQWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLm1hc3RlckRhdGFQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogTWFzdGVyRGF0YVByb3ZpZGVyLCB1c2VDbGFzczogb3B0aW9ucy5tYXN0ZXJEYXRhUHJvdmlkZXIgfSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMucGVyc2lzdGVuY2VBZGFwdGVyIH0pO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciwgdXNlQ2xhc3M6IG9wdGlvbnMuc2NoZW1hRGlzY292ZXJ5QWRhcHRlciB9KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmxvb2t1cEFkYXB0ZXIpIHtcbiAgICBwcm92aWRlcnMucHVzaCh7IHByb3ZpZGU6IFJlcG9ydExvb2t1cEFkYXB0ZXIsIHVzZUNsYXNzOiBvcHRpb25zLmxvb2t1cEFkYXB0ZXIgfSk7XG4gIH1cblxuICAvLyBEeW5hbWljIFNlc3Npb24gQ29udGV4dCBQcm92aWRlcnNcbiAgaWYgKG9wdGlvbnMuc2Vzc2lvbkNvbnRleHRQcm92aWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fUFJPVklERVIsIHVzZUNsYXNzOiBvcHRpb25zLnNlc3Npb25Db250ZXh0UHJvdmlkZXIgfSk7XG4gIH1cblxuICAvLyBGbGV4aWJsZSBpbmxpbmUgc2Vzc2lvbiBzeW50YXg6IHNlc3Npb246ICgpID0+ICh7IC4uLiB9KVxuICBpZiAodHlwZW9mIG9wdGlvbnMuc2Vzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uIGFzICgpID0+IGFueSB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlVmFsdWU6IG9wdGlvbnMuc2Vzc2lvbiB9KTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnNlc3Npb25Db250ZXh0RmFjdG9yeSkge1xuICAgIHByb3ZpZGVycy5wdXNoKHsgcHJvdmlkZTogUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwgdXNlRmFjdG9yeTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dEZhY3RvcnkgfSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5zZXNzaW9uQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJvdmlkZXJzLnB1c2goeyBwcm92aWRlOiBSRVBPUlRfU0VTU0lPTl9DT05URVhULCB1c2VWYWx1ZTogb3B0aW9ucy5zZXNzaW9uQ29udGV4dCB9KTtcbiAgfVxuXG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMocHJvdmlkZXJzKTtcbn1cblxuLyoqIEFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlQndheXNSZXBvcnRpbmcgPSBwcm92aWRlQndheXNSZXBvcnQ7XG5cbi8qKiBCYWNrd2FyZC1jb21wYXRpYmxlIGFsaWFzIGZvciBwcm92aWRlQndheXNSZXBvcnQgKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlUmVwb3J0aW5nID0gcHJvdmlkZUJ3YXlzUmVwb3J0O1xuXG4vKiogU2VtYW50aWMgYWxpYXMgZm9yIEJXYXlzIHJlcG9ydCBwcm92aWRlcnMgKi9cbmV4cG9ydCBjb25zdCBid2F5c1JlcG9ydFByb3ZpZGVycyA9IHByb3ZpZGVCd2F5c1JlcG9ydDtcbiJdfQ==