@snabcentr/client-ui 4.14.7 → 4.16.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.
- package/esm2022/order/draft/sc-draft.component.mjs +12 -15
- package/esm2022/order/index.mjs +3 -4
- package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +39 -0
- package/esm2022/order/order-form/sc-order-form.component.mjs +6 -18
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +3 -4
- package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +53 -0
- package/fesm2022/snabcentr-client-ui.mjs +49 -105
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/order/draft/sc-draft.component.d.ts +5 -8
- package/order/index.d.ts +2 -3
- package/order/{order-direction-items/sc-order-direction-items.component.d.ts → new-order-items/sc-new-order-items.component.d.ts} +5 -5
- package/order/order-form/sc-order-form.component.d.ts +2 -11
- package/order/order-items-list/sc-order-items-list.component.d.ts +0 -1
- package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +37 -0
- package/package.json +2 -2
- package/release_notes.tmp +4 -2
- package/styles/tailwind/tailwind.scss +4 -0
- package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +0 -22
- package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +0 -39
- package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +0 -75
- package/order/models/sc-i-cart-items-by-direction.d.ts +0 -25
- package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +0 -58
|
@@ -16,7 +16,6 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
import * as i1 from "@angular/forms";
|
|
17
17
|
/**
|
|
18
18
|
* Компонент списка товаров корзины, заказа или черновика.
|
|
19
|
-
* Позиции разбиты.
|
|
20
19
|
*/
|
|
21
20
|
export class ScOrderItemsListComponent {
|
|
22
21
|
constructor() {
|
|
@@ -200,13 +199,13 @@ export class ScOrderItemsListComponent {
|
|
|
200
199
|
this.scDialogService.openPriceHistoryChartDialog(product);
|
|
201
200
|
}
|
|
202
201
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
203
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n
|
|
202
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n @for (item of itemsSignal(); track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value;\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n [disabled]=\"itemComponent.showLoader()\"\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator\"\n [isShowEditControls]=\"canEdit()\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"selectable() && !selectionFormGroup.get(item.id)?.value\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item, itemComponent)\"\n [loading]=\"itemComponent.showLoader()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">\u0418\u0442\u043E\u0433\u043E: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: ScOrderItemComponent, selector: "sc-order-item", inputs: ["isShowEditControls"], outputs: ["clickSettings"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: TuiCurrencyPipe, name: "tuiCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
204
203
|
}
|
|
205
204
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, decorators: [{
|
|
206
205
|
type: Component,
|
|
207
|
-
args: [{ standalone: true, selector: 'sc-order-items-list', imports: [AsyncPipe, TuiFormatNumberPipe, ScOrderItemComponent, ScPrintDirective, ReactiveFormsModule, TuiCheckbox, TuiButton, TuiButtonLoading, TuiCurrencyPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n
|
|
206
|
+
args: [{ standalone: true, selector: 'sc-order-items-list', imports: [AsyncPipe, TuiFormatNumberPipe, ScOrderItemComponent, ScPrintDirective, ReactiveFormsModule, TuiCheckbox, TuiButton, TuiButtonLoading, TuiCurrencyPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n @for (item of itemsSignal(); track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value;\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n [disabled]=\"itemComponent.showLoader()\"\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator\"\n [isShowEditControls]=\"canEdit()\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"selectable() && !selectionFormGroup.get(item.id)?.value\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item, itemComponent)\"\n [loading]=\"itemComponent.showLoader()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">\u0418\u0442\u043E\u0433\u043E: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n" }]
|
|
208
207
|
}], propDecorators: { items: [{
|
|
209
208
|
type: Input,
|
|
210
209
|
args: [{ required: true }]
|
|
211
210
|
}] } });
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUF3QyxjQUFjLEVBQWUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxF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LE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoSCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDTywyQkFBMkIsQ0FBQyxPQUErQjtRQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7K0dBNU5RLHlCQUF5QjttR0FBekIseUJBQXlCLDBoQkM1QnRDLDRuR0FrRUEsdUNEekNjLFNBQVMseUNBQUUsbUJBQW1CLHdEQUFFLG9CQUFvQixzSEFBRSxnQkFBZ0IsMEVBQUUsbUJBQW1CLHF3QkFBRSxXQUFXLG9HQUFFLFNBQVMsb0lBQUUsZ0JBQWdCLGtIQUFFLGVBQWU7OzRGQUd2Six5QkFBeUI7a0JBUHJDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHFCQUFxQixXQUV0QixDQUFDLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxtQkFDaEosdUJBQXVCLENBQUMsTUFBTTs4QkErRjNDLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgSW5wdXQsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU0NfT1JERVJfTE9BREVSLCBTY0lPcmRlckVkaXRvckxvYWRlciwgU2NJT3JkZXJMb2FkZXIsIFNjTnVtYmVySGVscGVyLCBTY09yZGVySXRlbSwgU2NVbml0c0hlbHBlciB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQ3VycmVuY3lQaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRm9ybWF0TnVtYmVyUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNoZWNrYm94IH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkLCBTY1ByaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU2NEaWFsb2dTZXJ2aWNlLCBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9PUFRJT05TLCBTY09yZGVyT3B0aW9ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Mtb3JkZXItb3B0aW9ucyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLWl0ZW0vc2Mtb3JkZXItaXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LrQvtGA0LfQuNC90YssINC30LDQutCw0LfQsCDQuNC70Lgg0YfQtdGA0L3QvtCy0LjQutCwLlxuICog0J/QvtC30LjRhtC40Lgg0YDQsNC30LHQuNGC0YsuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1vcmRlci1pdGVtcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgU2NPcmRlckl0ZW1Db21wb25lbnQsIFNjUHJpbnREaXJlY3RpdmUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFR1aUNoZWNrYm94LCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUN1cnJlbmN5UGlwZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCS0L3Rg9GC0YDQtdC90L3QuNC5INGB0LjQs9C90LDQuyDRgdC/0LjRgdC60LAg0Y3Qu9C10LzQtdC90YLQvtCyINC60L7RgNC30LjQvdGLICjRgtC+0LLQsNGA0L7QsikuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zU2lnbmFsID0gc2lnbmFsPFNjT3JkZXJJdGVtW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCS0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0L7RgCDQv9C+0LfQuNGG0LjQuSDRh9C10LrQsdC+0LrRgdCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCS0L3Rg9GC0YDQtdC90L3Rj9GPINCz0YDRg9C/0L/QsCDRhNC+0YDQvNGLINC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGlvbkZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXA8UmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w8Ym9vbGVhbj4+Pih7fSk7XG5cbiAgICAvKipcbiAgICAgKiDQntC/0YbQuNC4INC30LDQutCw0LfQsCAo0YfQtdGA0L3QvtCy0LjQutCwKS4g0J/RgNC10LTQvtGB0YLQsNCy0LvRj9C10YLRgdGPINC00LjRgNC10LrRgtC40LLQvtC5IHtAbGluayBTY09yZGVyQWNjZXNzb3JEaXJlY3RpdmV9INCyINC60L7QvdGC0LXQutGB0YLQtSDRh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVyT3B0aW9ucyA9IGluamVjdDxTY09yZGVyT3B0aW9ucz4oU0NfT1JERVJfT1BUSU9OUywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpdGVtc0lkcyA9IHRvU2lnbmFsKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWUpID0+IE9iamVjdC5lbnRyaWVzPGJvb2xlYW4+KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSkpLCB7XG4gICAgICAgIGluaXRpYWxWYWx1ZTogW10sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtCyINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zSWRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNoZWNrZWRdKSA9PiAhc2VsZWN0YWJsZSB8fCBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YXQvtC00L3Ri9C1INC00LDQvdC90YvQtSDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHMpKTtcblxuICAgIC8qKlxuICAgICAqINCh0YPQvNC80LAg0YHRgtC+0LjQvNC+0YHRgtC4INCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VtU2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBTY051bWJlckhlbHBlci5yb3VuZE1vbmV5KFxuICAgICAgICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhc2VsZWN0YWJsZSB8fCBzZWxlY3RlZEl0ZW1zSWRzLmluY2x1ZGVzKGl0ZW0uaWQpKS5yZWR1Y2UoKHN1bTogbnVtYmVyLCBpdGVtOiBTY09yZGVySXRlbSkgPT4gc3VtICsgaXRlbS5jb3N0UnViLCAwKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC/0L7Qu9GD0YfQtdC90LjRjyDQuCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQt9Cw0LrQsNC30LAgKNC60L7RgNC30LjQvdCwIC8g0LfQsNC60LDQtyAvINGH0LXRgNC90L7QstC40LogPSDQt9Cw0LrQsNC3KS5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfT1JERVJfTE9BREVSfSAo0YDQtdCw0LvQuNC30LDRhtC40Y8ge0BsaW5rIFNjSU9yZGVyTG9hZGVyfSkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVySXRlbXNMaXN0TG9hZGVyID0gaW5qZWN0PFNjSU9yZGVyTG9hZGVyIHwgU2NJT3JkZXJFZGl0b3JMb2FkZXI+KFNDX09SREVSX0xPQURFUik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC80L7QttC90L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/QvtC30LjRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkVkaXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRhYmxlKCkgJiYgJ3VwZGF0ZVByb2R1Y3QkJyBpbiB0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY0RpYWxvZ1NlcnZpY2UgPSBpbmplY3Q8SVNjRGlhbG9nU2VydmljZT4oU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQutC+0YDQt9C40L3RiyAo0YLQvtCy0LDRgNC+0LIpLiDQn9GA0Lgg0YPRgdGC0LDQvdC+0LLQutC1INGB0LjQvdGF0YDQvtC90L3QviDQvtCx0L3QvtCy0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQstGL0LHQvtGA0LAg0LIg0YTQvtGA0LzQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHNldCBpdGVtcyh2YWx1ZTogU2NPcmRlckl0ZW1bXSkge1xuICAgICAgICB0aGlzLml0ZW1zU2lnbmFsLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc3luY1NlbGVjdGlvbkNvbnRyb2xzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQuNC90YXRgNC+0L3QuNC30LjRgNGD0LXRgiDQutC+0L3RgtGA0L7Qu9GLINGE0L7RgNC80Ysg0LLRi9Cx0L7RgNCwINGBINGC0LXQutGD0YnQuNC8INGB0L/QuNGB0LrQvtC8INGC0L7QstCw0YDQvtCyOiDRg9C00LDQu9GP0LXRgiDQutC+0L3RgtGA0L7Qu9GLINC00LvRjyDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjRhSBpZCwg0LTQvtCx0LDQstC70Y/QtdGCINC00LvRjyDQvdC+0LLRi9GFLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3luY1NlbGVjdGlvbkNvbnRyb2xzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBuZXcgU2V0KGN1cnJlbnRJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpKTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50SWRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wobmFtZSBhcyBuZXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRhaW5zKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmlkLCBuZXcgRm9ybUNvbnRyb2wodHJ1ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC/0L7Qt9C40YbQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwINC00LvRjyDRg9C00LDQu9C10L3QuNGPLlxuICAgICAqIEBwYXJhbSBwcmljZUNhcmQg0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWxldGVJdGVtKGl0ZW06IFNjT3JkZXJJdGVtLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KHRydWUpO1xuXG4gICAgICAgICh0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyIGFzIFNjSU9yZGVyRWRpdG9yTG9hZGVyKVxuICAgICAgICAgICAgLmRlbGV0ZVByb2R1Y3QkKGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKGl0ZW0ucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3UXVhbnRpdHkg0J3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGF0Y2hJdGVtKG5ld1F1YW50aXR5OiBudW1iZXIgfCBudWxsLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSB8fCAhcHJpY2VDYXJkLm9yZGVySXRlbSB8fCAhcHJpY2VDYXJkLnByb2R1Y3QgfHwgIW5ld1F1YW50aXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmljZUNhcmQuc2hvd0xvYWRlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgKHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIgYXMgU2NJT3JkZXJFZGl0b3JMb2FkZXIpXG4gICAgICAgICAgICAudXBkYXRlUHJvZHVjdCQocHJpY2VDYXJkLm9yZGVySXRlbS5pZCwgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUocHJpY2VDYXJkLm9yZGVySXRlbSEucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0L7Qv9C40YHQsNC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0L7Qv9C40YHQsNC90LjQtSDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJdGVtINCV0LTQuNC90LjRh9C90LDRjyDQv9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4INCyINC30LDQutCw0LfQtSwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0LrQsNC30LAsINCyINC60L7RgtC+0YDQvtC8INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByb2R1Y3RJbmZvRGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10sIG9yZGVySXRlbT86IFNjT3JkZXJJdGVtLCBvcmRlcklkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0LCBvcmRlckl0ZW0sIG9yZGVySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YDRi9Cy0LDQtdGCINC80L7QtNCw0LvRjNC90L7QtSDQvtC60L3QviDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINC40LvQuCDQtdCz0L4g0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NvbmZpZ3VyYXRvciA9IEJvb2xlYW4oaXRlbS5jb25maWd1cmF0b3IpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ3VyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyYXRvckRpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKFNjVW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZShpdGVtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviBcItCT0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4XCIg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCi0L7QstCw0YAv0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQs9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3QpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBbZm9ybUdyb3VwXT1cInNlbGVjdGlvbkZvcm1Hcm91cFwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCJcbj5cbiAgICA8IS0tINCT0YDRg9C/0L/RiyDRgtC+0LLQsNGA0L7QsiDQv9C+INC90LDQv9GA0LDQstC70LXQvdC40Y/QvCDQv9GA0L7QtNCw0LYuIC0tPlxuXG4gICAgQGZvciAoaXRlbSBvZiBpdGVtc1NpZ25hbCgpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgIEBpZiAoJGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC1hdXRvIGgtcHggdy1mdWxsIGJnLXR1aS1jbGVhclwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIEBsZXQgaXNBY3RpdmUgPSAhc2VsZWN0YWJsZSgpIHx8IHNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlO1xuXG4gICAgICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBINCy0YvQsdC+0YDQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW1Db21wb25lbnQuc2hvd0xvYWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0g0JrQsNGA0YLQvtGH0LrQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgPHNjLW9yZGVyLWl0ZW1cbiAgICAgICAgICAgICAgICAjaXRlbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cIml0ZW0ucHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgW29yZGVySXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbc2hvd1F1YW50aXR5Q29udHJvbF09XCJjYW5FZGl0KCkgJiYgIWl0ZW0uY29uZmlndXJhdG9yXCJcbiAgICAgICAgICAgICAgICBbaXNTaG93RWRpdENvbnRyb2xzXT1cImNhbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS02MF09XCJzZWxlY3RhYmxlKCkgJiYgIXNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tDYXJkRXZlbnQpPVwib3BlblByb2R1Y3RJbmZvRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgb3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXCJcbiAgICAgICAgICAgICAgICAocXVhbnRpdHlWYWx1ZUNoYW5nZXMpPVwicGF0Y2hJdGVtKCRldmVudCwgaXRlbUNvbXBvbmVudClcIlxuICAgICAgICAgICAgICAgIChjbGlja1ByaWNlSGlzdG9yeUV2ZW50KT1cIm9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhpdGVtLnByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tTZXR0aW5ncyk9XCJvcGVuU2V0dGluZ3NEaWFsb2coaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIiFpc0FjdGl2ZVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICBAaWYgKGNhbkVkaXQoKSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oaXRlbSwgaXRlbUNvbXBvbmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpdGVtQ29tcG9uZW50LnNob3dMb2FkZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtMSB0b3AtMSBsZzohcmVsYXRpdmUgbGc6bGVmdC0wIGxnOnRvcC0wIGxnOiFzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tINCk0YPRgtC10YAg0LPRgNGD0L/Qv9GLINGC0L7QstCw0YDQvtCyLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMi41XCJcbiAgICA+XG4gICAgICAgIEBsZXQgdG90YWxTdW0gPSBzdW1TZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIDwhLS0g0JjRgtC+0LPQvtCy0LDRjyDRgdGD0LzQvNCwLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj7QmNGC0L7Qs9C+OiB7eyB0b3RhbFN1bSB8IHR1aUZvcm1hdE51bWJlcjogbW9uZXlGb3JtYXQgfCBhc3luYyB9fSB7eyAnUlVCJyB8IHR1aUN1cnJlbmN5IH19PC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUF3QyxjQUFjLEVBQWUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0ksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxF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T0FBTyxFQUFFLENBQUMsQ0FBQztRQUNsRyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hILENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLDJCQUEyQixDQUFDLE9BQStCO1FBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0E1TlEseUJBQXlCO21HQUF6Qix5QkFBeUIsMGhCQzNCdEMscTNGQWdFQSx1Q0R4Q2MsU0FBUyx5Q0FBRSxtQkFBbUIsd0RBQUUsb0JBQW9CLHNIQUFFLGdCQUFnQiwwRUFBRSxtQkFBbUIscXdCQUFFLFdBQVcsb0dBQUUsU0FBUyxvSUFBRSxnQkFBZ0Isa0hBQUUsZUFBZTs7NEZBR3ZKLHlCQUF5QjtrQkFQckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04scUJBQXFCLFdBRXRCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLG1CQUNoSix1QkFBdUIsQ0FBQyxNQUFNOzhCQStGM0MsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9MT0FERVIsIFNjSU9yZGVyRWRpdG9yTG9hZGVyLCBTY0lPcmRlckxvYWRlciwgU2NOdW1iZXJIZWxwZXIsIFNjT3JkZXJJdGVtLCBTY1VuaXRzSGVscGVyIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlDdXJyZW5jeVBpcGUgfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlGb3JtYXROdW1iZXJQaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hlY2tib3ggfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0U2NQcmljZUNhcmQsIFNjUHJpbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IElTY0RpYWxvZ1NlcnZpY2UsIFNDX0RJQUxPR19TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IFNDX09SREVSX09QVElPTlMsIFNjT3JkZXJPcHRpb25zIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zYy1vcmRlci1vcHRpb25zJztcbmltcG9ydCB7IFNjT3JkZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vb3JkZXItaXRlbS9zYy1vcmRlci1pdGVtLmNvbXBvbmVudCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutC+0YDQt9C40L3Riywg0LfQsNC60LDQt9CwINC40LvQuCDRh9C10YDQvdC+0LLQuNC60LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1vcmRlci1pdGVtcy1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW0FzeW5jUGlwZSwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgU2NPcmRlckl0ZW1Db21wb25lbnQsIFNjUHJpbnREaXJlY3RpdmUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFR1aUNoZWNrYm94LCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUN1cnJlbmN5UGlwZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCS0L3Rg9GC0YDQtdC90L3QuNC5INGB0LjQs9C90LDQuyDRgdC/0LjRgdC60LAg0Y3Qu9C10LzQtdC90YLQvtCyINC60L7RgNC30LjQvdGLICjRgtC+0LLQsNGA0L7QsikuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zU2lnbmFsID0gc2lnbmFsPFNjT3JkZXJJdGVtW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCS0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0L7RgCDQv9C+0LfQuNGG0LjQuSDRh9C10LrQsdC+0LrRgdCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCS0L3Rg9GC0YDQtdC90L3Rj9GPINCz0YDRg9C/0L/QsCDRhNC+0YDQvNGLINC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGlvbkZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXA8UmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w8Ym9vbGVhbj4+Pih7fSk7XG5cbiAgICAvKipcbiAgICAgKiDQntC/0YbQuNC4INC30LDQutCw0LfQsCAo0YfQtdGA0L3QvtCy0LjQutCwKS4g0J/RgNC10LTQvtGB0YLQsNCy0LvRj9C10YLRgdGPINC00LjRgNC10LrRgtC40LLQvtC5IHtAbGluayBTY09yZGVyQWNjZXNzb3JEaXJlY3RpdmV9INCyINC60L7QvdGC0LXQutGB0YLQtSDRh9C10YDQvdC+0LLQuNC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVyT3B0aW9ucyA9IGluamVjdDxTY09yZGVyT3B0aW9ucz4oU0NfT1JERVJfT1BUSU9OUywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0Ysg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpdGVtc0lkcyA9IHRvU2lnbmFsKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWUpID0+IE9iamVjdC5lbnRyaWVzPGJvb2xlYW4+KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSkpLCB7XG4gICAgICAgIGluaXRpYWxWYWx1ZTogW10sXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtCyINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zSWRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNoZWNrZWRdKSA9PiAhc2VsZWN0YWJsZSB8fCBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YXQvtC00L3Ri9C1INC00LDQvdC90YvQtSDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHMpKTtcblxuICAgIC8qKlxuICAgICAqINCh0YPQvNC80LAg0YHRgtC+0LjQvNC+0YHRgtC4INCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VtU2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBTY051bWJlckhlbHBlci5yb3VuZE1vbmV5KFxuICAgICAgICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhc2VsZWN0YWJsZSB8fCBzZWxlY3RlZEl0ZW1zSWRzLmluY2x1ZGVzKGl0ZW0uaWQpKS5yZWR1Y2UoKHN1bTogbnVtYmVyLCBpdGVtOiBTY09yZGVySXRlbSkgPT4gc3VtICsgaXRlbS5jb3N0UnViLCAwKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC/0L7Qu9GD0YfQtdC90LjRjyDQuCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQt9Cw0LrQsNC30LAgKNC60L7RgNC30LjQvdCwIC8g0LfQsNC60LDQtyAvINGH0LXRgNC90L7QstC40LogPSDQt9Cw0LrQsNC3KS5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfT1JERVJfTE9BREVSfSAo0YDQtdCw0LvQuNC30LDRhtC40Y8ge0BsaW5rIFNjSU9yZGVyTG9hZGVyfSkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVySXRlbXNMaXN0TG9hZGVyID0gaW5qZWN0PFNjSU9yZGVyTG9hZGVyIHwgU2NJT3JkZXJFZGl0b3JMb2FkZXI+KFNDX09SREVSX0xPQURFUik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC80L7QttC90L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/QvtC30LjRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkVkaXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRhYmxlKCkgJiYgJ3VwZGF0ZVByb2R1Y3QkJyBpbiB0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY0RpYWxvZ1NlcnZpY2UgPSBpbmplY3Q8SVNjRGlhbG9nU2VydmljZT4oU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGN0LvQtdC80LXQvdGC0L7QsiDQutC+0YDQt9C40L3RiyAo0YLQvtCy0LDRgNC+0LIpLiDQn9GA0Lgg0YPRgdGC0LDQvdC+0LLQutC1INGB0LjQvdGF0YDQvtC90L3QviDQvtCx0L3QvtCy0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQstGL0LHQvtGA0LAg0LIg0YTQvtGA0LzQtS5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHNldCBpdGVtcyh2YWx1ZTogU2NPcmRlckl0ZW1bXSkge1xuICAgICAgICB0aGlzLml0ZW1zU2lnbmFsLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc3luY1NlbGVjdGlvbkNvbnRyb2xzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQuNC90YXRgNC+0L3QuNC30LjRgNGD0LXRgiDQutC+0L3RgtGA0L7Qu9GLINGE0L7RgNC80Ysg0LLRi9Cx0L7RgNCwINGBINGC0LXQutGD0YnQuNC8INGB0L/QuNGB0LrQvtC8INGC0L7QstCw0YDQvtCyOiDRg9C00LDQu9GP0LXRgiDQutC+0L3RgtGA0L7Qu9GLINC00LvRjyDQvtGC0YHRg9GC0YHRgtCy0YPRjtGJ0LjRhSBpZCwg0LTQvtCx0LDQstC70Y/QtdGCINC00LvRjyDQvdC+0LLRi9GFLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3luY1NlbGVjdGlvbkNvbnRyb2xzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBuZXcgU2V0KGN1cnJlbnRJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpKTtcblxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50SWRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2wobmFtZSBhcyBuZXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRhaW5zKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmlkLCBuZXcgRm9ybUNvbnRyb2wodHJ1ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC/0L7Qt9C40YbQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwINC00LvRjyDRg9C00LDQu9C10L3QuNGPLlxuICAgICAqIEBwYXJhbSBwcmljZUNhcmQg0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWxldGVJdGVtKGl0ZW06IFNjT3JkZXJJdGVtLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KHRydWUpO1xuXG4gICAgICAgICh0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyIGFzIFNjSU9yZGVyRWRpdG9yTG9hZGVyKVxuICAgICAgICAgICAgLmRlbGV0ZVByb2R1Y3QkKGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKGl0ZW0ucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3UXVhbnRpdHkg0J3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGF0Y2hJdGVtKG5ld1F1YW50aXR5OiBudW1iZXIgfCBudWxsLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSB8fCAhcHJpY2VDYXJkLm9yZGVySXRlbSB8fCAhcHJpY2VDYXJkLnByb2R1Y3QgfHwgIW5ld1F1YW50aXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmljZUNhcmQuc2hvd0xvYWRlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgKHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIgYXMgU2NJT3JkZXJFZGl0b3JMb2FkZXIpXG4gICAgICAgICAgICAudXBkYXRlUHJvZHVjdCQocHJpY2VDYXJkLm9yZGVySXRlbS5pZCwgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUocHJpY2VDYXJkLm9yZGVySXRlbSEucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0L7Qv9C40YHQsNC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0L7Qv9C40YHQsNC90LjQtSDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJdGVtINCV0LTQuNC90LjRh9C90LDRjyDQv9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4INCyINC30LDQutCw0LfQtSwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0LrQsNC30LAsINCyINC60L7RgtC+0YDQvtC8INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByb2R1Y3RJbmZvRGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10sIG9yZGVySXRlbT86IFNjT3JkZXJJdGVtLCBvcmRlcklkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0LCBvcmRlckl0ZW0sIG9yZGVySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YDRi9Cy0LDQtdGCINC80L7QtNCw0LvRjNC90L7QtSDQvtC60L3QviDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINC40LvQuCDQtdCz0L4g0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NvbmZpZ3VyYXRvciA9IEJvb2xlYW4oaXRlbS5jb25maWd1cmF0b3IpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ3VyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyYXRvckRpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKFNjVW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZShpdGVtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviBcItCT0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4XCIg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCi0L7QstCw0YAv0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQs9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3QpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBbZm9ybUdyb3VwXT1cInNlbGVjdGlvbkZvcm1Hcm91cFwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCJcbj5cbiAgICBAZm9yIChpdGVtIG9mIGl0ZW1zU2lnbmFsKCk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgQGlmICgkaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm10LWF1dG8gaC1weCB3LWZ1bGwgYmctdHVpLWNsZWFyXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgQGxldCBpc0FjdGl2ZSA9ICFzZWxlY3RhYmxlKCkgfHwgc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWU7XG5cbiAgICAgICAgICAgIDwhLS0g0KfQtdC60LHQvtC60YEg0LLRi9Cx0L7RgNCwINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbUNvbXBvbmVudC5zaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSDQmtCw0YDRgtC+0YfQutCwINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICA8c2Mtb3JkZXItaXRlbVxuICAgICAgICAgICAgICAgICNpdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgW3Byb2R1Y3RdPVwiaXRlbS5wcm9kdWN0XCJcbiAgICAgICAgICAgICAgICBbb3JkZXJJdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtzaG93UXVhbnRpdHlDb250cm9sXT1cImNhbkVkaXQoKSAmJiAhaXRlbS5jb25maWd1cmF0b3JcIlxuICAgICAgICAgICAgICAgIFtpc1Nob3dFZGl0Q29udHJvbHNdPVwiY2FuRWRpdCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTYwXT1cInNlbGVjdGFibGUoKSAmJiAhc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGlja0NhcmRFdmVudCk9XCJvcGVuUHJvZHVjdEluZm9EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCBvcmRlck9wdGlvbnM/Lm9yZGVySWQoKSlcIlxuICAgICAgICAgICAgICAgIChxdWFudGl0eVZhbHVlQ2hhbmdlcyk9XCJwYXRjaEl0ZW0oJGV2ZW50LCBpdGVtQ29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrUHJpY2VIaXN0b3J5RXZlbnQpPVwib3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKGl0ZW0ucHJvZHVjdClcIlxuICAgICAgICAgICAgICAgIChjbGlja1NldHRpbmdzKT1cIm9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiIWlzQWN0aXZlXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDwhLS0g0JrQvdC+0L/QutCwINGD0LTQsNC70LXQvdC40Y8g0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRWRpdCgpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkudHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSXRlbShpdGVtLCBpdGVtQ29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIml0ZW1Db21wb25lbnQuc2hvd0xvYWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIhYWJzb2x1dGUgbGVmdC0xIHRvcC0xIGxnOiFyZWxhdGl2ZSBsZzpsZWZ0LTAgbGc6dG9wLTAgbGc6IXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g0KTRg9GC0LXRgCDRgdC/0LjRgdC60LAuIC0tPlxuICAgIDxkaXZcbiAgICAgICAgc2NQcmludD1cImNvc3RcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIGdhcC0yLjVcIlxuICAgID5cbiAgICAgICAgQGxldCB0b3RhbFN1bSA9IHN1bVNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgPCEtLSDQmNGC0L7Qs9C+0LLQsNGPINGB0YPQvNC80LAuIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPtCY0YLQvtCz0L46IHt7IHRvdGFsU3VtIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, model } from '@angular/core';
|
|
2
|
+
import { ScOrderItemsListComponent } from '../order-items-list/sc-order-items-list.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Список позиций заказа с действиями и блоком позиций, которые больше не предоставляются.
|
|
6
|
+
*/
|
|
7
|
+
export class ScOrderItemsListWithActionsComponent {
|
|
8
|
+
/**
|
|
9
|
+
* Инициализирует экземпляр класса {@link ScOrderItemsListWithActionsComponent}.
|
|
10
|
+
*/
|
|
11
|
+
constructor() {
|
|
12
|
+
/**
|
|
13
|
+
* Товары заказа.
|
|
14
|
+
*/
|
|
15
|
+
this.items = input.required();
|
|
16
|
+
/**
|
|
17
|
+
* Включить выбор позиций чекбоксами.
|
|
18
|
+
*/
|
|
19
|
+
this.selectable = input(true);
|
|
20
|
+
/**
|
|
21
|
+
* Включить редактирование позиций.
|
|
22
|
+
*/
|
|
23
|
+
this.editable = input(false);
|
|
24
|
+
/**
|
|
25
|
+
* Позиции, доступные для заказа.
|
|
26
|
+
*/
|
|
27
|
+
this.availableItems = computed(() => this.items().filter((item) => !item.product.isNull && !item.product.isHidden));
|
|
28
|
+
/**
|
|
29
|
+
* Позиции корзины, которые больше не предоставляются.
|
|
30
|
+
*/
|
|
31
|
+
this.nullItems = computed(() => this.items().filter((item) => item.product.isNull || item.product.isHidden));
|
|
32
|
+
/**
|
|
33
|
+
* Идентификаторы выбранных позиций.
|
|
34
|
+
*/
|
|
35
|
+
this.selectedItemsIds = model([]);
|
|
36
|
+
// Оставляет в выборе только доступные позиции: без них список выбора не отрисовывается и выбор не сбрасывает.
|
|
37
|
+
effect(() => {
|
|
38
|
+
const availableIds = new Set(this.availableItems().map((item) => item.id));
|
|
39
|
+
const selectedItemsIds = this.selectedItemsIds();
|
|
40
|
+
const actualIds = selectedItemsIds.filter((id) => availableIds.has(id));
|
|
41
|
+
if (actualIds.length !== selectedItemsIds.length) {
|
|
42
|
+
this.selectedItemsIds.set(actualIds);
|
|
43
|
+
}
|
|
44
|
+
}, { allowSignalWrites: true });
|
|
45
|
+
}
|
|
46
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListWithActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListWithActionsComponent, isStandalone: true, selector: "sc-order-items-list-with-actions", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, selectedItemsIds: { classPropertyName: "selectedItemsIds", publicName: "selectedItemsIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItemsIds: "selectedItemsIdsChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-col gap-2.5\">\n @if (availableItems().length) {\n <sc-order-items-list\n [items]=\"availableItems()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u043E\u0432. -->\n <div class=\"flex flex-col items-center sm:flex-row sm:items-start sm:flex-wrap-reverse grow gap-x-2.5 gap-y-4\">\n <ng-content select=\"[footerActions]\" />\n </div>\n </div>\n\n @if (nullItems().length) {\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"text-base font-bold\">\u0422\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F.</div>\n\n <sc-order-items-list\n [items]=\"nullItems()\"\n [selectable]=\"false\"\n [editable]=\"editable()\"\n />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ScOrderItemsListComponent, selector: "sc-order-items-list", inputs: ["selectable", "editable", "items"], outputs: ["selectedItemsIdsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListWithActionsComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{ standalone: true, selector: 'sc-order-items-list-with-actions', imports: [ScOrderItemsListComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-col gap-2.5\">\n @if (availableItems().length) {\n <sc-order-items-list\n [items]=\"availableItems()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u043E\u0432. -->\n <div class=\"flex flex-col items-center sm:flex-row sm:items-start sm:flex-wrap-reverse grow gap-x-2.5 gap-y-4\">\n <ng-content select=\"[footerActions]\" />\n </div>\n </div>\n\n @if (nullItems().length) {\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"text-base font-bold\">\u0422\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F.</div>\n\n <sc-order-items-list\n [items]=\"nullItems()\"\n [selectable]=\"false\"\n [editable]=\"editable()\"\n />\n </div>\n }\n</div>\n" }]
|
|
52
|
+
}], ctorParameters: () => [] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC13aXRoLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL29yZGVyLWl0ZW1zLWxpc3Qtd2l0aC1hY3Rpb25zL3NjLW9yZGVyLWl0ZW1zLWxpc3Qtd2l0aC1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy9zYy1vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7QUFFOUY7O0dBRUc7QUFRSCxNQUFNLE9BQU8sb0NBQW9DO0lBK0I3Qzs7T0FFRztJQUNIO1FBakNBOztXQUVHO1FBQ2EsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7UUFFeEQ7O1dBRUc7UUFDYSxlQUFVLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRWxEOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVqRDs7V0FFRztRQUNnQixtQkFBYyxHQUFHLFFBQVEsQ0FBZ0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVqSjs7V0FFRztRQUNnQixjQUFTLEdBQUcsUUFBUSxDQUFnQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFMUk7O1dBRUc7UUFDYSxxQkFBZ0IsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFNbkQsOEdBQThHO1FBQzlHLE1BQU0sQ0FDRixHQUFHLEVBQUU7WUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhFLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUM7SUFDTixDQUFDOytHQWhEUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQyx5ckJDZmpELDh6Q0E2QkEsNENEakJjLHlCQUF5Qjs7NEZBRzFCLG9DQUFvQztrQkFQaEQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0NBQWtDLFdBRW5DLENBQUMseUJBQXlCLENBQUMsbUJBQ25CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjT3JkZXJJdGVtIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbmltcG9ydCB7IFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQgfSBmcm9tICcuLi9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50JztcblxuLyoqXG4gKiDQodC/0LjRgdC+0Log0L/QvtC30LjRhtC40Lkg0LfQsNC60LDQt9CwINGBINC00LXQudGB0YLQstC40Y/QvNC4INC4INCx0LvQvtC60L7QvCDQv9C+0LfQuNGG0LjQuSwg0LrQvtGC0L7RgNGL0LUg0LHQvtC70YzRiNC1INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YLRgdGPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbXMtbGlzdC13aXRoLWFjdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1NjT3JkZXJJdGVtc0xpc3RDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVySXRlbXNMaXN0V2l0aEFjdGlvbnNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCi0L7QstCw0YDRiyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8U2NPcmRlckl0ZW1bXT4oKTtcblxuICAgIC8qKlxuICAgICAqINCS0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0L7RgCDQv9C+0LfQuNGG0LjQuSDRh9C10LrQsdC+0LrRgdCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qt9C40YbQuNC4LCDQtNC+0YHRgtGD0L/QvdGL0LUg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXZhaWxhYmxlSXRlbXMgPSBjb21wdXRlZDxTY09yZGVySXRlbVtdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5wcm9kdWN0LmlzTnVsbCAmJiAhaXRlbS5wcm9kdWN0LmlzSGlkZGVuKSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LfQuNGG0LjQuCDQutC+0YDQt9C40L3Riywg0LrQvtGC0L7RgNGL0LUg0LHQvtC70YzRiNC1INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBudWxsSXRlbXMgPSBjb21wdXRlZDxTY09yZGVySXRlbVtdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnByb2R1Y3QuaXNOdWxsIHx8IGl0ZW0ucHJvZHVjdC5pc0hpZGRlbikpO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNJZHMgPSBtb2RlbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbXNMaXN0V2l0aEFjdGlvbnNDb21wb25lbnR9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8g0J7RgdGC0LDQstC70Y/QtdGCINCyINCy0YvQsdC+0YDQtSDRgtC+0LvRjNC60L4g0LTQvtGB0YLRg9C/0L3Ri9C1INC/0L7Qt9C40YbQuNC4OiDQsdC10Lcg0L3QuNGFINGB0L/QuNGB0L7QuiDQstGL0LHQvtGA0LAg0L3QtSDQvtGC0YDQuNGB0L7QstGL0LLQsNC10YLRgdGPINC4INCy0YvQsdC+0YAg0L3QtSDRgdCx0YDQsNGB0YvQstCw0LXRgi5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IG5ldyBTZXQodGhpcy5hdmFpbGFibGVJdGVtcygpLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxJZHMgPSBzZWxlY3RlZEl0ZW1zSWRzLmZpbHRlcigoaWQpID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxJZHMubGVuZ3RoICE9PSBzZWxlY3RlZEl0ZW1zSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNJZHMuc2V0KGFjdHVhbElkcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIuNVwiPlxuICAgICAgICBAaWYgKGF2YWlsYWJsZUl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICA8c2Mtb3JkZXItaXRlbXMtbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVJdGVtcygpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJlZGl0YWJsZSgpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zSWRzLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHNtOmZsZXgtcm93IHNtOml0ZW1zLXN0YXJ0IHNtOmZsZXgtd3JhcC1yZXZlcnNlIGdyb3cgZ2FwLXgtMi41IGdhcC15LTRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmb290ZXJBY3Rpb25zXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChudWxsSXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIuNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj7QotC+0LLQsNGA0Ysg0Lgg0YPRgdC70YPQs9C4LCDQutC+0YLQvtGA0YvQtSDQsdC+0LvRjNGI0LUg0L3QtSDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RgtGB0Y8uPC9kaXY+XG5cbiAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtcy1saXN0XG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm51bGxJdGVtcygpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImVkaXRhYmxlKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
|