@vendure/admin-ui 1.4.5 → 1.5.0

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 (125) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +173 -149
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +348 -289
  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 +107 -17
  8. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  9. package/bundles/vendure-admin-ui-settings.umd.js +1 -1
  10. package/bundles/vendure-admin-ui-settings.umd.js.map +1 -1
  11. package/bundles/vendure-admin-ui-system.umd.js.map +1 -1
  12. package/catalog/components/{product-assets/product-assets.component.d.ts → assets/assets.component.d.ts} +4 -10
  13. package/catalog/components/facet-detail/facet-detail.component.d.ts +7 -2
  14. package/catalog/components/product-detail/product-detail.component.d.ts +2 -1
  15. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -1
  16. package/catalog/public_api.d.ts +1 -1
  17. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  18. package/core/common/generated-types.d.ts +91 -13
  19. package/core/common/version.d.ts +1 -1
  20. package/core/data/definitions/customer-definitions.d.ts +1 -0
  21. package/core/data/providers/customer-data.service.d.ts +1 -0
  22. package/core/data/providers/promotion-data.service.d.ts +2 -2
  23. package/core/data/utils/remove-readonly-custom-fields.d.ts +12 -3
  24. package/core/providers/i18n/i18n.service.d.ts +3 -1
  25. package/core/public_api.d.ts +2 -0
  26. package/core/shared/components/asset-preview-links/asset-preview-links.component.d.ts +5 -0
  27. package/core/shared/components/object-tree/object-tree.component.d.ts +3 -3
  28. package/core/shared/directives/if-default-channel-active.directive.d.ts +1 -1
  29. package/core/shared/directives/if-multichannel.directive.d.ts +1 -1
  30. package/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.d.ts +15 -0
  31. package/core/vendure-admin-ui-core.metadata.json +1 -1
  32. package/customer/components/address-card/address-card.component.d.ts +2 -0
  33. package/customer/components/customer-detail/customer-detail.component.d.ts +2 -0
  34. package/customer/components/customer-list/customer-list.component.d.ts +1 -2
  35. package/customer/vendure-admin-ui-customer.metadata.json +1 -1
  36. package/esm2015/catalog/catalog.module.js +3 -3
  37. package/esm2015/catalog/components/assets/assets.component.js +93 -0
  38. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +2 -2
  39. package/esm2015/catalog/components/facet-detail/facet-detail.component.js +44 -16
  40. package/esm2015/catalog/components/product-detail/product-detail.component.js +4 -3
  41. package/esm2015/catalog/components/product-list/product-list.component.js +2 -2
  42. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +2 -2
  43. package/esm2015/catalog/public_api.js +2 -2
  44. package/esm2015/core/common/base-detail.component.js +4 -4
  45. package/esm2015/core/common/generated-types.js +5 -1
  46. package/esm2015/core/common/introspection-result.js +189 -249
  47. package/esm2015/core/common/utilities/configurable-operation-utils.js +1 -1
  48. package/esm2015/core/common/utilities/create-updated-translatable.js +1 -1
  49. package/esm2015/core/common/version.js +2 -2
  50. package/esm2015/core/components/main-nav/main-nav.component.js +3 -3
  51. package/esm2015/core/data/definitions/customer-definitions.js +8 -1
  52. package/esm2015/core/data/definitions/order-definitions.js +2 -1
  53. package/esm2015/core/data/providers/customer-data.service.js +5 -2
  54. package/esm2015/core/data/providers/interceptor.js +1 -1
  55. package/esm2015/core/data/providers/promotion-data.service.js +3 -2
  56. package/esm2015/core/data/providers/shipping-method-data.service.js +1 -1
  57. package/esm2015/core/data/utils/remove-readonly-custom-fields.js +15 -3
  58. package/esm2015/core/providers/i18n/i18n.service.js +14 -5
  59. package/esm2015/core/public_api.js +3 -1
  60. package/esm2015/core/shared/components/address-form/address-form.component.js +1 -1
  61. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +2 -2
  62. package/esm2015/core/shared/components/asset-preview/asset-preview.component.js +3 -3
  63. package/esm2015/core/shared/components/asset-preview-links/asset-preview-links.component.js +18 -0
  64. package/esm2015/core/shared/components/object-tree/object-tree.component.js +3 -3
  65. package/esm2015/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.js +2 -2
  66. package/esm2015/core/shared/components/tabbed-custom-fields/tabbed-custom-fields.component.js +3 -2
  67. package/esm2015/core/shared/directives/if-default-channel-active.directive.js +2 -2
  68. package/esm2015/core/shared/directives/if-multichannel.directive.js +2 -2
  69. package/esm2015/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.js +1 -1
  70. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.js +48 -0
  71. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/relation-form-input.component.js +2 -2
  72. package/esm2015/core/shared/pipes/asset-preview.pipe.js +2 -2
  73. package/esm2015/core/shared/shared.module.js +5 -1
  74. package/esm2015/customer/components/address-card/address-card.component.js +9 -3
  75. package/esm2015/customer/components/customer-detail/customer-detail.component.js +35 -13
  76. package/esm2015/customer/components/customer-list/customer-list.component.js +12 -9
  77. package/esm2015/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.js +1 -1
  78. package/esm2015/order/components/cancel-order-dialog/cancel-order-dialog.component.js +36 -6
  79. package/esm2015/order/components/fulfill-order-dialog/fulfill-order-dialog.component.js +1 -1
  80. package/esm2015/order/components/line-refunds/line-refunds.component.js +1 -1
  81. package/esm2015/order/components/modification-detail/modification-detail.component.js +1 -1
  82. package/esm2015/order/components/order-detail/order-detail.component.js +2 -2
  83. package/esm2015/order/components/order-editor/order-editor.component.js +22 -7
  84. package/esm2015/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.js +1 -1
  85. package/esm2015/order/components/order-history/order-history.component.js +2 -2
  86. package/esm2015/order/components/order-list/order-list.component.js +1 -1
  87. package/esm2015/order/components/order-table/order-table.component.js +2 -2
  88. package/esm2015/order/components/refund-order-dialog/refund-order-dialog.component.js +10 -5
  89. package/esm2015/order/order.routes.js +1 -1
  90. package/esm2015/settings/components/channel-list/channel-list.component.js +2 -2
  91. package/esm2015/settings/components/role-list/role-list.component.js +1 -1
  92. package/esm2015/settings/components/test-order-builder/test-order-builder.component.js +1 -1
  93. package/esm2015/settings/providers/routing/shipping-method-resolver.js +1 -1
  94. package/esm2015/system/components/job-list/job-list.component.js +1 -1
  95. package/fesm2015/vendure-admin-ui-catalog.js +140 -125
  96. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  97. package/fesm2015/vendure-admin-ui-core.js +300 -261
  98. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  99. package/fesm2015/vendure-admin-ui-customer.js +53 -22
  100. package/fesm2015/vendure-admin-ui-customer.js.map +1 -1
  101. package/fesm2015/vendure-admin-ui-order.js +67 -17
  102. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  103. package/fesm2015/vendure-admin-ui-settings.js +1 -1
  104. package/fesm2015/vendure-admin-ui-settings.js.map +1 -1
  105. package/fesm2015/vendure-admin-ui-system.js.map +1 -1
  106. package/order/components/cancel-order-dialog/cancel-order-dialog.component.d.ts +3 -0
  107. package/order/components/order-editor/order-editor.component.d.ts +8 -2
  108. package/order/vendure-admin-ui-order.metadata.json +1 -1
  109. package/package.json +11 -11
  110. package/settings/vendure-admin-ui-settings.metadata.json +1 -1
  111. package/static/i18n-messages/cs.json +7 -1
  112. package/static/i18n-messages/de.json +7 -1
  113. package/static/i18n-messages/en.json +9 -3
  114. package/static/i18n-messages/es.json +7 -1
  115. package/static/i18n-messages/fr.json +7 -1
  116. package/static/i18n-messages/it.json +7 -1
  117. package/static/i18n-messages/pl.json +7 -1
  118. package/static/i18n-messages/pt_BR.json +7 -1
  119. package/static/i18n-messages/pt_PT.json +7 -1
  120. package/static/i18n-messages/ru.json +7 -1
  121. package/static/i18n-messages/uk.json +7 -1
  122. package/static/i18n-messages/zh_Hans.json +7 -1
  123. package/static/i18n-messages/zh_Hant.json +7 -1
  124. package/static/vendure-ui-config.json +25 -10
  125. package/esm2015/catalog/components/product-assets/product-assets.component.js +0 -108
@@ -0,0 +1,93 @@
1
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output, } from '@angular/core';
3
+ import { AssetPickerDialogComponent, AssetPreviewDialogComponent, ModalService, } from '@vendure/admin-ui/core';
4
+ import { unique } from '@vendure/common/lib/unique';
5
+ /**
6
+ * A component which displays the Assets, and allows assets to be removed and
7
+ * added, and for the featured asset to be set.
8
+ *
9
+ * Note: rather complex code for drag drop is due to a limitation of the default CDK implementation
10
+ * which is addressed by a work-around from here: https://github.com/angular/components/issues/13372#issuecomment-483998378
11
+ */
12
+ export class AssetsComponent {
13
+ constructor(modalService, changeDetector) {
14
+ this.modalService = modalService;
15
+ this.changeDetector = changeDetector;
16
+ this.compact = false;
17
+ this.change = new EventEmitter();
18
+ this.assets = [];
19
+ }
20
+ set assetsSetter(val) {
21
+ // create a new non-readonly array of assets
22
+ this.assets = (val || []).slice();
23
+ }
24
+ selectAssets() {
25
+ this.modalService
26
+ .fromComponent(AssetPickerDialogComponent, {
27
+ size: 'xl',
28
+ })
29
+ .subscribe(result => {
30
+ if (result && result.length) {
31
+ this.assets = unique(this.assets.concat(result), 'id');
32
+ if (!this.featuredAsset) {
33
+ this.featuredAsset = result[0];
34
+ }
35
+ this.emitChangeEvent(this.assets, this.featuredAsset);
36
+ this.changeDetector.markForCheck();
37
+ }
38
+ });
39
+ }
40
+ setAsFeatured(asset) {
41
+ this.featuredAsset = asset;
42
+ this.emitChangeEvent(this.assets, asset);
43
+ }
44
+ isFeatured(asset) {
45
+ return !!this.featuredAsset && this.featuredAsset.id === asset.id;
46
+ }
47
+ previewAsset(asset) {
48
+ this.modalService
49
+ .fromComponent(AssetPreviewDialogComponent, {
50
+ size: 'xl',
51
+ closable: true,
52
+ locals: { asset },
53
+ })
54
+ .subscribe();
55
+ }
56
+ removeAsset(asset) {
57
+ this.assets = this.assets.filter(a => a.id !== asset.id);
58
+ if (this.featuredAsset && this.featuredAsset.id === asset.id) {
59
+ this.featuredAsset = this.assets.length > 0 ? this.assets[0] : undefined;
60
+ }
61
+ this.emitChangeEvent(this.assets, this.featuredAsset);
62
+ }
63
+ emitChangeEvent(assets, featuredAsset) {
64
+ this.change.emit({
65
+ assets,
66
+ featuredAsset,
67
+ });
68
+ }
69
+ dropListDropped(event) {
70
+ moveItemInArray(this.assets, event.previousContainer.data, event.container.data);
71
+ this.emitChangeEvent(this.assets, this.featuredAsset);
72
+ }
73
+ }
74
+ AssetsComponent.decorators = [
75
+ { type: Component, args: [{
76
+ selector: 'vdr-assets',
77
+ template: "<div class=\"card\" *ngIf=\"!compact; else compactView\">\r\n <div class=\"card-img\">\r\n <div class=\"featured-asset\">\r\n <img\r\n *ngIf=\"featuredAsset\"\r\n [src]=\"featuredAsset | assetPreview:'small'\"\r\n (click)=\"previewAsset(featuredAsset)\"\r\n />\r\n <div class=\"placeholder\" *ngIf=\"!featuredAsset\" (click)=\"selectAssets()\">\r\n <clr-icon shape=\"image\" size=\"128\"></clr-icon>\r\n <div>{{ 'catalog.no-featured-asset' | translate }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-block\"><ng-container *ngTemplateOutlet=\"assetList\"></ng-container></div>\r\n <div class=\"card-footer\" *vdrIfPermissions=\"updatePermissions\">\r\n <button class=\"btn\" (click)=\"selectAssets()\">\r\n <clr-icon shape=\"attachment\"></clr-icon>\r\n {{ 'asset.add-asset' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #compactView>\r\n <div class=\"featured-asset compact\">\r\n <img\r\n *ngIf=\"featuredAsset\"\r\n [src]=\"featuredAsset | assetPreview:'thumb'\"\r\n (click)=\"previewAsset(featuredAsset)\"\r\n />\r\n\r\n <div class=\"placeholder\" *ngIf=\"!featuredAsset\" (click)=\"selectAssets()\"><clr-icon shape=\"image\" size=\"150\"></clr-icon></div>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"assetList\"></ng-container>\r\n <button\r\n *vdrIfPermissions=\"updatePermissions\"\r\n class=\"compact-select btn btn-icon btn-sm btn-block\"\r\n [title]=\"'asset.add-asset' | translate\"\r\n (click)=\"selectAssets()\"\r\n >\r\n <clr-icon shape=\"attachment\"></clr-icon>\r\n {{ 'asset.add-asset' | translate }}\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template #assetList>\r\n <div class=\"all-assets\" [class.compact]=\"compact\" cdkDropListGroup>\r\n <div\r\n *ngFor=\"let asset of assets; let index = index\"\r\n class=\"drop-list\"\r\n cdkDropList\r\n cdkDropListOrientation=\"horizontal\"\r\n [cdkDropListData]=\"index\"\r\n [cdkDropListDisabled]=\"!(updatePermissions | hasPermission)\"\r\n (cdkDropListDropped)=\"dropListDropped($event)\"\r\n >\r\n <vdr-dropdown cdkDrag>\r\n <div\r\n class=\"asset-thumb\"\r\n vdrDropdownTrigger\r\n [class.featured]=\"isFeatured(asset)\"\r\n [title]=\"\"\r\n tabindex=\"0\"\r\n >\r\n <img [src]=\"asset | assetPreview:'tiny'\" />\r\n </div>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"previewAsset(asset)\">\r\n {{ 'asset.preview' | translate }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n [disabled]=\"isFeatured(asset) || !(updatePermissions | hasPermission)\"\r\n vdrDropdownItem\r\n (click)=\"setAsFeatured(asset)\"\r\n >\r\n {{ 'asset.set-as-featured-asset' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n type=\"button\"\r\n class=\"remove-asset\"\r\n vdrDropdownItem\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n (click)=\"removeAsset(asset)\"\r\n >\r\n {{ 'asset.remove-asset' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n</ng-template>\r\n",
78
+ changeDetection: ChangeDetectionStrategy.OnPush,
79
+ styles: [":host{width:340px;display:block}:host.compact{width:162px}.placeholder{text-align:center;color:var(--color-grey-300)}.featured-asset{text-align:center;background:var(--color-component-bg-200);padding:6px;cursor:pointer}.featured-asset.compact{width:100%;min-height:40px;position:relative;padding:6px}.featured-asset .compact-select{position:absolute;bottom:6px;right:6px;margin:0}.all-assets{display:flex;flex-wrap:wrap}.all-assets .drop-list{min-width:60px}.all-assets .asset-thumb{margin:3px;padding:0;border:2px solid var(--color-component-border-100);cursor:pointer}.all-assets .asset-thumb.featured{border-color:var(--color-primary-500)}.all-assets .remove-asset{color:var(--color-warning-500)}.all-assets.compact .drop-list{min-width:54px}.all-assets.compact .asset-thumb{margin:1px;border-width:1px}.all-assets.compact .cdk-drag-placeholder{width:50px}.all-assets.compact .cdk-drag-placeholder .asset-thumb{width:50px}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.all-assets.cdk-drop-list-dragging vdr-dropdown:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging>*:not(.cdk-drag-placeholder){display:none}\n"]
80
+ },] }
81
+ ];
82
+ AssetsComponent.ctorParameters = () => [
83
+ { type: ModalService },
84
+ { type: ChangeDetectorRef }
85
+ ];
86
+ AssetsComponent.propDecorators = {
87
+ assetsSetter: [{ type: Input, args: ['assets',] }],
88
+ featuredAsset: [{ type: Input }],
89
+ compact: [{ type: HostBinding, args: ['class.compact',] }, { type: Input }],
90
+ change: [{ type: Output }],
91
+ updatePermissions: [{ type: Input }]
92
+ };
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9hc3NldHMvYXNzZXRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsMEJBQTBCLEVBQzFCLDJCQUEyQixFQUMzQixZQUFZLEdBRWYsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFPcEQ7Ozs7OztHQU1HO0FBT0gsTUFBTSxPQUFPLGVBQWU7SUFpQnhCLFlBQW9CLFlBQTBCLEVBQVUsY0FBaUM7UUFBckUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFSekYsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNOLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBRTVDLFdBQU0sR0FBWSxFQUFFLENBQUM7SUFLZ0UsQ0FBQztJQWhCN0YsSUFBcUIsWUFBWSxDQUFDLEdBQVk7UUFDMUMsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQWVELFlBQVk7UUFDUixJQUFJLENBQUMsWUFBWTthQUNaLGFBQWEsQ0FBQywwQkFBMEIsRUFBRTtZQUN2QyxJQUFJLEVBQUUsSUFBSTtTQUNiLENBQUM7YUFDRCxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxN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Q2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIEFzc2V0UGlja2VyRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgQXNzZXRQcmV2aWV3RGlhbG9nQ29tcG9uZW50LFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi91bmlxdWUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc3NldENoYW5nZSB7XHJcbiAgICBhc3NldHM6IEFzc2V0W107XHJcbiAgICBmZWF0dXJlZEFzc2V0OiBBc3NldCB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IHdoaWNoIGRpc3BsYXlzIHRoZSBBc3NldHMsIGFuZCBhbGxvd3MgYXNzZXRzIHRvIGJlIHJlbW92ZWQgYW5kXHJcbiAqIGFkZGVkLCBhbmQgZm9yIHRoZSBmZWF0dXJlZCBhc3NldCB0byBiZSBzZXQuXHJcbiAqXHJcbiAqIE5vdGU6IHJhdGhlciBjb21wbGV4IGNvZGUgZm9yIGRyYWcgZHJvcCBpcyBkdWUgdG8gYSBsaW1pdGF0aW9uIG9mIHRoZSBkZWZhdWx0IENESyBpbXBsZW1lbnRhdGlvblxyXG4gKiB3aGljaCBpcyBhZGRyZXNzZWQgYnkgYSB3b3JrLWFyb3VuZCBmcm9tIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzEzMzcyI2lzc3VlY29tbWVudC00ODM5OTgzNzhcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItYXNzZXRzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hc3NldHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXNzZXRzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2V0c0NvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoJ2Fzc2V0cycpIHNldCBhc3NldHNTZXR0ZXIodmFsOiBBc3NldFtdKSB7XHJcbiAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG5vbi1yZWFkb25seSBhcnJheSBvZiBhc3NldHNcclxuICAgICAgICB0aGlzLmFzc2V0cyA9ICh2YWwgfHwgW10pLnNsaWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgZmVhdHVyZWRBc3NldDogQXNzZXQgfCB1bmRlZmluZWQ7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbXBhY3QnKVxyXG4gICAgQElucHV0KClcclxuICAgIGNvbXBhY3QgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2V0Q2hhbmdlPigpO1xyXG5cclxuICAgIHB1YmxpYyBhc3NldHM6IEFzc2V0W10gPSBbXTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgdXBkYXRlUGVybWlzc2lvbnM6IHN0cmluZyB8IHN0cmluZ1tdIHwgUGVybWlzc2lvbiB8IFBlcm1pc3Npb25bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgICBzZWxlY3RBc3NldHMoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQXNzZXRQaWNrZXJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRzID0gdW5pcXVlKHRoaXMuYXNzZXRzLmNvbmNhdChyZXN1bHQpLCAnaWQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmVhdHVyZWRBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVkQXNzZXQgPSByZXN1bHRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdENoYW5nZUV2ZW50KHRoaXMuYXNzZXRzLCB0aGlzLmZlYXR1cmVkQXNzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFzRmVhdHVyZWQoYXNzZXQ6IEFzc2V0KSB7XHJcbiAgICAgICAgdGhpcy5mZWF0dXJlZEFzc2V0ID0gYXNzZXQ7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQodGhpcy5hc3NldHMsIGFzc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0ZlYXR1cmVkKGFzc2V0OiBBc3NldCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZmVhdHVyZWRBc3NldCAmJiB0aGlzLmZlYXR1cmVkQXNzZXQuaWQgPT09IGFzc2V0LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpZXdBc3NldChhc3NldDogQXNzZXQpIHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBc3NldFByZXZpZXdEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6ICd4bCcsXHJcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGxvY2FsczogeyBhc3NldCB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQXNzZXQoYXNzZXQ6IEFzc2V0KSB7XHJcbiAgICAgICAgdGhpcy5hc3NldHMgPSB0aGlzLmFzc2V0cy5maWx0ZXIoYSA9PiBhLmlkICE9PSBhc3NldC5pZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmVhdHVyZWRBc3NldCAmJiB0aGlzLmZlYXR1cmVkQXNzZXQuaWQgPT09IGFzc2V0LmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZWRBc3NldCA9IHRoaXMuYXNzZXRzLmxlbmd0aCA+IDAgPyB0aGlzLmFzc2V0c1swXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQodGhpcy5hc3NldHMsIHRoaXMuZmVhdHVyZWRBc3NldCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlbWl0Q2hhbmdlRXZlbnQoYXNzZXRzOiBBc3NldFtdLCBmZWF0dXJlZEFzc2V0OiBBc3NldCB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBhc3NldHMsXHJcbiAgICAgICAgICAgIGZlYXR1cmVkQXNzZXQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcExpc3REcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxudW1iZXI+KSB7XHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuYXNzZXRzLCBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLCBldmVudC5jb250YWluZXIuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQodGhpcy5hc3NldHMsIHRoaXMuZmVhdHVyZWRBc3NldCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -185,7 +185,7 @@ export class CollectionDetailComponent extends BaseDetailComponent {
185
185
  CollectionDetailComponent.decorators = [
186
186
  { type: Component, args: [{
187
187
  selector: 'vdr-collection-detail',
188
- template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as category\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.visible; else private\">{{ 'catalog.public' | translate }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: ('catalog.slug-pattern-error' | translate) }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Collection\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['customFields'])\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"collection-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </div>\r\n <div class=\"clr-col-md-auto\">\r\n <vdr-product-assets\r\n [assets]=\"category.assets\"\r\n [featuredAsset]=\"category.featuredAsset\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-product-assets>\r\n </div>\r\n </div>\r\n <div class=\"clr-row\" formArrayName=\"filters\">\r\n <div class=\"clr-col\">\r\n <label>{{ 'catalog.filters' | translate }}</label>\r\n <ng-container *ngFor=\"let filter of filters; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeFilter($event)\"\r\n [operation]=\"filter\"\r\n [operationDefinition]=\"getFilterDefinition(filter)\"\r\n [formControlName]=\"i\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-configurable-input>\r\n </ng-container>\r\n\r\n <div *vdrIfPermissions=\"updatePermission\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let filter of allFilters\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"addFilter(filter)\"\r\n >\r\n {{ filter.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-collection-contents [collectionId]=\"id\" #collectionContents>\r\n <ng-template let-count>\r\n <div class=\"contents-title\">\r\n {{ 'catalog.collection-contents' | translate }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n </div>\r\n</form>\r\n",
188
+ template: "<vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"collection-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"(detailForm.invalid || detailForm.pristine) && !assetsChanged()\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as category\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col\">\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.visible; else private\">{{ 'catalog.public' | translate }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateSlug($event.target.value)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"'catalog.slug' | translate\"\r\n for=\"slug\"\r\n [errors]=\"{ pattern: ('catalog.slug-pattern-error' | translate) }\"\r\n >\r\n <input\r\n id=\"slug\"\r\n type=\"text\"\r\n formControlName=\"slug\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-rich-text-editor\r\n formControlName=\"description\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n [label]=\"'common.description' | translate\"\r\n ></vdr-rich-text-editor>\r\n\r\n <section formGroupName=\"customFields\" *ngIf=\"customFields.length\">\r\n <label>{{ 'common.custom-fields' | translate }}</label>\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Collection\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get(['customFields'])\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </section>\r\n <vdr-custom-detail-component-host\r\n locationId=\"collection-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n </div>\r\n <div class=\"clr-col-md-auto\">\r\n <vdr-assets\r\n [assets]=\"category.assets\"\r\n [featuredAsset]=\"category.featuredAsset\"\r\n [updatePermissions]=\"updatePermission\"\r\n (change)=\"assetChanges = $event\"\r\n ></vdr-assets>\r\n </div>\r\n </div>\r\n <div class=\"clr-row\" formArrayName=\"filters\">\r\n <div class=\"clr-col\">\r\n <label>{{ 'catalog.filters' | translate }}</label>\r\n <ng-container *ngFor=\"let filter of filters; index as i\">\r\n <vdr-configurable-input\r\n (remove)=\"removeFilter($event)\"\r\n [operation]=\"filter\"\r\n [operationDefinition]=\"getFilterDefinition(filter)\"\r\n [formControlName]=\"i\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-configurable-input>\r\n </ng-container>\r\n\r\n <div *vdrIfPermissions=\"updatePermission\">\r\n <vdr-dropdown>\r\n <button class=\"btn btn-outline\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'marketing.add-condition' | translate }}\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <button\r\n *ngFor=\"let filter of allFilters\"\r\n type=\"button\"\r\n vdrDropdownItem\r\n (click)=\"addFilter(filter)\"\r\n >\r\n {{ filter.description }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </div>\r\n <div class=\"clr-col\">\r\n <vdr-collection-contents [collectionId]=\"id\" #collectionContents>\r\n <ng-template let-count>\r\n <div class=\"contents-title\">\r\n {{ 'catalog.collection-contents' | translate }} ({{\r\n 'common.results-count' | translate: { count: count }\r\n }})\r\n </div>\r\n </ng-template>\r\n </vdr-collection-contents>\r\n </div>\r\n </div>\r\n</form>\r\n",
189
189
  changeDetection: ChangeDetectionStrategy.OnPush,
190
190
  styles: [".visible-toggle{margin-top:-3px!important}\n"]
191
191
  },] }
@@ -203,4 +203,4 @@ CollectionDetailComponent.ctorParameters = () => [
203
203
  CollectionDetailComponent.propDecorators = {
204
204
  contentsComponent: [{ type: ViewChild, args: ['collectionContents',] }]
205
205
  };
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBR1QsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCxtQkFBbUIsRUFNbkIseUJBQXlCLEVBRXpCLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixFQUVqQixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsdUJBQXVCLEdBRTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVoRCxNQUFNLE9BQU8seUJBQ1QsU0FBUSxtQkFBd0M7SUFXaEQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ2hDLGNBQWlDLEVBQy9CLFdBQXdCLEVBQzFCLFdBQXdCLEVBQ3hCLG1CQUF3QyxFQUN4QyxZQUEwQjtRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1B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aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ29sbGVjdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb24sXHJcbiAgICBDb25maWd1cmFibGVPcGVyYXRpb25JbnB1dCxcclxuICAgIENyZWF0ZUNvbGxlY3Rpb25JbnB1dCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZW5jb2RlQ29uZmlnQXJnVmFsdWUsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDb25maWdBcmdWYWx1ZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNvbnRlbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1jb250ZW50cy9jb2xsZWN0aW9uLWNvbnRlbnRzLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8Q29sbGVjdGlvbi5GcmFnbWVudD5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgZGV0YWlsRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiB7IGFzc2V0cz86IEFzc2V0W107IGZlYXR1cmVkQXNzZXQ/OiBBc3NldCB9ID0ge307XHJcbiAgICBmaWx0ZXJzOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWxsRmlsdGVyczogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbltdID0gW107XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVDb2xsZWN0aW9uXTtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbGxlY3Rpb25Db250ZW50cycpIGNvbnRlbnRzQ29tcG9uZW50OiBDb2xsZWN0aW9uQ29udGVudHNDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOV8tXSskLyldLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5nZXRDb2xsZWN0aW9uRmlsdGVycygpLnNpbmdsZSQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsRmlsdGVycyA9IHJlcy5jb2xsZWN0aW9uRmlsdGVycztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJEZWZpbml0aW9uKGZpbHRlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsRmlsdGVycy5maW5kKGYgPT4gZi5jb2RlID09PSBmaWx0ZXIuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBDb2xsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBjb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbZW50aXR5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydzbHVnJ10pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGVudGl0eSwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbHVnSXNFbXB0eSA9ICFjdXJyZW50VHJhbnNsYXRpb24gfHwgIWN1cnJlbnRUcmFuc2xhdGlvbi5zbHVnO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsdWdDb250cm9sICYmIHNsdWdDb250cm9sLnByaXN0aW5lICYmIGN1cnJlbnRTbHVnSXNFbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhgJHtuYW1lVmFsdWV9YCwgJy0nKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZpbHRlcihjb2xsZWN0aW9uRmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gY29sbGVjdGlvbkZpbHRlci5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3NIYXNoID0gY29sbGVjdGlvbkZpbHRlci5hcmdzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChvdXRwdXQsIGFyZykgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5vdXRwdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgW2FyZy5uYW1lXTogZ2V0Q29uZmlnQXJnVmFsdWUoYXJnLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb2xsZWN0aW9uRmlsdGVyLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc0hhc2gsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY29kZTogY29sbGVjdGlvbkZpbHRlci5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJnczogY29sbGVjdGlvbkZpbHRlci5hcmdzLm1hcChhID0+ICh7IG5hbWU6IGEubmFtZSwgdmFsdWU6IGdldENvbmZpZ0FyZ1ZhbHVlKGEudmFsdWUpIH0pKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZpbHRlcihjb2xsZWN0aW9uRmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gY29sbGVjdGlvbkZpbHRlci5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2NhdGVnb3J5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBDcmVhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncGFyZW50SWQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQucGFyZW50SWQgPSBwYXJlbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5jcmVhdGVDb2xsZWN0aW9uKGlucHV0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgZGF0YS5jcmVhdGVDb2xsZWN0aW9uLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtjYXRlZ29yeSwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlQ29sbGVjdGlvbklucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb24udXBkYXRlQ29sbGVjdGlvbihpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50c0NvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgY2F0ZWdvcnkgb3IgY3VycmVudCBsYW5ndWFnZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBDb2xsZWN0aW9uLkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhZW50aXR5LmlzUHJpdmF0ZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW50aXR5LmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuYWRkRmlsdGVyKGYpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIGVudGl0eSxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGNhdGVnb3J5IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBjYXRlZ29yeSB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgY2F0ZWdvcnk6IENvbGxlY3Rpb24uRnJhZ21lbnQsXHJcbiAgICAgICAgZm9ybTogRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlQ29sbGVjdGlvbklucHV0IHwgVXBkYXRlQ29sbGVjdGlvbklucHV0IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcnkgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBjYXRlZ29yeSxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybS52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6IGNhdGVnb3J5LnNsdWcgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY2F0ZWdvcnkuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZENhdGVnb3J5LFxyXG4gICAgICAgICAgICBhc3NldElkczogdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKSxcclxuICAgICAgICAgICAgZmVhdHVyZWRBc3NldElkOiB0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZCxcclxuICAgICAgICAgICAgaXNQcml2YXRlOiAhZm9ybS52YWx1ZS52aXNpYmxlLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLm1hcE9wZXJhdGlvbnNUb0lucHV0cyh0aGlzLmZpbHRlcnMsIHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5maWx0ZXJzKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBhbiBhcnJheSBvZiBjb25kaXRpb25zIG9yIGFjdGlvbnMgdG8gdGhlIGlucHV0IGZvcm1hdCBleHBlY3RlZCBieSB0aGUgR3JhcGhRTCBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFwT3BlcmF0aW9uc1RvSW5wdXRzKFxyXG4gICAgICAgIG9wZXJhdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbltdLFxyXG4gICAgICAgIGZvcm1WYWx1ZU9wZXJhdGlvbnM6IGFueSxcclxuICAgICk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0W10ge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29kZTogby5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRzOiBPYmplY3QudmFsdWVzKGZvcm1WYWx1ZU9wZXJhdGlvbnNbaV0uYXJncykubWFwKCh2YWx1ZTogYW55LCBqKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG8uYXJnc1tqXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVDb25maWdBcmdWYWx1ZSh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NvbGxlY3Rpb24tZGV0YWlsL2NvbGxlY3Rpb24tZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBR1QsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFFSCxtQkFBbUIsRUFNbkIseUJBQXlCLEVBRXpCLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGlCQUFpQixFQUVqQixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsdUJBQXVCLEdBRTFCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVVoRCxNQUFNLE9BQU8seUJBQ1QsU0FBUSxtQkFBd0M7SUFXaEQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ2hDLGNBQWlDLEVBQy9CLFdBQXdCLEVBQzFCLFdBQXdCLEVBQ3hCLG1CQUF3QyxFQUN4QyxZQUEwQjtRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1B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aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQXNzZXQsXHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ29sbGVjdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbixcclxuICAgIENvbmZpZ3VyYWJsZU9wZXJhdGlvbkRlZmluaXRpb24sXHJcbiAgICBDb25maWd1cmFibGVPcGVyYXRpb25JbnB1dCxcclxuICAgIENyZWF0ZUNvbGxlY3Rpb25JbnB1dCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZW5jb2RlQ29uZmlnQXJnVmFsdWUsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDb25maWdBcmdWYWx1ZSxcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIHVuaWNvZGVQYXR0ZXJuVmFsaWRhdG9yLFxyXG4gICAgVXBkYXRlQ29sbGVjdGlvbklucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1lcmdlTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ29sbGVjdGlvbkNvbnRlbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1jb250ZW50cy9jb2xsZWN0aW9uLWNvbnRlbnRzLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNvbGxlY3Rpb24tZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xsZWN0aW9uLWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8Q29sbGVjdGlvbi5GcmFnbWVudD5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgY3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgZGV0YWlsRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgYXNzZXRDaGFuZ2VzOiB7IGFzc2V0cz86IEFzc2V0W107IGZlYXR1cmVkQXNzZXQ/OiBBc3NldCB9ID0ge307XHJcbiAgICBmaWx0ZXJzOiBDb25maWd1cmFibGVPcGVyYXRpb25bXSA9IFtdO1xyXG4gICAgYWxsRmlsdGVyczogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbltdID0gW107XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVDb2xsZWN0aW9uXTtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbGxlY3Rpb25Db250ZW50cycpIGNvbnRlbnRzQ29tcG9uZW50OiBDb2xsZWN0aW9uQ29udGVudHNDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0NvbGxlY3Rpb24nKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgc2x1ZzogWycnLCB1bmljb2RlUGF0dGVyblZhbGlkYXRvcigvXltcXHB7TGV0dGVyfTAtOV8tXSskLyldLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMucmVkdWNlKChoYXNoLCBmaWVsZCkgPT4gKHsgLi4uaGFzaCwgW2ZpZWxkLm5hbWVdOiAnJyB9KSwge30pLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5nZXRDb2xsZWN0aW9uRmlsdGVycygpLnNpbmdsZSQuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsRmlsdGVycyA9IHJlcy5jb2xsZWN0aW9uRmlsdGVycztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJEZWZpbml0aW9uKGZpbHRlcjogQ29uZmlndXJhYmxlT3BlcmF0aW9uKTogQ29uZmlndXJhYmxlT3BlcmF0aW9uRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsRmlsdGVycy5maW5kKGYgPT4gZi5jb2RlID09PSBmaWx0ZXIuY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBjcmVhdGluZyBhIG5ldyBDb2xsZWN0aW9uLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzbHVnIGJhc2VkIG9uIHRoZSBjb2xsZWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVNsdWcobmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbZW50aXR5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbHVnQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydzbHVnJ10pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGVudGl0eSwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbHVnSXNFbXB0eSA9ICFjdXJyZW50VHJhbnNsYXRpb24gfHwgIWN1cnJlbnRUcmFuc2xhdGlvbi5zbHVnO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNsdWdDb250cm9sICYmIHNsdWdDb250cm9sLnByaXN0aW5lICYmIGN1cnJlbnRTbHVnSXNFbXB0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNsdWdDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhgJHtuYW1lVmFsdWV9YCwgJy0nKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZpbHRlcihjb2xsZWN0aW9uRmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gY29sbGVjdGlvbkZpbHRlci5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyZ3NIYXNoID0gY29sbGVjdGlvbkZpbHRlci5hcmdzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChvdXRwdXQsIGFyZykgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5vdXRwdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgW2FyZy5uYW1lXTogZ2V0Q29uZmlnQXJnVmFsdWUoYXJnLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiBjb2xsZWN0aW9uRmlsdGVyLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc0hhc2gsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgY29kZTogY29sbGVjdGlvbkZpbHRlci5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJnczogY29sbGVjdGlvbkZpbHRlci5hcmdzLm1hcChhID0+ICh7IG5hbWU6IGEubmFtZSwgdmFsdWU6IGdldENvbmZpZ0FyZ1ZhbHVlKGEudmFsdWUpIH0pKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZpbHRlcihjb2xsZWN0aW9uRmlsdGVyOiBDb25maWd1cmFibGVPcGVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzQXJyYXkgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmaWx0ZXJzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gZmlsdGVyc0FycmF5LnZhbHVlLmZpbmRJbmRleChvID0+IG8uY29kZSA9PT0gY29sbGVjdGlvbkZpbHRlci5jb2RlKTtcclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnNBcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2NhdGVnb3J5LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRDb2xsZWN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBDcmVhdGVDb2xsZWN0aW9uSW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgncGFyZW50SWQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQucGFyZW50SWQgPSBwYXJlbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuY29sbGVjdGlvbi5jcmVhdGVDb2xsZWN0aW9uKGlucHV0KTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hc3NldENoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJywgZGF0YS5jcmVhdGVDb2xsZWN0aW9uLmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtjYXRlZ29yeSwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkQ29sbGVjdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlQ29sbGVjdGlvbklucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb24udXBkYXRlQ29sbGVjdGlvbihpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRDaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnQ29sbGVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50c0NvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdDb2xsZWN0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FuRGVhY3RpdmF0ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuY2FuRGVhY3RpdmF0ZSgpICYmICF0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHMgJiYgIXRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGZvcm0gb24gY2hhbmdlcyB0byB0aGUgY2F0ZWdvcnkgb3IgY3VycmVudCBsYW5ndWFnZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZW50aXR5OiBDb2xsZWN0aW9uLkZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihlbnRpdHksIGxhbmd1YWdlQ29kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLm5hbWUgOiAnJyxcclxuICAgICAgICAgICAgc2x1ZzogY3VycmVudFRyYW5zbGF0aW9uID8gY3VycmVudFRyYW5zbGF0aW9uLnNsdWcgOiAnJyxcclxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGN1cnJlbnRUcmFuc2xhdGlvbiA/IGN1cnJlbnRUcmFuc2xhdGlvbi5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhZW50aXR5LmlzUHJpdmF0ZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW50aXR5LmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuYWRkRmlsdGVyKGYpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIGVudGl0eSxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGNhdGVnb3J5IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBjYXRlZ29yeSB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZENvbGxlY3Rpb24oXHJcbiAgICAgICAgY2F0ZWdvcnk6IENvbGxlY3Rpb24uRnJhZ21lbnQsXHJcbiAgICAgICAgZm9ybTogRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlQ29sbGVjdGlvbklucHV0IHwgVXBkYXRlQ29sbGVjdGlvbklucHV0IHtcclxuICAgICAgICBjb25zdCB1cGRhdGVkQ2F0ZWdvcnkgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBjYXRlZ29yeSxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZm9ybS52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIHNsdWc6IGNhdGVnb3J5LnNsdWcgfHwgJycsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogY2F0ZWdvcnkuZGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZENhdGVnb3J5LFxyXG4gICAgICAgICAgICBhc3NldElkczogdGhpcy5hc3NldENoYW5nZXMuYXNzZXRzPy5tYXAoYSA9PiBhLmlkKSxcclxuICAgICAgICAgICAgZmVhdHVyZWRBc3NldElkOiB0aGlzLmFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0Py5pZCxcclxuICAgICAgICAgICAgaXNQcml2YXRlOiAhZm9ybS52YWx1ZS52aXNpYmxlLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLm1hcE9wZXJhdGlvbnNUb0lucHV0cyh0aGlzLmZpbHRlcnMsIHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5maWx0ZXJzKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFwcyBhbiBhcnJheSBvZiBjb25kaXRpb25zIG9yIGFjdGlvbnMgdG8gdGhlIGlucHV0IGZvcm1hdCBleHBlY3RlZCBieSB0aGUgR3JhcGhRTCBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFwT3BlcmF0aW9uc1RvSW5wdXRzKFxyXG4gICAgICAgIG9wZXJhdGlvbnM6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbltdLFxyXG4gICAgICAgIGZvcm1WYWx1ZU9wZXJhdGlvbnM6IGFueSxcclxuICAgICk6IENvbmZpZ3VyYWJsZU9wZXJhdGlvbklucHV0W10ge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobywgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29kZTogby5jb2RlLFxyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRzOiBPYmplY3QudmFsdWVzKGZvcm1WYWx1ZU9wZXJhdGlvbnNbaV0uYXJncykubWFwKCh2YWx1ZTogYW55LCBqKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG8uYXJnc1tqXS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVDb25maWdBcmdWYWx1ZSh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -59,12 +59,23 @@ export class FacetDetailComponent extends BaseDetailComponent {
59
59
  addFacetValue() {
60
60
  const valuesFormArray = this.detailForm.get('values');
61
61
  if (valuesFormArray) {
62
- valuesFormArray.insert(valuesFormArray.length, this.formBuilder.group({
62
+ const valueGroup = this.formBuilder.group({
63
63
  id: '',
64
64
  name: ['', Validators.required],
65
65
  code: '',
66
- }));
67
- this.values.push({ name: '', code: '' });
66
+ });
67
+ const newValue = { name: '', code: '' };
68
+ if (this.customValueFields.length) {
69
+ const customValueFieldsGroup = new FormGroup({});
70
+ newValue.customFields = {};
71
+ for (const fieldDef of this.customValueFields) {
72
+ const key = fieldDef.name;
73
+ customValueFieldsGroup.addControl(key, new FormControl());
74
+ }
75
+ valueGroup.addControl('customFields', customValueFieldsGroup);
76
+ }
77
+ valuesFormArray.insert(valuesFormArray.length, valueGroup);
78
+ this.values.push(newValue);
68
79
  }
69
80
  }
70
81
  create() {
@@ -101,16 +112,10 @@ export class FacetDetailComponent extends BaseDetailComponent {
101
112
  }
102
113
  const valuesArray = this.detailForm.get('values');
103
114
  if (valuesArray && valuesArray.dirty) {
104
- const newValues = valuesArray.controls
105
- .filter(c => !c.value.id)
106
- .map(c => ({
107
- facetId: facet.id,
108
- code: c.value.code,
109
- translations: [{ name: c.value.name, languageCode }],
110
- }));
111
- if (newValues.length) {
115
+ const createdValues = this.getCreatedFacetValues(facet, valuesArray, languageCode);
116
+ if (createdValues.length) {
112
117
  updateOperations.push(this.dataService.facet
113
- .createFacetValues(newValues)
118
+ .createFacetValues(createdValues)
114
119
  .pipe(switchMap(() => this.dataService.facet.getFacet(this.id).single$)));
115
120
  }
116
121
  const updatedValues = this.getUpdatedFacetValues(facet, valuesArray, languageCode);
@@ -191,6 +196,7 @@ export class FacetDetailComponent extends BaseDetailComponent {
191
196
  const currentValuesFormArray = this.detailForm.get('values');
192
197
  this.values = [...facet.values];
193
198
  facet.values.forEach((value, i) => {
199
+ var _a, _b, _c;
194
200
  const valueTranslation = findTranslation(value, languageCode);
195
201
  const group = {
196
202
  id: value.id,
@@ -199,7 +205,9 @@ export class FacetDetailComponent extends BaseDetailComponent {
199
205
  };
200
206
  const valueControl = currentValuesFormArray.at(i);
201
207
  if (valueControl) {
202
- valueControl.setValue(group);
208
+ (_a = valueControl.get('id')) === null || _a === void 0 ? void 0 : _a.setValue(group.id);
209
+ (_b = valueControl.get('code')) === null || _b === void 0 ? void 0 : _b.setValue(group.code);
210
+ (_c = valueControl.get('name')) === null || _c === void 0 ? void 0 : _c.setValue(group.name);
203
211
  }
204
212
  else {
205
213
  currentValuesFormArray.insert(i, this.formBuilder.group(group));
@@ -247,8 +255,28 @@ export class FacetDetailComponent extends BaseDetailComponent {
247
255
  return input;
248
256
  }
249
257
  /**
250
- * Given an array of facet values and the values from the detailForm, this method creates an new array
251
- * which can be persisted to the API.
258
+ * Given an array of facet values and the values from the detailForm, this method creates a new array
259
+ * which can be persisted to the API via a createFacetValues mutation.
260
+ */
261
+ getCreatedFacetValues(facet, valuesFormArray, languageCode) {
262
+ return valuesFormArray.controls
263
+ .filter(c => !c.value.id)
264
+ .map(c => c.value)
265
+ .map(value => createUpdatedTranslatable({
266
+ translatable: Object.assign(Object.assign({}, value), { translations: [] }),
267
+ updatedFields: value,
268
+ customFieldConfig: this.customValueFields,
269
+ languageCode,
270
+ defaultTranslation: {
271
+ languageCode,
272
+ name: '',
273
+ },
274
+ }))
275
+ .map(input => (Object.assign({ facetId: facet.id }, input)));
276
+ }
277
+ /**
278
+ * Given an array of facet values and the values from the detailForm, this method creates a new array
279
+ * which can be persisted to the API via an updateFacetValues mutation.
252
280
  */
253
281
  getUpdatedFacetValues(facet, valuesFormArray, languageCode) {
254
282
  const dirtyValues = facet.values.filter((v, i) => {
@@ -295,4 +323,4 @@ FacetDetailComponent.ctorParameters = () => [
295
323
  { type: NotificationService },
296
324
  { type: ModalService }
297
325
  ];
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQWEsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFDSCxtQkFBbUIsRUFHbkIseUJBQXlCLEVBRXpCLFdBQVcsRUFDWCxjQUFjLEVBRWQsZUFBZSxFQUVmLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLG1CQUFtQixHQUd0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVF2RSxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxtQkFBNkM7SUFTckQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ2hDLGNBQWlDLEVBQy9CLFdBQXdCLEVBQzFC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RUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLENBQUM7U0FDcEU7UUFDRCxPQUFPLFdBQVc7YUFDYixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDZCxPQUFPLHlCQUF5QixDQUFDO2dCQUM3QixZQUFZLEVBQUUsS0FBSztnQkFDbkIsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDbEMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtnQkFDekMsWUFBWTtnQkFDWixrQkFBa0IsRUFBRTtvQkFDaEIsWUFBWTtvQkFDWixJQUFJLEVBQUUsRUFBRTtpQkFDWDthQUNKLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OztZQTlXSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsaXFQQUE0QztnQkFFNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2xEOzs7WUE5QndCLE1BQU07WUFBdEIsY0FBYztZQWdCbkIsbUJBQW1CO1lBbEJXLGlCQUFpQjtZQVUvQyxXQUFXO1lBVEssV0FBVztZQWUzQixtQkFBbUI7WUFEbkIsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIENyZWF0ZUZhY2V0SW5wdXQsXHJcbiAgICBDcmVhdGVGYWNldFZhbHVlSW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIERlbGV0aW9uUmVzdWx0LFxyXG4gICAgRmFjZXRXaXRoVmFsdWVzLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgVXBkYXRlRmFjZXRJbnB1dCxcclxuICAgIFVwZGF0ZUZhY2V0VmFsdWVJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBtYXBUbywgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZmFjZXQtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYWNldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZhY2V0RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8RmFjZXRXaXRoVmFsdWVzLkZyYWdtZW50PlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBjdXN0b21WYWx1ZUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGRldGFpbEZvcm06IEZvcm1Hcm91cDtcclxuICAgIHZhbHVlczogQXJyYXk8RmFjZXRXaXRoVmFsdWVzLlZhbHVlcyB8IHsgbmFtZTogc3RyaW5nOyBjb2RlOiBzdHJpbmcgfT47XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVGYWNldF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0ZhY2V0Jyk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21WYWx1ZUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ0ZhY2V0VmFsdWUnKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgZmFjZXQ6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb2RlKGN1cnJlbnRDb2RlOiBzdHJpbmcsIG5hbWVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydmYWNldCcsICdjb2RlJ10pO1xyXG4gICAgICAgICAgICBpZiAoY29kZUNvbnRyb2wgJiYgY29kZUNvbnRyb2wucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgICAgIGNvZGVDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhuYW1lVmFsdWUsICctJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVZhbHVlQ29kZShjdXJyZW50Q29kZTogc3RyaW5nLCBuYW1lVmFsdWU6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghY3VycmVudENvZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29kZUNvbnRyb2wgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsndmFsdWVzJywgaW5kZXgsICdjb2RlJ10pO1xyXG4gICAgICAgICAgICBpZiAoY29kZUNvbnRyb2wgJiYgY29kZUNvbnRyb2wucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgICAgIGNvZGVDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhuYW1lVmFsdWUsICctJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbVZhbHVlRmllbGRJc1NldChpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmRldGFpbEZvcm0uZ2V0KFsndmFsdWVzJywgaW5kZXgsICdjdXN0b21GaWVsZHMnLCBuYW1lXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVzRm9ybUFycmF5KCk6IEZvcm1BcnJheSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3ZhbHVlcycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGYWNldFZhbHVlKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3ZhbHVlcycpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHZhbHVlc0Zvcm1BcnJheSkge1xyXG4gICAgICAgICAgICB2YWx1ZXNGb3JtQXJyYXkuaW5zZXJ0KFxyXG4gICAgICAgICAgICAgICAgdmFsdWVzRm9ybUFycmF5Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICcnLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnB1c2goeyBuYW1lOiAnJywgY29kZTogJycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICBjb25zdCBmYWNldEZvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmYWNldCcpO1xyXG4gICAgICAgIGlmICghZmFjZXRGb3JtIHx8ICFmYWNldEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2ZhY2V0LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmFjZXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0Rm9ybSBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIENyZWF0ZUZhY2V0SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQuY3JlYXRlRmFjZXQobmV3RmFjZXQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmdldEFsbEZhY2V0cygpLnNpbmdsZSQucGlwZShtYXBUbyhkYXRhKSkpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHsgZW50aXR5OiAnRmFjZXQnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBkYXRhLmNyZWF0ZUZhY2V0LmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbZmFjZXQsIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWNldEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXQnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWNldEdyb3VwICYmIGZhY2V0R3JvdXAuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmFjZXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXRHcm91cCBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlRmFjZXRJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0ZhY2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2godGhpcy5kYXRhU2VydmljZS5mYWNldC51cGRhdGVGYWNldChuZXdGYWNldCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc0FycmF5ICYmIHZhbHVlc0FycmF5LmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlczogQ3JlYXRlRmFjZXRWYWx1ZUlucHV0W10gPSAodmFsdWVzQXJyYXkgYXMgRm9ybUFycmF5KS5jb250cm9sc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+ICFjLnZhbHVlLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXRJZDogZmFjZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogYy52YWx1ZS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW3sgbmFtZTogYy52YWx1ZS5uYW1lLCBsYW5ndWFnZUNvZGUgfV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlRmFjZXRWYWx1ZXMobmV3VmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kYXRhU2VydmljZS5mYWNldC5nZXRGYWNldCh0aGlzLmlkKS5zaW5nbGUkKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSB0aGlzLmdldFVwZGF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzQXJyYXkgYXMgRm9ybUFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaCh0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LnVwZGF0ZUZhY2V0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kYXRhU2VydmljZS5mYWNldC5nZXRBbGxGYWNldHMoKS5zaW5nbGUkKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7IGVudGl0eTogJ0ZhY2V0JyB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRmFjZXRWYWx1ZShmYWNldFZhbHVlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghZmFjZXRWYWx1ZUlkKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0aW5nIGEgbmV3bHktYWRkZWQgKG5vdCBwZXJzaXN0ZWQpIEZhY2V0VmFsdWVcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzRm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc0Zvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93TW9kYWxBbmREZWxldGUoZmFjZXRWYWx1ZUlkLCByZXNwb25zZS5tZXNzYWdlIHx8ICcnKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHIgPT4gci5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGRlbGV0ZWQgPT4gKGRlbGV0ZWQgPyB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmdldEZhY2V0KHRoaXMuaWQpLnNpbmdsZSQgOiBbXSkpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXRWYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZDogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2NhdGFsb2cuY29uZmlybS1kZWxldGUtZmFjZXQtdmFsdWUnKSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmRlbGV0ZUZhY2V0VmFsdWVzKFtmYWNldFZhbHVlSWRdLCAhIW1lc3NhZ2UpIDogRU1QVFksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGVsZXRlRmFjZXRWYWx1ZXNbMF0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGZhY2V0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGZhY2V0OiBGYWNldFdpdGhWYWx1ZXMuRnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGZhY2V0LCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGZhY2V0OiB7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBmYWNldC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIWZhY2V0LmlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSA/PyAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21GaWVsZHNHcm91cCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydmYWNldCcsICdjdXN0b21GaWVsZHMnXSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2ZhY2V0JywgJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3ZhbHVlcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFsuLi5mYWNldC52YWx1ZXNdO1xyXG4gICAgICAgIGZhY2V0LnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhbHVlLCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB2YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgIGNvZGU6IHZhbHVlLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZVRyYW5zbGF0aW9uID8gdmFsdWVUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGN1cnJlbnRWYWx1ZXNGb3JtQXJyYXkuYXQoaSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5zZXRWYWx1ZShncm91cCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVzRm9ybUFycmF5Lmluc2VydChpLCB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tVmFsdWVGaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCBpLCAnY3VzdG9tRmllbGRzJ10pIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5kZXRhaWxGb3JtLmdldChbJ3ZhbHVlcycsIGldKSBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2woXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXN0b21GaWVsZHMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkRGVmIG9mIHRoaXMuY3VzdG9tVmFsdWVGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZmllbGREZWYubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZERlZi50eXBlID09PSAnbG9jYWxlU3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKHZhbHVlVHJhbnNsYXRpb24gYXMgYW55KS5jdXN0b21GaWVsZHNba2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHZhbHVlIGFzIGFueSkuY3VzdG9tRmllbGRzW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLmdldChrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmaWVsZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAuYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbChmaWVsZFZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgZmFjZXQgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIGZhY2V0IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkRmFjZXQoXHJcbiAgICAgICAgZmFjZXQ6IEZhY2V0V2l0aFZhbHVlcy5GcmFnbWVudCxcclxuICAgICAgICBmYWNldEZvcm1Hcm91cDogRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlRmFjZXRJbnB1dCB8IFVwZGF0ZUZhY2V0SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogZmFjZXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZhY2V0Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmYWNldC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlucHV0LmlzUHJpdmF0ZSA9ICFmYWNldEZvcm1Hcm91cC52YWx1ZS52aXNpYmxlO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIGZhY2V0IHZhbHVlcyBhbmQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXRhaWxGb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG5ldyBhcnJheVxyXG4gICAgICogd2hpY2ggY2FuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICBmYWNldDogRmFjZXRXaXRoVmFsdWVzLkZyYWdtZW50LFxyXG4gICAgICAgIHZhbHVlc0Zvcm1BcnJheTogRm9ybUFycmF5LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlRmFjZXRWYWx1ZUlucHV0W10ge1xyXG4gICAgICAgIGNvbnN0IGRpcnR5VmFsdWVzID0gZmFjZXQudmFsdWVzLmZpbHRlcigodiwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtUm93ID0gdmFsdWVzRm9ybUFycmF5LmdldChpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybVJvdyAmJiBmb3JtUm93LmRpcnR5ICYmIGZvcm1Sb3cudmFsdWUuaWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgZGlydHlWYWx1ZVZhbHVlcyA9IHZhbHVlc0Zvcm1BcnJheS5jb250cm9sc1xyXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5kaXJ0eSAmJiBjLnZhbHVlLmlkKVxyXG4gICAgICAgICAgICAubWFwKGMgPT4gYy52YWx1ZSk7XHJcblxyXG4gICAgICAgIGlmIChkaXJ0eVZhbHVlcy5sZW5ndGggIT09IGRpcnR5VmFsdWVWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihfKGBlcnJvci5mYWNldC12YWx1ZS1mb3JtLXZhbHVlcy1kby1ub3QtbWF0Y2hgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaXJ0eVZhbHVlc1xyXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogZGlydHlWYWx1ZVZhbHVlc1tpXSxcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21WYWx1ZUZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQWEsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFDSCxtQkFBbUIsRUFHbkIseUJBQXlCLEVBRXpCLFdBQVcsRUFDWCxjQUFjLEVBRWQsZUFBZSxFQUVmLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLG1CQUFtQixHQUd0QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVF2RSxNQUFNLE9BQU8sb0JBQ1QsU0FBUSxtQkFBNkM7SUFTckQsWUFDSSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsbUJBQXdDLEVBQ2hDLGNBQWlDLEVBQy9CLFdBQXdCLEVBQzFC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QUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUNELE9BQU8sV0FBVzthQUNiLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNkLE9BQU8seUJBQXlCLENBQUM7Z0JBQzdCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUN6QyxZQUFZO2dCQUNaLGtCQUFrQixFQUFFO29CQUNoQixZQUFZO29CQUNaLElBQUksRUFBRSxFQUFFO2lCQUNYO2FBQ0osQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEMsQ0FBQzs7O1lBdFpKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixpcVBBQTRDO2dCQUU1QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQTlCd0IsTUFBTTtZQUF0QixjQUFjO1lBZ0JuQixtQkFBbUI7WUFsQlcsaUJBQWlCO1lBVS9DLFdBQVc7WUFUSyxXQUFXO1lBZTNCLG1CQUFtQjtZQURuQixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgQ3JlYXRlRmFjZXRJbnB1dCxcclxuICAgIENyZWF0ZUZhY2V0VmFsdWVJbnB1dCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBGYWNldFdpdGhWYWx1ZXMsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBNb2RhbFNlcnZpY2UsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBVcGRhdGVGYWNldElucHV0LFxyXG4gICAgVXBkYXRlRmFjZXRWYWx1ZUlucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3JtYWxpemVTdHJpbmcgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL25vcm1hbGl6ZS1zdHJpbmcnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIG1hcFRvLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1mYWNldC1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZhY2V0LWRldGFpbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9mYWNldC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmFjZXREZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxGYWNldFdpdGhWYWx1ZXMuRnJhZ21lbnQ+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XHJcbntcclxuICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGN1c3RvbVZhbHVlRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgZGV0YWlsRm9ybTogRm9ybUdyb3VwO1xyXG4gICAgdmFsdWVzOiBBcnJheTxGYWNldFdpdGhWYWx1ZXMuVmFsdWVzIHwgeyBuYW1lOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9PjtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZUZhY2V0XTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIocm91dGUsIHJvdXRlciwgc2VydmVyQ29uZmlnU2VydmljZSwgZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnRmFjZXQnKTtcclxuICAgICAgICB0aGlzLmN1c3RvbVZhbHVlRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnRmFjZXRWYWx1ZScpO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBmYWNldDogdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNvZGUoY3VycmVudENvZGU6IHN0cmluZywgbmFtZVZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIWN1cnJlbnRDb2RlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ2ZhY2V0JywgJ2NvZGUnXSk7XHJcbiAgICAgICAgICAgIGlmIChjb2RlQ29udHJvbCAmJiBjb2RlQ29udHJvbC5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICAgICAgY29kZUNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKG5hbWVWYWx1ZSwgJy0nKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVmFsdWVDb2RlKGN1cnJlbnRDb2RlOiBzdHJpbmcsIG5hbWVWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCBpbmRleCwgJ2NvZGUnXSk7XHJcbiAgICAgICAgICAgIGlmIChjb2RlQ29udHJvbCAmJiBjb2RlQ29udHJvbC5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICAgICAgY29kZUNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKG5hbWVWYWx1ZSwgJy0nKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tVmFsdWVGaWVsZElzU2V0KGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCBpbmRleCwgJ2N1c3RvbUZpZWxkcycsIG5hbWVdKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZXNGb3JtQXJyYXkoKTogRm9ybUFycmF5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZhY2V0VmFsdWUoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzRm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICBpZiAodmFsdWVzRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIGlkOiAnJyxcclxuICAgICAgICAgICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlOiBhbnkgPSB7IG5hbWU6ICcnLCBjb2RlOiAnJyB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21WYWx1ZUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLmN1c3RvbUZpZWxkcyA9IHt9O1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGREZWYgb2YgdGhpcy5jdXN0b21WYWx1ZUZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGZpZWxkRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cC5hZGRDb250cm9sKGtleSwgbmV3IEZvcm1Db250cm9sKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhbHVlR3JvdXAuYWRkQ29udHJvbCgnY3VzdG9tRmllbGRzJywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFsdWVzRm9ybUFycmF5Lmluc2VydCh2YWx1ZXNGb3JtQXJyYXkubGVuZ3RoLCB2YWx1ZUdyb3VwKTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChuZXdWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZSgpIHtcclxuICAgICAgICBjb25zdCBmYWNldEZvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdmYWNldCcpO1xyXG4gICAgICAgIGlmICghZmFjZXRGb3JtIHx8ICFmYWNldEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2ZhY2V0LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmFjZXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0Rm9ybSBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIENyZWF0ZUZhY2V0SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQuY3JlYXRlRmFjZXQobmV3RmFjZXQpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZGF0YSA9PiB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmdldEFsbEZhY2V0cygpLnNpbmdsZSQucGlwZShtYXBUbyhkYXRhKSkpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHsgZW50aXR5OiAnRmFjZXQnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBkYXRhLmNyZWF0ZUZhY2V0LmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbZmFjZXQsIGxhbmd1YWdlQ29kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWNldEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXQnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWNldEdyb3VwICYmIGZhY2V0R3JvdXAuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3RmFjZXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXRHcm91cCBhcyBGb3JtR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgVXBkYXRlRmFjZXRJbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0ZhY2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2godGhpcy5kYXRhU2VydmljZS5mYWNldC51cGRhdGVGYWNldChuZXdGYWNldCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlc0FycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc0FycmF5ICYmIHZhbHVlc0FycmF5LmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRWYWx1ZXMgPSB0aGlzLmdldENyZWF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzQXJyYXkgYXMgRm9ybUFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3JlYXRlZFZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGVGYWNldFZhbHVlcyhjcmVhdGVkVmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kYXRhU2VydmljZS5mYWNldC5nZXRGYWNldCh0aGlzLmlkKS5zaW5nbGUkKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWYWx1ZXMgPSB0aGlzLmdldFVwZGF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzQXJyYXkgYXMgRm9ybUFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaCh0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LnVwZGF0ZUZhY2V0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5kYXRhU2VydmljZS5mYWNldC5nZXRBbGxGYWNldHMoKS5zaW5nbGUkKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7IGVudGl0eTogJ0ZhY2V0JyB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlRmFjZXRWYWx1ZShmYWNldFZhbHVlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIGlmICghZmFjZXRWYWx1ZUlkKSB7XHJcbiAgICAgICAgICAgIC8vIGRlbGV0aW5nIGEgbmV3bHktYWRkZWQgKG5vdCBwZXJzaXN0ZWQpIEZhY2V0VmFsdWVcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzRm9ybUFycmF5ID0gdGhpcy5kZXRhaWxGb3JtLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICAgICAgaWYgKHZhbHVlc0Zvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzRm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93TW9kYWxBbmREZWxldGUoZmFjZXRWYWx1ZUlkLCByZXNwb25zZS5tZXNzYWdlIHx8ICcnKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHIgPT4gci5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGRlbGV0ZWQgPT4gKGRlbGV0ZWQgPyB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmdldEZhY2V0KHRoaXMuaWQpLnNpbmdsZSQgOiBbXSkpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXRWYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZDogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5kaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgdGl0bGU6IF8oJ2NhdGFsb2cuY29uZmlybS1kZWxldGUtZmFjZXQtdmFsdWUnKSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnc2Vjb25kYXJ5JywgbGFiZWw6IF8oJ2NvbW1vbi5jYW5jZWwnKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2RhbmdlcicsIGxhYmVsOiBfKCdjb21tb24uZGVsZXRlJyksIHJldHVyblZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyB0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LmRlbGV0ZUZhY2V0VmFsdWVzKFtmYWNldFZhbHVlSWRdLCAhIW1lc3NhZ2UpIDogRU1QVFksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGVsZXRlRmFjZXRWYWx1ZXNbMF0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGZhY2V0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGZhY2V0OiBGYWNldFdpdGhWYWx1ZXMuRnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKGZhY2V0LCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGZhY2V0OiB7XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBmYWNldC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIWZhY2V0LmlzUHJpdmF0ZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSA/PyAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21GaWVsZHNHcm91cCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydmYWNldCcsICdjdXN0b21GaWVsZHMnXSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkRm9ybVZhbHVlcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2ZhY2V0JywgJ2N1c3RvbUZpZWxkcyddKSxcclxuICAgICAgICAgICAgICAgIGZhY2V0LFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlc0Zvcm1BcnJheSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ3ZhbHVlcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICB0aGlzLnZhbHVlcyA9IFsuLi5mYWNldC52YWx1ZXNdO1xyXG4gICAgICAgIGZhY2V0LnZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhbHVlLCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiB2YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgIGNvZGU6IHZhbHVlLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2YWx1ZVRyYW5zbGF0aW9uID8gdmFsdWVUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IGN1cnJlbnRWYWx1ZXNGb3JtQXJyYXkuYXQoaSk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2wuZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlc0Zvcm1BcnJheS5pbnNlcnQoaSwgdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFsndmFsdWVzJywgaSwgJ2N1c3RvbUZpZWxkcyddKSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCBpXSkgYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjdXN0b21WYWx1ZUZpZWxkc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZERlZiBvZiB0aGlzLmN1c3RvbVZhbHVlRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGZpZWxkRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGREZWYudHlwZSA9PT0gJ2xvY2FsZVN0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh2YWx1ZVRyYW5zbGF0aW9uIGFzIGFueSkuY3VzdG9tRmllbGRzW2tleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh2YWx1ZSBhcyBhbnkpLmN1c3RvbUZpZWxkc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gY3VzdG9tVmFsdWVGaWVsZHNHcm91cC5nZXQoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUoZmllbGRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLmFkZENvbnRyb2woa2V5LCBuZXcgRm9ybUNvbnRyb2woZmllbGRWYWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGZhY2V0IGFuZCB0aGUgdmFsdWUgb2YgdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4gdXBkYXRlZCBjb3B5IG9mIHRoZSBmYWNldCB3aGljaFxyXG4gICAgICogY2FuIHRoZW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZEZhY2V0KFxyXG4gICAgICAgIGZhY2V0OiBGYWNldFdpdGhWYWx1ZXMuRnJhZ21lbnQsXHJcbiAgICAgICAgZmFjZXRGb3JtR3JvdXA6IEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IENyZWF0ZUZhY2V0SW5wdXQgfCBVcGRhdGVGYWNldElucHV0IHtcclxuICAgICAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xyXG4gICAgICAgICAgICB0cmFuc2xhdGFibGU6IGZhY2V0LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBmYWNldEZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogZmFjZXQubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpbnB1dC5pc1ByaXZhdGUgPSAhZmFjZXRGb3JtR3JvdXAudmFsdWUudmlzaWJsZTtcclxuICAgICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBmYWNldCB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyBhcnJheVxyXG4gICAgICogd2hpY2ggY2FuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJIHZpYSBhIGNyZWF0ZUZhY2V0VmFsdWVzIG11dGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldENyZWF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICBmYWNldDogRmFjZXRXaXRoVmFsdWVzLkZyYWdtZW50LFxyXG4gICAgICAgIHZhbHVlc0Zvcm1BcnJheTogRm9ybUFycmF5LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlRmFjZXRWYWx1ZUlucHV0W10ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZXNGb3JtQXJyYXkuY29udHJvbHNcclxuICAgICAgICAgICAgLmZpbHRlcihjID0+ICFjLnZhbHVlLmlkKVxyXG4gICAgICAgICAgICAubWFwKGMgPT4gYy52YWx1ZSlcclxuICAgICAgICAgICAgLm1hcCh2YWx1ZSA9PlxyXG4gICAgICAgICAgICAgICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB7IC4uLnZhbHVlLCB0cmFuc2xhdGlvbnM6IFtdIGFzIGFueSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbVZhbHVlRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLm1hcChpbnB1dCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZmFjZXRJZDogZmFjZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYW4gYXJyYXkgb2YgZmFjZXQgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIGZyb20gdGhlIGRldGFpbEZvcm0sIHRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgYXJyYXlcclxuICAgICAqIHdoaWNoIGNhbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSSB2aWEgYW4gdXBkYXRlRmFjZXRWYWx1ZXMgbXV0YXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZEZhY2V0VmFsdWVzKFxyXG4gICAgICAgIGZhY2V0OiBGYWNldFdpdGhWYWx1ZXMuRnJhZ21lbnQsXHJcbiAgICAgICAgdmFsdWVzRm9ybUFycmF5OiBGb3JtQXJyYXksXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVGYWNldFZhbHVlSW5wdXRbXSB7XHJcbiAgICAgICAgY29uc3QgZGlydHlWYWx1ZXMgPSBmYWNldC52YWx1ZXMuZmlsdGVyKCh2LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1Sb3cgPSB2YWx1ZXNGb3JtQXJyYXkuZ2V0KGkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtUm93ICYmIGZvcm1Sb3cuZGlydHkgJiYgZm9ybVJvdy52YWx1ZS5pZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkaXJ0eVZhbHVlVmFsdWVzID0gdmFsdWVzRm9ybUFycmF5LmNvbnRyb2xzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpcnR5ICYmIGMudmFsdWUuaWQpXHJcbiAgICAgICAgICAgIC5tYXAoYyA9PiBjLnZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGRpcnR5VmFsdWVzLmxlbmd0aCAhPT0gZGlydHlWYWx1ZVZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKF8oYGVycm9yLmZhY2V0LXZhbHVlLWZvcm0tdmFsdWVzLWRvLW5vdC1tYXRjaGApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpcnR5VmFsdWVzXHJcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBkaXJ0eVZhbHVlVmFsdWVzW2ldLFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbVZhbHVlRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxufVxyXG4iXX0=