@colijnit/transaction 1.9.31 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/app/component/common/icon/icon.component.d.ts +1 -2
  2. package/bundles/colijnit-transaction.umd.js +950 -983
  3. package/bundles/colijnit-transaction.umd.js.map +1 -1
  4. package/colijnit-transaction.d.ts +14 -14
  5. package/colijnit-transaction.metadata.json +1 -1
  6. package/esm2015/app/component/checkout/checkout/checkout.component.js +22 -26
  7. package/esm2015/app/component/checkout/checkout-login/checkout-login.component.js +18 -27
  8. package/esm2015/app/component/checkout/checkout-overview/checkout-overview.component.js +26 -49
  9. package/esm2015/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +17 -24
  10. package/esm2015/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +18 -24
  11. package/esm2015/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +27 -42
  12. package/esm2015/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +19 -22
  13. package/esm2015/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +25 -36
  14. package/esm2015/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +18 -24
  15. package/esm2015/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +16 -21
  16. package/esm2015/app/component/checkout/ione-checkout.component.js +27 -34
  17. package/esm2015/app/component/checkout/ione-checkout.module.js +55 -58
  18. package/esm2015/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +16 -18
  19. package/esm2015/app/component/common/icon/icon.component.js +14 -18
  20. package/esm2015/app/component/common/image-display/image-display.component.js +19 -36
  21. package/esm2015/app/component/common/no-image-display/no-image-display.component.js +14 -20
  22. package/esm2015/app/component/core/core.module.js +32 -34
  23. package/esm2015/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +20 -27
  24. package/esm2015/app/component/shopping-cart/ione-shopping-cart.component.js +31 -48
  25. package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +51 -52
  26. package/esm2015/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +29 -49
  27. package/esm2015/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +25 -38
  28. package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +27 -38
  29. package/esm2015/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +13 -17
  30. package/esm2015/app/enum/checkout-steps.enum.js +1 -1
  31. package/esm2015/app/enum/content-view-mode.enum.js +1 -1
  32. package/esm2015/app/enum/direction.enum.js +1 -1
  33. package/esm2015/app/enum/language-code.enum.js +1 -1
  34. package/esm2015/app/enum/order-discount-type.enum.js +1 -1
  35. package/esm2015/app/enum/time-size.type.js +1 -1
  36. package/esm2015/app/model/business-object.js +6 -6
  37. package/esm2015/app/model/text-value-container.js +1 -1
  38. package/esm2015/app/pipe/append.pipe.js +6 -8
  39. package/esm2015/app/pipe/co-currency.pipe.js +8 -11
  40. package/esm2015/app/pipe/date-duration.pipe.js +6 -8
  41. package/esm2015/app/pipe/delivery-time.pipe.js +6 -8
  42. package/esm2015/app/pipe/localize.pipe.js +9 -13
  43. package/esm2015/app/pipe/safe-style-pipe.js +9 -11
  44. package/esm2015/app/service/dictionary.service.js +10 -10
  45. package/esm2015/app/service/ione-connector-adapter.service.js +8 -8
  46. package/esm2015/app/service/options.service.js +8 -8
  47. package/esm2015/app/service/transaction-event.service.js +6 -8
  48. package/esm2015/app/service/transaction.service.js +11 -12
  49. package/esm2015/app/utils/string-utils.js +1 -1
  50. package/esm2015/assets/dictionary/text.properties.js +1 -1
  51. package/esm2015/colijnit-transaction.js +15 -15
  52. package/esm2015/factory/business-object-factory.js +1 -1
  53. package/esm2015/factory/decorators/boolean.decorator.js +1 -1
  54. package/esm2015/factory/decorators/complex-array.decorator.js +1 -1
  55. package/esm2015/factory/decorators/complex-field.decorator.js +2 -2
  56. package/esm2015/factory/decorators/date-field.decorator.js +1 -1
  57. package/esm2015/factory/decorators/string-number.decorator.js +1 -1
  58. package/esm2015/public_api.js +1 -1
  59. package/esm2015/utils/array-utils.js +1 -1
  60. package/esm2015/utils/is-nill.function.js +1 -1
  61. package/fesm2015/colijnit-transaction.js +640 -799
  62. package/fesm2015/colijnit-transaction.js.map +1 -1
  63. package/package.json +33 -23
  64. package/bundles/colijnit-transaction.umd.min.js +0 -16
  65. package/bundles/colijnit-transaction.umd.min.js.map +0 -1
  66. package/enum/icon.enum.d.ts +0 -281
  67. package/esm2015/enum/icon.enum.js +0 -283
  68. package/esm5/app/component/checkout/checkout/checkout.component.js +0 -196
  69. package/esm5/app/component/checkout/checkout-login/checkout-login.component.js +0 -62
  70. package/esm5/app/component/checkout/checkout-overview/checkout-overview.component.js +0 -183
  71. package/esm5/app/component/checkout/checkout-overview-block/checkout-overview-block.component.js +0 -48
  72. package/esm5/app/component/checkout/checkout-overview-delivery-address/checkout-overview-delivery-address.component.js +0 -34
  73. package/esm5/app/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +0 -298
  74. package/esm5/app/component/checkout/checkout-overview-relation-address/checkout-overview-relation-address.component.js +0 -98
  75. package/esm5/app/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +0 -303
  76. package/esm5/app/component/checkout/checkout-relation-suggestions-list/checkout-relation-suggestions-list.component.js +0 -33
  77. package/esm5/app/component/checkout/checkout-relation-suggestions-list-item/checkout-relation-suggestions-list-item.component.js +0 -48
  78. package/esm5/app/component/checkout/ione-checkout.component.js +0 -163
  79. package/esm5/app/component/checkout/ione-checkout.module.js +0 -82
  80. package/esm5/app/component/checkout/retail-transaction-checkout/retail-transaction-checkout.component.js +0 -62
  81. package/esm5/app/component/common/icon/icon.component.js +0 -40
  82. package/esm5/app/component/common/image-display/image-display.component.js +0 -57
  83. package/esm5/app/component/common/no-image-display/no-image-display.component.js +0 -29
  84. package/esm5/app/component/core/core.module.js +0 -48
  85. package/esm5/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +0 -66
  86. package/esm5/app/component/shopping-cart/ione-shopping-cart.component.js +0 -169
  87. package/esm5/app/component/shopping-cart/ione-shopping-cart.module.js +0 -70
  88. package/esm5/app/component/shopping-cart/shopping-cart/shopping-cart.component.js +0 -179
  89. package/esm5/app/component/shopping-cart/shopping-cart-line/shopping-cart-line.component.js +0 -208
  90. package/esm5/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +0 -563
  91. package/esm5/app/component/shopping-cart/stock-status-indicator/stock-status-indicator.component.js +0 -28
  92. package/esm5/app/enum/checkout-steps.enum.js +0 -10
  93. package/esm5/app/enum/content-view-mode.enum.js +0 -10
  94. package/esm5/app/enum/direction.enum.js +0 -9
  95. package/esm5/app/enum/language-code.enum.js +0 -8
  96. package/esm5/app/enum/order-discount-type.enum.js +0 -7
  97. package/esm5/app/enum/time-size.type.js +0 -10
  98. package/esm5/app/model/business-object.js +0 -85
  99. package/esm5/app/model/text-value-container.js +0 -7
  100. package/esm5/app/pipe/append.pipe.js +0 -22
  101. package/esm5/app/pipe/co-currency.pipe.js +0 -55
  102. package/esm5/app/pipe/date-duration.pipe.js +0 -61
  103. package/esm5/app/pipe/delivery-time.pipe.js +0 -38
  104. package/esm5/app/pipe/localize.pipe.js +0 -34
  105. package/esm5/app/pipe/safe-style-pipe.js +0 -22
  106. package/esm5/app/service/dictionary.service.js +0 -83
  107. package/esm5/app/service/ione-connector-adapter.service.js +0 -549
  108. package/esm5/app/service/options.service.js +0 -108
  109. package/esm5/app/service/transaction-event.service.js +0 -21
  110. package/esm5/app/service/transaction.service.js +0 -690
  111. package/esm5/app/utils/string-utils.js +0 -73
  112. package/esm5/assets/dictionary/text.properties.js +0 -282
  113. package/esm5/colijnit-transaction.js +0 -36
  114. package/esm5/enum/icon.enum.js +0 -283
  115. package/esm5/factory/business-object-factory.js +0 -122
  116. package/esm5/factory/decorators/boolean.decorator.js +0 -106
  117. package/esm5/factory/decorators/complex-array.decorator.js +0 -59
  118. package/esm5/factory/decorators/complex-field.decorator.js +0 -61
  119. package/esm5/factory/decorators/date-field.decorator.js +0 -40
  120. package/esm5/factory/decorators/string-number.decorator.js +0 -47
  121. package/esm5/public_api.js +0 -8
  122. package/esm5/utils/array-utils.js +0 -188
  123. package/esm5/utils/is-nill.function.js +0 -5
  124. package/fesm5/colijnit-transaction.js +0 -5620
  125. package/fesm5/colijnit-transaction.js.map +0 -1
@@ -1,208 +0,0 @@
1
- import { __awaiter, __decorate, __generator } from "tslib";
2
- import { Component, HostBinding, Input } from "@angular/core";
3
- import { StockStatus } from "@colijnit/transactionapi/build/enum/refcode/stock-status.enum";
4
- import { TransactionService } from "../../../service/transaction.service";
5
- import { CoreComponentsIcon, IconCacheService, PromptService } from "@colijnit/corecomponents_v9";
6
- import { DictionaryService } from "../../../service/dictionary.service";
7
- import { ResolvePendingLineReasonRequest } from "@colijnit/transactionapi/build/model/resolve-pending-reason-request.bo";
8
- import { PendingReasonType } from "@colijnit/transactionapi/build/enum/pending-reason-type.enum";
9
- var ShoppingCartLineComponent = /** @class */ (function () {
10
- function ShoppingCartLineComponent(iconCacheService, service, _promptService, _dictionaryService) {
11
- this.iconCacheService = iconCacheService;
12
- this.service = service;
13
- this._promptService = _promptService;
14
- this._dictionaryService = _dictionaryService;
15
- this.iconTrashBin = CoreComponentsIcon.TrashBin;
16
- this.stock = StockStatus.Low;
17
- }
18
- Object.defineProperty(ShoppingCartLineComponent.prototype, "line", {
19
- get: function () {
20
- return this._line;
21
- },
22
- set: function (value) {
23
- this._line = value;
24
- this.localAmount = this._line.amount;
25
- this.isText = this._line.isText;
26
- this.isArticle = this._line.isArticle;
27
- this.isSelected = this._line.isSelected;
28
- this._loadLineImage();
29
- },
30
- enumerable: true,
31
- configurable: true
32
- });
33
- ShoppingCartLineComponent.prototype.ngAfterViewInit = function () {
34
- this._loadLineImage();
35
- };
36
- ShoppingCartLineComponent.prototype.changeLineAmount = function (amount) {
37
- var _this = this;
38
- this.service.changeTransactionLineQuantity(this.line.uuid, amount).then(function (value) {
39
- if (!value || !value.isSuccess) {
40
- _this.localAmount = _this._line.amount;
41
- return;
42
- }
43
- _this._handleLine(value).then();
44
- });
45
- };
46
- ShoppingCartLineComponent.prototype.deleteTransactionLineClick = function () {
47
- return __awaiter(this, void 0, void 0, function () {
48
- var deleteLine;
49
- var _this = this;
50
- return __generator(this, function (_a) {
51
- switch (_a.label) {
52
- case 0: return [4 /*yield*/, this._promptService.showYesNo(this._dictionaryService.get("DELETE_TRANSACTION_LINE"), " ")];
53
- case 1:
54
- deleteLine = _a.sent();
55
- if (deleteLine) {
56
- this.service.deleteTransactionLine(this.service.currentTransaction.uuid, this.line.uuid).then(function (value) {
57
- _this._handleLine(value);
58
- });
59
- }
60
- return [2 /*return*/];
61
- }
62
- });
63
- });
64
- };
65
- ShoppingCartLineComponent.prototype._loadLineImage = function () {
66
- return __awaiter(this, void 0, void 0, function () {
67
- var _a, _b;
68
- return __generator(this, function (_c) {
69
- switch (_c.label) {
70
- case 0:
71
- _a = this;
72
- if (!this.line) return [3 /*break*/, 2];
73
- return [4 /*yield*/, this.service.retrieveLineImage(this.line)];
74
- case 1:
75
- _b = _c.sent();
76
- return [3 /*break*/, 3];
77
- case 2:
78
- _b = undefined;
79
- _c.label = 3;
80
- case 3:
81
- _a.image = _b;
82
- return [2 /*return*/];
83
- }
84
- });
85
- });
86
- };
87
- ShoppingCartLineComponent.prototype._confirmAction = function (lineOperationResponse) {
88
- return __awaiter(this, void 0, void 0, function () {
89
- var _a;
90
- var _this = this;
91
- return __generator(this, function (_b) {
92
- switch (_b.label) {
93
- case 0:
94
- _a = this.currentReason;
95
- return [4 /*yield*/, this._promptService.showYesNo(lineOperationResponse.pendingReason, " ")];
96
- case 1:
97
- _a.confirmation = _b.sent();
98
- this.service.resolvePendingLineReason(this.currentReason)
99
- .then(function (value) {
100
- _this._handleLine(value);
101
- });
102
- return [2 /*return*/];
103
- }
104
- });
105
- });
106
- };
107
- ShoppingCartLineComponent.prototype._showInformation = function (lineOperationResponse) {
108
- return __awaiter(this, void 0, void 0, function () {
109
- var _this = this;
110
- return __generator(this, function (_a) {
111
- switch (_a.label) {
112
- case 0: return [4 /*yield*/, this._promptService.showOkModal(lineOperationResponse.pendingReason, " ")];
113
- case 1:
114
- _a.sent();
115
- this.service.resolvePendingLineReason(this.currentReason)
116
- .then(function (value) {
117
- _this._handleLine(value);
118
- });
119
- return [2 /*return*/];
120
- }
121
- });
122
- });
123
- };
124
- ShoppingCartLineComponent.prototype._handleLine = function (lineOperationResponse) {
125
- return __awaiter(this, void 0, void 0, function () {
126
- var _a;
127
- return __generator(this, function (_b) {
128
- switch (_b.label) {
129
- case 0:
130
- if (lineOperationResponse === undefined) {
131
- return [2 /*return*/];
132
- }
133
- this.currentReason = new ResolvePendingLineReasonRequest(lineOperationResponse.lineUuid, lineOperationResponse.pendingReason, lineOperationResponse.pendingReasonType);
134
- _a = lineOperationResponse.pendingReasonType;
135
- switch (_a) {
136
- case PendingReasonType.ABORTED: return [3 /*break*/, 1];
137
- case PendingReasonType.CANCELLED: return [3 /*break*/, 1];
138
- case PendingReasonType.CONFIRMATION_NEEDED: return [3 /*break*/, 4];
139
- case PendingReasonType.NON_CRITICAL_DISCONTINUATION: return [3 /*break*/, 6];
140
- case PendingReasonType.INVALID_LOGISTICS: return [3 /*break*/, 8];
141
- case PendingReasonType.NONE: return [3 /*break*/, 10];
142
- }
143
- return [3 /*break*/, 10];
144
- case 1:
145
- this.localAmount = this._line.amount;
146
- if (!(lineOperationResponse.pendingReason !== "USER_DECISION")) return [3 /*break*/, 3];
147
- return [4 /*yield*/, this._promptService.showNotification(this._dictionaryService.get(lineOperationResponse.pendingReason), " ")];
148
- case 2:
149
- _b.sent();
150
- _b.label = 3;
151
- case 3: return [3 /*break*/, 11];
152
- case 4: return [4 /*yield*/, this._confirmAction(lineOperationResponse)];
153
- case 5:
154
- _b.sent();
155
- return [3 /*break*/, 11];
156
- case 6: return [4 /*yield*/, this._showInformation(lineOperationResponse)];
157
- case 7:
158
- _b.sent();
159
- return [3 /*break*/, 11];
160
- case 8:
161
- this.localAmount = this._line.amount;
162
- return [4 /*yield*/, this._promptService.showError(this._dictionaryService.get(lineOperationResponse.pendingReason), " ")];
163
- case 9:
164
- _b.sent();
165
- return [3 /*break*/, 11];
166
- case 10: return [3 /*break*/, 11];
167
- case 11: return [2 /*return*/];
168
- }
169
- });
170
- });
171
- };
172
- ShoppingCartLineComponent.ctorParameters = function () { return [
173
- { type: IconCacheService },
174
- { type: TransactionService },
175
- { type: PromptService },
176
- { type: DictionaryService }
177
- ]; };
178
- __decorate([
179
- Input(),
180
- HostBinding("class.overlayed")
181
- ], ShoppingCartLineComponent.prototype, "overlayMode", void 0);
182
- __decorate([
183
- Input(),
184
- HostBinding("class.overview")
185
- ], ShoppingCartLineComponent.prototype, "overviewMode", void 0);
186
- __decorate([
187
- HostBinding("class.is-text")
188
- ], ShoppingCartLineComponent.prototype, "isText", void 0);
189
- __decorate([
190
- HostBinding("class.is-article")
191
- ], ShoppingCartLineComponent.prototype, "isArticle", void 0);
192
- __decorate([
193
- HostBinding("class.is-selected")
194
- ], ShoppingCartLineComponent.prototype, "isSelected", void 0);
195
- __decorate([
196
- Input()
197
- ], ShoppingCartLineComponent.prototype, "line", null);
198
- ShoppingCartLineComponent = __decorate([
199
- Component({
200
- selector: "shopping-cart-line",
201
- template: "\n <div *ngIf=\"line.isArticle\" class=\"cart-line-r\" fxFlex>\n <div fxLayout=\"row\" class=\"full-width\">\n <div fxLayout=\"column\" class=\"cart-line-image\" *ngIf=\"!overviewMode\">\n <co-button [iconData]=\"iconCacheService.getIcon(iconTrashBin)\"\n [title]=\"'DELETE_TRANSACTION_LINE_HINT' | localize\"\n (click)=\"deleteTransactionLineClick()\"\n class=\"triangle white\"\n iconClass=\"medium light\"></co-button>\n </div>\n <div fxLayout=\"column\" class=\"cart-line-image\" *ngIf=\"!overviewMode\">\n <image-display [model]=\"image\" hideOnEmptyModel></image-display>\n </div>\n <div fxLayout=\"column\" class=\"cart-line-description\" fxLayoutGap=\"20px\">\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\n <span [textContent]=\"line.goodDescription\" class=\"cart-line-description-main\"></span>\n <span *ngIf=\"line.goodDescription && line.articleNumber\">|</span>\n <span [textContent]=\"line.articleNumber\" class=\"cart-line-description-artnr\"></span>\n </div>\n <span [innerHTML]=\"line.configurationReadable\"></span>\n </div>\n </div>\n <div fxLayout=\"row\" class=\"cart-line-right\">\n <div fxLayout=\"column\" class=\"cart-line-stock\" *ngIf=\"!overlayMode && !overviewMode\">\n <span [textContent]=\"'STOCK' | localize\" class=\"small-font\"></span>\n <stock-status-indicator [model]=\"stock\"></stock-status-indicator>\n <span [textContent]=\"'DELIVERY_TIME_PERIOD' | localize\" class=\"small-font\"></span>\n <span [textContent]=\"line.deliveryDate | deliveryTime\"></span>\n </div>\n <div class=\"cart-line-amount\">\n <co-input-number-picker\n class=\"horizontal\"\n [(model)]=\"localAmount\" [min]=\"0\" [buttonShowMode]=\"'always'\"\n [readonly]=\"true\"\n (modelChange)=\"changeLineAmount($event)\"></co-input-number-picker>\n </div>\n\n <div class=\"cart-line-totals\">\n <span [textContent]=\"line.displayNetLineTotal | coCurrency: true\"></span>\n </div>\n </div>\n </div>\n <div *ngIf=\"line.isText\" class=\"cart-line-t\" fxFlex\n [class.article-text]=\"line.articleBound\"\n [textContent]=\"line.text\">\n </div>\n ",
202
- styles: ["body,html{height:100%}body{margin:0;font-family:Roboto,\"Helvetica Neue\",sans-serif}.cart-line-r .cart-line-description .cart-line-description-artnr{font-size:10px}.cart-line-r .cart-line-description,.cart-line-r .cart-line-image,.cart-line-r .cart-line-right .cart-line-amount,.cart-line-r .cart-line-right .cart-line-stock,.cart-line-r .cart-line-right .cart-line-totals{margin-top:20px;margin-bottom:20px}.cart-line-r .cart-line-description,.cart-line-r .cart-line-right .cart-line-amount,.cart-line-r .cart-line-right .cart-line-totals,.cart-line-t{margin-left:20px}.cart-line-r .cart-line-description,.cart-line-r .cart-line-right .cart-line-amount,.cart-line-t{margin-right:20px}.triangle{border-radius:3px}.full-width{width:100%}.flex-center{display:flex;flex-direction:row;align-items:center!important;justify-content:center!important;margin:10px 0}:host{padding-bottom:20px;padding-top:20px;display:flex;flex-wrap:wrap;border-bottom:1px solid #dbe3e8;width:100%}:host.overlayed.is-text{display:none!important}:host.overlayed.is-selected{background-color:#add8e6}:host.overview.is-text{display:none!important}:host.overview.is-selected{background-color:#add8e6}.cart-line-r{display:flex;justify-content:stretch;flex-direction:row}@media (max-width:800px){.cart-line-r{flex-direction:column}}.cart-line-r co-button{border:0;padding:0}.cart-line-r .cart-line-image{display:flex;flex:1 0 auto!important;flex-direction:column;align-items:center;justify-content:center}.cart-line-r .cart-line-image image-display{width:6em;height:6em}.cart-line-r .cart-line-description{display:flex;flex-direction:column;width:100%}.cart-line-r .cart-line-description .cart-line-description-main{font-weight:700}.cart-line-r .cart-line-right{justify-content:flex-end}.cart-line-r .cart-line-right .cart-line-amount,.cart-line-r .cart-line-right .cart-line-stock{width:10em}.cart-line-r .cart-line-right .cart-line-totals{display:flex;justify-content:flex-end;min-width:100px;font-weight:700}.cart-line-r .cart-line-right .cart-line-totals span{text-align:right}.cart-line-t.article-text{padding-left:10em}"]
203
- })
204
- ], ShoppingCartLineComponent);
205
- return ShoppingCartLineComponent;
206
- }());
207
- export { ShoppingCartLineComponent };
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcHBpbmctY2FydC1saW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb2xpam5pdC90cmFuc2FjdGlvbi8iLCJzb3VyY2VzIjpbImFwcC9jb21wb25lbnQvc2hvcHBpbmctY2FydC9zaG9wcGluZy1jYXJ0LWxpbmUvc2hvcHBpbmctY2FydC1saW5lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsV0FBVyxFQUFVLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sK0RBQStELENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFDLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2hHLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHdFQUF3RSxDQUFDO0FBQ3ZILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBc0QvRjtJQXlDRSxtQ0FDUyxnQkFBa0MsRUFDbEMsT0FBMkIsRUFDMUIsY0FBNkIsRUFDN0Isa0JBQXFDO1FBSHRDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTVDL0IsaUJBQVksR0FBdUIsa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBbUN4RSxVQUFLLEdBQWdCLFdBQVcsQ0FBQyxHQUFHLENBQUM7SUFVNUMsQ0FBQztJQXpCRCxzQkFBVywyQ0FBSTthQUFmO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3BCLENBQUM7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M0hZLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0LCBJbnB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mb30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm9cIjtcbmltcG9ydCB7U3RvY2tTdGF0dXN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9yZWZjb2RlL3N0b2NrLXN0YXR1cy5lbnVtXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvdHJhbnNhY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb24sIEljb25DYWNoZVNlcnZpY2UsIFByb21wdFNlcnZpY2V9IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjlcIjtcbmltcG9ydCB7RGljdGlvbmFyeVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL2RpY3Rpb25hcnkuc2VydmljZVwiO1xuaW1wb3J0IHtSZXNvbHZlUGVuZGluZ0xpbmVSZWFzb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3Jlc29sdmUtcGVuZGluZy1yZWFzb24tcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3BlbmRpbmctcmVhc29uLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtMaW5lT3BlcmF0aW9uUmVzcG9uc2V9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbGluZS1vcGVyYXRpb24tcmVzcG9uc2UuYm9cIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNob3BwaW5nLWNhcnQtbGluZVwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgKm5nSWY9XCJsaW5lLmlzQXJ0aWNsZVwiIGNsYXNzPVwiY2FydC1saW5lLXJcIiBmeEZsZXg+XG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImNhcnQtbGluZS1pbWFnZVwiICpuZ0lmPVwiIW92ZXJ2aWV3TW9kZVwiPlxuICAgICAgICA8Y28tYnV0dG9uIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvblRyYXNoQmluKVwiXG4gICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidERUxFVEVfVFJBTlNBQ1RJT05fTElORV9ISU5UJyB8IGxvY2FsaXplXCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlVHJhbnNhY3Rpb25MaW5lQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlhbmdsZSB3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwibWVkaXVtIGxpZ2h0XCI+PC9jby1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjYXJ0LWxpbmUtaW1hZ2VcIiAqbmdJZj1cIiFvdmVydmlld01vZGVcIj5cbiAgICAgICAgICA8aW1hZ2UtZGlzcGxheSBbbW9kZWxdPVwiaW1hZ2VcIiBoaWRlT25FbXB0eU1vZGVsPjwvaW1hZ2UtZGlzcGxheT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImNhcnQtbGluZS1kZXNjcmlwdGlvblwiIGZ4TGF5b3V0R2FwPVwiMjBweFwiPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJsaW5lLmdvb2REZXNjcmlwdGlvblwiIGNsYXNzPVwiY2FydC1saW5lLWRlc2NyaXB0aW9uLW1haW5cIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxpbmUuZ29vZERlc2NyaXB0aW9uICYmIGxpbmUuYXJ0aWNsZU51bWJlclwiPnw8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibGluZS5hcnRpY2xlTnVtYmVyXCIgY2xhc3M9XCJjYXJ0LWxpbmUtZGVzY3JpcHRpb24tYXJ0bnJcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsaW5lLmNvbmZpZ3VyYXRpb25SZWFkYWJsZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBjbGFzcz1cImNhcnQtbGluZS1yaWdodFwiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjYXJ0LWxpbmUtc3RvY2tcIiAqbmdJZj1cIiFvdmVybGF5TW9kZSAmJiAhb3ZlcnZpZXdNb2RlXCI+XG4gICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIidTVE9DSycgfCBsb2NhbGl6ZVwiIGNsYXNzPVwic21hbGwtZm9udFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3RvY2stc3RhdHVzLWluZGljYXRvciBbbW9kZWxdPVwic3RvY2tcIj48L3N0b2NrLXN0YXR1cy1pbmRpY2F0b3I+XG4gICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cIidERUxJVkVSWV9USU1FX1BFUklPRCcgfCBsb2NhbGl6ZVwiIGNsYXNzPVwic21hbGwtZm9udFwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibGluZS5kZWxpdmVyeURhdGUgfCBkZWxpdmVyeVRpbWVcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FydC1saW5lLWFtb3VudFwiPlxuICAgICAgICAgIDxjby1pbnB1dC1udW1iZXItcGlja2VyXG4gICAgICAgICAgICBjbGFzcz1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgWyhtb2RlbCldPVwibG9jYWxBbW91bnRcIiBbbWluXT1cIjBcIiBbYnV0dG9uU2hvd01vZGVdPVwiJ2Fsd2F5cydcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImNoYW5nZUxpbmVBbW91bnQoJGV2ZW50KVwiPjwvY28taW5wdXQtbnVtYmVyLXBpY2tlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcnQtbGluZS10b3RhbHNcIj5cbiAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwibGluZS5kaXNwbGF5TmV0TGluZVRvdGFsIHwgY29DdXJyZW5jeTogdHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibGluZS5pc1RleHRcIiBjbGFzcz1cImNhcnQtbGluZS10XCIgZnhGbGV4XG4gICAgICAgICBbY2xhc3MuYXJ0aWNsZS10ZXh0XT1cImxpbmUuYXJ0aWNsZUJvdW5kXCJcbiAgICAgICAgIFt0ZXh0Q29udGVudF09XCJsaW5lLnRleHRcIj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbXCIuL3Nob3BwaW5nLWNhcnQtbGluZS5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBTaG9wcGluZ0NhcnRMaW5lQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyByZWFkb25seSBpY29uVHJhc2hCaW46IENvcmVDb21wb25lbnRzSWNvbiA9IENvcmVDb21wb25lbnRzSWNvbi5UcmFzaEJpbjtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5vdmVybGF5ZWRcIilcbiAgcHVibGljIG92ZXJsYXlNb2RlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLm92ZXJ2aWV3XCIpXG4gIHB1YmxpYyBvdmVydmlld01vZGU6IGJvb2xlYW47XG5cbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaXMtdGV4dFwiKVxuICBwdWJsaWMgaXNUZXh0OiBib29sZWFuO1xuXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmlzLWFydGljbGVcIilcbiAgcHVibGljIGlzQXJ0aWNsZTogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoXCJjbGFzcy5pcy1zZWxlY3RlZFwiKVxuICBwdWJsaWMgaXNTZWxlY3RlZDogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGxpbmUoKTogVHJhbnNhY3Rpb25MaW5lSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbmU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGxpbmUodmFsdWU6IFRyYW5zYWN0aW9uTGluZUluZm8pIHtcbiAgICB0aGlzLl9saW5lID0gdmFsdWU7XG4gICAgdGhpcy5sb2NhbEFtb3VudCA9IHRoaXMuX2xpbmUuYW1vdW50O1xuICAgIHRoaXMuaXNUZXh0ID0gdGhpcy5fbGluZS5pc1RleHQ7XG4gICAgdGhpcy5pc0FydGljbGUgPSB0aGlzLl9saW5lLmlzQXJ0aWNsZTtcbiAgICB0aGlzLmlzU2VsZWN0ZWQgPSB0aGlzLl9saW5lLmlzU2VsZWN0ZWQ7XG4gICAgdGhpcy5fbG9hZExpbmVJbWFnZSgpO1xuICB9XG5cbiAgcHVibGljIGxvY2FsQW1vdW50OiBudW1iZXI7XG4gIHB1YmxpYyBpbWFnZTogc3RyaW5nO1xuICBwdWJsaWMgc3RvY2s6IFN0b2NrU3RhdHVzID0gU3RvY2tTdGF0dXMuTG93O1xuICBwdWJsaWMgY3VycmVudFJlYXNvbjogUmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uUmVxdWVzdDtcblxuICBwcml2YXRlIF9saW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBzZXJ2aWNlOiBUcmFuc2FjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfcHJvbXB0U2VydmljZTogUHJvbXB0U2VydmljZSxcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2FkTGluZUltYWdlKCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlTGluZUFtb3VudChhbW91bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VydmljZS5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh0aGlzLmxpbmUudXVpZCwgYW1vdW50KS50aGVuKCh2YWx1ZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5sb2NhbEFtb3VudCA9IHRoaXMuX2xpbmUuYW1vdW50O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9oYW5kbGVMaW5lKHZhbHVlKS50aGVuKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb25MaW5lQ2xpY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZGVsZXRlTGluZTogYm9vbGVhbiAgPSBhd2FpdCB0aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dZZXNObyh0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJERUxFVEVfVFJBTlNBQ1RJT05fTElORVwiKSwgXCIgXCIpO1xuICAgIGlmIChkZWxldGVMaW5lKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRoaXMuc2VydmljZS5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgdGhpcy5saW5lLnV1aWQpLnRoZW4oKHZhbHVlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5faGFuZGxlTGluZSh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9sb2FkTGluZUltYWdlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2UgPSB0aGlzLmxpbmUgPyBhd2FpdCB0aGlzLnNlcnZpY2UucmV0cmlldmVMaW5lSW1hZ2UodGhpcy5saW5lKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBhc3luYyBfY29uZmlybUFjdGlvbihsaW5lT3BlcmF0aW9uUmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY3VycmVudFJlYXNvbi5jb25maXJtYXRpb24gID0gYXdhaXQgdGhpcy5fcHJvbXB0U2VydmljZS5zaG93WWVzTm8obGluZU9wZXJhdGlvblJlc3BvbnNlLnBlbmRpbmdSZWFzb24sIFwiIFwiKTtcbiAgICB0aGlzLnNlcnZpY2UucmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uKHRoaXMuY3VycmVudFJlYXNvbilcbiAgICAgIC50aGVuKCh2YWx1ZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUxpbmUodmFsdWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9zaG93SW5mb3JtYXRpb24obGluZU9wZXJhdGlvblJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dPa01vZGFsKGxpbmVPcGVyYXRpb25SZXNwb25zZS5wZW5kaW5nUmVhc29uLCBcIiBcIik7XG4gICAgdGhpcy5zZXJ2aWNlLnJlc29sdmVQZW5kaW5nTGluZVJlYXNvbih0aGlzLmN1cnJlbnRSZWFzb24pXG4gICAgICAudGhlbigodmFsdWU6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLl9oYW5kbGVMaW5lKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgIGFzeW5jIF9oYW5kbGVMaW5lKGxpbmVPcGVyYXRpb25SZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGxpbmVPcGVyYXRpb25SZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFJlYXNvbiA9IG5ldyBSZXNvbHZlUGVuZGluZ0xpbmVSZWFzb25SZXF1ZXN0KGxpbmVPcGVyYXRpb25SZXNwb25zZS5saW5lVXVpZCxcbiAgICAgIGxpbmVPcGVyYXRpb25SZXNwb25zZS5wZW5kaW5nUmVhc29uLCBsaW5lT3BlcmF0aW9uUmVzcG9uc2UucGVuZGluZ1JlYXNvblR5cGUpO1xuXG4gICAgc3dpdGNoIChsaW5lT3BlcmF0aW9uUmVzcG9uc2UucGVuZGluZ1JlYXNvblR5cGUpIHtcbiAgICAgIGNhc2UgUGVuZGluZ1JlYXNvblR5cGUuQUJPUlRFRDpcbiAgICAgIGNhc2UgUGVuZGluZ1JlYXNvblR5cGUuQ0FOQ0VMTEVEOlxuICAgICAgICB0aGlzLmxvY2FsQW1vdW50ID0gdGhpcy5fbGluZS5hbW91bnQ7XG4gICAgICAgIGlmIChsaW5lT3BlcmF0aW9uUmVzcG9uc2UucGVuZGluZ1JlYXNvbiAhPT0gXCJVU0VSX0RFQ0lTSU9OXCIpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dOb3RpZmljYXRpb24odGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KGxpbmVPcGVyYXRpb25SZXNwb25zZS5wZW5kaW5nUmVhc29uKSwgXCIgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQZW5kaW5nUmVhc29uVHlwZS5DT05GSVJNQVRJT05fTkVFREVEOlxuICAgICAgICBhd2FpdCB0aGlzLl9jb25maXJtQWN0aW9uKGxpbmVPcGVyYXRpb25SZXNwb25zZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OOlxuICAgICAgICBhd2FpdCB0aGlzLl9zaG93SW5mb3JtYXRpb24obGluZU9wZXJhdGlvblJlc3BvbnNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBlbmRpbmdSZWFzb25UeXBlLklOVkFMSURfTE9HSVNUSUNTOlxuICAgICAgICB0aGlzLmxvY2FsQW1vdW50ID0gdGhpcy5fbGluZS5hbW91bnQ7XG4gICAgICAgIGF3YWl0IHRoaXMuX3Byb21wdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChsaW5lT3BlcmF0aW9uUmVzcG9uc2UucGVuZGluZ1JlYXNvbiksIFwiIFwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFBlbmRpbmdSZWFzb25UeXBlLk5PTkU6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxufVxuIl19