@vendure/admin-ui 1.4.7 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +134 -143
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +329 -269
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-customer.umd.js +51 -20
  6. package/bundles/vendure-admin-ui-customer.umd.js.map +1 -1
  7. package/bundles/vendure-admin-ui-order.umd.js +109 -19
  8. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  9. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  10. package/bundles/vendure-admin-ui-system.umd.js.map +1 -1
  11. package/catalog/components/{product-assets/product-assets.component.d.ts → assets/assets.component.d.ts} +4 -10
  12. package/catalog/components/product-detail/product-detail.component.d.ts +2 -1
  13. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +2 -1
  14. package/catalog/public_api.d.ts +1 -1
  15. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  16. package/core/common/generated-types.d.ts +109 -6
  17. package/core/common/version.d.ts +1 -1
  18. package/core/data/definitions/customer-definitions.d.ts +1 -0
  19. package/core/data/providers/customer-data.service.d.ts +1 -0
  20. package/core/data/providers/promotion-data.service.d.ts +2 -2
  21. package/core/public_api.d.ts +2 -0
  22. package/core/shared/components/asset-preview-links/asset-preview-links.component.d.ts +5 -0
  23. package/core/shared/components/object-tree/object-tree.component.d.ts +3 -3
  24. package/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.d.ts +15 -0
  25. package/core/vendure-admin-ui-core.metadata.json +1 -1
  26. package/customer/components/address-card/address-card.component.d.ts +2 -0
  27. package/customer/components/customer-detail/customer-detail.component.d.ts +2 -0
  28. package/customer/components/customer-list/customer-list.component.d.ts +1 -2
  29. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  30. package/esm2015/catalog/catalog.module.js +3 -3
  31. package/esm2015/catalog/components/assets/assets.component.js +93 -0
  32. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +2 -2
  33. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +3 -3
  34. package/esm2015/catalog/components/product-detail/product-detail.component.js +4 -3
  35. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +9 -2
  36. package/esm2015/catalog/public_api.js +2 -2
  37. package/esm2015/core/common/generated-types.js +30 -1
  38. package/esm2015/core/common/introspection-result.js +189 -249
  39. package/esm2015/core/common/utilities/configurable-operation-utils.js +21 -3
  40. package/esm2015/core/common/version.js +2 -2
  41. package/esm2015/core/data/definitions/customer-definitions.js +8 -1
  42. package/esm2015/core/data/definitions/order-definitions.js +2 -1
  43. package/esm2015/core/data/providers/customer-data.service.js +5 -2
  44. package/esm2015/core/data/providers/interceptor.js +1 -1
  45. package/esm2015/core/data/providers/promotion-data.service.js +3 -2
  46. package/esm2015/core/data/providers/shipping-method-data.service.js +1 -1
  47. package/esm2015/core/data/utils/remove-readonly-custom-fields.js +1 -1
  48. package/esm2015/core/public_api.js +3 -1
  49. package/esm2015/core/shared/components/address-form/address-form.component.js +1 -1
  50. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +2 -2
  51. package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +4 -4
  52. package/esm2015/core/shared/components/asset-preview-links/asset-preview-links.component.js +18 -0
  53. package/esm2015/core/shared/components/object-tree/object-tree.component.js +3 -3
  54. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.js +48 -0
  55. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +2 -2
  56. package/esm2015/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.js +1 -1
  57. package/esm2015/core/shared/shared.module.js +5 -1
  58. package/esm2015/customer/components/address-card/address-card.component.js +9 -3
  59. package/esm2015/customer/components/customer-detail/customer-detail.component.js +35 -13
  60. package/esm2015/customer/components/customer-list/customer-list.component.js +12 -9
  61. package/esm2015/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.js +1 -1
  62. package/esm2015/order/components/cancel-order-dialog/cancel-order-dialog.component.js +36 -6
  63. package/esm2015/order/components/fulfill-order-dialog/fulfill-order-dialog.component.js +1 -1
  64. package/esm2015/order/components/line-refunds/line-refunds.component.js +1 -1
  65. package/esm2015/order/components/modification-detail/modification-detail.component.js +1 -1
  66. package/esm2015/order/components/order-detail/order-detail.component.js +2 -2
  67. package/esm2015/order/components/order-editor/order-editor.component.js +23 -8
  68. package/esm2015/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.js +1 -1
  69. package/esm2015/order/components/order-history/order-history.component.js +2 -2
  70. package/esm2015/order/components/order-list/order-list.component.js +1 -1
  71. package/esm2015/order/components/order-table/order-table.component.js +3 -3
  72. package/esm2015/order/components/refund-order-dialog/refund-order-dialog.component.js +10 -5
  73. package/esm2015/order/order.routes.js +1 -1
  74. package/esm2015/settings/components/role-list/role-list.component.js +1 -1
  75. package/esm2015/settings/components/test-order-builder/test-order-builder.component.js +1 -1
  76. package/esm2015/settings/providers/routing/shipping-method-resolver.js +1 -1
  77. package/esm2015/system/components/job-list/job-list.component.js +1 -1
  78. package/fesm2015/vendure-admin-ui-catalog.js +105 -111
  79. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  80. package/fesm2015/vendure-admin-ui-core.js +310 -249
  81. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  82. package/fesm2015/vendure-admin-ui-customer.js +53 -22
  83. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  84. package/fesm2015/vendure-admin-ui-order.js +69 -19
  85. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  86. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  87. package/fesm2015/vendure-admin-ui-system.js.map +1 -1
  88. package/order/components/cancel-order-dialog/cancel-order-dialog.component.d.ts +3 -0
  89. package/order/components/order-editor/order-editor.component.d.ts +8 -2
  90. package/order/vendure-admin-ui-order.metadata.json +1 -1
  91. package/package.json +5 -5
  92. package/static/i18n-messages/cs.json +7 -1
  93. package/static/i18n-messages/de.json +7 -1
  94. package/static/i18n-messages/en.json +9 -3
  95. package/static/i18n-messages/es.json +7 -1
  96. package/static/i18n-messages/fr.json +7 -1
  97. package/static/i18n-messages/it.json +7 -1
  98. package/static/i18n-messages/pl.json +7 -1
  99. package/static/i18n-messages/pt_BR.json +7 -1
  100. package/static/i18n-messages/pt_PT.json +7 -1
  101. package/static/i18n-messages/ru.json +7 -1
  102. package/static/i18n-messages/uk.json +7 -1
  103. package/static/i18n-messages/zh_Hans.json +7 -1
  104. package/static/i18n-messages/zh_Hant.json +7 -1
  105. package/static/styles/global/_overrides.scss +6 -0
  106. package/static/theme.min.css +1 -1
  107. package/static/vendure-ui-config.json +25 -10
  108. package/esm2015/catalog/components/product-assets/product-assets.component.js +0 -108
@@ -3,8 +3,8 @@ import { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
4
  import { BaseDetailComponent, DataService, HistoryEntryType, ModalService, NotificationService, ServerConfigService, SortOrder, } from '@vendure/admin-ui/core';
5
5
  import { assertNever, notNullOrUndefined } from '@vendure/common/lib/shared-utils';
6
- import { EMPTY, of } from 'rxjs';
7
- import { mapTo, shareReplay, switchMap, takeUntil } from 'rxjs/operators';
6
+ import { concat, EMPTY, of, Subject } from 'rxjs';
7
+ import { distinctUntilChanged, map, mapTo, shareReplay, startWith, switchMap, takeUntil, } from 'rxjs/operators';
8
8
  import { OrderTransitionService } from '../../providers/order-transition.service';
9
9
  import { OrderEditResultType, OrderEditsPreviewDialogComponent, } from '../order-edits-preview-dialog/order-edits-preview-dialog.component';
10
10
  export class OrderEditorComponent extends BaseDetailComponent {
@@ -15,7 +15,9 @@ export class OrderEditorComponent extends BaseDetailComponent {
15
15
  this.notificationService = notificationService;
16
16
  this.modalService = modalService;
17
17
  this.orderTransitionService = orderTransitionService;
18
+ this.couponCodeInput$ = new Subject();
18
19
  this.detailForm = new FormGroup({});
20
+ this.couponCodesControl = new FormControl();
19
21
  this.modifyOrderInput = {
20
22
  dryRun: true,
21
23
  orderId: '',
@@ -43,11 +45,15 @@ export class OrderEditorComponent extends BaseDetailComponent {
43
45
  }
44
46
  ngOnInit() {
45
47
  this.init();
48
+ this.dataService.promotion.getPromotions();
46
49
  this.addressCustomFields = this.getCustomFieldConfig('Address');
47
50
  this.modifyOrderInput.orderId = this.route.snapshot.paramMap.get('id');
48
51
  this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');
49
52
  this.entity$.pipe(takeUntil(this.destroy$)).subscribe(order => {
50
53
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
54
+ if (order.couponCodes.length) {
55
+ this.couponCodesControl.setValue(order.couponCodes);
56
+ }
51
57
  this.surchargeForm = new FormGroup({
52
58
  description: new FormControl('', Validators.required),
53
59
  sku: new FormControl(''),
@@ -106,6 +112,11 @@ export class OrderEditorComponent extends BaseDetailComponent {
106
112
  this.orderLineCustomFieldsFormArray.push(formGroup);
107
113
  }
108
114
  });
115
+ this.availableCouponCodes$ = concat(this.couponCodeInput$.pipe(distinctUntilChanged(), switchMap(term => this.dataService.promotion.getPromotions(10, 0, {
116
+ couponCode: { contains: term },
117
+ }).single$), map(({ promotions }) =>
118
+ // tslint:disable-next-line:no-non-null-assertion
119
+ promotions.items.map(p => ({ code: p.couponCode, promotionName: p.name }))), startWith([])));
109
120
  this.addItemCustomFieldsFormArray = new FormArray([]);
110
121
  this.addItemCustomFieldsForm = new FormGroup({});
111
122
  for (const customField of this.orderLineCustomFields) {
@@ -143,7 +154,8 @@ export class OrderEditorComponent extends BaseDetailComponent {
143
154
  !!(surcharges === null || surcharges === void 0 ? void 0 : surcharges.length) ||
144
155
  !!(adjustOrderLines === null || adjustOrderLines === void 0 ? void 0 : adjustOrderLines.length) ||
145
156
  (this.shippingAddressForm.dirty && this.shippingAddressForm.valid) ||
146
- (this.billingAddressForm.dirty && this.billingAddressForm.valid));
157
+ (this.billingAddressForm.dirty && this.billingAddressForm.valid) ||
158
+ this.couponCodesControl.dirty);
147
159
  }
148
160
  isLineModified(line) {
149
161
  var _a;
@@ -255,7 +267,7 @@ export class OrderEditorComponent extends BaseDetailComponent {
255
267
  var _a;
256
268
  const input = Object.assign(Object.assign(Object.assign(Object.assign({}, this.modifyOrderInput), (this.billingAddressForm.dirty ? { updateBillingAddress: this.billingAddressForm.value } : {})), (this.shippingAddressForm.dirty
257
269
  ? { updateShippingAddress: this.shippingAddressForm.value }
258
- : {})), { dryRun: true, note: (_a = this.note) !== null && _a !== void 0 ? _a : '', options: {
270
+ : {})), { dryRun: true, couponCodes: this.couponCodesControl.dirty ? this.couponCodesControl.value : undefined, note: (_a = this.note) !== null && _a !== void 0 ? _a : '', options: {
259
271
  recalculateShipping: this.recalculateShipping,
260
272
  } });
261
273
  const originalTotalWithTax = order.totalWithTax;
@@ -280,7 +292,10 @@ export class OrderEditorComponent extends BaseDetailComponent {
280
292
  case 'OrderLimitError':
281
293
  case 'OrderModificationStateError':
282
294
  case 'PaymentMethodMissingError':
283
- case 'RefundPaymentIdMissingError': {
295
+ case 'RefundPaymentIdMissingError':
296
+ case 'CouponCodeLimitError':
297
+ case 'CouponCodeExpiredError':
298
+ case 'CouponCodeInvalidError': {
284
299
  this.notificationService.error(modifyOrder.message);
285
300
  return of(false);
286
301
  }
@@ -344,9 +359,9 @@ export class OrderEditorComponent extends BaseDetailComponent {
344
359
  OrderEditorComponent.decorators = [
345
360
  { type: Component, args: [{
346
361
  selector: 'vdr-order-editor',
347
- template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\"\r\n ><vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input\r\n ></vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\"\r\n ><vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\" /></vdr-affixed-input\r\n ></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
362
+ template: "<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"couponCodesControl\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip> {{ item.promotionName }}\r\n </ng-template>\r\n </ng-select>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\"\r\n ><vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input\r\n ></vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\"\r\n ><vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\" /></vdr-affixed-input\r\n ></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
348
363
  changeDetection: ChangeDetectionStrategy.OnPush,
349
- styles: [".order-table .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}.order-table .sub-total td{border-top:1px dashed var(--color-component-border-200)}.order-table .total td{font-weight:bold;border-top:1px dashed var(--color-component-border-200)}.order-table td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}.order-table .order-line-custom-fields{display:flex;flex-wrap:wrap}.order-table .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}.order-table .order-line-custom-field{background-color:var(--color-component-bg-100)}.order-table .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}.order-table .net-price{font-size:11px;color:var(--color-text-300)}.order-table .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}.order-table tr.modified td{background-color:var(--color-warning-100)}\n"]
364
+ styles: [".order-table .is-cancelled td{text-decoration:line-through;background-color:var(--color-component-bg-200)}.order-table .sub-total td{border-top:1px dashed var(--color-component-border-200)}.order-table .total td{font-weight:bold;border-top:1px dashed var(--color-component-border-200)}.order-table td.custom-fields-row{border-top-style:dashed;border-top-color:var(--color-grey-200)}.order-table .order-line-custom-fields{display:flex;flex-wrap:wrap}.order-table .order-line-custom-fields .custom-field{text-align:start;max-width:200px;overflow:hidden;text-overflow:ellipsis;margin-bottom:6px;margin-right:18px}.order-table .order-line-custom-field{background-color:var(--color-component-bg-100)}.order-table .order-line-custom-field .custom-field-ellipsis{color:var(--color-text-300)}.order-table .net-price{font-size:11px;color:var(--color-text-300)}.order-table .promotions-label{-webkit-text-decoration:underline dotted var(--color-text-200);text-decoration:underline dotted var(--color-text-200);font-size:11px;margin-top:6px;cursor:pointer;text-transform:lowercase}.order-table .thumb img{width:50px;height:50px}.order-table tr.modified td{background-color:var(--color-warning-100)}\n"]
350
365
  },] }
351
366
  ];
352
367
  OrderEditorComponent.ctorParameters = () => [
@@ -359,4 +374,4 @@ OrderEditorComponent.ctorParameters = () => [
359
374
  { type: ModalService },
360
375
  { type: OrderTransitionService }
361
376
  ];
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZWRpdG9yL29yZGVyLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUdILG1CQUFtQixFQUVuQixXQUFXLEVBR1gsZ0JBQWdCLEVBRWhCLFlBQVksRUFFWixtQkFBbUIsRUFJbkIsbUJBQW1CLEVBQ25CLFNBQVMsR0FFWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUNILG1CQUFtQixFQUNuQixnQ0FBZ0MsR0FDbkMsTUFBTSxvRUFBb0UsQ0FBQztBQXVCNUUsTUFBTSxPQUFPLG9CQUNULFNBQVEsbUJBQXlDO0lBNEJqRCxZQUNJLE1BQWMsRUFDZCxLQUFxQixFQUNyQixtQkFBd0MsRUFDaEMsY0FBaUMsRUFDL0IsV0FBd0IsRUFDMUIsbUJBQXdDLEVBQ3hDLFlBQTBCLEVB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LG1CQUFtQixFQUFFO2dCQUNuRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxNQUFDLE9BQWUsQ0FBQyxZQUFZLDBDQUFHLElBQUksQ0FBQyxDQUFDO2dCQUNwRCw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDekU7WUFDRCxlQUFlLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVTLGFBQWEsQ0FBQyxNQUE0QixFQUFFLFlBQTBCO1FBQzVFLGNBQWM7SUFDbEIsQ0FBQzs7O1lBcFpKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1Qiw0NHBCQUE0QztnQkFFNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2xEOzs7WUFuRHdCLE1BQU07WUFBdEIsY0FBYztZQWlCbkIsbUJBQW1CO1lBbkJXLGlCQUFpQjtZQVEvQyxXQUFXO1lBT1gsbUJBQW1CO1lBRm5CLFlBQVk7WUFjUCxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICAgIEFkZEl0ZW1JbnB1dCxcclxuICAgIEFkanVzdE9yZGVyTGluZUlucHV0LFxyXG4gICAgQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIEN1c3RvbUZpZWxkQ29uZmlnLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBFcnJvclJlc3VsdCxcclxuICAgIEdldEF2YWlsYWJsZUNvdW50cmllcyxcclxuICAgIEhpc3RvcnlFbnRyeVR5cGUsXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBNb2RpZnlPcmRlcklucHV0LFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIE9yZGVyQWRkcmVzc0ZyYWdtZW50LFxyXG4gICAgT3JkZXJEZXRhaWwsXHJcbiAgICBQcm9kdWN0U2VsZWN0b3JTZWFyY2gsXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgU29ydE9yZGVyLFxyXG4gICAgU3VyY2hhcmdlSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydE5ldmVyLCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXBUbywgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgT3JkZXJUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9vcmRlci10cmFuc2l0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gICAgT3JkZXJFZGl0UmVzdWx0VHlwZSxcclxuICAgIE9yZGVyRWRpdHNQcmV2aWV3RGlhbG9nQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgQWRkZWRMaW5lIHtcclxuICAgIHByb2R1Y3RWYXJpYW50SWQ6IHN0cmluZztcclxuICAgIHByb2R1Y3RBc3NldD86IFByb2R1Y3RTZWxlY3RvclNlYXJjaC5Qcm9kdWN0QXNzZXQgfCBudWxsO1xyXG4gICAgcHJvZHVjdFZhcmlhbnROYW1lOiBzdHJpbmc7XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIHByaWNlV2l0aFRheDogbnVtYmVyO1xyXG4gICAgcHJpY2U6IG51bWJlcjtcclxuICAgIHF1YW50aXR5OiBudW1iZXI7XHJcbn1cclxuXHJcbnR5cGUgTW9kaWZ5T3JkZXJEYXRhID0gT21pdDxNb2RpZnlPcmRlcklucHV0LCAnYWRkSXRlbXMnIHwgJ2FkanVzdE9yZGVyTGluZXMnPiAmIHtcclxuICAgIGFkZEl0ZW1zOiBBcnJheTxBZGRJdGVtSW5wdXQgJiB7IGN1c3RvbUZpZWxkcz86IGFueSB9PjtcclxuICAgIGFkanVzdE9yZGVyTGluZXM6IEFycmF5PEFkanVzdE9yZGVyTGluZUlucHV0ICYgeyBjdXN0b21GaWVsZHM/OiBhbnkgfT47XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLW9yZGVyLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcmRlckVkaXRvckNvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBCYXNlRGV0YWlsQ29tcG9uZW50PE9yZGVyRGV0YWlsLkZyYWdtZW50PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBhdmFpbGFibGVDb3VudHJpZXMkOiBPYnNlcnZhYmxlPEdldEF2YWlsYWJsZUNvdW50cmllcy5JdGVtc1tdPjtcclxuICAgIGFkZHJlc3NDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBkZXRhaWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICBvcmRlckxpbmVDdXN0b21GaWVsZHNGb3JtQXJyYXk6IEZvcm1BcnJheTtcclxuICAgIGFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtQXJyYXk6IEZvcm1BcnJheTtcclxuICAgIGFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBhZGRJdGVtU2VsZWN0ZWRWYXJpYW50OiBQcm9kdWN0U2VsZWN0b3JTZWFyY2guSXRlbXMgfCB1bmRlZmluZWQ7XHJcbiAgICBvcmRlckxpbmVDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBtb2RpZnlPcmRlcklucHV0OiBNb2RpZnlPcmRlckRhdGEgPSB7XHJcbiAgICAgICAgZHJ5UnVuOiB0cnVlLFxyXG4gICAgICAgIG9yZGVySWQ6ICcnLFxyXG4gICAgICAgIGFkZEl0ZW1zOiBbXSxcclxuICAgICAgICBhZGp1c3RPcmRlckxpbmVzOiBbXSxcclxuICAgICAgICBzdXJjaGFyZ2VzOiBbXSxcclxuICAgICAgICBub3RlOiAnJyxcclxuICAgICAgICB1cGRhdGVTaGlwcGluZ0FkZHJlc3M6IHt9LFxyXG4gICAgICAgIHVwZGF0ZUJpbGxpbmdBZGRyZXNzOiB7fSxcclxuICAgIH07XHJcbiAgICBzdXJjaGFyZ2VGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBzaGlwcGluZ0FkZHJlc3NGb3JtOiBGb3JtR3JvdXA7XHJcbiAgICBiaWxsaW5nQWRkcmVzc0Zvcm06IEZvcm1Hcm91cDtcclxuICAgIG5vdGUgPSAnJztcclxuICAgIHJlY2FsY3VsYXRlU2hpcHBpbmcgPSB0cnVlO1xyXG4gICAgcHJldmlvdXNTdGF0ZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBhZGRlZFZhcmlhbnRzID0gbmV3IE1hcDxzdHJpbmcsIFByb2R1Y3RTZWxlY3RvclNlYXJjaC5JdGVtcz4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgb3JkZXJUcmFuc2l0aW9uU2VydmljZTogT3JkZXJUcmFuc2l0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYWRkZWRMaW5lcygpOiBBZGRlZExpbmVbXSB7XHJcbiAgICAgICAgY29uc3QgZ2V0U2luZ2xlUHJpY2VWYWx1ZSA9IChwcmljZTogUHJvZHVjdFNlbGVjdG9yU2VhcmNoLlByaWNlKSA9PlxyXG4gICAgICAgICAgICBwcmljZS5fX3R5cGVuYW1lID09PSAnU2luZ2xlUHJpY2UnID8gcHJpY2UudmFsdWUgOiAwO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zIHx8IFtdKVxyXG4gICAgICAgICAgICAubWFwKHJvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50SW5mbyA9IHRoaXMuYWRkZWRWYXJpYW50cy5nZXQocm93LnByb2R1Y3RWYXJpYW50SWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFyaWFudEluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBnZXRTaW5nbGVQcmljZVZhbHVlKHZhcmlhbnRJbmZvLnByaWNlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VXaXRoVGF4OiBnZXRTaW5nbGVQcmljZVZhbHVlKHZhcmlhbnRJbmZvLnByaWNlV2l0aFRheCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiByb3cucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmZpbHRlcihub3ROdWxsT3JVbmRlZmluZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0FkZHJlc3MnKTtcclxuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQub3JkZXJJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKG9yZGVyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdXJjaGFyZ2VGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgICAgIHNrdTogbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgICAgICAgICAgICAgIHByaWNlOiBuZXcgRm9ybUNvbnRyb2woMCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiBuZXcgRm9ybUNvbnRyb2wodHJ1ZSksXHJcbiAgICAgICAgICAgICAgICB0YXhSYXRlOiBuZXcgRm9ybUNvbnRyb2woMCksXHJcbiAgICAgICAgICAgICAgICB0YXhEZXNjcmlwdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uZnVsbE5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhbnk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmNvbXBhbnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUxOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnN0cmVldExpbmUyKSxcclxuICAgICAgICAgICAgICAgICAgICBjaXR5OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5jaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICBwcm92aW5jZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8ucHJvdmluY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3RhbENvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvdW50cnlDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5jb3VudHJ5Q29kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnBob25lTnVtYmVyKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRBZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybSwgb3JkZXIuc2hpcHBpbmdBZGRyZXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmZ1bGxOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LmNvbXBhbnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUxOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnN0cmVldExpbmUxKSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMjogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMiksXHJcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICBwcm92aW5jZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5wcm92aW5jZSksXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdGFsQ29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5wb3N0YWxDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jb3VudHJ5Q29kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgcGhvbmVOdW1iZXI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8ucGhvbmVOdW1iZXIpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAodGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0sIG9yZGVyLmJpbGxpbmdBZGRyZXNzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygb3JkZXIubGluZXMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB7IG5hbWUgfSBvZiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKG5hbWUsIG5ldyBGb3JtQ29udHJvbCgobGluZSBhcyBhbnkpLmN1c3RvbUZpZWxkc1tuYW1lXSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbW9kaWZ5Um93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbCA9PiBsLm9yZGVyTGluZUlkID09PSBsaW5lLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZnlSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5Um93ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5lSWQ6IGxpbmUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogbGluZS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXMucHVzaChtb2RpZnlSb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeVJvdy5jdXN0b21GaWVsZHMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzRm9ybUFycmF5LnB1c2goZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbUZpZWxkIG9mIHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm0uYWRkQ29udHJvbChjdXN0b21GaWVsZC5uYW1lLCBuZXcgRm9ybUNvbnRyb2woKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlQ291bnRyaWVzJCA9IHRoaXMuZGF0YVNlcnZpY2Uuc2V0dGluZ3NcclxuICAgICAgICAgICAgLmdldEF2YWlsYWJsZUNvdW50cmllcygpXHJcbiAgICAgICAgICAgIC5tYXBTaW5nbGUocmVzdWx0ID0+IHJlc3VsdC5jb3VudHJpZXMuaXRlbXMpXHJcbiAgICAgICAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyXHJcbiAgICAgICAgICAgIC5nZXRPcmRlckhpc3RvcnkodGhpcy5pZCwge1xyXG4gICAgICAgICAgICAgICAgdGFrZTogMSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcjogeyB0eXBlOiB7IGVxOiBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1NUQVRFX1RSQU5TSVRJT04gfSB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc2luZ2xlJC5zdWJzY3JpYmUoKHsgb3JkZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gb3JkZXI/Lmhpc3RvcnkuaXRlbXNbMF0uZGF0YS5mcm9tO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uVG9QcmlvclN0YXRlKG9yZGVyOiBPcmRlckRldGFpbC5GcmFnbWVudCkge1xyXG4gICAgICAgIHRoaXMub3JkZXJUcmFuc2l0aW9uU2VydmljZVxyXG4gICAgICAgICAgICAudHJhbnNpdGlvblRvUHJlTW9kaWZ5aW5nU3RhdGUob3JkZXIuaWQsIG9yZGVyLm5leHRTdGF0ZXMpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5QcmV2aWV3Q2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB7IGFkZEl0ZW1zLCBhZGp1c3RPcmRlckxpbmVzLCBzdXJjaGFyZ2VzIH0gPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQ7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgISFhZGRJdGVtcz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICEhc3VyY2hhcmdlcz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICEhYWRqdXN0T3JkZXJMaW5lcz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0uZGlydHkgJiYgdGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLnZhbGlkKSB8fFxyXG4gICAgICAgICAgICAodGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0uZGlydHkgJiYgdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0udmFsaWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0xpbmVNb2RpZmllZChsaW5lOiBPcmRlckRldGFpbC5MaW5lcyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzPy5maW5kKFxyXG4gICAgICAgICAgICBsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQgJiYgbC5xdWFudGl0eSAhPT0gbGluZS5xdWFudGl0eSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVRdWFudGl0eShsaW5lOiBPcmRlckRldGFpbC5MaW5lcywgcXVhbnRpdHk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHsgYWRqdXN0T3JkZXJMaW5lcyB9ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0O1xyXG4gICAgICAgIGxldCByb3cgPSBhZGp1c3RPcmRlckxpbmVzPy5maW5kKGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCk7XHJcbiAgICAgICAgaWYgKHJvdyAmJiArcXVhbnRpdHkgPT09IGxpbmUucXVhbnRpdHkpIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBtb2RpZmljYXRpb24gaWYgdGhlIHF1YW50aXR5IGlzIHRoZSBzYW1lIGFzXHJcbiAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBvcmRlclxyXG4gICAgICAgICAgICBhZGp1c3RPcmRlckxpbmVzPy5zcGxpY2UoYWRqdXN0T3JkZXJMaW5lcz8uaW5kZXhPZihyb3cpLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyb3cpIHtcclxuICAgICAgICAgICAgcm93ID0geyBvcmRlckxpbmVJZDogbGluZS5pZCwgcXVhbnRpdHk6ICtxdWFudGl0eSB9O1xyXG4gICAgICAgICAgICBhZGp1c3RPcmRlckxpbmVzPy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvdy5xdWFudGl0eSA9ICtxdWFudGl0eTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBZGRlZEl0ZW1RdWFudGl0eShpdGVtOiBBZGRlZExpbmUsIHF1YW50aXR5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXM/LmZpbmQobCA9PiBsLnByb2R1Y3RWYXJpYW50SWQgPT09IGl0ZW0ucHJvZHVjdFZhcmlhbnRJZCk7XHJcbiAgICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgICAgICByb3cucXVhbnRpdHkgPSArcXVhbnRpdHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlQcm9kdWN0VmFyaWFudElkKGluZGV4OiBudW1iZXIsIGl0ZW06IEFkZGVkTGluZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnByb2R1Y3RWYXJpYW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWRJdGVtUHJpY2UocmVzdWx0OiBQcm9kdWN0U2VsZWN0b3JTZWFyY2guSXRlbXMgfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgICAgIHN3aXRjaCAocmVzdWx0Py5wcmljZVdpdGhUYXguX190eXBlbmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlICdTaW5nbGVQcmljZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnByaWNlV2l0aFRheC52YWx1ZTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtVG9PcmRlcihyZXN1bHQ6IFByb2R1Y3RTZWxlY3RvclNlYXJjaC5JdGVtcyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VzdG9tRmllbGRzID0gdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMubGVuZ3RoXHJcbiAgICAgICAgICAgID8gdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS52YWx1ZVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICBsZXQgcm93ID0gdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5maW5kKGwgPT5cclxuICAgICAgICAgICAgdGhpcy5pc01hdGNoaW5nQWRkSXRlbVJvdyhsLCByZXN1bHQsIGN1c3RvbUZpZWxkcyksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXJvdykge1xyXG4gICAgICAgICAgICByb3cgPSB7IHByb2R1Y3RWYXJpYW50SWQ6IHJlc3VsdC5wcm9kdWN0VmFyaWFudElkLCBxdWFudGl0eTogMSB9O1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICByb3cuY3VzdG9tRmllbGRzID0gY3VzdG9tRmllbGRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8ucHVzaChyb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJvdy5xdWFudGl0eSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXN0b21GaWVsZHMpKSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5wdXNoKGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93LmN1c3RvbUZpZWxkcyA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5yZXNldCh7fSk7XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtU2VsZWN0ZWRWYXJpYW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuYWRkZWRWYXJpYW50cy5zZXQocmVzdWx0LnByb2R1Y3RWYXJpYW50SWQsIHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc01hdGNoaW5nQWRkSXRlbVJvdyhcclxuICAgICAgICByb3c6IE1vZGlmeU9yZGVyRGF0YVsnYWRkSXRlbXMnXVtudW1iZXJdLFxyXG4gICAgICAgIHJlc3VsdDogUHJvZHVjdFNlbGVjdG9yU2VhcmNoLkl0ZW1zLFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogYW55LFxyXG4gICAgKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgcm93LnByb2R1Y3RWYXJpYW50SWQgPT09IHJlc3VsdC5wcm9kdWN0VmFyaWFudElkICYmXHJcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHJvdy5jdXN0b21GaWVsZHMpID09PSBKU09OLnN0cmluZ2lmeShjdXN0b21GaWVsZHMpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVBZGRlZEl0ZW0oaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIGlmICgtMSA8IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFN1cmNoYXJnZVByaWNlcyhzdXJjaGFyZ2U6IFN1cmNoYXJnZUlucHV0KSB7XHJcbiAgICAgICAgY29uc3QgcHJpY2VXaXRoVGF4ID0gc3VyY2hhcmdlLnByaWNlSW5jbHVkZXNUYXhcclxuICAgICAgICAgICAgPyBzdXJjaGFyZ2UucHJpY2VcclxuICAgICAgICAgICAgOiBNYXRoLnJvdW5kKHN1cmNoYXJnZS5wcmljZSAqICgoMTAwICsgKHN1cmNoYXJnZS50YXhSYXRlIHx8IDApKSAvIDEwMCkpO1xyXG4gICAgICAgIGNvbnN0IHByaWNlID0gc3VyY2hhcmdlLnByaWNlSW5jbHVkZXNUYXhcclxuICAgICAgICAgICAgPyBNYXRoLnJvdW5kKHN1cmNoYXJnZS5wcmljZSAvICgoMTAwICsgKHN1cmNoYXJnZS50YXhSYXRlIHx8IDApKSAvIDEwMCkpXHJcbiAgICAgICAgICAgIDogc3VyY2hhcmdlLnByaWNlO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHByaWNlLFxyXG4gICAgICAgICAgICBwcmljZVdpdGhUYXgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTdXJjaGFyZ2UodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzPy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnN1cmNoYXJnZUZvcm0ucmVzZXQoe1xyXG4gICAgICAgICAgICBwcmljZTogMCxcclxuICAgICAgICAgICAgcHJpY2VJbmNsdWRlc1RheDogdHJ1ZSxcclxuICAgICAgICAgICAgdGF4UmF0ZTogMCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVTdXJjaGFyZ2UoaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5zdXJjaGFyZ2VzPy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpZXdBbmRNb2RpZnkob3JkZXI6IE9yZGVyRGV0YWlsLkZyYWdtZW50KSB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQ6IE1vZGlmeU9yZGVySW5wdXQgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMubW9kaWZ5T3JkZXJJbnB1dCxcclxuICAgICAgICAgICAgLi4uKHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtLmRpcnR5ID8geyB1cGRhdGVCaWxsaW5nQWRkcmVzczogdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0udmFsdWUgfSA6IHt9KSxcclxuICAgICAgICAgICAgLi4uKHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybS5kaXJ0eVxyXG4gICAgICAgICAgICAgICAgPyB7IHVwZGF0ZVNoaXBwaW5nQWRkcmVzczogdGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLnZhbHVlIH1cclxuICAgICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgICBkcnlSdW46IHRydWUsXHJcbiAgICAgICAgICAgIG5vdGU6IHRoaXMubm90ZSA/PyAnJyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVTaGlwcGluZzogdGhpcy5yZWNhbGN1bGF0ZVNoaXBwaW5nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUb3RhbFdpdGhUYXggPSBvcmRlci50b3RhbFdpdGhUYXg7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAubW9kaWZ5T3JkZXIoaW5wdXQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IG1vZGlmeU9yZGVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGlmeU9yZGVyLl9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoT3JkZXJFZGl0c1ByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUb3RhbFdpdGhUYXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBtb2RpZnlPcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzOiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5T3JkZXJJbnB1dDogaW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnN1ZmZpY2llbnRTdG9ja0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTmVnYXRpdmVRdWFudGl0eUVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9DaGFuZ2VzU3BlY2lmaWVkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlckxpbWl0RXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlck1vZGlmaWNhdGlvblN0YXRlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50TWV0aG9kTWlzc2luZ0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVmdW5kUGF5bWVudElkTWlzc2luZ0Vycm9yJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKG1vZGlmeU9yZGVyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlIGFzIGNvbnN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlIGFzIGNvbnN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKG1vZGlmeU9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlLWZldGNoIHNvIHRoYXQgdGhlIHByZXZpZXcgdmFsdWVzIGdldCBvdmVyd3JpdHRlbiBpbiB0aGUgY2FjaGUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLmdldE9yZGVyKHRoaXMuaWQpLm1hcFNpbmdsZSgoKSA9PiBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gdGhlIG1vZGlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3ZXRSdW5JbnB1dCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmlucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5UnVuOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQgPT09IE9yZGVyRWRpdFJlc3VsdFR5cGUuUmVmdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZXRSdW5JbnB1dC5yZWZ1bmQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudElkOiByZXN1bHQucmVmdW5kUGF5bWVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVzdWx0LnJlZnVuZE5vdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLm9yZGVyLm1vZGlmeU9yZGVyKHdldFJ1bklucHV0KS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IG1vZGlmeU9yZGVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZ5T3JkZXIuX190eXBlbmFtZSA9PT0gJ09yZGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZURlbHRhID0gbW9kaWZ5T3JkZXIudG90YWxXaXRoVGF4IC0gb3JpZ2luYWxUb3RhbFdpdGhUYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDwgcHJpY2VEZWx0YSA/ICdBcnJhbmdpbmdBZGRpdGlvbmFsUGF5bWVudCcgOiB0aGlzLnByZXZpb3VzU3RhdGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb25Ub1N0YXRlKG9yZGVyLmlkLCBuZXh0U3RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShtYXBUbyh0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKChtb2RpZnlPcmRlciBhcyBFcnJvclJlc3VsdCkubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAoXHJcbiAgICAgICAgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAsXHJcbiAgICAgICAgYWRkcmVzcz86IE9yZGVyQWRkcmVzc0ZyYWdtZW50IHwgbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIGlmIChhZGRyZXNzICYmIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGN1c3RvbUZpZWxkRGVmIG9mIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGN1c3RvbUZpZWxkRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChhZGRyZXNzIGFzIGFueSkuY3VzdG9tRmllbGRzPy5bbmFtZV07XHJcbiAgICAgICAgICAgICAgICBhZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwLmFkZENvbnRyb2wobmFtZSwgbmV3IEZvcm1Db250cm9sKHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGFyZW50Rm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IE9yZGVyRGV0YWlsLkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIC8qIG5vdCB1c2VkICovXHJcbiAgICB9XHJcbn1cclxuIl19
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvb3JkZXIvc3JjL2NvbXBvbmVudHMvb3JkZXItZWRpdG9yL29yZGVyLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUdILG1CQUFtQixFQUVuQixXQUFXLEVBR1gsZ0JBQWdCLEVBRWhCLFlBQVksRUFFWixtQkFBbUIsRUFJbkIsbUJBQW1CLEVBQ25CLFNBQVMsR0FFWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsR0FBRyxFQUNILEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEdBQ1osTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdDQUFnQyxHQUNuQyxNQUFNLG9FQUFvRSxDQUFDO0FBdUI1RSxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxtQkFBeUM7SUFnQ2pELFlBQ0ksTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLG1CQUF3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WUFDNUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDbkQsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUcsTUFBQyxPQUFlLENBQUMsWUFBWSwwQ0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDcEQsNEJBQTRCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1lBQ0QsZUFBZSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztTQUM1RTtJQUNMLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBNEIsRUFBRSxZQUEwQjtRQUM1RSxjQUFjO0lBQ2xCLENBQUM7OztZQWpiSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIseW1zQkFBNEM7Z0JBRTVDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNsRDs7O1lBM0R3QixNQUFNO1lBQXRCLGNBQWM7WUFpQm5CLG1CQUFtQjtZQW5CVyxpQkFBaUI7WUFRL0MsV0FBVztZQU9YLG1CQUFtQjtZQUZuQixZQUFZO1lBc0JQLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQWRkSXRlbUlucHV0LFxyXG4gICAgQWRqdXN0T3JkZXJMaW5lSW5wdXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIEVycm9yUmVzdWx0LFxyXG4gICAgR2V0QXZhaWxhYmxlQ291bnRyaWVzLFxyXG4gICAgSGlzdG9yeUVudHJ5VHlwZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE1vZGlmeU9yZGVySW5wdXQsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgT3JkZXJBZGRyZXNzRnJhZ21lbnQsXHJcbiAgICBPcmRlckRldGFpbCxcclxuICAgIFByb2R1Y3RTZWxlY3RvclNlYXJjaCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBTb3J0T3JkZXIsXHJcbiAgICBTdXJjaGFyZ2VJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIsIG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcclxuaW1wb3J0IHsgY29uY2F0LCBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxyXG4gICAgbWFwLFxyXG4gICAgbWFwVG8sXHJcbiAgICBzaGFyZVJlcGxheSxcclxuICAgIHN0YXJ0V2l0aCxcclxuICAgIHN3aXRjaE1hcCxcclxuICAgIHRha2VVbnRpbCxcclxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBPcmRlclRyYW5zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL29yZGVyLXRyYW5zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgICBPcmRlckVkaXRSZXN1bHRUeXBlLFxyXG4gICAgT3JkZXJFZGl0c1ByZXZpZXdEaWFsb2dDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cvb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmludGVyZmFjZSBBZGRlZExpbmUge1xyXG4gICAgcHJvZHVjdFZhcmlhbnRJZDogc3RyaW5nO1xyXG4gICAgcHJvZHVjdEFzc2V0PzogUHJvZHVjdFNlbGVjdG9yU2VhcmNoLlByb2R1Y3RBc3NldCB8IG51bGw7XHJcbiAgICBwcm9kdWN0VmFyaWFudE5hbWU6IHN0cmluZztcclxuICAgIHNrdTogc3RyaW5nO1xyXG4gICAgcHJpY2VXaXRoVGF4OiBudW1iZXI7XHJcbiAgICBwcmljZTogbnVtYmVyO1xyXG4gICAgcXVhbnRpdHk6IG51bWJlcjtcclxufVxyXG5cclxudHlwZSBNb2RpZnlPcmRlckRhdGEgPSBPbWl0PE1vZGlmeU9yZGVySW5wdXQsICdhZGRJdGVtcycgfCAnYWRqdXN0T3JkZXJMaW5lcyc+ICYge1xyXG4gICAgYWRkSXRlbXM6IEFycmF5PEFkZEl0ZW1JbnB1dCAmIHsgY3VzdG9tRmllbGRzPzogYW55IH0+O1xyXG4gICAgYWRqdXN0T3JkZXJMaW5lczogQXJyYXk8QWRqdXN0T3JkZXJMaW5lSW5wdXQgJiB7IGN1c3RvbUZpZWxkcz86IGFueSB9PjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItb3JkZXItZWRpdG9yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb3JkZXItZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyRWRpdG9yQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8T3JkZXJEZXRhaWwuRnJhZ21lbnQ+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIGF2YWlsYWJsZUNvdW50cmllcyQ6IE9ic2VydmFibGU8R2V0QXZhaWxhYmxlQ291bnRyaWVzLkl0ZW1zW10+O1xyXG4gICAgYXZhaWxhYmxlQ291cG9uQ29kZXMkOiBPYnNlcnZhYmxlPEFycmF5PHsgY29kZTogc3RyaW5nOyBwcm9tb3Rpb25OYW1lOiBzdHJpbmcgfT4+O1xyXG4gICAgY291cG9uQ29kZUlucHV0JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIGFkZHJlc3NDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBkZXRhaWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICBjb3Vwb25Db2Rlc0NvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheTogRm9ybUFycmF5O1xyXG4gICAgYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm1BcnJheTogRm9ybUFycmF5O1xyXG4gICAgYWRkSXRlbUN1c3RvbUZpZWxkc0Zvcm06IEZvcm1Hcm91cDtcclxuICAgIGFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQ6IFByb2R1Y3RTZWxlY3RvclNlYXJjaC5JdGVtcyB8IHVuZGVmaW5lZDtcclxuICAgIG9yZGVyTGluZUN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIG1vZGlmeU9yZGVySW5wdXQ6IE1vZGlmeU9yZGVyRGF0YSA9IHtcclxuICAgICAgICBkcnlSdW46IHRydWUsXHJcbiAgICAgICAgb3JkZXJJZDogJycsXHJcbiAgICAgICAgYWRkSXRlbXM6IFtdLFxyXG4gICAgICAgIGFkanVzdE9yZGVyTGluZXM6IFtdLFxyXG4gICAgICAgIHN1cmNoYXJnZXM6IFtdLFxyXG4gICAgICAgIG5vdGU6ICcnLFxyXG4gICAgICAgIHVwZGF0ZVNoaXBwaW5nQWRkcmVzczoge30sXHJcbiAgICAgICAgdXBkYXRlQmlsbGluZ0FkZHJlc3M6IHt9LFxyXG4gICAgfTtcclxuICAgIHN1cmNoYXJnZUZvcm06IEZvcm1Hcm91cDtcclxuICAgIHNoaXBwaW5nQWRkcmVzc0Zvcm06IEZvcm1Hcm91cDtcclxuICAgIGJpbGxpbmdBZGRyZXNzRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgbm90ZSA9ICcnO1xyXG4gICAgcmVjYWxjdWxhdGVTaGlwcGluZyA9IHRydWU7XHJcbiAgICBwcmV2aW91c1N0YXRlOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGFkZGVkVmFyaWFudHMgPSBuZXcgTWFwPHN0cmluZywgUHJvZHVjdFNlbGVjdG9yU2VhcmNoLkl0ZW1zPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBvcmRlclRyYW5zaXRpb25TZXJ2aWNlOiBPcmRlclRyYW5zaXRpb25TZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIocm91dGUsIHJvdXRlciwgc2VydmVyQ29uZmlnU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhZGRlZExpbmVzKCk6IEFkZGVkTGluZVtdIHtcclxuICAgICAgICBjb25zdCBnZXRTaW5nbGVQcmljZVZhbHVlID0gKHByaWNlOiBQcm9kdWN0U2VsZWN0b3JTZWFyY2guUHJpY2UpID0+XHJcbiAgICAgICAgICAgIHByaWNlLl9fdHlwZW5hbWUgPT09ICdTaW5nbGVQcmljZScgPyBwcmljZS52YWx1ZSA6IDA7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXMgfHwgW10pXHJcbiAgICAgICAgICAgIC5tYXAocm93ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRJbmZvID0gdGhpcy5hZGRlZFZhcmlhbnRzLmdldChyb3cucHJvZHVjdFZhcmlhbnRJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudEluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi52YXJpYW50SW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGdldFNpbmdsZVByaWNlVmFsdWUodmFyaWFudEluZm8ucHJpY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZVdpdGhUYXg6IGdldFNpbmdsZVByaWNlVmFsdWUodmFyaWFudEluZm8ucHJpY2VXaXRoVGF4KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHJvdy5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9tb3Rpb24uZ2V0UHJvbW90aW9ucygpO1xyXG4gICAgICAgIHRoaXMuYWRkcmVzc0N1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0FkZHJlc3MnKTtcclxuICAgICAgICB0aGlzLm1vZGlmeU9yZGVySW5wdXQub3JkZXJJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpIGFzIHN0cmluZztcclxuICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ09yZGVyTGluZScpO1xyXG4gICAgICAgIHRoaXMuZW50aXR5JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKG9yZGVyID0+IHtcclxuICAgICAgICAgICAgaWYgKG9yZGVyLmNvdXBvbkNvZGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wuc2V0VmFsdWUob3JkZXIuY291cG9uQ29kZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3VyY2hhcmdlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgICBza3U6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgICAgICBwcmljZTogbmV3IEZvcm1Db250cm9sKDAsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgcHJpY2VJbmNsdWRlc1RheDogbmV3IEZvcm1Db250cm9sKHRydWUpLFxyXG4gICAgICAgICAgICAgICAgdGF4UmF0ZTogbmV3IEZvcm1Db250cm9sKDApLFxyXG4gICAgICAgICAgICAgICAgdGF4RGVzY3JpcHRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZnVsbE5hbWU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LmZ1bGxOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBjb21wYW55OiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5jb21wYW55KSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uc3RyZWV0TGluZTEpLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVldExpbmUyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMiksXHJcbiAgICAgICAgICAgICAgICAgICAgY2l0eTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY2l0eSksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmluY2U6IG5ldyBGb3JtQ29udHJvbChvcmRlci5zaGlwcGluZ0FkZHJlc3M/LnByb3ZpbmNlKSxcclxuICAgICAgICAgICAgICAgICAgICBwb3N0YWxDb2RlOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5wb3N0YWxDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICBjb3VudHJ5Q29kZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLnNoaXBwaW5nQWRkcmVzcz8uY291bnRyeUNvZGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuc2hpcHBpbmdBZGRyZXNzPy5waG9uZU51bWJlciksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cCh0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0sIG9yZGVyLnNoaXBwaW5nQWRkcmVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBmdWxsTmFtZTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5mdWxsTmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5jb21wYW55KSxcclxuICAgICAgICAgICAgICAgICAgICBzdHJlZXRMaW5lMTogbmV3IEZvcm1Db250cm9sKG9yZGVyLmJpbGxpbmdBZGRyZXNzPy5zdHJlZXRMaW5lMSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWV0TGluZTI6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uc3RyZWV0TGluZTIpLFxyXG4gICAgICAgICAgICAgICAgICAgIGNpdHk6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uY2l0eSksXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmluY2U6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8ucHJvdmluY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3RhbENvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8ucG9zdGFsQ29kZSksXHJcbiAgICAgICAgICAgICAgICAgICAgY291bnRyeUNvZGU6IG5ldyBGb3JtQ29udHJvbChvcmRlci5iaWxsaW5nQWRkcmVzcz8uY291bnRyeUNvZGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBob25lTnVtYmVyOiBuZXcgRm9ybUNvbnRyb2wob3JkZXIuYmlsbGluZ0FkZHJlc3M/LnBob25lTnVtYmVyKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRBZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKHRoaXMuYmlsbGluZ0FkZHJlc3NGb3JtLCBvcmRlci5iaWxsaW5nQWRkcmVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHNGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG9yZGVyLmxpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgeyBuYW1lIH0gb2YgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbChuYW1lLCBuZXcgRm9ybUNvbnRyb2woKGxpbmUgYXMgYW55KS5jdXN0b21GaWVsZHNbbmFtZV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vZGlmeVJvdyA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZ5Um93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeVJvdyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyTGluZUlkOiBsaW5lLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGxpbmUucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGp1c3RPcmRlckxpbmVzLnB1c2gobW9kaWZ5Um93KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3JkZXJMaW5lQ3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RpZnlSb3cuY3VzdG9tRmllbGRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkc0Zvcm1BcnJheS5wdXNoKGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUNvdXBvbkNvZGVzJCA9IGNvbmNhdChcclxuICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2RlSW5wdXQkLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm0gPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9tb3Rpb24uZ2V0UHJvbW90aW9ucygxMCwgMCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291cG9uQ29kZTogeyBjb250YWluczogdGVybSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5zaW5nbGUkLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG1hcCgoeyBwcm9tb3Rpb25zIH0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHByb21vdGlvbnMuaXRlbXMubWFwKHAgPT4gKHsgY29kZTogcC5jb3Vwb25Db2RlISwgcHJvbW90aW9uTmFtZTogcC5uYW1lIH0pKSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgoW10pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5ID0gbmV3IEZvcm1BcnJheShbXSk7XHJcbiAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgIGZvciAoY29uc3QgY3VzdG9tRmllbGQgb2YgdGhpcy5vcmRlckxpbmVDdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybS5hZGRDb250cm9sKGN1c3RvbUZpZWxkLm5hbWUsIG5ldyBGb3JtQ29udHJvbCgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDb3VudHJpZXMkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xyXG4gICAgICAgICAgICAuZ2V0QXZhaWxhYmxlQ291bnRyaWVzKClcclxuICAgICAgICAgICAgLm1hcFNpbmdsZShyZXN1bHQgPT4gcmVzdWx0LmNvdW50cmllcy5pdGVtcylcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgLmdldE9yZGVySGlzdG9yeSh0aGlzLmlkLCB7XHJcbiAgICAgICAgICAgICAgICB0YWtlOiAxLFxyXG4gICAgICAgICAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogU29ydE9yZGVyLkRFU0MsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyOiB7IHR5cGU6IHsgZXE6IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfU1RBVEVfVFJBTlNJVElPTiB9IH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zaW5nbGUkLnN1YnNjcmliZSgoeyBvcmRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSBvcmRlcj8uaGlzdG9yeS5pdGVtc1swXS5kYXRhLmZyb207XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb25Ub1ByaW9yU3RhdGUob3JkZXI6IE9yZGVyRGV0YWlsLkZyYWdtZW50KSB7XHJcbiAgICAgICAgdGhpcy5vcmRlclRyYW5zaXRpb25TZXJ2aWNlXHJcbiAgICAgICAgICAgIC50cmFuc2l0aW9uVG9QcmVNb2RpZnlpbmdTdGF0ZShvcmRlci5pZCwgb3JkZXIubmV4dFN0YXRlcylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNhblByZXZpZXdDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHsgYWRkSXRlbXMsIGFkanVzdE9yZGVyTGluZXMsIHN1cmNoYXJnZXMgfSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIWFkZEl0ZW1zPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgISFzdXJjaGFyZ2VzPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgISFhZGp1c3RPcmRlckxpbmVzPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgKHRoaXMuc2hpcHBpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsaWQpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS5kaXJ0eSAmJiB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS52YWxpZCkgfHxcclxuICAgICAgICAgICAgdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wuZGlydHlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTGluZU1vZGlmaWVkKGxpbmU6IE9yZGVyRGV0YWlsLkxpbmVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkanVzdE9yZGVyTGluZXM/LmZpbmQoXHJcbiAgICAgICAgICAgIGwgPT4gbC5vcmRlckxpbmVJZCA9PT0gbGluZS5pZCAmJiBsLnF1YW50aXR5ICE9PSBsaW5lLnF1YW50aXR5LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZVF1YW50aXR5KGxpbmU6IE9yZGVyRGV0YWlsLkxpbmVzLCBxdWFudGl0eTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgeyBhZGp1c3RPcmRlckxpbmVzIH0gPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQ7XHJcbiAgICAgICAgbGV0IHJvdyA9IGFkanVzdE9yZGVyTGluZXM/LmZpbmQobCA9PiBsLm9yZGVyTGluZUlkID09PSBsaW5lLmlkKTtcclxuICAgICAgICBpZiAocm93ICYmICtxdWFudGl0eSA9PT0gbGluZS5xdWFudGl0eSkge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG1vZGlmaWNhdGlvbiBpZiB0aGUgcXVhbnRpdHkgaXMgdGhlIHNhbWUgYXNcclxuICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG9yZGVyXHJcbiAgICAgICAgICAgIGFkanVzdE9yZGVyTGluZXM/LnNwbGljZShhZGp1c3RPcmRlckxpbmVzPy5pbmRleE9mKHJvdyksIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXJvdykge1xyXG4gICAgICAgICAgICByb3cgPSB7IG9yZGVyTGluZUlkOiBsaW5lLmlkLCBxdWFudGl0eTogK3F1YW50aXR5IH07XHJcbiAgICAgICAgICAgIGFkanVzdE9yZGVyTGluZXM/LnB1c2gocm93KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm93LnF1YW50aXR5ID0gK3F1YW50aXR5O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFkZGVkSXRlbVF1YW50aXR5KGl0ZW06IEFkZGVkTGluZSwgcXVhbnRpdHk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5hZGRJdGVtcz8uZmluZChsID0+IGwucHJvZHVjdFZhcmlhbnRJZCA9PT0gaXRlbS5wcm9kdWN0VmFyaWFudElkKTtcclxuICAgICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgICAgIHJvdy5xdWFudGl0eSA9ICtxdWFudGl0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tCeVByb2R1Y3RWYXJpYW50SWQoaW5kZXg6IG51bWJlciwgaXRlbTogQWRkZWRMaW5lKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ucHJvZHVjdFZhcmlhbnRJZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZEl0ZW1QcmljZShyZXN1bHQ6IFByb2R1Y3RTZWxlY3RvclNlYXJjaC5JdGVtcyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICAgICAgc3dpdGNoIChyZXN1bHQ/LnByaWNlV2l0aFRheC5fX3R5cGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ1NpbmdsZVByaWNlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucHJpY2VXaXRoVGF4LnZhbHVlO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEl0ZW1Ub09yZGVyKHJlc3VsdDogUHJvZHVjdFNlbGVjdG9yU2VhcmNoLkl0ZW1zIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXN0b21GaWVsZHMgPSB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcy5sZW5ndGhcclxuICAgICAgICAgICAgPyB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtLnZhbHVlXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGxldCByb3cgPSB0aGlzLm1vZGlmeU9yZGVySW5wdXQuYWRkSXRlbXM/LmZpbmQobCA9PlxyXG4gICAgICAgICAgICB0aGlzLmlzTWF0Y2hpbmdBZGRJdGVtUm93KGwsIHJlc3VsdCwgY3VzdG9tRmllbGRzKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghcm93KSB7XHJcbiAgICAgICAgICAgIHJvdyA9IHsgcHJvZHVjdFZhcmlhbnRJZDogcmVzdWx0LnByb2R1Y3RWYXJpYW50SWQsIHF1YW50aXR5OiAxIH07XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIHJvdy5jdXN0b21GaWVsZHMgPSBjdXN0b21GaWVsZHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zPy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93LnF1YW50aXR5Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbUZpZWxkcykpIHtcclxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5hZGRDb250cm9sKGtleSwgbmV3IEZvcm1Db250cm9sKHZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5LnB1c2goZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3cuY3VzdG9tRmllbGRzID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZEl0ZW1DdXN0b21GaWVsZHNGb3JtLnJlc2V0KHt9KTtcclxuICAgICAgICB0aGlzLmFkZEl0ZW1TZWxlY3RlZFZhcmlhbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5hZGRlZFZhcmlhbnRzLnNldChyZXN1bHQucHJvZHVjdFZhcmlhbnRJZCwgcmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTWF0Y2hpbmdBZGRJdGVtUm93KFxyXG4gICAgICAgIHJvdzogTW9kaWZ5T3JkZXJEYXRhWydhZGRJdGVtcyddW251bWJlcl0sXHJcbiAgICAgICAgcmVzdWx0OiBQcm9kdWN0U2VsZWN0b3JTZWFyY2guSXRlbXMsXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiBhbnksXHJcbiAgICApOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICByb3cucHJvZHVjdFZhcmlhbnRJZCA9PT0gcmVzdWx0LnByb2R1Y3RWYXJpYW50SWQgJiZcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocm93LmN1c3RvbUZpZWxkcykgPT09IEpTT04uc3RyaW5naWZ5KGN1c3RvbUZpZWxkcylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUFkZGVkSXRlbShpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LmFkZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKC0xIDwgaW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtQ3VzdG9tRmllbGRzRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3VyY2hhcmdlUHJpY2VzKHN1cmNoYXJnZTogU3VyY2hhcmdlSW5wdXQpIHtcclxuICAgICAgICBjb25zdCBwcmljZVdpdGhUYXggPSBzdXJjaGFyZ2UucHJpY2VJbmNsdWRlc1RheFxyXG4gICAgICAgICAgICA/IHN1cmNoYXJnZS5wcmljZVxyXG4gICAgICAgICAgICA6IE1hdGgucm91bmQoc3VyY2hhcmdlLnByaWNlICogKCgxMDAgKyAoc3VyY2hhcmdlLnRheFJhdGUgfHwgMCkpIC8gMTAwKSk7XHJcbiAgICAgICAgY29uc3QgcHJpY2UgPSBzdXJjaGFyZ2UucHJpY2VJbmNsdWRlc1RheFxyXG4gICAgICAgICAgICA/IE1hdGgucm91bmQoc3VyY2hhcmdlLnByaWNlIC8gKCgxMDAgKyAoc3VyY2hhcmdlLnRheFJhdGUgfHwgMCkpIC8gMTAwKSlcclxuICAgICAgICAgICAgOiBzdXJjaGFyZ2UucHJpY2U7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgICAgIHByaWNlV2l0aFRheCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFN1cmNoYXJnZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM/LnB1c2godmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc3VyY2hhcmdlRm9ybS5yZXNldCh7XHJcbiAgICAgICAgICAgIHByaWNlOiAwLFxyXG4gICAgICAgICAgICBwcmljZUluY2x1ZGVzVGF4OiB0cnVlLFxyXG4gICAgICAgICAgICB0YXhSYXRlOiAwLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVN1cmNoYXJnZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tb2RpZnlPcmRlcklucHV0LnN1cmNoYXJnZXM/LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlld0FuZE1vZGlmeShvcmRlcjogT3JkZXJEZXRhaWwuRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCBpbnB1dDogTW9kaWZ5T3JkZXJJbnB1dCA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5tb2RpZnlPcmRlcklucHV0LFxyXG4gICAgICAgICAgICAuLi4odGhpcy5iaWxsaW5nQWRkcmVzc0Zvcm0uZGlydHkgPyB7IHVwZGF0ZUJpbGxpbmdBZGRyZXNzOiB0aGlzLmJpbGxpbmdBZGRyZXNzRm9ybS52YWx1ZSB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4odGhpcy5zaGlwcGluZ0FkZHJlc3NGb3JtLmRpcnR5XHJcbiAgICAgICAgICAgICAgICA/IHsgdXBkYXRlU2hpcHBpbmdBZGRyZXNzOiB0aGlzLnNoaXBwaW5nQWRkcmVzc0Zvcm0udmFsdWUgfVxyXG4gICAgICAgICAgICAgICAgOiB7fSksXHJcbiAgICAgICAgICAgIGRyeVJ1bjogdHJ1ZSxcclxuICAgICAgICAgICAgY291cG9uQ29kZXM6IHRoaXMuY291cG9uQ29kZXNDb250cm9sLmRpcnR5ID8gdGhpcy5jb3Vwb25Db2Rlc0NvbnRyb2wudmFsdWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIG5vdGU6IHRoaXMubm90ZSA/PyAnJyxcclxuICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVTaGlwcGluZzogdGhpcy5yZWNhbGN1bGF0ZVNoaXBwaW5nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUb3RhbFdpdGhUYXggPSBvcmRlci50b3RhbFdpdGhUYXg7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5vcmRlclxyXG4gICAgICAgICAgICAubW9kaWZ5T3JkZXIoaW5wdXQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCh7IG1vZGlmeU9yZGVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGlmeU9yZGVyLl9fdHlwZW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3JkZXInOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLmZyb21Db21wb25lbnQoT3JkZXJFZGl0c1ByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAneGwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUb3RhbFdpdGhUYXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBtb2RpZnlPcmRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzOiB0aGlzLm9yZGVyTGluZUN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5T3JkZXJJbnB1dDogaW5wdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJbnN1ZmZpY2llbnRTdG9ja0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTmVnYXRpdmVRdWFudGl0eUVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9DaGFuZ2VzU3BlY2lmaWVkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlckxpbWl0RXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPcmRlck1vZGlmaWNhdGlvblN0YXRlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQYXltZW50TWV0aG9kTWlzc2luZ0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUmVmdW5kUGF5bWVudElkTWlzc2luZ0Vycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUxpbWl0RXJyb3InOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDb3Vwb25Db2RlRXhwaXJlZEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ291cG9uQ29kZUludmFsaWRFcnJvcic6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtb2RpZnlPcmRlci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSBhcyBjb25zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBudWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHVuZGVmaW5lZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSBhcyBjb25zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnROZXZlcihtb2RpZnlPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucmVzdWx0ID09PSBPcmRlckVkaXRSZXN1bHRUeXBlLkNhbmNlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1mZXRjaCBzbyB0aGF0IHRoZSBwcmV2aWV3IHZhbHVlcyBnZXQgb3ZlcndyaXR0ZW4gaW4gdGhlIGNhY2hlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5nZXRPcmRlcih0aGlzLmlkKS5tYXBTaW5nbGUoKCkgPT4gZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIHRoZSBtb2RpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2V0UnVuSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeVJ1bjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0ID09PSBPcmRlckVkaXRSZXN1bHRUeXBlLlJlZnVuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2V0UnVuSW5wdXQucmVmdW5kID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheW1lbnRJZDogcmVzdWx0LnJlZnVuZFBheW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlc3VsdC5yZWZ1bmROb3RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5vcmRlci5tb2RpZnlPcmRlcih3ZXRSdW5JbnB1dCkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBtb2RpZnlPcmRlciB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmeU9yZGVyLl9fdHlwZW5hbWUgPT09ICdPcmRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2VEZWx0YSA9IG1vZGlmeU9yZGVyLnRvdGFsV2l0aFRheCAtIG9yaWdpbmFsVG90YWxXaXRoVGF4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0U3RhdGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA8IHByaWNlRGVsdGEgPyAnQXJyYW5naW5nQWRkaXRpb25hbFBheW1lbnQnIDogdGhpcy5wcmV2aW91c1N0YXRlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2Uub3JkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uVG9TdGF0ZShvcmRlci5pZCwgbmV4dFN0YXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwVG8odHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcigobW9kaWZ5T3JkZXIgYXMgRXJyb3JSZXN1bHQpLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRBZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKFxyXG4gICAgICAgIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwLFxyXG4gICAgICAgIGFkZHJlc3M/OiBPcmRlckFkZHJlc3NGcmFnbWVudCB8IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkcmVzcyAmJiB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZHJlc3NDdXN0b21GaWVsZHNGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXN0b21GaWVsZERlZiBvZiB0aGlzLmFkZHJlc3NDdXN0b21GaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjdXN0b21GaWVsZERlZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoYWRkcmVzcyBhcyBhbnkpLmN1c3RvbUZpZWxkcz8uW25hbWVdO1xyXG4gICAgICAgICAgICAgICAgYWRkcmVzc0N1c3RvbUZpZWxkc0Zvcm1Hcm91cC5hZGRDb250cm9sKG5hbWUsIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvcm1Hcm91cC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBhZGRyZXNzQ3VzdG9tRmllbGRzRm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBPcmRlckRldGFpbC5GcmFnbWVudCwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICAvKiBub3QgdXNlZCAqL1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -47,4 +47,4 @@ OrderEditsPreviewDialogComponent.decorators = [
47
47
  styles: [""]
48
48
  },] }
49
49
  ];
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9vcmRlci9zcmMvY29tcG9uZW50cy9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUczRSxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzNCLGlFQUFNLENBQUE7SUFDTixtRUFBTyxDQUFBO0lBQ1AsaUZBQWMsQ0FBQTtJQUNkLGlFQUFNLENBQUE7QUFDVixDQUFDLEVBTFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUs5QjtBQTRCRCxNQUFNLE9BQU8sZ0NBQWdDO0lBV3pDLElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtTQUNyQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsT0FBTzthQUN0QyxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtnQkFDbEMsaURBQWlEO2dCQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWdCLENBQUMsRUFBRTtnQkFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNiLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxjQUFjO2FBQzdDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7O1lBaERKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZ0NBQWdDO2dCQUMxQyw2OENBQTBEO2dCQUUxRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEN1c3RvbUZpZWxkQ29uZmlnLCBEaWFsb2csIE1vZGlmeU9yZGVySW5wdXQsIE9yZGVyRGV0YWlsIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5cbmV4cG9ydCBlbnVtIE9yZGVyRWRpdFJlc3VsdFR5cGUge1xuICAgIFJlZnVuZCxcbiAgICBQYXltZW50LFxuICAgIFByaWNlVW5jaGFuZ2VkLFxuICAgIENhbmNlbCxcbn1cblxuaW50ZXJmYWNlIE9yZGVyRWRpdHNSZWZ1bmRSZXN1bHQge1xuICAgIHJlc3VsdDogT3JkZXJFZGl0UmVzdWx0VHlwZS5SZWZ1bmQ7XG4gICAgcmVmdW5kUGF5bWVudElkOiBzdHJpbmc7XG4gICAgcmVmdW5kTm90ZT86IHN0cmluZztcbn1cbmludGVyZmFjZSBPcmRlckVkaXRzUGF5bWVudFJlc3VsdCB7XG4gICAgcmVzdWx0OiBPcmRlckVkaXRSZXN1bHRUeXBlLlBheW1lbnQ7XG59XG5pbnRlcmZhY2UgT3JkZXJFZGl0c1ByaWNlVW5jaGFuZ2VkUmVzdWx0IHtcbiAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuUHJpY2VVbmNoYW5nZWQ7XG59XG5pbnRlcmZhY2UgT3JkZXJFZGl0c0NhbmNlbFJlc3VsdCB7XG4gICAgcmVzdWx0OiBPcmRlckVkaXRSZXN1bHRUeXBlLkNhbmNlbDtcbn1cbnR5cGUgT3JkZXJFZGl0UmVzdWx0ID1cbiAgICB8IE9yZGVyRWRpdHNSZWZ1bmRSZXN1bHRcbiAgICB8IE9yZGVyRWRpdHNQYXltZW50UmVzdWx0XG4gICAgfCBPcmRlckVkaXRzUHJpY2VVbmNoYW5nZWRSZXN1bHRcbiAgICB8IE9yZGVyRWRpdHNDYW5jZWxSZXN1bHQ7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmRyLW9yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE9yZGVyRWRpdHNQcmV2aWV3RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEaWFsb2c8T3JkZXJFZGl0UmVzdWx0PiB7XG4gICAgLy8gUGFzc2VkIGluIHZpYSB0aGUgbW9kYWxTZXJ2aWNlXG4gICAgb3JkZXI6IE9yZGVyRGV0YWlsLkZyYWdtZW50O1xuICAgIG9yaWdpbmFsVG90YWxXaXRoVGF4OiBudW1iZXI7XG4gICAgb3JkZXJMaW5lQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xuICAgIG1vZGlmeU9yZGVySW5wdXQ6IE1vZGlmeU9yZGVySW5wdXQ7XG5cbiAgICBzZWxlY3RlZFBheW1lbnQ/OiBPcmRlckRldGFpbC5QYXltZW50cztcbiAgICByZWZ1bmROb3RlOiBzdHJpbmc7XG4gICAgcmVzb2x2ZVdpdGg6IChyZXN1bHQ/OiBPcmRlckVkaXRSZXN1bHQpID0+IHZvaWQ7XG5cbiAgICBnZXQgcHJpY2VEaWZmZXJlbmNlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyLnRvdGFsV2l0aFRheCAtIHRoaXMub3JpZ2luYWxUb3RhbFdpdGhUYXg7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmVmdW5kTm90ZSA9IHRoaXMubW9kaWZ5T3JkZXJJbnB1dC5ub3RlIHx8ICcnO1xuICAgIH1cblxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCh7XG4gICAgICAgICAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICAgIGlmICgwIDwgdGhpcy5wcmljZURpZmZlcmVuY2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xuICAgICAgICAgICAgICAgIHJlc3VsdDogT3JkZXJFZGl0UmVzdWx0VHlwZS5QYXltZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmljZURpZmZlcmVuY2UgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVXaXRoKHtcbiAgICAgICAgICAgICAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuUmVmdW5kLFxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICByZWZ1bmRQYXltZW50SWQ6IHRoaXMuc2VsZWN0ZWRQYXltZW50IS5pZCxcbiAgICAgICAgICAgICAgICByZWZ1bmROb3RlOiB0aGlzLnJlZnVuZE5vdGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xuICAgICAgICAgICAgICAgIHJlc3VsdDogT3JkZXJFZGl0UmVzdWx0VHlwZS5QcmljZVVuY2hhbmdlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9vcmRlci9zcmMvY29tcG9uZW50cy9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy9vcmRlci1lZGl0cy1wcmV2aWV3LWRpYWxvZy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUczRSxNQUFNLENBQU4sSUFBWSxtQkFLWDtBQUxELFdBQVksbUJBQW1CO0lBQzNCLGlFQUFNLENBQUE7SUFDTixtRUFBTyxDQUFBO0lBQ1AsaUZBQWMsQ0FBQTtJQUNkLGlFQUFNLENBQUE7QUFDVixDQUFDLEVBTFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUs5QjtBQTRCRCxNQUFNLE9BQU8sZ0NBQWdDO0lBV3pDLElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQy9ELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtTQUNyQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsT0FBTzthQUN0QyxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDYixNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtnQkFDbEMsaURBQWlEO2dCQUNqRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWdCLENBQUMsRUFBRTtnQkFDekMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzlCLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNiLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxjQUFjO2FBQzdDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs7O1lBaERKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZ0NBQWdDO2dCQUMxQyw2OENBQTBEO2dCQUUxRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ3VzdG9tRmllbGRDb25maWcsIERpYWxvZywgTW9kaWZ5T3JkZXJJbnB1dCwgT3JkZXJEZXRhaWwgfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuXHJcbmV4cG9ydCBlbnVtIE9yZGVyRWRpdFJlc3VsdFR5cGUge1xyXG4gICAgUmVmdW5kLFxyXG4gICAgUGF5bWVudCxcclxuICAgIFByaWNlVW5jaGFuZ2VkLFxyXG4gICAgQ2FuY2VsLFxyXG59XHJcblxyXG5pbnRlcmZhY2UgT3JkZXJFZGl0c1JlZnVuZFJlc3VsdCB7XHJcbiAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuUmVmdW5kO1xyXG4gICAgcmVmdW5kUGF5bWVudElkOiBzdHJpbmc7XHJcbiAgICByZWZ1bmROb3RlPzogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBPcmRlckVkaXRzUGF5bWVudFJlc3VsdCB7XHJcbiAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuUGF5bWVudDtcclxufVxyXG5pbnRlcmZhY2UgT3JkZXJFZGl0c1ByaWNlVW5jaGFuZ2VkUmVzdWx0IHtcclxuICAgIHJlc3VsdDogT3JkZXJFZGl0UmVzdWx0VHlwZS5QcmljZVVuY2hhbmdlZDtcclxufVxyXG5pbnRlcmZhY2UgT3JkZXJFZGl0c0NhbmNlbFJlc3VsdCB7XHJcbiAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsO1xyXG59XHJcbnR5cGUgT3JkZXJFZGl0UmVzdWx0ID1cclxuICAgIHwgT3JkZXJFZGl0c1JlZnVuZFJlc3VsdFxyXG4gICAgfCBPcmRlckVkaXRzUGF5bWVudFJlc3VsdFxyXG4gICAgfCBPcmRlckVkaXRzUHJpY2VVbmNoYW5nZWRSZXN1bHRcclxuICAgIHwgT3JkZXJFZGl0c0NhbmNlbFJlc3VsdDtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItb3JkZXItZWRpdHMtcHJldmlldy1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWVkaXRzLXByZXZpZXctZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE9yZGVyRWRpdHNQcmV2aWV3RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBEaWFsb2c8T3JkZXJFZGl0UmVzdWx0PiB7XHJcbiAgICAvLyBQYXNzZWQgaW4gdmlhIHRoZSBtb2RhbFNlcnZpY2VcclxuICAgIG9yZGVyOiBPcmRlckRldGFpbC5GcmFnbWVudDtcclxuICAgIG9yaWdpbmFsVG90YWxXaXRoVGF4OiBudW1iZXI7XHJcbiAgICBvcmRlckxpbmVDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBtb2RpZnlPcmRlcklucHV0OiBNb2RpZnlPcmRlcklucHV0O1xyXG5cclxuICAgIHNlbGVjdGVkUGF5bWVudD86IE9yZGVyRGV0YWlsLlBheW1lbnRzO1xyXG4gICAgcmVmdW5kTm90ZTogc3RyaW5nO1xyXG4gICAgcmVzb2x2ZVdpdGg6IChyZXN1bHQ/OiBPcmRlckVkaXRSZXN1bHQpID0+IHZvaWQ7XHJcblxyXG4gICAgZ2V0IHByaWNlRGlmZmVyZW5jZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyLnRvdGFsV2l0aFRheCAtIHRoaXMub3JpZ2luYWxUb3RhbFdpdGhUYXg7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWZ1bmROb3RlID0gdGhpcy5tb2RpZnlPcmRlcklucHV0Lm5vdGUgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICByZXN1bHQ6IE9yZGVyRWRpdFJlc3VsdFR5cGUuQ2FuY2VsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN1Ym1pdCgpIHtcclxuICAgICAgICBpZiAoMCA8IHRoaXMucHJpY2VEaWZmZXJlbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBPcmRlckVkaXRSZXN1bHRUeXBlLlBheW1lbnQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmljZURpZmZlcmVuY2UgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVdpdGgoe1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBPcmRlckVkaXRSZXN1bHRUeXBlLlJlZnVuZCxcclxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgIHJlZnVuZFBheW1lbnRJZDogdGhpcy5zZWxlY3RlZFBheW1lbnQhLmlkLFxyXG4gICAgICAgICAgICAgICAgcmVmdW5kTm90ZTogdGhpcy5yZWZ1bmROb3RlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVXaXRoKHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogT3JkZXJFZGl0UmVzdWx0VHlwZS5QcmljZVVuY2hhbmdlZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==