@veloceapps/sdk 8.0.0-99 → 9.0.0-0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. package/cms/README.md +0 -20
  2. package/cms/cms.actions.d.ts +9 -1
  3. package/cms/components/preview/preview.component.d.ts +2 -3
  4. package/cms/components/preview/preview.types.d.ts +4 -0
  5. package/cms/index.d.ts +1 -0
  6. package/cms/modules/runtime/services/runtime.service.d.ts +1 -1
  7. package/cms/services/index.d.ts +0 -1
  8. package/cms/services/resources.service.d.ts +2 -0
  9. package/cms/types/index.d.ts +0 -1
  10. package/cms/utils/element-metadata-worker.d.ts +11 -0
  11. package/cms/utils/elements-resolver.d.ts +0 -2
  12. package/cms/utils/index.d.ts +3 -0
  13. package/cms/utils/transpilation-worker.d.ts +13 -0
  14. package/cms/vendor-map.d.ts +21 -18
  15. package/core/README.md +20 -0
  16. package/core/modules/configuration/configuration.module.d.ts +2 -1
  17. package/core/modules/configuration/helpers.d.ts +2 -1
  18. package/core/modules/configuration/index.d.ts +1 -1
  19. package/core/modules/configuration/services/configuration-state.service.d.ts +54 -0
  20. package/core/modules/configuration/services/configuration.service.d.ts +6 -6
  21. package/core/modules/configuration/types/configuration.types.d.ts +4 -0
  22. package/core/modules/flow-configuration/flow-configuration.module.d.ts +2 -1
  23. package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +5 -0
  24. package/core/services/context.service.d.ts +2 -0
  25. package/core/services/flow-info.service.d.ts +29 -0
  26. package/core/services/flow-state-configuration.service.d.ts +19 -0
  27. package/core/services/flow-state.service.d.ts +80 -0
  28. package/core/services/index.d.ts +4 -1
  29. package/core/services/quote-draft.service.d.ts +12 -28
  30. package/core/types/flow-customization.types.d.ts +22 -0
  31. package/core/types/flow-state.types.d.ts +11 -0
  32. package/core/types/index.d.ts +3 -1
  33. package/{cms → core}/types/integration.types.d.ts +0 -1
  34. package/core/utils/line-item.utils.d.ts +1 -3
  35. package/esm2020/cms/cms.actions.mjs +11 -1
  36. package/esm2020/cms/components/element-renderer/element-renderer.component.mjs +3 -3
  37. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +3 -3
  38. package/esm2020/cms/components/preview/preview.component.mjs +10 -10
  39. package/esm2020/cms/components/preview/preview.module.mjs +2 -2
  40. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  41. package/esm2020/cms/index.mjs +2 -1
  42. package/esm2020/cms/launcher.module.mjs +4 -4
  43. package/esm2020/cms/modules/migrations/migrations.mjs +2 -2
  44. package/esm2020/cms/modules/migrations/services/migrations.service.mjs +6 -2
  45. package/esm2020/cms/modules/runtime/services/compilation.service.mjs +8 -8
  46. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +4 -4
  47. package/esm2020/cms/plugins/configuration.plugin.mjs +8 -4
  48. package/esm2020/cms/services/index.mjs +1 -2
  49. package/esm2020/cms/services/io-provider.service.mjs +10 -9
  50. package/esm2020/cms/services/resources.service.mjs +10 -6
  51. package/esm2020/cms/services/templates.service.mjs +10 -9
  52. package/esm2020/cms/types/index.mjs +1 -2
  53. package/esm2020/cms/utils/element-metadata-worker.mjs +31 -0
  54. package/esm2020/cms/utils/elements-resolver.mjs +13 -27
  55. package/esm2020/cms/utils/encoding.utils.mjs +3 -2
  56. package/esm2020/cms/utils/index.mjs +4 -1
  57. package/esm2020/cms/utils/path.utils.mjs +3 -3
  58. package/esm2020/cms/utils/script.utils.mjs +19 -15
  59. package/esm2020/cms/utils/transpilation-worker.mjs +52 -0
  60. package/esm2020/cms/vendor-map.mjs +10 -5
  61. package/esm2020/core/core.module.mjs +19 -3
  62. package/esm2020/core/modules/configuration/configuration.module.mjs +7 -23
  63. package/esm2020/core/modules/configuration/helpers.mjs +21 -1
  64. package/esm2020/core/modules/configuration/index.mjs +2 -2
  65. package/esm2020/core/modules/configuration/services/configuration-state.service.mjs +335 -0
  66. package/esm2020/core/modules/configuration/services/configuration.service.mjs +56 -50
  67. package/esm2020/core/modules/configuration/types/configuration.types.mjs +1 -1
  68. package/esm2020/core/modules/flow-configuration/flow-configuration.module.mjs +6 -6
  69. package/esm2020/core/modules/flow-configuration/services/flow-configuration.service.mjs +12 -9
  70. package/esm2020/core/services/context.service.mjs +17 -5
  71. package/esm2020/core/services/flow-info.service.mjs +99 -0
  72. package/esm2020/core/services/flow-state-configuration.service.mjs +53 -0
  73. package/esm2020/core/services/flow-state.service.mjs +512 -0
  74. package/esm2020/core/services/index.mjs +5 -2
  75. package/esm2020/core/services/integration.state.mjs +36 -0
  76. package/esm2020/core/services/product-images.service.mjs +4 -5
  77. package/esm2020/core/services/quote-draft.service.mjs +39 -91
  78. package/esm2020/core/services/runtime-settings.service.mjs +7 -5
  79. package/esm2020/core/types/flow-customization.types.mjs +3 -0
  80. package/esm2020/core/types/flow-state.types.mjs +2 -0
  81. package/esm2020/core/types/index.mjs +4 -2
  82. package/esm2020/core/types/integration.types.mjs +2 -0
  83. package/esm2020/core/utils/line-item.utils.mjs +33 -32
  84. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +44 -51
  85. package/esm2020/src/components/flow-header/flow-header.component.mjs +36 -47
  86. package/esm2020/src/components/guided-selling/guided-selling.component.mjs +35 -46
  87. package/esm2020/src/flow-routing.module.mjs +5 -18
  88. package/esm2020/src/flow.component.mjs +22 -37
  89. package/esm2020/src/guards/context.guard.mjs +6 -11
  90. package/esm2020/src/guards/flow.guard.mjs +23 -9
  91. package/esm2020/src/pages/assets/assets.component.mjs +30 -34
  92. package/esm2020/src/pages/catalog/catalog.component.mjs +30 -34
  93. package/esm2020/src/pages/debug/debug.component.mjs +2 -2
  94. package/esm2020/src/pages/product/product.component.mjs +34 -20
  95. package/esm2020/src/pages/record-not-found/record-not-found.component.mjs +6 -3
  96. package/esm2020/src/pages/remote/remote.component.mjs +15 -14
  97. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +31 -35
  98. package/esm2020/src/resolvers/flow.resolver.mjs +37 -55
  99. package/esm2020/src/resolvers/quote.resolver.mjs +55 -67
  100. package/esm2020/src/services/doc-gen.service.mjs +4 -3
  101. package/esm2020/src/services/flow-dialog.service.mjs +17 -6
  102. package/esm2020/src/services/flow-router.service.mjs +42 -15
  103. package/esm2020/src/services/flow.service.mjs +67 -52
  104. package/esm2020/src/services/guided-selling.service.mjs +5 -4
  105. package/esm2020/src/types/index.mjs +1 -2
  106. package/fesm2015/veloceapps-sdk-cms.mjs +270 -191
  107. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  108. package/fesm2015/veloceapps-sdk-core.mjs +1195 -427
  109. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  110. package/fesm2015/veloceapps-sdk.mjs +776 -826
  111. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  112. package/fesm2020/veloceapps-sdk-cms.mjs +275 -206
  113. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  114. package/fesm2020/veloceapps-sdk-core.mjs +1176 -454
  115. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  116. package/fesm2020/veloceapps-sdk.mjs +899 -945
  117. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  118. package/package.json +8 -7
  119. package/src/components/doc-gen/doc-gen.component.d.ts +7 -10
  120. package/src/components/flow-header/flow-header.component.d.ts +6 -9
  121. package/src/components/guided-selling/guided-selling.component.d.ts +6 -9
  122. package/src/flow-routing.module.d.ts +1 -2
  123. package/src/flow.component.d.ts +7 -12
  124. package/src/guards/context.guard.d.ts +0 -1
  125. package/src/guards/flow.guard.d.ts +1 -1
  126. package/src/pages/assets/assets.component.d.ts +5 -7
  127. package/src/pages/catalog/catalog.component.d.ts +5 -7
  128. package/src/pages/product/product.component.d.ts +8 -7
  129. package/src/pages/record-not-found/record-not-found.component.d.ts +2 -0
  130. package/src/pages/remote/remote.component.d.ts +2 -3
  131. package/src/pages/shopping-cart/shopping-cart.component.d.ts +5 -7
  132. package/src/resolvers/flow.resolver.d.ts +6 -9
  133. package/src/resolvers/quote.resolver.d.ts +7 -14
  134. package/src/services/doc-gen.service.d.ts +1 -1
  135. package/src/services/flow-dialog.service.d.ts +4 -2
  136. package/src/services/flow-router.service.d.ts +6 -3
  137. package/src/services/flow.service.d.ts +10 -14
  138. package/src/services/guided-selling.service.d.ts +1 -1
  139. package/src/types/index.d.ts +0 -1
  140. package/core/modules/configuration/services/configuration.state.d.ts +0 -30
  141. package/core/services/metric-calculation/metric-calculation.service.d.ts +0 -25
  142. package/core/services/metric-calculation/metric-calculation.types.d.ts +0 -1
  143. package/core/services/metric-calculation/metric-calculation.utils.d.ts +0 -5
  144. package/esm2020/cms/services/integration.state.mjs +0 -37
  145. package/esm2020/cms/types/integration.types.mjs +0 -2
  146. package/esm2020/core/modules/configuration/services/configuration.state.mjs +0 -142
  147. package/esm2020/core/services/metric-calculation/metric-calculation.service.mjs +0 -85
  148. package/esm2020/core/services/metric-calculation/metric-calculation.types.mjs +0 -2
  149. package/esm2020/core/services/metric-calculation/metric-calculation.utils.mjs +0 -42
  150. package/esm2020/src/pages/empty-account/empty-account.component.mjs +0 -12
  151. package/esm2020/src/pages/empty-account/empty-account.module.mjs +0 -20
  152. package/esm2020/src/types/flow-customization.types.mjs +0 -3
  153. package/src/pages/empty-account/empty-account.component.d.ts +0 -5
  154. package/src/pages/empty-account/empty-account.module.d.ts +0 -10
  155. package/src/types/flow-customization.types.d.ts +0 -12
  156. /package/{cms → core}/services/integration.state.d.ts +0 -0
@@ -1,15 +1,15 @@
1
1
  import { Location } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import { UUID, } from '@veloceapps/core';
4
- import { FlowAction, IntegrationState } from '@veloceapps/sdk/cms';
5
- import { ConfigurationRuntimeService, ConfigurationService, ConfigurationState, ContextService, QuoteDraftService, } from '@veloceapps/sdk/core';
4
+ import { FlowAction } from '@veloceapps/sdk/cms';
5
+ import { ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, ContextService, IntegrationState, QuoteDraftService, } from '@veloceapps/sdk/core';
6
6
  import { MessageService } from 'primeng/api';
7
7
  import { BehaviorSubject, catchError, first, of, Subject, switchMap, takeUntil, tap, throwError, } from 'rxjs';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@veloceapps/sdk/core";
10
10
  import * as i2 from "primeng/api";
11
- import * as i3 from "@veloceapps/sdk/cms";
12
- import * as i4 from "@angular/common";
11
+ import * as i3 from "@angular/common";
12
+ import * as i4 from "@veloceapps/sdk/cms";
13
13
  import * as i5 from "@veloceapps/components";
14
14
  export class RemoteComponent {
15
15
  constructor(contextService, quoteDraftService, runtimeService, configurationService, configurationState, messageService, integrationState, location) {
@@ -115,7 +115,7 @@ export class RemoteComponent {
115
115
  let items = [lineItem];
116
116
  for (let i = 0; i < items.length; i++) {
117
117
  const item = items[i];
118
- const children = options.get(item.id);
118
+ const children = item && options.get(item.id);
119
119
  if (children) {
120
120
  item.lineItems = children;
121
121
  items = items.concat(children);
@@ -188,7 +188,7 @@ export class RemoteComponent {
188
188
  if (rootOption) {
189
189
  const featureOptions = optionConfigurations[rootOption.featureName] ?? (optionConfigurations[rootOption.featureName] = []);
190
190
  const originOption = !rootOption.hasChildren
191
- ? optionConfigurations[rootOption.featureName].find(({ optionId }) => optionId === rootOption.optionId)
191
+ ? optionConfigurations[rootOption.featureName]?.find(({ optionId }) => optionId === rootOption.optionId)
192
192
  : undefined;
193
193
  const option = originOption ?? {};
194
194
  option.optionId = option.optionId ?? rootOption.optionId;
@@ -241,8 +241,9 @@ export class RemoteComponent {
241
241
  }
242
242
  }
243
243
  for (const option of notBundleOptions) {
244
- if (bundleOptionsByOptionId[option.configuredProductId]) {
245
- bundleOptionsByOptionId[option.configuredProductId].hasChildren = true;
244
+ const bundleOption = bundleOptionsByOptionId[option.configuredProductId];
245
+ if (bundleOption) {
246
+ bundleOption.hasChildren = true;
246
247
  }
247
248
  }
248
249
  }
@@ -250,7 +251,7 @@ export class RemoteComponent {
250
251
  let items = lineItem.lineItems ?? [];
251
252
  for (let i = 0; i < items.length; i++) {
252
253
  const item = items[i];
253
- if (item.lineItems) {
254
+ if (item?.lineItems) {
254
255
  items = items.concat(item.lineItems.map(li => ({ ...li, parentLineItem: item })));
255
256
  }
256
257
  }
@@ -316,7 +317,7 @@ export class RemoteComponent {
316
317
  .forEach(mapping => {
317
318
  const attribute = lineItem.attributes.find(a => a.name === mapping.name);
318
319
  if (attribute) {
319
- new Set(mapping.properties[propertyName].split(',')).forEach(k => (result[k] = attribute.value));
320
+ new Set(mapping.properties[propertyName]?.split(',')).forEach(k => (result[k] = attribute.value));
320
321
  }
321
322
  });
322
323
  return result;
@@ -332,10 +333,10 @@ export class RemoteComponent {
332
333
  return optionConfigurations;
333
334
  }
334
335
  }
335
- RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i1.ConfigurationRuntimeService }, { token: i1.ConfigurationService }, { token: i1.ConfigurationState }, { token: i2.MessageService }, { token: i3.IntegrationState }, { token: i4.Location }], target: i0.ɵɵFactoryTarget.Component });
336
- RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i5.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
336
+ RemoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i1.ConfigurationRuntimeService }, { token: i1.ConfigurationService }, { token: i1.ConfigurationStateService }, { token: i2.MessageService }, { token: i1.IntegrationState }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component });
337
+ RemoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RemoteComponent, selector: "vl-flow-remote", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i5.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RemoteComponent, decorators: [{
338
339
  type: Component,
339
340
  args: [{ selector: 'vl-flow-remote', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
340
- }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i1.ConfigurationRuntimeService }, { type: i1.ConfigurationService }, { type: i1.ConfigurationState }, { type: i2.MessageService }, { type: i3.IntegrationState }, { type: i4.Location }]; } });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFVTCxJQUFJLEdBRUwsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxpQkFBaUIsR0FFbEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLEtBQUssRUFFTCxFQUFFLEVBQ0YsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQWdCZCxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxjQUEyQyxFQUMzQyxvQkFBMEMsRUFDMUMsa0JBQXNDLEVBQ3RDLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxRQUFrQjtRQVBsQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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LENBQUMsQ0FBQztRQUVMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxPQUFtQjtRQUNqRCxNQUFNLG9CQUFvQixHQUE2QyxFQUFFLENBQUM7UUFDMUUsTUFBTSwyQkFBMkIsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBRXZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pFLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDckMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQzs7NEdBeFpVLGVBQWU7Z0dBQWYsZUFBZSxzRENwRDVCLHdWQVNBOzJGRDJDYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGFyZ2VHcm91cEl0ZW0sXG4gIENvbnRleHRQcm9wZXJ0aWVzLFxuICBMaW5lSXRlbSxcbiAgUnBjTWVzc2FnZSxcbiAgUnBjT3B0aW9uLFxuICBScGNPcHRpb25Db25maWd1cmF0aW9uLFxuICBScGNQcm9kdWN0LFxuICBScGNRdW90ZSxcbiAgVUlEZWZpbml0aW9uLFxuICBVVUlELFxuICBWbFdpbmRvdyxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBGbG93QWN0aW9uLCBJbnRlZ3JhdGlvblN0YXRlIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2Ntcyc7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uUnVudGltZVNlcnZpY2UsXG4gIENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU3RhdGUsXG4gIENvbnRleHRTZXJ2aWNlLFxuICBRdW90ZURyYWZ0U2VydmljZSxcbiAgUnVudGltZUNvbnRleHQsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjYXRjaEVycm9yLFxuICBmaXJzdCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGluZUl0ZW1XaXRoUGFyZW50IH0gZnJvbSAnLi9yZW1vdGUudHlwZXMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogVmxXaW5kb3c7XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGZhaWx1cmU6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLWZsb3ctcmVtb3RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbW90ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlbW90ZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUmVtb3RlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbjtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBEWU5BTUlDX09QVElPTl9QUk9EVUNUU19LRVkgPSAnRHluYW1pYyc7XG5cbiAgcHJpdmF0ZSBycGNNZXNzYWdlOiBScGNNZXNzYWdlO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcnVudGltZVNlcnZpY2U6IENvbmZpZ3VyYXRpb25SdW50aW1lU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TdGF0ZTogQ29uZmlndXJhdGlvblN0YXRlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZTogSW50ZWdyYXRpb25TdGF0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5ycGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UgYXMgc3RyaW5nKTtcbiAgICB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5zb3J0KChhLCBiKSA9PiAoYS5mZWF0dXJlTnVtYmVyID8/IDk5OTk5KSAtIChiLmZlYXR1cmVOdW1iZXIgPz8gOTk5OTkpKTtcbiAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmVkUHJvZHVjdElkKTtcblxuICAgIC8vIHVwZGF0ZSBjb250ZXh0IHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBDb250ZXh0UHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlWydTQlFRX19PcHBvcnR1bml0eTJfX2MnXSkge1xuICAgICAgICBwcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQgPSB0aGlzLnJwY01lc3NhZ2UucXVvdGVbJ1NCUVFfX09wcG9ydHVuaXR5Ml9fYyddO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJwY01lc3NhZ2UucXVvdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoeyBwcm9wZXJ0aWVzIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJlZFByb2R1Y3RJZDtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcblxuICAgIGlmICghcHJvZHVjdElkIHx8ICFxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgdGFwKGNvbnRleHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlO1xuXG4gICAgICAgICAgY29uc3QgcHJpY2luZ0VuYWJsZWQgPSB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgICAgICBjb25zdCBwcmljZUxpc3RJZCA9IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0O1xuXG4gICAgICAgICAgY29uc3QgcnVudGltZUNvbnRleHRQcm9wZXJ0aWVzID0gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcztcbiAgICAgICAgICBpZiAocnVudGltZUNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBydW50aW1lQ29udGV4dFByb3BlcnRpZXMuUHJpY2VMaXN0SWQgPSBwcmljZUxpc3RJZDtcbiAgICAgICAgICAgIHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcy5QcmljaW5nRW5hYmxlZCA9IHByaWNpbmdFbmFibGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgTW9kZWxJZDogY29udGV4dC5tb2RlbElkLFxuICAgICAgICAgICAgICBSdW50aW1lTW9kZTogJ1RFU1QnLFxuICAgICAgICAgICAgICBQcmljaW5nRW5hYmxlZDogcHJpY2luZ0VuYWJsZWQsXG4gICAgICAgICAgICAgIFByaWNlTGlzdElkOiBwcmljZUxpc3RJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldENvbmZpZ3VyYWJsZVJhbXAodGhpcy5jcmVhdGVMaW5lSXRlbSgpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMudGhyb3dJZk5vVUlEZWZpbml0aW9uKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0ZS5pbml0JCgpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogZmFsc2UgfSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMudWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzPy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IGVycm9yIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd0lmTm9VSURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIDxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy51aURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdQcm9kdWN0IGRvZXMgbm90IGhhdmUgQ29uZmlndXJhdGlvbiBVSScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzb3VyY2UkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblN0YXRlXG4gICAgICAubGlzdGVuJChGbG93QWN0aW9uLlJFTU9URV9DQU5DRUwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uUkVNT1RFX0FQUExZKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVScGNNZXNzYWdlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IFtxdW90ZURyYWZ0TGluZUl0ZW1dID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGUgPz8gW107XG4gICAgaWYgKHF1b3RlRHJhZnRMaW5lSXRlbSAmJiAocXVvdGVEcmFmdExpbmVJdGVtLmF0dHJpYnV0ZXMubGVuZ3RoID4gMCB8fCBxdW90ZURyYWZ0TGluZUl0ZW0ubGluZUl0ZW1zLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gcXVvdGVEcmFmdExpbmVJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVSb290TGluZUl0ZW0oKTtcbiAgICBjb25zdCBkeW5hbWljT3B0aW9uUHJvZHVjdHMgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9uc1t0aGlzLkRZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWV07XG5cbiAgICBpZiAoZHluYW1pY09wdGlvblByb2R1Y3RzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b1BhcmVudENoaWxkTWFwKGR5bmFtaWNPcHRpb25Qcm9kdWN0cyk7XG4gICAgICBsZXQgaXRlbXMgPSBbbGluZUl0ZW1dO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3B0aW9ucy5nZXQoaXRlbS5pZCk7XG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIGl0ZW0ubGluZUl0ZW1zID0gY2hpbGRyZW47XG4gICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaW5lSXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm9vdExpbmVJdGVtKCk6IExpbmVJdGVtIHtcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3Q7XG4gICAgY29uc3QgcnVudGltZUNvbnRleHQgPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVDb250ZXh0IGFzIFJ1bnRpbWVDb250ZXh0O1xuICAgIGNvbnN0IHZlbG9jZUluc3RhbmNlSWQgPSBwcm9kdWN0LmNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzWydWZWxvY2VJbnN0YW5jZUlkX19jJ107XG4gICAgY29uc3QgcXVvdGVJZCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uY3VycmVudFN0YXRlWzBdPy5pZDtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogcXVvdGVJZCB8fCB2ZWxvY2VJbnN0YW5jZUlkIHx8IFVVSUQuVVVJRCgpLFxuICAgICAgdHlwZTogcnVudGltZUNvbnRleHQucHJvZHVjdFR5cGUgPz8gJycsXG4gICAgICBuYW1lOiBydW50aW1lQ29udGV4dC5wcm9wZXJ0aWVzPy5bJ2Rpc3BsYXlOYW1lJ10gfHwgcnVudGltZUNvbnRleHQucHJvZHVjdE5hbWUsXG4gICAgICBwcm9kdWN0TmFtZTogcnVudGltZUNvbnRleHQucHJvZHVjdE5hbWUsXG4gICAgICBwcm9kdWN0SWQ6IHJ1bnRpbWVDb250ZXh0LnByb2R1Y3RJZCxcbiAgICAgIGNmZ1N0YXR1czogJ0RlZmF1bHQnLFxuICAgICAgYWN0aW9uQ29kZTogJ0FERCcsXG4gICAgICBxdHk6IDEsXG4gICAgfSBhcyBMaW5lSXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgdG9QYXJlbnRDaGlsZE1hcChyZW1vdGVPcHRpb25Qcm9kdWN0czogUnBjT3B0aW9uQ29uZmlndXJhdGlvbltdKTogTWFwPHN0cmluZywgTGluZUl0ZW1bXT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBMaW5lSXRlbVtdPigpO1xuXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgcmVtb3RlT3B0aW9uUHJvZHVjdHMpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25EYXRhID0gb3B0aW9uPy5yZWFkT25seT8ubGluZTtcbiAgICAgIGNvbnN0IGlkID0gY29uZmlndXJhdGlvbkRhdGE/LlZlbG9jZUluc3RhbmNlSWRfX2M7XG4gICAgICBjb25zdCBwYXJlbnRJZCA9IGNvbmZpZ3VyYXRpb25EYXRhPy5WZWxvY2VQYXJlbnRJbnN0YW5jZUlkX19jO1xuXG4gICAgICBpZiAoIW9wdGlvbi5zZWxlY3RlZCB8fCAhY29uZmlndXJhdGlvbkRhdGEgfHwgIWlkIHx8ICFwYXJlbnRJZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZHVjdElkID0gb3B0aW9uLnByb2R1Y3RJZDtcbiAgICAgIGNvbnN0IGxpbmVJdGVtID0ge1xuICAgICAgICBpZCxcbiAgICAgICAgcHJvZHVjdElkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgdHlwZTogY29uZmlndXJhdGlvbkRhdGEuTW9kZWxUeXBlX19jLFxuICAgICAgICBwb3J0OiBjb25maWd1cmF0aW9uRGF0YS5Nb2RlbFBvcnRfX2MsXG4gICAgICAgIGNmZ1N0YXR1czogY29uZmlndXJhdGlvbkRhdGEuQ29uZmlndXJhdGlvblN0YXR1c19fYyxcbiAgICAgICAgYWN0aW9uQ29kZTogY29uZmlndXJhdGlvbkRhdGEuQWN0aW9uQ29kZV9fYyxcbiAgICAgICAgcXR5OiBvcHRpb24uUXVhbnRpdHksXG4gICAgICB9IGFzIExpbmVJdGVtO1xuXG4gICAgICBsZXQgc2libGluZ3MgPSByZXN1bHQuZ2V0KHByb2R1Y3RJZCk7XG4gICAgICBpZiAoIXNpYmxpbmdzKSB7XG4gICAgICAgIHJlc3VsdC5zZXQocGFyZW50SWQsIChzaWJsaW5ncyA9IFtdKSk7XG4gICAgICB9XG5cbiAgICAgIHNpYmxpbmdzLnB1c2gobGluZUl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUnBjTWVzc2FnZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcbiAgICBjb25zdCBsaW5lSXRlbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0U25hcHNob3QoKTtcblxuICAgIGlmICghcXVvdGUgfHwgIWxpbmVJdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ycGNNZXNzYWdlLlZlbG9jZVJlZmVyZW5jZUlkID0gcXVvdGUucXVvdGVJZDtcbiAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmF0aW9uRGF0YS5WZWxvY2VJbnN0YW5jZUlkX19jID0gbGluZUl0ZW0uaWQ7XG4gICAgY29uc3QgY2hpbGRJdGVtcyA9IHRoaXMuZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtKTtcbiAgICBjb25zdCBzYXZpbmdNb2RlID0gd2luZG93LlNhdmluZ01vZGU7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0LCBsaW5lSXRlbSk7XG4gICAgdGhpcy5ycGNNZXNzYWdlLnF1b3RlID0gdGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ1F1b3RlJywgbGluZUl0ZW0pIGFzIFJwY1F1b3RlO1xuXG4gICAgaWYgKHNhdmluZ01vZGUgPT09ICdBTEwnKSB7XG4gICAgICBjb25zdCBvcHRpb25Db25maWd1cmF0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uQ29uZmlndXJhdGlvbnModGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QpO1xuICAgICAgY29uc3Qgcm9vdFByb2R1Y3RPcHRpb25zID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmlsdGVyKHBvID0+IHBvLmNvbmZpZ3VyZWRQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCk7XG5cbiAgICAgIGNoaWxkSXRlbXMuZm9yRWFjaChsaW5lSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHJvb3RPcHRpb24gPSByb290UHJvZHVjdE9wdGlvbnMuZmluZChwbyA9PiBwby5vcHRpb25hbFByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucHJvZHVjdElkKTtcbiAgICAgICAgaWYgKHJvb3RPcHRpb24pIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlT3B0aW9ucyA9XG4gICAgICAgICAgICBvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXSA/PyAob3B0aW9uQ29uZmlndXJhdGlvbnNbcm9vdE9wdGlvbi5mZWF0dXJlTmFtZV0gPSBbXSk7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gIXJvb3RPcHRpb24uaGFzQ2hpbGRyZW5cbiAgICAgICAgICAgID8gb3B0aW9uQ29uZmlndXJhdGlvbnNbcm9vdE9wdGlvbi5mZWF0dXJlTmFtZV0uZmluZCgoeyBvcHRpb25JZCB9KSA9PiBvcHRpb25JZCA9PT0gcm9vdE9wdGlvbi5vcHRpb25JZClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbjogUnBjT3B0aW9uQ29uZmlndXJhdGlvbiA9IG9yaWdpbk9wdGlvbiA/PyAoe30gYXMgUnBjT3B0aW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgICBvcHRpb24ub3B0aW9uSWQgPSBvcHRpb24ub3B0aW9uSWQgPz8gcm9vdE9wdGlvbi5vcHRpb25JZDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKG9wdGlvbiwgbGluZUl0ZW0pO1xuICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmICghb3JpZ2luT3B0aW9uKSB7XG4gICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRQcm9kdWN0T3B0aW9uID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgcG8gPT5cbiAgICAgICAgICAgICAgICBwby5jb25maWd1cmVkUHJvZHVjdElkID09PSBsaW5lSXRlbS5wYXJlbnRMaW5lSXRlbT8ucHJvZHVjdElkICYmXG4gICAgICAgICAgICAgICAgcG8ub3B0aW9uYWxQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChuZXN0ZWRQcm9kdWN0T3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5jb25maWd1cmF0aW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24uY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgVmVsb2NlUGFyZW50SW5zdGFuY2VJZF9fYzogbGluZUl0ZW0ucGFyZW50TGluZUl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkT3B0aW9uSWRfX2M6IG5lc3RlZFByb2R1Y3RPcHRpb24ub3B0aW9uSWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkRmVhdHVyZUlkX19jOiBuZXN0ZWRQcm9kdWN0T3B0aW9uLmZlYXR1cmVJZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ycGNNZXNzYWdlLmR5bmFtaWNGZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZU9wdGlvbnMgPSBvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID0gW10pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gZmVhdHVyZU9wdGlvbnMuZmluZCgoeyBwcm9kdWN0SWQgfSkgPT4gcHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uOiBScGNPcHRpb25Db25maWd1cmF0aW9uID0gb3JpZ2luT3B0aW9uID8/ICh7fSBhcyBScGNPcHRpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50RGF0YShvcHRpb24sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIW9yaWdpbk9wdGlvbikge1xuICAgICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCA9IHsgLi4udGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIG9wdGlvbkNvbmZpZ3VyYXRpb25zIH07XG4gICAgfVxuXG4gICAgd2luZG93LlJQQ19CUk9BRENBU1Q/LmFwcGx5KG51bGwsIFt0aGlzLnJwY01lc3NhZ2VdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFnKGJ1bmRsZVByb2R1Y3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWQ6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbj4gPSB7fTtcbiAgICBjb25zdCBub3RCdW5kbGVPcHRpb25zOiBScGNPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvZHVjdE9wdGlvbiBvZiB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucykge1xuICAgICAgaWYgKHByb2R1Y3RPcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gYnVuZGxlUHJvZHVjdElkKSB7XG4gICAgICAgIGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW3Byb2R1Y3RPcHRpb24ub3B0aW9uYWxQcm9kdWN0SWRdID0gcHJvZHVjdE9wdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdEJ1bmRsZU9wdGlvbnMucHVzaChwcm9kdWN0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygbm90QnVuZGxlT3B0aW9ucykge1xuICAgICAgaWYgKGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW29wdGlvbi5jb25maWd1cmVkUHJvZHVjdElkXSkge1xuICAgICAgICBidW5kbGVPcHRpb25zQnlPcHRpb25JZFtvcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZF0uaGFzQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtOiBMaW5lSXRlbSk6IExpbmVJdGVtV2l0aFBhcmVudFtdIHtcbiAgICBsZXQgaXRlbXMgPSBsaW5lSXRlbS5saW5lSXRlbXMgPz8gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0ubGluZUl0ZW1zKSB7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW0ubGluZUl0ZW1zLm1hcChsaSA9PiAoeyAuLi5saSwgcGFyZW50TGluZUl0ZW06IGl0ZW0gfSkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb250ZW50RGF0YShlbnRpdHk6IFJwY1Byb2R1Y3QgfCBScGNPcHRpb25Db25maWd1cmF0aW9uLCBsaW5lSXRlbTogTGluZUl0ZW0pOiB2b2lkIHtcbiAgICBpZiAobGluZUl0ZW0ucHJvZHVjdElkKSB7XG4gICAgICBlbnRpdHkucHJvZHVjdElkID0gbGluZUl0ZW0ucHJvZHVjdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHF1YW50aXR5QXR0cmlidXRlID0gbGluZUl0ZW0ucHJvcGVydGllc1sncXVhbnRpdHlBdHRyaWJ1dGUnXTtcbiAgICBlbnRpdHkuUXVhbnRpdHkgPSBxdWFudGl0eUF0dHJpYnV0ZVxuICAgICAgPyBsaW5lSXRlbS5hdHRyaWJ1dGVzLmZpbmQoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lID09PSBxdWFudGl0eUF0dHJpYnV0ZSk/LnZhbHVlID8/IDFcbiAgICAgIDogbGluZUl0ZW0ucXR5O1xuXG4gICAgY29uc3QgdG90YWxQcmljZSA9IHRoaXMuY29tcHV0ZU5ldFByaWNlKGxpbmVJdGVtKTtcbiAgICBjb25zdCB0YXJnZXRUb3RhbFByaWNlRmllbGQgPSBsaW5lSXRlbS5wcm9wZXJ0aWVzWydUYXJnZXRUb3RhbFByaWNlRmllbGQnXSB8fCAnVG90YWxQcmljZV9fYyc7XG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF0gPSBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXVxuICAgICAgPyBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXSArIHRvdGFsUHJpY2VcbiAgICAgIDogdG90YWxQcmljZTtcblxuICAgIGNvbnN0IHRhcmdldFByaWNlRmllbGQgPSBsaW5lSXRlbS5wcm9wZXJ0aWVzWydUYXJnZXRQcmljZUZpZWxkJ10gfHwgJ1NCUVFfX0xpc3RQcmljZV9fYyc7XG4gICAgY29uc3QgcHJpY2UgPSBlbnRpdHkuUXVhbnRpdHkgIT0gbnVsbCA/IGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRUb3RhbFByaWNlRmllbGRdIC8gZW50aXR5LlF1YW50aXR5IHx8IDAgOiAwO1xuICAgIGNvbnN0IHRhcmdldFByaWNlVmFsdWUgPSBOdW1iZXIoZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFByaWNlRmllbGRdKSB8fCAwO1xuICAgIGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRQcmljZUZpZWxkXSA9IHRhcmdldFByaWNlVmFsdWVcbiAgICAgID8gKHRhcmdldFByaWNlVmFsdWUgKyBwcmljZSkudG9GaXhlZCgyKVxuICAgICAgOiBwcmljZS50b0ZpeGVkKDIpO1xuXG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25BdHRyaWJ1dGVzID0gdGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ0F0dHJpYnV0ZScsIGxpbmVJdGVtKTtcbiAgICBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGEgPSB7XG4gICAgICAuLi5lbnRpdHkuY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAuLi50aGlzLm1hcEF0dHJpYnV0ZXNUbygnRmllbGQnLCBsaW5lSXRlbSksXG4gICAgICAuLi50aGlzLm1hcEF0dHJpYnV0ZXNUbygnJywgbGluZUl0ZW0pLFxuICAgICAgVmVsb2NlSW5zdGFuY2VJZF9fYzogbGluZUl0ZW0uaWQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZU5ldFByaWNlKGxpbmVJdGVtOiBMaW5lSXRlbSk6IG51bWJlciB7XG4gICAgaWYgKGxpbmVJdGVtLnByb3BlcnRpZXNbJ0dyb3VwQ2hhcmdlcyddKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdW1OZXRQcmljZShsaW5lSXRlbS5jaGFyZ2VHcm91cEl0ZW1zLCB0aGlzLmdldENoYXJnZU5hbWVTZXQobGluZUl0ZW0ucHJvcGVydGllc1snR3JvdXBDaGFyZ2VzJ10pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdW1OZXRQcmljZShsaW5lSXRlbS5jaGFyZ2VJdGVtcywgdGhpcy5nZXRDaGFyZ2VOYW1lU2V0KGxpbmVJdGVtLnByb3BlcnRpZXNbJ0NoYXJnZXMnXSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFyZ2VOYW1lU2V0KHByb3BlcnR5Pzogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICAgIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldChwcm9wZXJ0eS5zcGxpdCgnLCcpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdW1OZXRQcmljZShjaGFyZ2VJdGVtczogQ2hhcmdlR3JvdXBJdGVtW10sIGNoYXJnZXM6IFNldDxzdHJpbmc+KTogbnVtYmVyIHtcbiAgICBsZXQgbmV0UHJpY2UgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjaGFyZ2VJdGVtIG9mIGNoYXJnZUl0ZW1zKSB7XG4gICAgICBpZiAoIWNoYXJnZXMgfHwgY2hhcmdlcy5oYXMoY2hhcmdlSXRlbS5jaGFyZ2VUeXBlKSkge1xuICAgICAgICBuZXRQcmljZSArPSBjaGFyZ2VJdGVtLm5ldFByaWNlID8/IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldFByaWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBBdHRyaWJ1dGVzVG8odGFyZ2V0OiBzdHJpbmcsIGxpbmVJdGVtOiBMaW5lSXRlbSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZU1vZGVsPy5jb21wb25lbnRzLmdldChsaW5lSXRlbS50eXBlKTtcblxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9ICdtYXBUbycgKyB0YXJnZXQ7XG4gICAgY29tcG9uZW50LmF0dHJpYnV0ZXNcbiAgICAgIC5maWx0ZXIoYSA9PiBhLnByb3BlcnRpZXMgJiYgYS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pXG4gICAgICAuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbGluZUl0ZW0uYXR0cmlidXRlcy5maW5kKGEgPT4gYS5uYW1lID09PSBtYXBwaW5nLm5hbWUpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICBuZXcgU2V0KG1hcHBpbmcucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnNwbGl0KCcsJykpLmZvckVhY2goayA9PiAocmVzdWx0W2tdID0gYXR0cmlidXRlLnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3B0aW9uQ29uZmlndXJhdGlvbnMocHJvZHVjdDogUnBjUHJvZHVjdCk6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbkNvbmZpZ3VyYXRpb25bXT4ge1xuICAgIGNvbnN0IG9wdGlvbkNvbmZpZ3VyYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBScGNPcHRpb25Db25maWd1cmF0aW9uW10+ID0ge307XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zID0gcHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9ucyA/PyB7fTtcblxuICAgIE9iamVjdC5rZXlzKHJlcXVlc3RPcHRpb25Db25maWd1cmF0aW9ucykuZm9yRWFjaChrID0+IHtcbiAgICAgIG9wdGlvbkNvbmZpZ3VyYXRpb25zW2tdID0gKHJlcXVlc3RPcHRpb25Db25maWd1cmF0aW9uc1trXSA/PyBbXSkubWFwKG9wdCA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLm9wdCwgc2VsZWN0ZWQ6IGZhbHNlIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvcHRpb25Db25maWd1cmF0aW9ucztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
341
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i1.ConfigurationRuntimeService }, { type: i1.ConfigurationService }, { type: i1.ConfigurationStateService }, { type: i2.MessageService }, { type: i1.IntegrationState }, { type: i3.Location }]; } });
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9yZW1vdGUvcmVtb3RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlFLE9BQU8sRUFVTCxJQUFJLEdBRUwsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixvQkFBb0IsRUFDcEIseUJBQXlCLEVBQ3pCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEdBRWxCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBRUwsRUFBRSxFQUNGLE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsRUFDSCxVQUFVLEdBQ1gsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFnQmQsTUFBTSxPQUFPLGVBQWU7SUFTMUIsWUFDVSxjQUE4QixFQUM5QixpQkFBb0MsRUFDcEMsY0FBMkMsRUFDM0Msb0JBQTBDLEVBQzFDLGtCQUE2QyxFQUM3QyxjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsUUFBa0I7UUFQbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsbUJBQWMsR0FBZCxjQUFjLENBQTZCO1FBQzNDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBZnJCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFN0QsZ0NBQTJCLEdBQUcsU0FBUyxDQUFDO1FBR2pELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBWXZDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBcUIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RSw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRTtZQUN6QixNQUFNLFVBQVUsR0FBc0IsRUFBRSxDQUFDO1lBRXpDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBRTtnQkFDbEQsVUFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQzNFO1lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sQ0FBQyxFQUFFO29CQUNyRCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUN6QjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7UUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUVoRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjO2FBQ2hCLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO2FBQ25CLElBQUksQ0FDSCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWixNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUN0RixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUM7WUFFMUQsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoRixNQUFNLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7WUFFckQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUM7WUFDaEYsSUFBSSx3QkFBd0IsRUFBRTtnQkFDNUIsd0JBQXdCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztnQkFDbkQsd0JBQXdCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQzthQUMxRDtZQUVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUN6QixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixXQUFXLEVBQUUsTUFBTTtvQkFDbkIsY0FBYyxFQUFFLGNBQWM7b0JBQzlCLFdBQVcsRUFBRSxXQUFXO2lCQUN6QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFDRixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUNoRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQy9ELFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNoRTtZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU8sQ0FBSSxPQUFzQixFQUFpQixFQUFFO1lBQ2xELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDakIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDdEIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0NBQXdDLENBQUMsQ0FBQztpQkFDbkU7Z0JBRUQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQzthQUNqQyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFDL0IsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7YUFDaEMsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsRUFDaEMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0I7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDbkYsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0csT0FBTyxrQkFBa0IsQ0FBQztTQUMzQjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFN0csSUFBSSxxQkFBcUIsRUFBRTtZQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxRQUFRLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7b0JBQzFCLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNoQzthQUNGO1NBQ0Y7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBZ0MsQ0FBQztRQUM1RSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUV2RSxPQUFPO1lBQ0wsRUFBRSxFQUFFLE9BQU8sSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzlDLElBQUksRUFBRSxjQUFjLENBQUMsV0FBVyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxjQUFjLENBQUMsV0FBVztZQUM5RSxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLEdBQUcsRUFBRSxDQUFDO1NBQ0ssQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsb0JBQThDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBRTdDLEtBQUssTUFBTSxNQUFNLElBQUksb0JBQW9CLEVBQUU7WUFDekMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztZQUNqRCxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQztZQUNsRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQztZQUU5RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUM5RCxTQUFTO2FBQ1Y7WUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHO2dCQUNmLEVBQUU7Z0JBQ0YsU0FBUztnQkFDVCxRQUFRO2dCQUNSLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxZQUFZO2dCQUNwQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsWUFBWTtnQkFDcEMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDbkQsVUFBVSxFQUFFLGlCQUFpQixDQUFDLGFBQWE7Z0JBQzNDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUTthQUNULENBQUM7WUFFZCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QztZQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBRXJDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQWEsQ0FBQztRQUU1RSxJQUFJLFVBQVUsS0FBSyxLQUFLLEVBQUU7WUFDeEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0csVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxVQUFVLEVBQUU7b0JBQ2QsTUFBTSxjQUFjLEdBQ2xCLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdEcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVzt3QkFDMUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDeEcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDZCxNQUFNLE1BQU0sR0FBMkIsWUFBWSxJQUFLLEVBQTZCLENBQUM7b0JBRXRGLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDO29CQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUN6QyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDckQsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBRXZCLElBQUksQ0FBQyxZQUFZLEVBQUU7d0JBQ2pCLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzdCO29CQUVELElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRTt3QkFDM0IsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RELEVBQUUsQ0FBQyxFQUFFLENBQ0gsRUFBRSxDQUFDLG1CQUFtQixLQUFLLFFBQVEsQ0FBQyxjQUFjLEVBQUUsU0FBUzs0QkFDN0QsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxTQUFTLENBQzlDLENBQUM7d0JBRUYsSUFBSSxtQkFBbUIsRUFBRTs0QkFDdkIsTUFBTSxDQUFDLGlCQUFpQixHQUFHO2dDQUN6QixHQUFHLE1BQU0sQ0FBQyxpQkFBaUI7Z0NBQzNCLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQ0FDckQsdUJBQXVCLEVBQUUsbUJBQW1CLENBQUMsUUFBUTtnQ0FDckQsd0JBQXdCLEVBQUUsbUJBQW1CLENBQUMsU0FBUzs2QkFDeEQsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ2hELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzt3QkFDdkcsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzlGLE1BQU0sTUFBTSxHQUEyQixZQUFZLElBQUssRUFBNkIsQ0FBQzt3QkFFdEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDekMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUM7d0JBQ3JELE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUV2QixJQUFJLENBQUMsWUFBWSxFQUFFOzRCQUNqQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUM3QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUM7U0FDaEY7UUFFRCxNQUFNLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsZUFBdUI7UUFDbkQsTUFBTSx1QkFBdUIsR0FBOEIsRUFBRSxDQUFDO1FBQzlELE1BQU0sZ0JBQWdCLEdBQWdCLEVBQUUsQ0FBQztRQUN6QyxLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ25ELElBQUksYUFBYSxDQUFDLG1CQUFtQixLQUFLLGVBQWUsRUFBRTtnQkFDekQsdUJBQXVCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxDQUFDO2FBQzFFO2lCQUFNO2dCQUNMLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN0QztTQUNGO1FBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtZQUNyQyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN6RSxJQUFJLFlBQVksRUFBRTtnQkFDaEIsWUFBWSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxRQUFrQjtRQUM5QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxJQUFJLEVBQUUsU0FBUyxFQUFFO2dCQUNuQixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkY7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQTJDLEVBQUUsUUFBa0I7UUFDdkYsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUN2QztRQUVELE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLEdBQUcsaUJBQWlCO1lBQ2pDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQztZQUN6RixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUVqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLGVBQWUsQ0FBQztRQUM5RixNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7WUFDL0YsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLFVBQVU7WUFDOUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUVmLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG9CQUFvQixDQUFDO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25ILE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGdCQUFnQjtZQUMzRCxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJCLE1BQU0sQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM3RSxNQUFNLENBQUMsaUJBQWlCLEdBQUc7WUFDekIsR0FBRyxNQUFNLENBQUMsaUJBQWlCO1lBQzNCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1lBQzFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDO1lBQ3JDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWtCO1FBQ3hDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoSDtRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBaUI7UUFDeEMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxXQUE4QixFQUFFLE9BQW9CO1FBQ3RFLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQixLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNsRCxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7YUFDdEM7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYyxFQUFFLFFBQWtCO1FBQ3hELE1BQU0sTUFBTSxHQUF3QixFQUFFLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEYsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxVQUFVO2FBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV6RSxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ25HO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBbUI7UUFDakQsTUFBTSxvQkFBb0IsR0FBNkMsRUFBRSxDQUFDO1FBQzFFLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUV2RSxNQUFNLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RSxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7OzRHQXpaVSxlQUFlO2dHQUFmLGVBQWUsc0RDckQ1Qix3VkFTQTsyRkQ0Q2EsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ2hhcmdlR3JvdXBJdGVtLFxuICBDb250ZXh0UHJvcGVydGllcyxcbiAgTGluZUl0ZW0sXG4gIFJwY01lc3NhZ2UsXG4gIFJwY09wdGlvbixcbiAgUnBjT3B0aW9uQ29uZmlndXJhdGlvbixcbiAgUnBjUHJvZHVjdCxcbiAgUnBjUXVvdGUsXG4gIFVJRGVmaW5pdGlvbixcbiAgVVVJRCxcbiAgVmxXaW5kb3csXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0FjdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jbXMnO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgQ29uZmlndXJhdGlvblN0YXRlU2VydmljZSxcbiAgQ29udGV4dFNlcnZpY2UsXG4gIEludGVncmF0aW9uU3RhdGUsXG4gIFF1b3RlRHJhZnRTZXJ2aWNlLFxuICBSdW50aW1lQ29udGV4dCxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2NvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGZpcnN0LFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbiAgdGhyb3dFcnJvcixcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMaW5lSXRlbVdpdGhQYXJlbnQgfSBmcm9tICcuL3JlbW90ZS50eXBlcyc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuaW50ZXJmYWNlIFN0YXRlIHtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZmFpbHVyZTogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtZmxvdy1yZW1vdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVtb3RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVtb3RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZW1vdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgdWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uO1xuICBwdWJsaWMgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGF0ZT4oeyBsb2FkaW5nOiB0cnVlLCBmYWlsdXJlOiBmYWxzZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWSA9ICdEeW5hbWljJztcblxuICBwcml2YXRlIHJwY01lc3NhZ2U6IFJwY01lc3NhZ2U7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBydW50aW1lU2VydmljZTogQ29uZmlndXJhdGlvblJ1bnRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblN0YXRlOiBDb25maWd1cmF0aW9uU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW50ZWdyYXRpb25TdGF0ZTogSW50ZWdyYXRpb25TdGF0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgKSB7XG4gICAgdGhpcy5ycGNNZXNzYWdlID0gSlNPTi5wYXJzZSh3aW5kb3cuUlBDX01FU1NBR0UgYXMgc3RyaW5nKTtcbiAgICB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5zb3J0KChhLCBiKSA9PiAoYS5mZWF0dXJlTnVtYmVyID8/IDk5OTk5KSAtIChiLmZlYXR1cmVOdW1iZXIgPz8gOTk5OTkpKTtcbiAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5jb25maWd1cmVkUHJvZHVjdElkKTtcblxuICAgIC8vIHVwZGF0ZSBjb250ZXh0IHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiBDb250ZXh0UHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ycGNNZXNzYWdlLnF1b3RlWydTQlFRX19PcHBvcnR1bml0eTJfX2MnXSkge1xuICAgICAgICBwcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQgPSB0aGlzLnJwY01lc3NhZ2UucXVvdGVbJ1NCUVFfX09wcG9ydHVuaXR5Ml9fYyddO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnJwY01lc3NhZ2UucXVvdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSkge1xuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoeyBwcm9wZXJ0aWVzIH0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgICB0aGlzLmluaXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcHJvZHVjdElkID0gdGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QuY29uZmlndXJlZFByb2R1Y3RJZDtcbiAgICBjb25zdCBxdW90ZSA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdDtcblxuICAgIGlmICghcHJvZHVjdElkIHx8ICFxdW90ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucnVudGltZVNlcnZpY2VcbiAgICAgIC5pbml0KHsgcHJvZHVjdElkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgdGFwKGNvbnRleHQgPT4ge1xuICAgICAgICAgIGNvbnN0IHVpRGVmaW5pdGlvblByb3BlcnRpZXMgPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlLnByb3BlcnRpZXMgPz8ge307XG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSBjb250ZXh0LnVpRGVmaW5pdGlvbkNvbnRhaW5lcj8uc291cmNlO1xuXG4gICAgICAgICAgY29uc3QgcHJpY2luZ0VuYWJsZWQgPSB1aURlZmluaXRpb25Qcm9wZXJ0aWVzLnByaWNpbmdFbmFibGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgICAgICBjb25zdCBwcmljZUxpc3RJZCA9IHVpRGVmaW5pdGlvblByb3BlcnRpZXMucHJpY2VMaXN0O1xuXG4gICAgICAgICAgY29uc3QgcnVudGltZUNvbnRleHRQcm9wZXJ0aWVzID0gdGhpcy5ydW50aW1lU2VydmljZS5ydW50aW1lQ29udGV4dD8ucHJvcGVydGllcztcbiAgICAgICAgICBpZiAocnVudGltZUNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBydW50aW1lQ29udGV4dFByb3BlcnRpZXMuUHJpY2VMaXN0SWQgPSBwcmljZUxpc3RJZDtcbiAgICAgICAgICAgIHJ1bnRpbWVDb250ZXh0UHJvcGVydGllcy5QcmljaW5nRW5hYmxlZCA9IHByaWNpbmdFbmFibGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHtcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgTW9kZWxJZDogY29udGV4dC5tb2RlbElkLFxuICAgICAgICAgICAgICBSdW50aW1lTW9kZTogJ1RFU1QnLFxuICAgICAgICAgICAgICBQcmljaW5nRW5hYmxlZDogcHJpY2luZ0VuYWJsZWQsXG4gICAgICAgICAgICAgIFByaWNlTGlzdElkOiBwcmljZUxpc3RJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldENvbmZpZ3VyYWJsZVJhbXAodGhpcy5jcmVhdGVMaW5lSXRlbSgpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMudGhyb3dJZk5vVUlEZWZpbml0aW9uKCksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ3VyYXRpb25TdGF0ZS5pbml0JCgpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogZmFsc2UgfSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMudWlEZWZpbml0aW9uPy5wcm9wZXJ0aWVzPy5zdXBwcmVzc1RvYXN0TWVzc2FnZXMpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6IGVycm9yIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0aHJvd0lmTm9VSURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIDxUPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy51aURlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICdQcm9kdWN0IGRvZXMgbm90IGhhdmUgQ29uZmlndXJhdGlvbiBVSScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzb3VyY2UkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblN0YXRlXG4gICAgICAubGlzdGVuJChGbG93QWN0aW9uLlJFTU9URV9DQU5DRUwpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9jYXRpb24uYmFjaygpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmludGVncmF0aW9uU3RhdGVcbiAgICAgIC5saXN0ZW4kKEZsb3dBY3Rpb24uUkVNT1RFX0FQUExZKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLnNhdmVScGNNZXNzYWdlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IFtxdW90ZURyYWZ0TGluZUl0ZW1dID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGUgPz8gW107XG4gICAgaWYgKHF1b3RlRHJhZnRMaW5lSXRlbSAmJiAocXVvdGVEcmFmdExpbmVJdGVtLmF0dHJpYnV0ZXMubGVuZ3RoID4gMCB8fCBxdW90ZURyYWZ0TGluZUl0ZW0ubGluZUl0ZW1zLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gcXVvdGVEcmFmdExpbmVJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jcmVhdGVSb290TGluZUl0ZW0oKTtcbiAgICBjb25zdCBkeW5hbWljT3B0aW9uUHJvZHVjdHMgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdC5vcHRpb25Db25maWd1cmF0aW9uc1t0aGlzLkRZTkFNSUNfT1BUSU9OX1BST0RVQ1RTX0tFWV07XG5cbiAgICBpZiAoZHluYW1pY09wdGlvblByb2R1Y3RzKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b1BhcmVudENoaWxkTWFwKGR5bmFtaWNPcHRpb25Qcm9kdWN0cyk7XG4gICAgICBsZXQgaXRlbXMgPSBbbGluZUl0ZW1dO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gaXRlbSAmJiBvcHRpb25zLmdldChpdGVtLmlkKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgaXRlbS5saW5lSXRlbXMgPSBjaGlsZHJlbjtcbiAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmVJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSb290TGluZUl0ZW0oKTogTGluZUl0ZW0ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdDtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMucnVudGltZVNlcnZpY2UucnVudGltZUNvbnRleHQgYXMgUnVudGltZUNvbnRleHQ7XG4gICAgY29uc3QgdmVsb2NlSW5zdGFuY2VJZCA9IHByb2R1Y3QuY29uZmlndXJhdGlvbkF0dHJpYnV0ZXNbJ1ZlbG9jZUluc3RhbmNlSWRfX2MnXTtcbiAgICBjb25zdCBxdW90ZUlkID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Py5jdXJyZW50U3RhdGVbMF0/LmlkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBxdW90ZUlkIHx8IHZlbG9jZUluc3RhbmNlSWQgfHwgVVVJRC5VVUlEKCksXG4gICAgICB0eXBlOiBydW50aW1lQ29udGV4dC5wcm9kdWN0VHlwZSA/PyAnJyxcbiAgICAgIG5hbWU6IHJ1bnRpbWVDb250ZXh0LnByb3BlcnRpZXM/LlsnZGlzcGxheU5hbWUnXSB8fCBydW50aW1lQ29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICAgIHByb2R1Y3ROYW1lOiBydW50aW1lQ29udGV4dC5wcm9kdWN0TmFtZSxcbiAgICAgIHByb2R1Y3RJZDogcnVudGltZUNvbnRleHQucHJvZHVjdElkLFxuICAgICAgY2ZnU3RhdHVzOiAnRGVmYXVsdCcsXG4gICAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICAgIHF0eTogMSxcbiAgICB9IGFzIExpbmVJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BhcmVudENoaWxkTWFwKHJlbW90ZU9wdGlvblByb2R1Y3RzOiBScGNPcHRpb25Db25maWd1cmF0aW9uW10pOiBNYXA8c3RyaW5nLCBMaW5lSXRlbVtdPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIExpbmVJdGVtW10+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdGVPcHRpb25Qcm9kdWN0cykge1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbkRhdGEgPSBvcHRpb24/LnJlYWRPbmx5Py5saW5lO1xuICAgICAgY29uc3QgaWQgPSBjb25maWd1cmF0aW9uRGF0YT8uVmVsb2NlSW5zdGFuY2VJZF9fYztcbiAgICAgIGNvbnN0IHBhcmVudElkID0gY29uZmlndXJhdGlvbkRhdGE/LlZlbG9jZVBhcmVudEluc3RhbmNlSWRfX2M7XG5cbiAgICAgIGlmICghb3B0aW9uLnNlbGVjdGVkIHx8ICFjb25maWd1cmF0aW9uRGF0YSB8fCAhaWQgfHwgIXBhcmVudElkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9kdWN0SWQgPSBvcHRpb24ucHJvZHVjdElkO1xuICAgICAgY29uc3QgbGluZUl0ZW0gPSB7XG4gICAgICAgIGlkLFxuICAgICAgICBwcm9kdWN0SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0eXBlOiBjb25maWd1cmF0aW9uRGF0YS5Nb2RlbFR5cGVfX2MsXG4gICAgICAgIHBvcnQ6IGNvbmZpZ3VyYXRpb25EYXRhLk1vZGVsUG9ydF9fYyxcbiAgICAgICAgY2ZnU3RhdHVzOiBjb25maWd1cmF0aW9uRGF0YS5Db25maWd1cmF0aW9uU3RhdHVzX19jLFxuICAgICAgICBhY3Rpb25Db2RlOiBjb25maWd1cmF0aW9uRGF0YS5BY3Rpb25Db2RlX19jLFxuICAgICAgICBxdHk6IG9wdGlvbi5RdWFudGl0eSxcbiAgICAgIH0gYXMgTGluZUl0ZW07XG5cbiAgICAgIGxldCBzaWJsaW5ncyA9IHJlc3VsdC5nZXQocHJvZHVjdElkKTtcbiAgICAgIGlmICghc2libGluZ3MpIHtcbiAgICAgICAgcmVzdWx0LnNldChwYXJlbnRJZCwgKHNpYmxpbmdzID0gW10pKTtcbiAgICAgIH1cblxuICAgICAgc2libGluZ3MucHVzaChsaW5lSXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHNhdmVScGNNZXNzYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1b3RlID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0O1xuICAgIGNvbnN0IGxpbmVJdGVtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRTbmFwc2hvdCgpO1xuXG4gICAgaWYgKCFxdW90ZSB8fCAhbGluZUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJwY01lc3NhZ2UuVmVsb2NlUmVmZXJlbmNlSWQgPSBxdW90ZS5xdW90ZUlkO1xuICAgIHRoaXMucnBjTWVzc2FnZS5wcm9kdWN0LmNvbmZpZ3VyYXRpb25EYXRhLlZlbG9jZUluc3RhbmNlSWRfX2MgPSBsaW5lSXRlbS5pZDtcbiAgICBjb25zdCBjaGlsZEl0ZW1zID0gdGhpcy5mbGF0dGVuQ2hpbGRMaW5lSXRlbXMobGluZUl0ZW0pO1xuICAgIGNvbnN0IHNhdmluZ01vZGUgPSB3aW5kb3cuU2F2aW5nTW9kZTtcblxuICAgIHRoaXMudXBkYXRlQ29udGVudERhdGEodGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIGxpbmVJdGVtKTtcbiAgICB0aGlzLnJwY01lc3NhZ2UucXVvdGUgPSB0aGlzLm1hcEF0dHJpYnV0ZXNUbygnUXVvdGUnLCBsaW5lSXRlbSkgYXMgUnBjUXVvdGU7XG5cbiAgICBpZiAoc2F2aW5nTW9kZSA9PT0gJ0FMTCcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbkNvbmZpZ3VyYXRpb25zID0gdGhpcy5nZXRPcHRpb25Db25maWd1cmF0aW9ucyh0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCk7XG4gICAgICBjb25zdCByb290UHJvZHVjdE9wdGlvbnMgPSB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucy5maWx0ZXIocG8gPT4gcG8uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gbGluZUl0ZW0ucHJvZHVjdElkKTtcblxuICAgICAgY2hpbGRJdGVtcy5mb3JFYWNoKGxpbmVJdGVtID0+IHtcbiAgICAgICAgY29uc3Qgcm9vdE9wdGlvbiA9IHJvb3RQcm9kdWN0T3B0aW9ucy5maW5kKHBvID0+IHBvLm9wdGlvbmFsUHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICBpZiAocm9vdE9wdGlvbikge1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVPcHRpb25zID1cbiAgICAgICAgICAgIG9wdGlvbkNvbmZpZ3VyYXRpb25zW3Jvb3RPcHRpb24uZmVhdHVyZU5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXSA9IFtdKTtcbiAgICAgICAgICBjb25zdCBvcmlnaW5PcHRpb24gPSAhcm9vdE9wdGlvbi5oYXNDaGlsZHJlblxuICAgICAgICAgICAgPyBvcHRpb25Db25maWd1cmF0aW9uc1tyb290T3B0aW9uLmZlYXR1cmVOYW1lXT8uZmluZCgoeyBvcHRpb25JZCB9KSA9PiBvcHRpb25JZCA9PT0gcm9vdE9wdGlvbi5vcHRpb25JZClcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG9wdGlvbjogUnBjT3B0aW9uQ29uZmlndXJhdGlvbiA9IG9yaWdpbk9wdGlvbiA/PyAoe30gYXMgUnBjT3B0aW9uQ29uZmlndXJhdGlvbik7XG5cbiAgICAgICAgICBvcHRpb24ub3B0aW9uSWQgPSBvcHRpb24ub3B0aW9uSWQgPz8gcm9vdE9wdGlvbi5vcHRpb25JZDtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnREYXRhKG9wdGlvbiwgbGluZUl0ZW0pO1xuICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmICghb3JpZ2luT3B0aW9uKSB7XG4gICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxpbmVJdGVtLnBhcmVudExpbmVJdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRQcm9kdWN0T3B0aW9uID0gdGhpcy5ycGNNZXNzYWdlLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgcG8gPT5cbiAgICAgICAgICAgICAgICBwby5jb25maWd1cmVkUHJvZHVjdElkID09PSBsaW5lSXRlbS5wYXJlbnRMaW5lSXRlbT8ucHJvZHVjdElkICYmXG4gICAgICAgICAgICAgICAgcG8ub3B0aW9uYWxQcm9kdWN0SWQgPT09IGxpbmVJdGVtLnByb2R1Y3RJZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChuZXN0ZWRQcm9kdWN0T3B0aW9uKSB7XG4gICAgICAgICAgICAgIG9wdGlvbi5jb25maWd1cmF0aW9uRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24uY29uZmlndXJhdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgVmVsb2NlUGFyZW50SW5zdGFuY2VJZF9fYzogbGluZUl0ZW0ucGFyZW50TGluZUl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkT3B0aW9uSWRfX2M6IG5lc3RlZFByb2R1Y3RPcHRpb24ub3B0aW9uSWQsXG4gICAgICAgICAgICAgICAgVmVsb2NlTmVzdGVkRmVhdHVyZUlkX19jOiBuZXN0ZWRQcm9kdWN0T3B0aW9uLmZlYXR1cmVJZCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ycGNNZXNzYWdlLmR5bmFtaWNGZWF0dXJlcy5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZU9wdGlvbnMgPSBvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID8/IChvcHRpb25Db25maWd1cmF0aW9uc1tmZWF0dXJlLm5hbWVdID0gW10pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT3B0aW9uID0gZmVhdHVyZU9wdGlvbnMuZmluZCgoeyBwcm9kdWN0SWQgfSkgPT4gcHJvZHVjdElkID09PSBsaW5lSXRlbS5wcm9kdWN0SWQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uOiBScGNPcHRpb25Db25maWd1cmF0aW9uID0gb3JpZ2luT3B0aW9uID8/ICh7fSBhcyBScGNPcHRpb25Db25maWd1cmF0aW9uKTtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50RGF0YShvcHRpb24sIGxpbmVJdGVtKTtcbiAgICAgICAgICAgIG9wdGlvbi5pbmRleCA9IG9wdGlvbi5pbmRleCA/PyBmZWF0dXJlT3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoIW9yaWdpbk9wdGlvbikge1xuICAgICAgICAgICAgICBmZWF0dXJlT3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJwY01lc3NhZ2UucHJvZHVjdCA9IHsgLi4udGhpcy5ycGNNZXNzYWdlLnByb2R1Y3QsIG9wdGlvbkNvbmZpZ3VyYXRpb25zIH07XG4gICAgfVxuXG4gICAgd2luZG93LlJQQ19CUk9BRENBU1Q/LmFwcGx5KG51bGwsIFt0aGlzLnJwY01lc3NhZ2VdKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFnKGJ1bmRsZVByb2R1Y3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWQ6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbj4gPSB7fTtcbiAgICBjb25zdCBub3RCdW5kbGVPcHRpb25zOiBScGNPcHRpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcHJvZHVjdE9wdGlvbiBvZiB0aGlzLnJwY01lc3NhZ2Uub3B0aW9ucykge1xuICAgICAgaWYgKHByb2R1Y3RPcHRpb24uY29uZmlndXJlZFByb2R1Y3RJZCA9PT0gYnVuZGxlUHJvZHVjdElkKSB7XG4gICAgICAgIGJ1bmRsZU9wdGlvbnNCeU9wdGlvbklkW3Byb2R1Y3RPcHRpb24ub3B0aW9uYWxQcm9kdWN0SWRdID0gcHJvZHVjdE9wdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdEJ1bmRsZU9wdGlvbnMucHVzaChwcm9kdWN0T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygbm90QnVuZGxlT3B0aW9ucykge1xuICAgICAgY29uc3QgYnVuZGxlT3B0aW9uID0gYnVuZGxlT3B0aW9uc0J5T3B0aW9uSWRbb3B0aW9uLmNvbmZpZ3VyZWRQcm9kdWN0SWRdO1xuICAgICAgaWYgKGJ1bmRsZU9wdGlvbikge1xuICAgICAgICBidW5kbGVPcHRpb24uaGFzQ2hpbGRyZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmxhdHRlbkNoaWxkTGluZUl0ZW1zKGxpbmVJdGVtOiBMaW5lSXRlbSk6IExpbmVJdGVtV2l0aFBhcmVudFtdIHtcbiAgICBsZXQgaXRlbXMgPSBsaW5lSXRlbS5saW5lSXRlbXMgPz8gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgaWYgKGl0ZW0/LmxpbmVJdGVtcykge1xuICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdChpdGVtLmxpbmVJdGVtcy5tYXAobGkgPT4gKHsgLi4ubGksIHBhcmVudExpbmVJdGVtOiBpdGVtIH0pKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29udGVudERhdGEoZW50aXR5OiBScGNQcm9kdWN0IHwgUnBjT3B0aW9uQ29uZmlndXJhdGlvbiwgbGluZUl0ZW06IExpbmVJdGVtKTogdm9pZCB7XG4gICAgaWYgKGxpbmVJdGVtLnByb2R1Y3RJZCkge1xuICAgICAgZW50aXR5LnByb2R1Y3RJZCA9IGxpbmVJdGVtLnByb2R1Y3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWFudGl0eUF0dHJpYnV0ZSA9IGxpbmVJdGVtLnByb3BlcnRpZXNbJ3F1YW50aXR5QXR0cmlidXRlJ107XG4gICAgZW50aXR5LlF1YW50aXR5ID0gcXVhbnRpdHlBdHRyaWJ1dGVcbiAgICAgID8gbGluZUl0ZW0uYXR0cmlidXRlcy5maW5kKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gcXVhbnRpdHlBdHRyaWJ1dGUpPy52YWx1ZSA/PyAxXG4gICAgICA6IGxpbmVJdGVtLnF0eTtcblxuICAgIGNvbnN0IHRvdGFsUHJpY2UgPSB0aGlzLmNvbXB1dGVOZXRQcmljZShsaW5lSXRlbSk7XG4gICAgY29uc3QgdGFyZ2V0VG90YWxQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllc1snVGFyZ2V0VG90YWxQcmljZUZpZWxkJ10gfHwgJ1RvdGFsUHJpY2VfX2MnO1xuICAgIGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRUb3RhbFByaWNlRmllbGRdID0gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF1cbiAgICAgID8gZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhW3RhcmdldFRvdGFsUHJpY2VGaWVsZF0gKyB0b3RhbFByaWNlXG4gICAgICA6IHRvdGFsUHJpY2U7XG5cbiAgICBjb25zdCB0YXJnZXRQcmljZUZpZWxkID0gbGluZUl0ZW0ucHJvcGVydGllc1snVGFyZ2V0UHJpY2VGaWVsZCddIHx8ICdTQlFRX19MaXN0UHJpY2VfX2MnO1xuICAgIGNvbnN0IHByaWNlID0gZW50aXR5LlF1YW50aXR5ICE9IG51bGwgPyBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0VG90YWxQcmljZUZpZWxkXSAvIGVudGl0eS5RdWFudGl0eSB8fCAwIDogMDtcbiAgICBjb25zdCB0YXJnZXRQcmljZVZhbHVlID0gTnVtYmVyKGVudGl0eS5jb25maWd1cmF0aW9uRGF0YVt0YXJnZXRQcmljZUZpZWxkXSkgfHwgMDtcbiAgICBlbnRpdHkuY29uZmlndXJhdGlvbkRhdGFbdGFyZ2V0UHJpY2VGaWVsZF0gPSB0YXJnZXRQcmljZVZhbHVlXG4gICAgICA/ICh0YXJnZXRQcmljZVZhbHVlICsgcHJpY2UpLnRvRml4ZWQoMilcbiAgICAgIDogcHJpY2UudG9GaXhlZCgyKTtcblxuICAgIGVudGl0eS5jb25maWd1cmF0aW9uQXR0cmlidXRlcyA9IHRoaXMubWFwQXR0cmlidXRlc1RvKCdBdHRyaWJ1dGUnLCBsaW5lSXRlbSk7XG4gICAgZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhID0ge1xuICAgICAgLi4uZW50aXR5LmNvbmZpZ3VyYXRpb25EYXRhLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJ0ZpZWxkJywgbGluZUl0ZW0pLFxuICAgICAgLi4udGhpcy5tYXBBdHRyaWJ1dGVzVG8oJycsIGxpbmVJdGVtKSxcbiAgICAgIFZlbG9jZUluc3RhbmNlSWRfX2M6IGxpbmVJdGVtLmlkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOZXRQcmljZShsaW5lSXRlbTogTGluZUl0ZW0pOiBudW1iZXIge1xuICAgIGlmIChsaW5lSXRlbS5wcm9wZXJ0aWVzWydHcm91cENoYXJnZXMnXSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlR3JvdXBJdGVtcywgdGhpcy5nZXRDaGFyZ2VOYW1lU2V0KGxpbmVJdGVtLnByb3BlcnRpZXNbJ0dyb3VwQ2hhcmdlcyddKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3VtTmV0UHJpY2UobGluZUl0ZW0uY2hhcmdlSXRlbXMsIHRoaXMuZ2V0Q2hhcmdlTmFtZVNldChsaW5lSXRlbS5wcm9wZXJ0aWVzWydDaGFyZ2VzJ10pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hhcmdlTmFtZVNldChwcm9wZXJ0eT86IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQocHJvcGVydHkuc3BsaXQoJywnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VtTmV0UHJpY2UoY2hhcmdlSXRlbXM6IENoYXJnZUdyb3VwSXRlbVtdLCBjaGFyZ2VzOiBTZXQ8c3RyaW5nPik6IG51bWJlciB7XG4gICAgbGV0IG5ldFByaWNlID0gMDtcblxuICAgIGZvciAoY29uc3QgY2hhcmdlSXRlbSBvZiBjaGFyZ2VJdGVtcykge1xuICAgICAgaWYgKCFjaGFyZ2VzIHx8IGNoYXJnZXMuaGFzKGNoYXJnZUl0ZW0uY2hhcmdlVHlwZSkpIHtcbiAgICAgICAgbmV0UHJpY2UgKz0gY2hhcmdlSXRlbS5uZXRQcmljZSA/PyAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXRQcmljZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwQXR0cmlidXRlc1RvKHRhcmdldDogc3RyaW5nLCBsaW5lSXRlbTogTGluZUl0ZW0pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJ1bnRpbWVTZXJ2aWNlLnJ1bnRpbWVNb2RlbD8uY29tcG9uZW50cy5nZXQobGluZUl0ZW0udHlwZSk7XG5cbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSAnbWFwVG8nICsgdGFyZ2V0O1xuICAgIGNvbXBvbmVudC5hdHRyaWJ1dGVzXG4gICAgICAuZmlsdGVyKGEgPT4gYS5wcm9wZXJ0aWVzICYmIGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGxpbmVJdGVtLmF0dHJpYnV0ZXMuZmluZChhID0+IGEubmFtZSA9PT0gbWFwcGluZy5uYW1lKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgbmV3IFNldChtYXBwaW5nLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXT8uc3BsaXQoJywnKSkuZm9yRWFjaChrID0+IChyZXN1bHRba10gPSBhdHRyaWJ1dGUudmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25Db25maWd1cmF0aW9ucyhwcm9kdWN0OiBScGNQcm9kdWN0KTogUmVjb3JkPHN0cmluZywgUnBjT3B0aW9uQ29uZmlndXJhdGlvbltdPiB7XG4gICAgY29uc3Qgb3B0aW9uQ29uZmlndXJhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJwY09wdGlvbkNvbmZpZ3VyYXRpb25bXT4gPSB7fTtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uQ29uZmlndXJhdGlvbnMgPSBwcm9kdWN0Lm9wdGlvbkNvbmZpZ3VyYXRpb25zID8/IHt9O1xuXG4gICAgT2JqZWN0LmtleXMocmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgb3B0aW9uQ29uZmlndXJhdGlvbnNba10gPSAocmVxdWVzdE9wdGlvbkNvbmZpZ3VyYXRpb25zW2tdID8/IFtdKS5tYXAob3B0ID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4ub3B0LCBzZWxlY3RlZDogZmFsc2UgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9wdGlvbkNvbmZpZ3VyYXRpb25zO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUkIHwgYXN5bmMgYXMgc3RhdGVcIj5cbiAgPHZsLWxvYWRlciAqbmdJZj1cInN0YXRlLmxvYWRpbmc7IGVsc2UgY29udGVudFwiIFtsYWJlbF09XCInTG9hZGluZyBVSSdcIj48L3ZsLWxvYWRlcj5cblxuICA8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdGF0ZS5mYWlsdXJlXCI+XG4gICAgICA8dmwtY21zLXByZXZpZXcgW3VpRGVmaW5pdGlvbl09XCJ1aURlZmluaXRpb25cIj48L3ZsLWNtcy1wcmV2aWV3PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -1,28 +1,27 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Optional, } from '@angular/core';
2
2
  import { UITemplatesApiService } from '@veloceapps/api';
3
3
  import { ToastService, ToastType } from '@veloceapps/components';
4
- import { UITemplateComponentType, } from '@veloceapps/core';
4
+ import { btoaSafe } from '@veloceapps/sdk/cms';
5
+ import { FlowInfoService, FLOW_CUSTOMIZATION } from '@veloceapps/sdk/core';
5
6
  import { BehaviorSubject, catchError, map, of, Subject, switchMap, takeUntil, tap } from 'rxjs';
6
- import { FlowService } from '../../services';
7
- import { FLOW_CUSTOMIZATION } from '../../types';
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "@veloceapps/api";
10
9
  import * as i2 from "@veloceapps/components";
11
- import * as i3 from "../../services";
10
+ import * as i3 from "@veloceapps/sdk/core";
12
11
  import * as i4 from "@angular/common";
13
12
  import * as i5 from "@veloceapps/sdk/cms";
14
13
  export class ShoppingCartComponent {
15
- constructor(templatesApi, cdr, toastService, flowService, customizationService) {
14
+ constructor(templatesApi, cdr, toastService, flowInfo, customizationService) {
16
15
  this.templatesApi = templatesApi;
17
16
  this.cdr = cdr;
18
17
  this.toastService = toastService;
19
- this.flowService = flowService;
18
+ this.flowInfo = flowInfo;
20
19
  this.customizationService = customizationService;
21
20
  this.uiDefinition = undefined;
22
21
  this.state$ = new BehaviorSubject({ loading: true, failure: false });
23
22
  this.templateApiName = '';
24
23
  this.destroyed$ = new Subject();
25
- this.templateApiName = this.flowService.flow?.properties.templates.shoppingCart ?? '';
24
+ this.templateApiName = this.flowInfo.flow?.properties.templates?.shoppingCart ?? '';
26
25
  }
27
26
  ngOnInit() {
28
27
  this.generateUIDefinition$()
@@ -33,7 +32,7 @@ export class ShoppingCartComponent {
33
32
  this.uiDefinition = uiDef;
34
33
  this.state$.next({ loading: false, failure: false });
35
34
  }), catchError(err => {
36
- const message = 'Failed to resolve Shopping cart component. ' + (err.message ?? '');
35
+ const message = 'Failed to resolve Shopping Cart component. ' + (err.message ?? '');
37
36
  this.toastService.add({ severity: ToastType.error, summary: message, sticky: true });
38
37
  this.uiDefinition = undefined;
39
38
  this.state$.next({ loading: false, failure: true });
@@ -45,37 +44,36 @@ export class ShoppingCartComponent {
45
44
  this.destroyed$.next();
46
45
  this.destroyed$.complete();
47
46
  }
48
- getTemplateRootComponent$(template) {
49
- return this.templatesApi
50
- .fetchComponents$(template.id)
51
- .pipe(map(components => components.find(c => c.type === UITemplateComponentType.ROOT) ?? undefined));
52
- }
53
- getLocalShoppingCartComponentMeta$() {
54
- if (!this.customizationService?.getShoppingCartComponent) {
47
+ getLocalMeta$() {
48
+ if (!this.customizationService?.getTemplateComponents) {
55
49
  return of(undefined);
56
50
  }
57
- return this.customizationService?.getShoppingCartComponent(this.templateApiName).pipe(map(component => {
58
- if (!component) {
51
+ return this.customizationService?.getTemplateComponents(this.templateApiName).pipe(map(components => {
52
+ if (!components) {
59
53
  return;
60
54
  }
61
- return {
55
+ return components.map(component => ({
62
56
  html: component.html,
63
57
  css: component.css,
64
58
  js: component.js,
65
59
  json: component.json,
66
- };
60
+ }));
67
61
  }));
68
62
  }
69
- getShoppingCartComponentMeta$() {
70
- return this.templatesApi.fetchTemplates$().pipe(map(templates => templates.find(template => template.name === this.templateApiName)), switchMap(template => (template ? this.getTemplateRootComponent$(template) : of(undefined))), switchMap(component => component ? this.templatesApi.fetchComponentAttachments$(component.uiTemplateId, component) : of(undefined)));
63
+ getOrgMeta$() {
64
+ const template = this.flowInfo.templates.SHOPPING_CART;
65
+ if (!template) {
66
+ return of(undefined);
67
+ }
68
+ return this.templatesApi.fetchComponentsAttachments$(template.id);
71
69
  }
72
70
  generateUIDefinition$() {
73
71
  return of(undefined).pipe(tap(() => {
74
72
  if (!this.templateApiName) {
75
- throw new Error("Flow Query parameter 'cartTemplateApiName' is missing.");
73
+ throw new Error("Flow 'shoppingCart' template is not defined.");
76
74
  }
77
- }), switchMap(() => this.getLocalShoppingCartComponentMeta$()), switchMap(meta => (meta ? of(meta) : this.getShoppingCartComponentMeta$())), map(meta => {
78
- if (!meta) {
75
+ }), switchMap(() => this.getLocalMeta$()), switchMap(metaList => (metaList ? of(metaList) : this.getOrgMeta$())), map(metaList => {
76
+ if (!metaList) {
79
77
  return;
80
78
  }
81
79
  const uiDef = {
@@ -84,28 +82,26 @@ export class ShoppingCartComponent {
84
82
  primary: true,
85
83
  type: 'DEFAULT',
86
84
  version: 2,
87
- children: [
88
- {
89
- children: [],
90
- template: meta.html && btoa(meta.html),
91
- script: meta.js && btoa(meta.js),
92
- styles: meta.css && btoa(meta.css),
93
- },
94
- ],
85
+ children: metaList.map(meta => ({
86
+ children: [],
87
+ template: meta.html && btoaSafe(meta.html),
88
+ script: meta.js && btoaSafe(meta.js),
89
+ styles: meta.css && btoaSafe(meta.css),
90
+ })),
95
91
  };
96
92
  return uiDef;
97
93
  }));
98
94
  }
99
95
  }
100
- ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3.FlowService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
96
+ ShoppingCartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, deps: [{ token: i1.UITemplatesApiService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3.FlowInfoService }, { token: FLOW_CUSTOMIZATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
101
97
  ShoppingCartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ShoppingCartComponent, selector: "vl-flow-shopping-cart", ngImport: i0, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PreviewComponent, selector: "vl-cms-preview", inputs: ["uiDefinition", "config"] }, { kind: "component", type: i2.LoaderComponent, selector: "vl-loader", inputs: ["label", "overlayVisible"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
102
98
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ShoppingCartComponent, decorators: [{
103
99
  type: Component,
104
100
  args: [{ selector: 'vl-flow-shopping-cart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"state$ | async as state\">\n <vl-loader *ngIf=\"state.loading; else content\" [label]=\"'Loading UI'\"></vl-loader>\n\n <ng-template #content>\n <ng-container *ngIf=\"!state.failure\">\n <vl-cms-preview [uiDefinition]=\"uiDefinition\"></vl-cms-preview>\n </ng-container>\n </ng-template>\n</ng-container>\n" }]
105
- }], ctorParameters: function () { return [{ type: i1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.FlowService }, { type: undefined, decorators: [{
101
+ }], ctorParameters: function () { return [{ type: i1.UITemplatesApiService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.FlowInfoService }, { type: undefined, decorators: [{
106
102
  type: Optional
107
103
  }, {
108
104
  type: Inject,
109
105
  args: [FLOW_CUSTOMIZATION]
110
106
  }] }]; } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFHTixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBS0wsdUJBQXVCLEdBQ3hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7QUFhcEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNVLFlBQW1DLEVBQ25DLEdBQXNCLEVBQ3RCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ2dCLG9CQUF3QztRQUpoRixpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7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QUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLEVBQzNFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsT0FBTzthQUNSO1lBRUQsTUFBTSxLQUFLLEdBQWlCO2dCQUMxQixJQUFJLEVBQUUsRUFBRTtnQkFDUixnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsQ0FBQztnQkFDVixRQUFRLEVBQUU7b0JBQ1I7d0JBQ0UsUUFBUSxFQUFFLEVBQUU7d0JBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNoQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDbkM7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7a0hBdEhVLHFCQUFxQiwrSUFZVixrQkFBa0I7c0dBWjdCLHFCQUFxQiw2RENqQ2xDLHdWQVNBOzJGRHdCYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFjNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSwgVG9hc3RUeXBlIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRBdHRhY2htZW50cyxcbiAgVGVtcGxhdGVDb21wb25lbnQsXG4gIFVJRGVmaW5pdGlvbixcbiAgVUlUZW1wbGF0ZSxcbiAgVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEZsb3dDdXN0b21pemF0aW9uLCBGTE9XX0NVU1RPTUlaQVRJT04gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmludGVyZmFjZSBTdGF0ZSB7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGZhaWx1cmU6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZsLWZsb3ctc2hvcHBpbmctY2FydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2hvcHBpbmdDYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgdWlEZWZpbml0aW9uPzogVUlEZWZpbml0aW9uID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGF0ZT4oeyBsb2FkaW5nOiB0cnVlLCBmYWlsdXJlOiBmYWxzZSB9KTtcblxuICBwcml2YXRlIHRlbXBsYXRlQXBpTmFtZSA9ICcnO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGVtcGxhdGVzQXBpOiBVSVRlbXBsYXRlc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93U2VydmljZTogRmxvd1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGTE9XX0NVU1RPTUlaQVRJT04pIHByaXZhdGUgY3VzdG9taXphdGlvblNlcnZpY2U/OiBGbG93Q3VzdG9taXphdGlvbixcbiAgKSB7XG4gICAgdGhpcy50ZW1wbGF0ZUFwaU5hbWUgPSB0aGlzLmZsb3dTZXJ2aWNlLmZsb3c/LnByb3BlcnRpZXMudGVtcGxhdGVzLnNob3BwaW5nQ2FydCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlVUlEZWZpbml0aW9uJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHVpRGVmID0+IHtcbiAgICAgICAgICBpZiAoIXVpRGVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB3aXRoIG5hbWUgJyR7dGhpcy50ZW1wbGF0ZUFwaU5hbWV9JyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSB1aURlZjtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IGZhbHNlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnRmFpbGVkIHRvIHJlc29sdmUgU2hvcHBpbmcgY2FydCBjb21wb25lbnQuICcgKyAoZXJyLm1lc3NhZ2UgPz8gJycpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IG1lc3NhZ2UsIHN0aWNreTogdHJ1ZSB9KTtcblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGU6IFVJVGVtcGxhdGUpOiBPYnNlcnZhYmxlPFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpXG4gICAgICAuZmV0Y2hDb21wb25lbnRzJCh0ZW1wbGF0ZS5pZClcbiAgICAgIC5waXBlKG1hcChjb21wb25lbnRzID0+IGNvbXBvbmVudHMuZmluZChjID0+IGMudHlwZSA9PT0gVUlUZW1wbGF0ZUNvbXBvbmVudFR5cGUuUk9PVCkgPz8gdW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU2hvcHBpbmdDYXJ0Q29tcG9uZW50TWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50cyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXN0b21pemF0aW9uU2VydmljZT8uZ2V0U2hvcHBpbmdDYXJ0Q29tcG9uZW50KHRoaXMudGVtcGxhdGVBcGlOYW1lKS5waXBlKFxuICAgICAgbWFwKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxDb21wb25lbnRBdHRhY2htZW50cz57XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpOiBPYnNlcnZhYmxlPENvbXBvbmVudEF0dGFjaG1lbnRzIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzQXBpLmZldGNoVGVtcGxhdGVzJCgpLnBpcGUoXG4gICAgICBtYXA8VUlUZW1wbGF0ZVtdLCBVSVRlbXBsYXRlIHwgdW5kZWZpbmVkPih0ZW1wbGF0ZXMgPT5cbiAgICAgICAgdGVtcGxhdGVzLmZpbmQodGVtcGxhdGUgPT4gdGVtcGxhdGUubmFtZSA9PT0gdGhpcy50ZW1wbGF0ZUFwaU5hbWUpLFxuICAgICAgKSxcbiAgICAgIHN3aXRjaE1hcCh0ZW1wbGF0ZSA9PiAodGVtcGxhdGUgPyB0aGlzLmdldFRlbXBsYXRlUm9vdENvbXBvbmVudCQodGVtcGxhdGUpIDogb2YodW5kZWZpbmVkKSkpLFxuICAgICAgc3dpdGNoTWFwKGNvbXBvbmVudCA9PlxuICAgICAgICBjb21wb25lbnQgPyB0aGlzLnRlbXBsYXRlc0FwaS5mZXRjaENvbXBvbmVudEF0dGFjaG1lbnRzJChjb21wb25lbnQudWlUZW1wbGF0ZUlkLCBjb21wb25lbnQpIDogb2YodW5kZWZpbmVkKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93IFF1ZXJ5IHBhcmFtZXRlciAnY2FydFRlbXBsYXRlQXBpTmFtZScgaXMgbWlzc2luZy5cIik7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0TG9jYWxTaG9wcGluZ0NhcnRDb21wb25lbnRNZXRhJCgpKSxcbiAgICAgIHN3aXRjaE1hcChtZXRhID0+IChtZXRhID8gb2YobWV0YSkgOiB0aGlzLmdldFNob3BwaW5nQ2FydENvbXBvbmVudE1ldGEkKCkpKSxcbiAgICAgIG1hcChtZXRhID0+IHtcbiAgICAgICAgaWYgKCFtZXRhKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWlEZWY6IFVJRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBjcmVhdGVkVGltZXN0YW1wOiAwLFxuICAgICAgICAgIHByaW1hcnk6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ0RFRkFVTFQnLFxuICAgICAgICAgIHZlcnNpb246IDIsXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZTogbWV0YS5odG1sICYmIGJ0b2EobWV0YS5odG1sKSxcbiAgICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2EobWV0YS5qcyksXG4gICAgICAgICAgICAgIHN0eWxlczogbWV0YS5jc3MgJiYgYnRvYShtZXRhLmNzcyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHVpRGVmO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCI+XG4gIDx2bC1sb2FkZXIgKm5nSWY9XCJzdGF0ZS5sb2FkaW5nOyBlbHNlIGNvbnRlbnRcIiBbbGFiZWxdPVwiJ0xvYWRpbmcgVUknXCI+PC92bC1sb2FkZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhdGUuZmFpbHVyZVwiPlxuICAgICAgPHZsLWNtcy1wcmV2aWV3IFt1aURlZmluaXRpb25dPVwidWlEZWZpbml0aW9uXCI+PC92bC1jbXMtcHJldmlldz5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Nkay9zcmMvcGFnZXMvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9wYWdlcy9zaG9wcGluZy1jYXJ0L3Nob3BwaW5nLWNhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULE1BQU0sRUFHTixRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFxQixlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQWE1RyxNQUFNLE9BQU8scUJBQXFCO0lBT2hDLFlBQ1UsWUFBbUMsRUFDbkMsR0FBc0IsRUFDdEIsWUFBMEIsRUFDMUIsUUFBeUIsRUFDZSxvQkFBd0M7UUFKaEYsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBQ25DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ2UseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFvQjtRQVhu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QUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDdkMsQ0FBQyxDQUFDO2FBQ0osQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7O2tIQTNHVSxxQkFBcUIsbUpBWVYsa0JBQWtCO3NHQVo3QixxQkFBcUIsNkRDM0JsQyx3VkFTQTsyRkRrQmEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBYzVDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJVGVtcGxhdGVzQXBpU2VydmljZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2FwaSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UsIFRvYXN0VHlwZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50QXR0YWNobWVudHMsIFVJRGVmaW5pdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgYnRvYVNhZmUgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY21zJztcbmltcG9ydCB7IEZsb3dDdXN0b21pemF0aW9uLCBGbG93SW5mb1NlcnZpY2UsIEZMT1dfQ1VTVE9NSVpBVElPTiB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbnRlcmZhY2UgU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBmYWlsdXJlOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1mbG93LXNob3BwaW5nLWNhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hvcHBpbmctY2FydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Nob3BwaW5nLWNhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNob3BwaW5nQ2FydENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHVpRGVmaW5pdGlvbj86IFVJRGVmaW5pdGlvbiA9IHVuZGVmaW5lZDtcbiAgcHVibGljIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhdGU+KHsgbG9hZGluZzogdHJ1ZSwgZmFpbHVyZTogZmFsc2UgfSk7XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUFwaU5hbWUgPSAnJztcbiAgcHJpdmF0ZSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRlbXBsYXRlc0FwaTogVUlUZW1wbGF0ZXNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0luZm86IEZsb3dJbmZvU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZMT1dfQ1VTVE9NSVpBVElPTikgcHJpdmF0ZSBjdXN0b21pemF0aW9uU2VydmljZT86IEZsb3dDdXN0b21pemF0aW9uLFxuICApIHtcbiAgICB0aGlzLnRlbXBsYXRlQXBpTmFtZSA9IHRoaXMuZmxvd0luZm8uZmxvdz8ucHJvcGVydGllcy50ZW1wbGF0ZXM/LnNob3BwaW5nQ2FydCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRlVUlEZWZpbml0aW9uJCgpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHVpRGVmID0+IHtcbiAgICAgICAgICBpZiAoIXVpRGVmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB3aXRoIG5hbWUgJyR7dGhpcy50ZW1wbGF0ZUFwaU5hbWV9JyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy51aURlZmluaXRpb24gPSB1aURlZjtcbiAgICAgICAgICB0aGlzLnN0YXRlJC5uZXh0KHsgbG9hZGluZzogZmFsc2UsIGZhaWx1cmU6IGZhbHNlIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnRmFpbGVkIHRvIHJlc29sdmUgU2hvcHBpbmcgQ2FydCBjb21wb25lbnQuICcgKyAoZXJyLm1lc3NhZ2UgPz8gJycpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiBUb2FzdFR5cGUuZXJyb3IsIHN1bW1hcnk6IG1lc3NhZ2UsIHN0aWNreTogdHJ1ZSB9KTtcblxuICAgICAgICAgIHRoaXMudWlEZWZpbml0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuc3RhdGUkLm5leHQoeyBsb2FkaW5nOiBmYWxzZSwgZmFpbHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsTWV0YSQoKTogT2JzZXJ2YWJsZTxDb21wb25lbnRBdHRhY2htZW50c1tdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbXBvbmVudHMpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmN1c3RvbWl6YXRpb25TZXJ2aWNlPy5nZXRUZW1wbGF0ZUNvbXBvbmVudHModGhpcy50ZW1wbGF0ZUFwaU5hbWUpLnBpcGUoXG4gICAgICBtYXAoY29tcG9uZW50cyA9PiB7XG4gICAgICAgIGlmICghY29tcG9uZW50cykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLm1hcDxDb21wb25lbnRBdHRhY2htZW50cz4oY29tcG9uZW50ID0+ICh7XG4gICAgICAgICAgaHRtbDogY29tcG9uZW50Lmh0bWwsXG4gICAgICAgICAgY3NzOiBjb21wb25lbnQuY3NzLFxuICAgICAgICAgIGpzOiBjb21wb25lbnQuanMsXG4gICAgICAgICAganNvbjogY29tcG9uZW50Lmpzb24sXG4gICAgICAgIH0pKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE9yZ01ldGEkKCk6IE9ic2VydmFibGU8Q29tcG9uZW50QXR0YWNobWVudHNbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5mbG93SW5mby50ZW1wbGF0ZXMuU0hPUFBJTkdfQ0FSVDtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXNBcGkuZmV0Y2hDb21wb25lbnRzQXR0YWNobWVudHMkKHRlbXBsYXRlLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVVSURlZmluaXRpb24kKCk6IE9ic2VydmFibGU8VUlEZWZpbml0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZUFwaU5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGbG93ICdzaG9wcGluZ0NhcnQnIHRlbXBsYXRlIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXRMb2NhbE1ldGEkKCkpLFxuICAgICAgc3dpdGNoTWFwKG1ldGFMaXN0ID0+IChtZXRhTGlzdCA/IG9mKG1ldGFMaXN0KSA6IHRoaXMuZ2V0T3JnTWV0YSQoKSkpLFxuICAgICAgbWFwKG1ldGFMaXN0ID0+IHtcbiAgICAgICAgaWYgKCFtZXRhTGlzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVpRGVmOiBVSURlZmluaXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgY3JlYXRlZFRpbWVzdGFtcDogMCxcbiAgICAgICAgICBwcmltYXJ5OiB0cnVlLFxuICAgICAgICAgIHR5cGU6ICdERUZBVUxUJyxcbiAgICAgICAgICB2ZXJzaW9uOiAyLFxuICAgICAgICAgIGNoaWxkcmVuOiBtZXRhTGlzdC5tYXAobWV0YSA9PiAoe1xuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgdGVtcGxhdGU6IG1ldGEuaHRtbCAmJiBidG9hU2FmZShtZXRhLmh0bWwpLFxuICAgICAgICAgICAgc2NyaXB0OiBtZXRhLmpzICYmIGJ0b2FTYWZlKG1ldGEuanMpLFxuICAgICAgICAgICAgc3R5bGVzOiBtZXRhLmNzcyAmJiBidG9hU2FmZShtZXRhLmNzcyksXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB1aURlZjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiPlxuICA8dmwtbG9hZGVyICpuZ0lmPVwic3RhdGUubG9hZGluZzsgZWxzZSBjb250ZW50XCIgW2xhYmVsXT1cIidMb2FkaW5nIFVJJ1wiPjwvdmwtbG9hZGVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0YXRlLmZhaWx1cmVcIj5cbiAgICAgIDx2bC1jbXMtcHJldmlldyBbdWlEZWZpbml0aW9uXT1cInVpRGVmaW5pdGlvblwiPjwvdmwtY21zLXByZXZpZXc+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==