@vendure/admin-ui 2.1.7 → 2.1.8
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/catalog/catalog.module.d.ts +3 -3
- package/catalog/components/variant-price-strategy-detail/variant-price-strategy-detail.component.d.ts +10 -0
- package/catalog/public_api.d.ts +1 -1
- package/core/common/generated-types.d.ts +20 -0
- package/core/common/version.d.ts +1 -1
- package/core/data/utils/is-entity-create-or-update-mutation.d.ts +6 -0
- package/core/data/utils/remove-readonly-custom-fields.d.ts +5 -11
- package/core/public_api.d.ts +2 -0
- package/{catalog → core/shared}/components/assets/assets.component.d.ts +2 -1
- package/core/shared/shared.module.d.ts +157 -156
- package/esm2022/catalog/catalog.module.mjs +5 -5
- package/esm2022/catalog/components/collection-detail/collection-detail.component.mjs +4 -5
- package/esm2022/catalog/components/product-detail/product-detail.component.mjs +4 -5
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +1 -1
- package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs +5 -5
- package/esm2022/catalog/components/variant-price-strategy-detail/variant-price-strategy-detail.component.mjs +33 -0
- package/esm2022/catalog/public_api.mjs +2 -2
- package/esm2022/core/common/generated-types.mjs +1 -1
- package/esm2022/core/common/introspection-result.mjs +1 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/data/providers/base-data.service.mjs +3 -2
- package/esm2022/core/data/utils/is-entity-create-or-update-mutation.mjs +45 -0
- package/esm2022/core/data/utils/remove-readonly-custom-fields.mjs +15 -80
- package/esm2022/core/public_api.mjs +3 -1
- package/esm2022/{catalog → core/shared}/components/assets/assets.component.mjs +13 -5
- package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
- package/esm2022/core/shared/shared.module.mjs +5 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +39 -102
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +157 -82
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/package.json +8 -8
- package/static/i18n-messages/ar.json +796 -794
- package/static/i18n-messages/cs.json +796 -794
- package/static/i18n-messages/de.json +796 -794
- package/static/i18n-messages/en.json +796 -794
- package/static/i18n-messages/es.json +796 -794
- package/static/i18n-messages/fa.json +797 -795
- package/static/i18n-messages/fr.json +796 -794
- package/static/i18n-messages/he.json +796 -794
- package/static/i18n-messages/hr.json +796 -794
- package/static/i18n-messages/it.json +797 -795
- package/static/i18n-messages/ne.json +797 -795
- package/static/i18n-messages/pl.json +796 -794
- package/static/i18n-messages/pt_BR.json +797 -795
- package/static/i18n-messages/pt_PT.json +796 -794
- package/static/i18n-messages/ru.json +796 -794
- package/static/i18n-messages/sv.json +797 -0
- package/static/i18n-messages/uk.json +797 -795
- package/static/i18n-messages/zh_Hans.json +796 -794
- package/static/i18n-messages/zh_Hant.json +796 -794
- package/static/vendure-ui-config.json +2 -1
package/esm2022/catalog/components/product-variant-detail/product-variant-detail.component.mjs
CHANGED
|
@@ -13,8 +13,8 @@ import * as i3 from "@vendure/admin-ui/core";
|
|
|
13
13
|
import * as i4 from "@clr/angular";
|
|
14
14
|
import * as i5 from "@angular/common";
|
|
15
15
|
import * as i6 from "@angular/router";
|
|
16
|
-
import * as i7 from "../
|
|
17
|
-
import * as i8 from "../variant-price-detail/variant-price-detail.component";
|
|
16
|
+
import * as i7 from "../variant-price-detail/variant-price-detail.component";
|
|
17
|
+
import * as i8 from "../variant-price-strategy-detail/variant-price-strategy-detail.component";
|
|
18
18
|
import * as i9 from "../product-variant-quick-jump/product-variant-quick-jump.component";
|
|
19
19
|
import * as i10 from "@ngx-translate/core";
|
|
20
20
|
export class ProductVariantDetailComponent extends TypedBaseDetailComponent {
|
|
@@ -257,10 +257,10 @@ export class ProductVariantDetailComponent extends TypedBaseDetailComponent {
|
|
|
257
257
|
};
|
|
258
258
|
}
|
|
259
259
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ProductVariantDetailComponent, deps: [{ token: i1.ProductDetailService }, { token: i2.FormBuilder }, { token: i3.ModalService }, { token: i3.NotificationService }, { token: i3.DataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
260
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ProductVariantDetailComponent, selector: "vdr-product-variant-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"flex center\">\r\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\r\n <vdr-language-selector\r\n *ngIf=\"availableLanguages.length > 1\"\r\n class=\"mr-2\"\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </ng-container>\r\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid ||\r\n stockLevelsForm.invalid ||\r\n pricesForm.invalid ||\r\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\r\n !assetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar\r\n ><vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\r\n [colorFrom]=\"optionGroupCode(option.groupId)\"\r\n [invert]=\"true\"\r\n >\r\n <span>{{ optionGroupCode(option.groupId) }}:</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a\r\n [routerLink]=\"['../../', 'options']\"\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n >\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\r\n <input\r\n id=\"sku\"\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-variant-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n />\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || variant.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n />\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\r\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\r\n <vdr-form-field\r\n [label]=\"\r\n ('catalog.price' | translate) +\r\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\r\n \"\r\n [tooltip]=\"\r\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\r\n ? ('catalog.default-currency' | translate)\r\n : undefined\r\n \"\r\n for=\"price\"\r\n >\r\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\r\n <vdr-currency-input\r\n name=\"price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [readonly]=\"\r\n !(updatePermissions | hasPermission) || price.value.delete === true\r\n \"\r\n formControlName=\"price\"\r\n />\r\n <div *ngIf=\"1 < pricesForm.controls.length\">\r\n <button\r\n class=\"button-small delete-button\"\r\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\r\n (click)=\"toggleDeletePrice(price.get('delete'))\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </vdr-form-field>\r\n <vdr-variant-price-detail\r\n [price]=\"price.value.price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\r\n />\r\n </div>\r\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\r\n <div *ngIf=\"unusedCurrencyCodes.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-price-in-another-currency' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\r\n (click)=\"addPriceInCurrency(currencyCode)\"\r\n >\r\n {{ currencyCode | localeCurrencyName }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n for=\"track-inventory\"\r\n [label]=\"'catalog.track-inventory' | translate\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <select\r\n name=\"track-inventory\"\r\n formControlName=\"trackInventory\"\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n >\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <vdr-form-item\r\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\r\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n [vdrDisabled]=\"\r\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\r\n inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </vdr-form-item>\r\n </div>\r\n <div\r\n class=\"form-grid stock-levels\"\r\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\r\n [formGroup]=\"stockLevel\"\r\n >\r\n <vdr-form-field\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-on-hand' | translate)\r\n \"\r\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n >\r\n <input\r\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n type=\"number\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-allocated' | translate)\r\n \"\r\n >\r\n {{ stockLevel.get('stockAllocated')?.value }}\r\n </vdr-form-item>\r\n </div>\r\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\r\n <div *ngIf=\"unusedStockLocations.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-stock-location' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let stockLocation of unusedStockLocations\"\r\n (click)=\"addStockLocation(stockLocation)\"\r\n >\r\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-product-variant-quick-jump{flex:1;margin-inline-end:calc(var(--space-unit) * 2)}.stock-levels,.prices{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}.price-wrapper{display:flex;align-items:center;gap:var(--space-unit);width:100%}.price-wrapper.pending-deletion vdr-currency-input{opacity:.7}.price-wrapper.pending-deletion .delete-button{background-color:var(--color-error-700);color:var(--color-error-100)}\n"], dependencies: [{ kind: "directive", type: i4.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i3.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i3.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i3.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i3.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i3.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { kind: "component", type: i3.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i3.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i3.FormItemComponent, selector: "vdr-form-item", inputs: ["label", "tooltip"] }, { kind: "component", type: i3.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "component", type: i3.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i3.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i3.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i3.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "directive", type: i3.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i3.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "directive", type: i3.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { kind: "component", type: i3.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i3.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { kind: "component", type: i3.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i3.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i3.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i3.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i3.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "component", type: i7.AssetsComponent, selector: "vdr-assets", inputs: ["assets", "featuredAsset", "compact", "updatePermissions"], outputs: ["change"] }, { kind: "component", type: i8.VariantPriceDetailComponent, selector: "vdr-variant-price-detail", inputs: ["priceIncludesTax", "price", "currencyCode", "taxCategoryId"] }, { kind: "component", type: i9.ProductVariantQuickJumpComponent, selector: "vdr-product-variant-quick-jump", inputs: ["productId"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.LocaleCurrencyNamePipe, name: "localeCurrencyName" }, { kind: "pipe", type: i3.SortPipe, name: "sort" }, { kind: "pipe", type: i3.HasPermissionPipe, name: "hasPermission" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
260
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ProductVariantDetailComponent, selector: "vdr-product-variant-detail", usesInheritance: true, ngImport: i0, template: "<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left [grow]=\"true\">\n <div class=\"flex center\">\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\n <vdr-language-selector\n *ngIf=\"availableLanguages.length > 1\"\n class=\"mr-2\"\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n ></vdr-language-selector>\n </ng-container>\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\n </div>\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\n <button\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n (detailForm.invalid ||\n stockLevelsForm.invalid ||\n pricesForm.invalid ||\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\n !assetsChanged()\n \"\n >\n {{ 'common.update' | translate }}\n </button>\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar\n ><vdr-card>\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\n <input\n type=\"checkbox\"\n clrToggle\n name=\"enabled\"\n [formControl]=\"detailForm.get(['enabled'])\"\n />\n <label>{{ 'common.enabled' | translate }}</label>\n </clr-toggle-wrapper>\n </vdr-form-field>\n </vdr-card>\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\n <div class=\"options\">\n <vdr-chip\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\n [colorFrom]=\"optionGroupCode(option.groupId)\"\n [invert]=\"true\"\n >\n <span>{{ optionGroupCode(option.groupId) }}:</span>\n {{ optionName(option) }}\n </vdr-chip>\n </div>\n <div>\n <a\n [routerLink]=\"['../../', 'options']\"\n class=\"button-small mt-2\"\n *vdrIfPermissions=\"updatePermissions\"\n >\n <clr-icon shape=\"pencil\"></clr-icon>\n {{ 'catalog.edit-options' | translate }}\n </a>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'catalog.facets' | translate\">\n <div class=\"facets\">\n <vdr-facet-value-chip\n *ngFor=\"let facetValue of facetValues$ | async\"\n [facetValue]=\"facetValue\"\n [removable]=\"updatePermissions | hasPermission\"\n (remove)=\"removeFacetValue(facetValue.id)\"\n ></vdr-facet-value-chip>\n </div>\n <div>\n <button\n class=\"button-small mt-2\"\n *vdrIfPermissions=\"updatePermissions\"\n (click)=\"selectFacetValue()\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-facets' | translate }}\n </button>\n </div>\n </vdr-card>\n\n <vdr-card>\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n\n <vdr-page-block>\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\n <input\n id=\"sku\"\n type=\"text\"\n formControlName=\"sku\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\n <vdr-tabbed-custom-fields\n entityName=\"ProductVariant\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"product-variant-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n />\n <vdr-card [title]=\"'catalog.assets' | translate\">\n <vdr-assets\n [assets]=\"assetChanges.assets || variant.assets\"\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\n [updatePermissions]=\"updatePermissions\"\n (change)=\"assetChanges = $event\"\n />\n </vdr-card>\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\n <option\n *ngFor=\"let taxCategory of taxCategories$ | async\"\n [value]=\"taxCategory.id\"\n >\n {{ taxCategory.name }}\n </option>\n </select>\n </vdr-form-field>\n </div>\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\n <vdr-form-field\n [label]=\"\n ('catalog.price' | translate) +\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\n \"\n [tooltip]=\"\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\n ? ('catalog.default-currency' | translate)\n : undefined\n \"\n for=\"price\"\n >\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\n <vdr-currency-input\n name=\"price\"\n [currencyCode]=\"price.value.currencyCode\"\n [readonly]=\"\n !(updatePermissions | hasPermission) || price.value.delete === true\n \"\n formControlName=\"price\"\n />\n <div *ngIf=\"1 < pricesForm.controls.length\">\n <button\n class=\"button-small delete-button\"\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\n (click)=\"toggleDeletePrice(price.get('delete'))\"\n >\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </div>\n </div>\n </vdr-form-field>\n <vdr-variant-price-detail\n [price]=\"price.value.price\"\n [currencyCode]=\"price.value.currencyCode\"\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\n />\n </div>\n <vdr-variant-price-strategy-detail\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n [channelDefaultCurrencyCode]=\"channelDefaultCurrencyCode\"\n [variant]=\"variant\"\n />\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\n <div *ngIf=\"unusedCurrencyCodes.length\">\n <vdr-dropdown>\n <button class=\"button mt-2\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-price-in-another-currency' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu>\n <button\n vdrDropdownItem\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\n (click)=\"addPriceInCurrency(currencyCode)\"\n >\n {{ currencyCode | localeCurrencyName }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </ng-container>\n </vdr-card>\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\n <div class=\"form-grid\">\n <vdr-form-field\n for=\"track-inventory\"\n [label]=\"'catalog.track-inventory' | translate\"\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\n >\n <select\n name=\"track-inventory\"\n formControlName=\"trackInventory\"\n [disabled]=\"!(updatePermissions | hasPermission)\"\n >\n <option [value]=\"GlobalFlag.TRUE\">\n {{ 'catalog.track-inventory-true' | translate }}\n </option>\n <option [value]=\"GlobalFlag.FALSE\">\n {{ 'catalog.track-inventory-false' | translate }}\n </option>\n <option [value]=\"GlobalFlag.INHERIT\">\n {{ 'catalog.track-inventory-inherit' | translate }}\n </option>\n </select>\n </vdr-form-field>\n\n <vdr-form-item\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\n >\n <input\n type=\"number\"\n formControlName=\"outOfStockThreshold\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n [vdrDisabled]=\"\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\n inventoryIsNotTracked(detailForm)\n \"\n />\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n name=\"useGlobalOutOfStockThreshold\"\n formControlName=\"useGlobalOutOfStockThreshold\"\n [vdrDisabled]=\"\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\n \"\n />\n <label\n >{{ 'catalog.use-global-value' | translate }} ({{\n globalOutOfStockThreshold\n }})</label\n >\n </clr-toggle-wrapper>\n </vdr-form-item>\n </div>\n <div\n class=\"form-grid stock-levels\"\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\n [formGroup]=\"stockLevel\"\n >\n <vdr-form-field\n [label]=\"\n stockLevel.get('stockLocationName')?.value +\n ': ' +\n ('catalog.stock-on-hand' | translate)\n \"\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n >\n <input\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n type=\"number\"\n formControlName=\"stockOnHand\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-item\n [label]=\"\n stockLevel.get('stockLocationName')?.value +\n ': ' +\n ('catalog.stock-allocated' | translate)\n \"\n >\n {{ stockLevel.get('stockAllocated')?.value }}\n </vdr-form-item>\n </div>\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\n <div *ngIf=\"unusedStockLocations.length\">\n <vdr-dropdown>\n <button class=\"button mt-2\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-stock-location' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu>\n <button\n vdrDropdownItem\n *ngFor=\"let stockLocation of unusedStockLocations\"\n (click)=\"addStockLocation(stockLocation)\"\n >\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </ng-container>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n", styles: [".facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-product-variant-quick-jump{flex:1;margin-inline-end:calc(var(--space-unit) * 2)}.stock-levels,.prices{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}.price-wrapper{display:flex;align-items:center;gap:var(--space-unit);width:100%}.price-wrapper.pending-deletion vdr-currency-input{opacity:.7}.price-wrapper.pending-deletion .delete-button{background-color:var(--color-error-700);color:var(--color-error-100)}\n"], dependencies: [{ kind: "directive", type: i4.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i4.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i4.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i4.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i3.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i3.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i3.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i3.AssetsComponent, selector: "vdr-assets", inputs: ["assets", "featuredAsset", "compact", "updatePermissions"], outputs: ["change"] }, { kind: "component", type: i3.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i3.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i3.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { kind: "component", type: i3.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i3.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i3.FormItemComponent, selector: "vdr-form-item", inputs: ["label", "tooltip"] }, { kind: "component", type: i3.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "component", type: i3.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i3.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i3.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i3.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "directive", type: i3.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i3.ActionBarItemsComponent, selector: "vdr-action-bar-items", inputs: ["locationId"] }, { kind: "directive", type: i3.DisabledDirective, selector: "[vdrDisabled]", inputs: ["vdrDisabled"] }, { kind: "component", type: i3.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i3.CustomDetailComponentHostComponent, selector: "vdr-custom-detail-component-host", inputs: ["locationId", "entity$", "detailForm"] }, { kind: "component", type: i3.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i3.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i3.PageDetailLayoutComponent, selector: "vdr-page-detail-layout" }, { kind: "component", type: i3.PageDetailSidebarComponent, selector: "vdr-page-detail-sidebar" }, { kind: "component", type: i3.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "component", type: i7.VariantPriceDetailComponent, selector: "vdr-variant-price-detail", inputs: ["priceIncludesTax", "price", "currencyCode", "taxCategoryId"] }, { kind: "component", type: i8.VariantPriceStrategyDetailComponent, selector: "vdr-variant-price-strategy-detail", inputs: ["channelPriceIncludesTax", "variant", "channelDefaultCurrencyCode"] }, { kind: "component", type: i9.ProductVariantQuickJumpComponent, selector: "vdr-product-variant-quick-jump", inputs: ["productId"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.LocaleCurrencyNamePipe, name: "localeCurrencyName" }, { kind: "pipe", type: i3.SortPipe, name: "sort" }, { kind: "pipe", type: i3.HasPermissionPipe, name: "hasPermission" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
261
261
|
}
|
|
262
262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ProductVariantDetailComponent, decorators: [{
|
|
263
263
|
type: Component,
|
|
264
|
-
args: [{ selector: 'vdr-product-variant-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left [grow]=\"true\">\r\n <div class=\"flex center\">\r\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\r\n <vdr-language-selector\r\n *ngIf=\"availableLanguages.length > 1\"\r\n class=\"mr-2\"\r\n [disabled]=\"isNew$ | async\"\r\n [availableLanguageCodes]=\"availableLanguages\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </ng-container>\r\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\r\n <button\r\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"\r\n (detailForm.invalid ||\r\n stockLevelsForm.invalid ||\r\n pricesForm.invalid ||\r\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\r\n !assetsChanged()\r\n \"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar\r\n ><vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"enabled\"\r\n [formControl]=\"detailForm.get(['enabled'])\"\r\n />\r\n <label>{{ 'common.enabled' | translate }}</label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\r\n <div class=\"options\">\r\n <vdr-chip\r\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\r\n [colorFrom]=\"optionGroupCode(option.groupId)\"\r\n [invert]=\"true\"\r\n >\r\n <span>{{ optionGroupCode(option.groupId) }}:</span>\r\n {{ optionName(option) }}\r\n </vdr-chip>\r\n </div>\r\n <div>\r\n <a\r\n [routerLink]=\"['../../', 'options']\"\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n >\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'catalog.edit-options' | translate }}\r\n </a>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.facets' | translate\">\r\n <div class=\"facets\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let facetValue of facetValues$ | async\"\r\n [facetValue]=\"facetValue\"\r\n [removable]=\"updatePermissions | hasPermission\"\r\n (remove)=\"removeFacetValue(facetValue.id)\"\r\n ></vdr-facet-value-chip>\r\n </div>\r\n <div>\r\n <button\r\n class=\"button-small mt-2\"\r\n *vdrIfPermissions=\"updatePermissions\"\r\n (click)=\"selectFacetValue()\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-facets' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n\r\n <vdr-page-block>\r\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\r\n <vdr-card>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\r\n <input\r\n id=\"sku\"\r\n type=\"text\"\r\n formControlName=\"sku\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductVariant\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-card>\r\n <vdr-custom-detail-component-host\r\n locationId=\"product-variant-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n />\r\n <vdr-card [title]=\"'catalog.assets' | translate\">\r\n <vdr-assets\r\n [assets]=\"assetChanges.assets || variant.assets\"\r\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\r\n [updatePermissions]=\"updatePermissions\"\r\n (change)=\"assetChanges = $event\"\r\n />\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\r\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\r\n <option\r\n *ngFor=\"let taxCategory of taxCategories$ | async\"\r\n [value]=\"taxCategory.id\"\r\n >\r\n {{ taxCategory.name }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\r\n <vdr-form-field\r\n [label]=\"\r\n ('catalog.price' | translate) +\r\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\r\n \"\r\n [tooltip]=\"\r\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\r\n ? ('catalog.default-currency' | translate)\r\n : undefined\r\n \"\r\n for=\"price\"\r\n >\r\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\r\n <vdr-currency-input\r\n name=\"price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [readonly]=\"\r\n !(updatePermissions | hasPermission) || price.value.delete === true\r\n \"\r\n formControlName=\"price\"\r\n />\r\n <div *ngIf=\"1 < pricesForm.controls.length\">\r\n <button\r\n class=\"button-small delete-button\"\r\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\r\n (click)=\"toggleDeletePrice(price.get('delete'))\"\r\n >\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </vdr-form-field>\r\n <vdr-variant-price-detail\r\n [price]=\"price.value.price\"\r\n [currencyCode]=\"price.value.currencyCode\"\r\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\r\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\r\n />\r\n </div>\r\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\r\n <div *ngIf=\"unusedCurrencyCodes.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-price-in-another-currency' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\r\n (click)=\"addPriceInCurrency(currencyCode)\"\r\n >\r\n {{ currencyCode | localeCurrencyName }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field\r\n for=\"track-inventory\"\r\n [label]=\"'catalog.track-inventory' | translate\"\r\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\r\n >\r\n <select\r\n name=\"track-inventory\"\r\n formControlName=\"trackInventory\"\r\n [disabled]=\"!(updatePermissions | hasPermission)\"\r\n >\r\n <option [value]=\"GlobalFlag.TRUE\">\r\n {{ 'catalog.track-inventory-true' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.FALSE\">\r\n {{ 'catalog.track-inventory-false' | translate }}\r\n </option>\r\n <option [value]=\"GlobalFlag.INHERIT\">\r\n {{ 'catalog.track-inventory-inherit' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n\r\n <vdr-form-item\r\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\r\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\r\n >\r\n <input\r\n type=\"number\"\r\n formControlName=\"outOfStockThreshold\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n [vdrDisabled]=\"\r\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\r\n inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n name=\"useGlobalOutOfStockThreshold\"\r\n formControlName=\"useGlobalOutOfStockThreshold\"\r\n [vdrDisabled]=\"\r\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\r\n \"\r\n />\r\n <label\r\n >{{ 'catalog.use-global-value' | translate }} ({{\r\n globalOutOfStockThreshold\r\n }})</label\r\n >\r\n </clr-toggle-wrapper>\r\n </vdr-form-item>\r\n </div>\r\n <div\r\n class=\"form-grid stock-levels\"\r\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\r\n [formGroup]=\"stockLevel\"\r\n >\r\n <vdr-form-field\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-on-hand' | translate)\r\n \"\r\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n >\r\n <input\r\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\r\n type=\"number\"\r\n formControlName=\"stockOnHand\"\r\n [readonly]=\"!(updatePermissions | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-item\r\n [label]=\"\r\n stockLevel.get('stockLocationName')?.value +\r\n ': ' +\r\n ('catalog.stock-allocated' | translate)\r\n \"\r\n >\r\n {{ stockLevel.get('stockAllocated')?.value }}\r\n </vdr-form-item>\r\n </div>\r\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\r\n <div *ngIf=\"unusedStockLocations.length\">\r\n <vdr-dropdown>\r\n <button class=\"button mt-2\" vdrDropdownTrigger>\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.add-stock-location' | translate }}\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu>\r\n <button\r\n vdrDropdownItem\r\n *ngFor=\"let stockLocation of unusedStockLocations\"\r\n (click)=\"addStockLocation(stockLocation)\"\r\n >\r\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-product-variant-quick-jump{flex:1;margin-inline-end:calc(var(--space-unit) * 2)}.stock-levels,.prices{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}.price-wrapper{display:flex;align-items:center;gap:var(--space-unit);width:100%}.price-wrapper.pending-deletion vdr-currency-input{opacity:.7}.price-wrapper.pending-deletion .delete-button{background-color:var(--color-error-700);color:var(--color-error-100)}\n"] }]
|
|
264
|
+
args: [{ selector: 'vdr-product-variant-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\n <vdr-action-bar>\n <vdr-ab-left [grow]=\"true\">\n <div class=\"flex center\">\n <ng-container *ngIf=\"availableLanguages$ | async as availableLanguages\">\n <vdr-language-selector\n *ngIf=\"availableLanguages.length > 1\"\n class=\"mr-2\"\n [disabled]=\"isNew$ | async\"\n [availableLanguageCodes]=\"availableLanguages\"\n [currentLanguageCode]=\"languageCode$ | async\"\n (languageCodeChange)=\"setLanguage($event)\"\n ></vdr-language-selector>\n </ng-container>\n <vdr-product-variant-quick-jump [productId]=\"entity?.product.id\" />\n </div>\n </vdr-ab-left>\n\n <vdr-ab-right>\n <vdr-action-bar-items locationId=\"product-variant-detail\"></vdr-action-bar-items>\n <button\n *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\"\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"\n (detailForm.invalid ||\n stockLevelsForm.invalid ||\n pricesForm.invalid ||\n (detailForm.pristine && stockLevelsForm.pristine && pricesForm.pristine)) &&\n !assetsChanged()\n \"\n >\n {{ 'common.update' | translate }}\n </button>\n </vdr-ab-right>\n </vdr-action-bar>\n</vdr-page-block>\n<form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"entity$ | async as variant\">\n <vdr-page-detail-layout>\n <vdr-page-detail-sidebar\n ><vdr-card>\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\n <clr-toggle-wrapper *vdrIfPermissions=\"['UpdateCatalog', 'UpdateProduct']\">\n <input\n type=\"checkbox\"\n clrToggle\n name=\"enabled\"\n [formControl]=\"detailForm.get(['enabled'])\"\n />\n <label>{{ 'common.enabled' | translate }}</label>\n </clr-toggle-wrapper>\n </vdr-form-field>\n </vdr-card>\n <vdr-card *ngIf=\"variant.options.length\" [title]=\"'catalog.product-options' | translate\">\n <div class=\"options\">\n <vdr-chip\n *ngFor=\"let option of variant.options | sort : 'groupId'\"\n [colorFrom]=\"optionGroupCode(option.groupId)\"\n [invert]=\"true\"\n >\n <span>{{ optionGroupCode(option.groupId) }}:</span>\n {{ optionName(option) }}\n </vdr-chip>\n </div>\n <div>\n <a\n [routerLink]=\"['../../', 'options']\"\n class=\"button-small mt-2\"\n *vdrIfPermissions=\"updatePermissions\"\n >\n <clr-icon shape=\"pencil\"></clr-icon>\n {{ 'catalog.edit-options' | translate }}\n </a>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'catalog.facets' | translate\">\n <div class=\"facets\">\n <vdr-facet-value-chip\n *ngFor=\"let facetValue of facetValues$ | async\"\n [facetValue]=\"facetValue\"\n [removable]=\"updatePermissions | hasPermission\"\n (remove)=\"removeFacetValue(facetValue.id)\"\n ></vdr-facet-value-chip>\n </div>\n <div>\n <button\n class=\"button-small mt-2\"\n *vdrIfPermissions=\"updatePermissions\"\n (click)=\"selectFacetValue()\"\n >\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-facets' | translate }}\n </button>\n </div>\n </vdr-card>\n\n <vdr-card>\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\n </vdr-card>\n </vdr-page-detail-sidebar>\n\n <vdr-page-block>\n <button type=\"submit\" hidden x-data=\"prevents enter key from triggering other buttons\"></button>\n <vdr-card>\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\n <input\n id=\"name\"\n type=\"text\"\n formControlName=\"name\"\n [readonly]=\"!(['UpdateCatalog', 'UpdateProduct'] | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-field [label]=\"'catalog.sku' | translate\" for=\"sku\">\n <input\n id=\"sku\"\n type=\"text\"\n formControlName=\"sku\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-form-field>\n </div>\n </vdr-card>\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\n <vdr-tabbed-custom-fields\n entityName=\"ProductVariant\"\n [customFields]=\"customFields\"\n [customFieldsFormGroup]=\"detailForm.get('customFields')\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-card>\n <vdr-custom-detail-component-host\n locationId=\"product-variant-detail\"\n [entity$]=\"entity$\"\n [detailForm]=\"detailForm\"\n />\n <vdr-card [title]=\"'catalog.assets' | translate\">\n <vdr-assets\n [assets]=\"assetChanges.assets || variant.assets\"\n [featuredAsset]=\"assetChanges.featuredAsset || variant.featuredAsset\"\n [updatePermissions]=\"updatePermissions\"\n (change)=\"assetChanges = $event\"\n />\n </vdr-card>\n <vdr-card [title]=\"'catalog.price-and-tax' | translate\">\n <div class=\"form-grid\">\n <vdr-form-field [label]=\"'catalog.tax-category' | translate\" for=\"taxCategory\">\n <select name=\"taxCategory\" formControlName=\"taxCategoryId\">\n <option\n *ngFor=\"let taxCategory of taxCategories$ | async\"\n [value]=\"taxCategory.id\"\n >\n {{ taxCategory.name }}\n </option>\n </select>\n </vdr-form-field>\n </div>\n <div class=\"form-grid prices\" *ngFor=\"let price of pricesForm.controls\" [formGroup]=\"price\">\n <vdr-form-field\n [label]=\"\n ('catalog.price' | translate) +\n (1 < pricesForm.length ? ' (' + price.value.currencyCode + ')' : '')\n \"\n [tooltip]=\"\n 1 < pricesForm.length && price.value.currencyCode === channelDefaultCurrencyCode\n ? ('catalog.default-currency' | translate)\n : undefined\n \"\n for=\"price\"\n >\n <div class=\"price-wrapper\" [class.pending-deletion]=\"price.value.delete === true\">\n <vdr-currency-input\n name=\"price\"\n [currencyCode]=\"price.value.currencyCode\"\n [readonly]=\"\n !(updatePermissions | hasPermission) || price.value.delete === true\n \"\n formControlName=\"price\"\n />\n <div *ngIf=\"1 < pricesForm.controls.length\">\n <button\n class=\"button-small delete-button\"\n [disabled]=\"price.value.currencyCode === channelDefaultCurrencyCode\"\n (click)=\"toggleDeletePrice(price.get('delete'))\"\n >\n <clr-icon shape=\"trash\"></clr-icon>\n </button>\n </div>\n </div>\n </vdr-form-field>\n <vdr-variant-price-detail\n [price]=\"price.value.price\"\n [currencyCode]=\"price.value.currencyCode\"\n [priceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n [taxCategoryId]=\"detailForm.get('taxCategoryId')!.value\"\n />\n </div>\n <vdr-variant-price-strategy-detail\n [channelPriceIncludesTax]=\"channelPriceIncludesTax$ | async\"\n [channelDefaultCurrencyCode]=\"channelDefaultCurrencyCode\"\n [variant]=\"variant\"\n />\n <ng-container *ngIf=\"unusedCurrencyCodes$ | async as unusedCurrencyCodes\">\n <div *ngIf=\"unusedCurrencyCodes.length\">\n <vdr-dropdown>\n <button class=\"button mt-2\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-price-in-another-currency' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu>\n <button\n vdrDropdownItem\n *ngFor=\"let currencyCode of unusedCurrencyCodes\"\n (click)=\"addPriceInCurrency(currencyCode)\"\n >\n {{ currencyCode | localeCurrencyName }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </ng-container>\n </vdr-card>\n <vdr-card [title]=\"'catalog.stock-levels' | translate\">\n <div class=\"form-grid\">\n <vdr-form-field\n for=\"track-inventory\"\n [label]=\"'catalog.track-inventory' | translate\"\n [tooltip]=\"'catalog.track-inventory-tooltip' | translate\"\n >\n <select\n name=\"track-inventory\"\n formControlName=\"trackInventory\"\n [disabled]=\"!(updatePermissions | hasPermission)\"\n >\n <option [value]=\"GlobalFlag.TRUE\">\n {{ 'catalog.track-inventory-true' | translate }}\n </option>\n <option [value]=\"GlobalFlag.FALSE\">\n {{ 'catalog.track-inventory-false' | translate }}\n </option>\n <option [value]=\"GlobalFlag.INHERIT\">\n {{ 'catalog.track-inventory-inherit' | translate }}\n </option>\n </select>\n </vdr-form-field>\n\n <vdr-form-item\n [label]=\"'catalog.out-of-stock-threshold' | translate\"\n [tooltip]=\"'catalog.out-of-stock-threshold-tooltip' | translate\"\n >\n <input\n type=\"number\"\n formControlName=\"outOfStockThreshold\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n [vdrDisabled]=\"\n detailForm.get('useGlobalOutOfStockThreshold')?.value !== false ||\n inventoryIsNotTracked(detailForm)\n \"\n />\n <clr-toggle-wrapper>\n <input\n type=\"checkbox\"\n clrToggle\n name=\"useGlobalOutOfStockThreshold\"\n formControlName=\"useGlobalOutOfStockThreshold\"\n [vdrDisabled]=\"\n !(updatePermissions | hasPermission) || inventoryIsNotTracked(detailForm)\n \"\n />\n <label\n >{{ 'catalog.use-global-value' | translate }} ({{\n globalOutOfStockThreshold\n }})</label\n >\n </clr-toggle-wrapper>\n </vdr-form-item>\n </div>\n <div\n class=\"form-grid stock-levels\"\n *ngFor=\"let stockLevel of stockLevelsForm.controls\"\n [formGroup]=\"stockLevel\"\n >\n <vdr-form-field\n [label]=\"\n stockLevel.get('stockLocationName')?.value +\n ': ' +\n ('catalog.stock-on-hand' | translate)\n \"\n [for]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n >\n <input\n [id]=\"'stockOnHand_' + stockLevel.get('stockLocationId')?.value\"\n type=\"number\"\n formControlName=\"stockOnHand\"\n [readonly]=\"!(updatePermissions | hasPermission)\"\n />\n </vdr-form-field>\n <vdr-form-item\n [label]=\"\n stockLevel.get('stockLocationName')?.value +\n ': ' +\n ('catalog.stock-allocated' | translate)\n \"\n >\n {{ stockLevel.get('stockAllocated')?.value }}\n </vdr-form-item>\n </div>\n <ng-container *ngIf=\"unusedStockLocation$ | async as unusedStockLocations\">\n <div *ngIf=\"unusedStockLocations.length\">\n <vdr-dropdown>\n <button class=\"button mt-2\" vdrDropdownTrigger>\n <clr-icon shape=\"plus\"></clr-icon>\n {{ 'catalog.add-stock-location' | translate }}\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\n </button>\n <vdr-dropdown-menu>\n <button\n vdrDropdownItem\n *ngFor=\"let stockLocation of unusedStockLocations\"\n (click)=\"addStockLocation(stockLocation)\"\n >\n <clr-icon shape=\"map-marker\"></clr-icon> {{ stockLocation.name }}\n </button>\n </vdr-dropdown-menu>\n </vdr-dropdown>\n </div>\n </ng-container>\n </vdr-card>\n </vdr-page-block>\n </vdr-page-detail-layout>\n</form>\n", styles: [".facets,.options{display:flex;flex-wrap:wrap;gap:3px}vdr-product-variant-quick-jump{flex:1;margin-inline-end:calc(var(--space-unit) * 2)}.stock-levels,.prices{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}.price-wrapper{display:flex;align-items:center;gap:var(--space-unit);width:100%}.price-wrapper.pending-deletion vdr-currency-input{opacity:.7}.price-wrapper.pending-deletion .delete-button{background-color:var(--color-error-700);color:var(--color-error-100)}\n"] }]
|
|
265
265
|
}], ctorParameters: function () { return [{ type: i1.ProductDetailService }, { type: i2.FormBuilder }, { type: i3.ModalService }, { type: i3.NotificationService }, { type: i3.DataService }, { type: i0.ChangeDetectorRef }]; } });
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC12YXJpYW50LWRldGFpbC9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILHlCQUF5QixFQUd6QixlQUFlLEVBQ2YsdUJBQXVCLEVBR3ZCLFVBQVUsRUFLVixVQUFVLEVBRVYsb0NBQW9DLEVBQ3BDLHdCQUF3QixHQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUNILG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxHQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7OztBQTRCL0YsTUFBTSxPQUFPLDZCQUNULFNBQVEsd0JBQWtG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QUUsSUFBSSxDQUFDLFlBQVk7WUFDcEMsWUFBWTtZQUNaLGtCQUFrQixFQUFFO2dCQUNoQixZQUFZO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7YUFDM0I7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0gsR0FBRyxjQUFjO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3BELGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUNuRCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWE7U0FDRyxDQUFDO0lBQy9ELENBQUM7OEdBL1VRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25FMUMseThoQkF1VUE7OzJGRHBRYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VycmVuY3lDb2RlLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyxcclxuICAgIEdldFByb2R1Y3RWYXJpYW50RGV0YWlsRG9jdW1lbnQsXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LFxyXG4gICAgR2xvYmFsRmxhZyxcclxuICAgIEl0ZW1PZixcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LFxyXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgcGljayB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvcGljayc7XHJcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgY29uY2F0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICAgIG1hcCxcclxuICAgIG1lcmdlTWFwLFxyXG4gICAgc2hhcmVSZXBsYXksXHJcbiAgICBza2lwLFxyXG4gICAgc3dpdGNoTWFwLFxyXG4gICAgc3dpdGNoTWFwVG8sXHJcbiAgICB0YWtlLFxyXG4gICAgdGFwLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgU2VsZWN0ZWRBc3NldHMge1xyXG4gICAgYXNzZXRzPzogQXNzZXRbXTtcclxuICAgIGZlYXR1cmVkQXNzZXQ/OiBBc3NldDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZhcmlhbnRGb3JtVmFsdWUge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHRheENhdGVnb3J5SWQ6IHN0cmluZztcclxuICAgIHN0b2NrT25IYW5kOiBudW1iZXI7XHJcbiAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBib29sZWFuO1xyXG4gICAgb3V0T2ZTdG9ja1RocmVzaG9sZDogbnVtYmVyO1xyXG4gICAgdHJhY2tJbnZlbnRvcnk6IEdsb2JhbEZsYWc7XHJcbiAgICBmYWNldFZhbHVlSWRzOiBzdHJpbmdbXVtdO1xyXG4gICAgY3VzdG9tRmllbGRzPzogYW55O1xyXG59XHJcbnR5cGUgVCA9IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+O1xyXG50eXBlIFQxID0gVFsnc3RvY2tMZXZlbHMnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LXZhcmlhbnQtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdFZhcmlhbnREZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBHZXRQcm9kdWN0VmFyaWFudERldGFpbERvY3VtZW50LCAncHJvZHVjdFZhcmlhbnQnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbnMgPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG4gICAgcmVhZG9ubHkgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdFZhcmlhbnQnKTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbU9wdGlvbkZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIHN0b2NrTGV2ZWxzJDogT2JzZXJ2YWJsZTxOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPlsnc3RvY2tMZXZlbHMnXT47XHJcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cDxWYXJpYW50Rm9ybVZhbHVlPih7XHJcbiAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNrdTogJycsXHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgdGF4Q2F0ZWdvcnlJZDogJycsXHJcbiAgICAgICAgc3RvY2tPbkhhbmQ6IDAsXHJcbiAgICAgICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogdHJ1ZSxcclxuICAgICAgICBvdXRPZlN0b2NrVGhyZXNob2xkOiAwLFxyXG4gICAgICAgIHRyYWNrSW52ZW50b3J5OiBHbG9iYWxGbGFnLlRSVUUsXHJcbiAgICAgICAgZmFjZXRWYWx1ZUlkczogW10sXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdldEN1c3RvbUZpZWxkc0RlZmF1bHRzKHRoaXMuY3VzdG9tRmllbGRzKSksXHJcbiAgICB9KTtcclxuICAgIHN0b2NrTGV2ZWxzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXk8XHJcbiAgICAgICAgRm9ybUdyb3VwPHtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gICAgICAgICAgICBzdG9ja09uSGFuZDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcclxuICAgICAgICB9PlxyXG4gICAgPihbXSk7XHJcbiAgICBwcmljZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheTxcclxuICAgICAgICBGb3JtR3JvdXA8e1xyXG4gICAgICAgICAgICBwcmljZTogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogRm9ybUNvbnRyb2w8Q3VycmVuY3lDb2RlIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGRlbGV0ZTogRm9ybUNvbnRyb2w8Ym9vbGVhbiB8IG51bGw+O1xyXG4gICAgICAgIH0+XHJcbiAgICA+KFtdKTtcclxuICAgIGFzc2V0Q2hhbmdlczogU2VsZWN0ZWRBc3NldHMgPSB7fTtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LCAndGF4Q2F0ZWdvcmllcyc+Pj47XHJcbiAgICB1bnVzZWRTdG9ja0xvY2F0aW9uJDogT2JzZXJ2YWJsZTxBcnJheTxJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4+PjtcclxuICAgIHVudXNlZEN1cnJlbmN5Q29kZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5IEdsb2JhbEZsYWcgPSBHbG9iYWxGbGFnO1xyXG4gICAgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW47XHJcbiAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBudW1iZXI7XHJcbiAgICBmYWNldFZhbHVlcyQ6IE9ic2VydmFibGU8Tm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVsncHJvZHVjdFZhcmlhbnQnXT5bJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzLmdldEdsb2JhbFNldHRpbmdzKCdjYWNoZS1maXJzdCcpLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGdsb2JhbFNldHRpbmdzIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9IGdsb2JhbFNldHRpbmdzLnRyYWNrSW52ZW50b3J5O1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQgPSBnbG9iYWxTZXR0aW5ncy5vdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGF4Q2F0ZWdvcmllcyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnRheENhdGVnb3JpZXMuaXRlbXMpKTtcclxuICAgICAgICBjb25zdCBhdmFpbGFibGVDdXJyZW5jeUNvZGVzJCA9IHRoaXMucmVzdWx0JC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoZGF0YSA9PiAodGhpcy5jaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZSA9IGRhdGEuYWN0aXZlQ2hhbm5lbC5kZWZhdWx0Q3VycmVuY3lDb2RlKSksXHJcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuYWN0aXZlQ2hhbm5lbC5hdmFpbGFibGVDdXJyZW5jeUNvZGVzKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudW51c2VkQ3VycmVuY3lDb2RlcyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMucHJpY2VzRm9ybS52YWx1ZUNoYW5nZXMsIGF2YWlsYWJsZUN1cnJlbmN5Q29kZXMkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtwcmljZXMsIGN1cnJlbmN5Q29kZXNdKSA9PlxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3lDb2Rlcy5maWx0ZXIoY29kZSA9PiAhcHJpY2VzLm1hcChwID0+IHAuY3VycmVuY3lDb2RlKS5pbmNsdWRlcyhjb2RlKSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdG9ja0xvY2F0aW9ucyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnN0b2NrTG9jYXRpb25zLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRTdG9ja0xvY2F0aW9uJCA9IGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCBzdG9ja0xvY2F0aW9ucyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2VudGl0eSwgc3RvY2tMb2NhdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkSWRzID0gZW50aXR5LnN0b2NrTGV2ZWxzLm1hcChsID0+IGwuc3RvY2tMb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvY2tMb2NhdGlvbnMuZmlsdGVyKGwgPT4gIXVzZWRJZHMuaW5jbHVkZXMobC5pZCkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xyXG4gICAgICAgICAgICAuZ2V0QWN0aXZlQ2hhbm5lbCgnY2FjaGUtZmlyc3QnKVxyXG4gICAgICAgICAgICAucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmFjdGl2ZUNoYW5uZWwucHJpY2VzSW5jbHVkZVRheClcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuc3RvY2tMZXZlbHMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGVudGl0eSA9PiBlbnRpdHk/LnN0b2NrTGV2ZWxzID8/IFtdKSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKHZhcmlhbnQgPT4gdmFyaWFudC5mYWNldFZhbHVlcyA/PyBbXSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXRWYWx1ZUlkcycpIS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc2tpcCgxKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogaWRzIH0gfSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoKHsgZmFjZXRWYWx1ZXMgfSkgPT4gZmFjZXRWYWx1ZXMuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZXMkLnBpcGUoc3dpdGNoTWFwVG8oZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcmljZUluQ3VycmVuY3koY3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGUpIHtcclxuICAgICAgICB0aGlzLnByaWNlc0Zvcm0ucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAgIGRlbGV0ZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZWxldGVQcmljZShkZWxldGVGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBkZWxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSghZGVsZXRlRm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGRlbGV0ZUZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uOiBJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4pIHtcclxuICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RvY2tMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25OYW1lOiBzdG9ja0xvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogMCxcclxuICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt2YXJpYW50LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwaWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0aW9ucycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t1JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXhDYXRlZ29yeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZWF0dXJlZEFzc2V0SWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2V0SWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja0ludmVudG9yeScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvY2tMZXZlbHNGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnN0b2NrTGV2ZWxzID0gdGhpcy5zdG9ja0xldmVsc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xvY2F0aW9uSWQ6IGNvbnRyb2wudmFsdWUuc3RvY2tMb2NhdGlvbklkISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBjb250cm9sLnZhbHVlLnN0b2NrT25IYW5kISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJpY2VzRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5wcmljZXMgPSB0aGlzLnByaWNlc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogY29udHJvbC52YWx1ZS5wcmljZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNvbnRyb2wudmFsdWUuY3VycmVuY3lDb2RlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGU6IGNvbnRyb2wudmFsdWUuZGVsZXRlID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5tdXRhdGUoUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbaW5wdXRdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaWNlc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0VmFyaWFudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RWYXJpYW50JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrSW52ZW50b3J5ID0gZm9ybUdyb3VwLmdldCgndHJhY2tJbnZlbnRvcnknKT8udmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuRkFMU0UgfHxcclxuICAgICAgICAgICAgKHRyYWNrSW52ZW50b3J5ID09PSBHbG9iYWxGbGFnLklOSEVSSVQgJiYgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9PT0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25Hcm91cENvZGUob3B0aW9uR3JvdXBJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZW50aXR5Py5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gb3B0aW9uR3JvdXBJZCk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwPy5jb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbk5hbWUob3B0aW9uOiBQcm9kdWN0T3B0aW9uRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XHJcbiAgICAgICAgICAgIG9wdGlvbi50cmFuc2xhdGlvbnMuZmluZCh0ID0+IHQubGFuZ3VhZ2VDb2RlID09PSB0aGlzLmxhbmd1YWdlQ29kZSkgPz8gb3B0aW9uLnRyYW5zbGF0aW9uc1swXTtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb24ubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMgPz8gW107XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBjdXJyZW50RmFjZXRWYWx1ZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0RmFjZXRWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKS5zdWJzY3JpYmUoZmFjZXRWYWx1ZUlkcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmYWNldFZhbHVlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5mYWNldFZhbHVlSWRzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHVuaXF1ZShbLi4uY3VycmVudEZhY2V0VmFsdWVJZHMsIC4uLmZhY2V0VmFsdWVJZHNdKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKG1hcChmYWNldFZhbHVlcyA9PiBmYWNldFZhbHVlcyAmJiBmYWNldFZhbHVlcy5tYXAodiA9PiB2LmlkKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnQsIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZUlkcyA9IHZhcmlhbnQuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB2YXJpYW50LmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNrdTogdmFyaWFudC5za3UsXHJcbiAgICAgICAgICAgIG5hbWU6IHZhcmlhbnRUcmFuc2xhdGlvbiA/IHZhcmlhbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgIHN0b2NrT25IYW5kOiB2YXJpYW50LnN0b2NrTGV2ZWxzWzBdPy5zdG9ja09uSGFuZCA/PyAwLFxyXG4gICAgICAgICAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiB2YXJpYW50LnVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQsXHJcbiAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnk6IHZhcmlhbnQudHJhY2tJbnZlbnRvcnksXHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0uY2xlYXIoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHN0b2NrTGV2ZWwgb2YgdmFyaWFudC5zdG9ja0xldmVscykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBzdG9ja0xldmVsLnN0b2NrTG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IHN0b2NrTGV2ZWwuc3RvY2tMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBzdG9ja0xldmVsLnN0b2NrT25IYW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBzdG9ja0xldmVsLnN0b2NrQWxsb2NhdGVkLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJpY2VzRm9ybS5jbGVhcigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgdmFyaWFudC5wcmljZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmljZXNGb3JtLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJpY2UucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBwcmljZS5jdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlOiBmYWxzZSBhcyBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIHZhcmlhbnRGb3JtR3JvdXA6IHR5cGVvZiB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0IHwgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3QgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YXJpYW50LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2YXJpYW50Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnRGb3JtR3JvdXAudmFsdWUudGF4Q2F0ZWdvcnlJZCxcclxuICAgICAgICB9IGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQgfCBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0O1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cclxuICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICA8dmRyLWFiLWxlZnQgW2dyb3ddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdmFpbGFibGVMYW5ndWFnZXMkIHwgYXN5bmMgYXMgYXZhaWxhYmxlTGFuZ3VhZ2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV3JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx2ZHItcHJvZHVjdC12YXJpYW50LXF1aWNrLWp1bXAgW3Byb2R1Y3RJZF09XCJlbnRpdHk/LnByb2R1Y3QuaWRcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItaXRlbXMgbG9jYXRpb25JZD1cInByb2R1Y3QtdmFyaWFudC1kZXRhaWxcIj48L3Zkci1hY3Rpb24tYmFyLWl0ZW1zPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J11cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xldmVsc0Zvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZXNGb3JtLmludmFsaWQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRldGFpbEZvcm0ucHJpc3RpbmUgJiYgc3RvY2tMZXZlbHNGb3JtLnByaXN0aW5lICYmIHByaWNlc0Zvcm0ucHJpc3RpbmUpKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICFhc3NldHNDaGFuZ2VkKClcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIHZhcmlhbnRcIj5cclxuICAgIDx2ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG4gICAgICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhclxyXG4gICAgICAgICAgICA+PHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy52aXNpYmlsaXR5JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInZpc2liaWxpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJlbmFibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkZXRhaWxGb3JtLmdldChbJ2VuYWJsZWQnXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ2NvbW1vbi5lbmFibGVkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgKm5nSWY9XCJ2YXJpYW50Lm9wdGlvbnMubGVuZ3RoXCIgW3RpdGxlXT1cIidjYXRhbG9nLnByb2R1Y3Qtb3B0aW9ucycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmFyaWFudC5vcHRpb25zIHwgc29ydCA6ICdncm91cElkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvckZyb21dPVwib3B0aW9uR3JvdXBDb2RlKG9wdGlvbi5ncm91cElkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnZlcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBvcHRpb25Hcm91cENvZGUob3B0aW9uLmdyb3VwSWQpIH19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uTmFtZShvcHRpb24pIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4uLy4uLycsICdvcHRpb25zJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwZW5jaWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5lZGl0LW9wdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuZmFjZXRzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhY2V0c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZmFjZXQtdmFsdWUtY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXRWYWx1ZSBvZiBmYWNldFZhbHVlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmYWNldFZhbHVlXT1cImZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWZhY2V0LXZhbHVlLWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGYWNldFZhbHVlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFkZC1mYWNldHMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyBlbnRpdHlcIiBbZW50aXR5XT1cImVudGl0eVwiIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cclxuXHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBoaWRkZW4geC1kYXRhPVwicHJldmVudHMgZW50ZXIga2V5IGZyb20gdHJpZ2dlcmluZyBvdGhlciBidXR0b25zXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEoWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXSB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cuc2t1JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInNrdVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2t1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0VmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtdmFyaWFudC1kZXRhaWxcIlxyXG4gICAgICAgICAgICAgICAgW2VudGl0eSRdPVwiZW50aXR5JFwiXHJcbiAgICAgICAgICAgICAgICBbZGV0YWlsRm9ybV09XCJkZXRhaWxGb3JtXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5hc3NldHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWFzc2V0c1xyXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiYXNzZXRDaGFuZ2VzLmFzc2V0cyB8fCB2YXJpYW50LmFzc2V0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZlYXR1cmVkQXNzZXRdPVwiYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQgfHwgdmFyaWFudC5mZWF0dXJlZEFzc2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBbdXBkYXRlUGVybWlzc2lvbnNdPVwidXBkYXRlUGVybWlzc2lvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cucHJpY2UtYW5kLXRheCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnRheC1jYXRlZ29yeScgfCB0cmFuc2xhdGVcIiBmb3I9XCJ0YXhDYXRlZ29yeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJ0YXhDYXRlZ29yeVwiIGZvcm1Db250cm9sTmFtZT1cInRheENhdGVnb3J5SWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGF4Q2F0ZWdvcnkgb2YgdGF4Q2F0ZWdvcmllcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRheENhdGVnb3J5LmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0YXhDYXRlZ29yeS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZCBwcmljZXNcIiAqbmdGb3I9XCJsZXQgcHJpY2Ugb2YgcHJpY2VzRm9ybS5jb250cm9sc1wiIFtmb3JtR3JvdXBdPVwicHJpY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjYXRhbG9nLnByaWNlJyB8IHRyYW5zbGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPCBwcmljZXNGb3JtLmxlbmd0aCA/ICcgKCcgKyBwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgKyAnKScgOiAnJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDwgcHJpY2VzRm9ybS5sZW5ndGggJiYgcHJpY2UudmFsdWUuY3VycmVuY3lDb2RlID09PSBjaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKCdjYXRhbG9nLmRlZmF1bHQtY3VycmVuY3knIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS13cmFwcGVyXCIgW2NsYXNzLnBlbmRpbmctZGVsZXRpb25dPVwicHJpY2UudmFsdWUuZGVsZXRlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb2RlXT1cInByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbikgfHwgcHJpY2UudmFsdWUuZGVsZXRlID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIjEgPCBwcmljZXNGb3JtLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGwgZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgPT09IGNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURlbGV0ZVByaWNlKHByaWNlLmdldCgnZGVsZXRlJykpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItdmFyaWFudC1wcmljZS1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3ByaWNlXT1cInByaWNlLnZhbHVlLnByaWNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VJbmNsdWRlc1RheF09XCJjaGFubmVsUHJpY2VJbmNsdWRlc1RheCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YXhDYXRlZ29yeUlkXT1cImRldGFpbEZvcm0uZ2V0KCd0YXhDYXRlZ29yeUlkJykhLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidW51c2VkQ3VycmVuY3lDb2RlcyQgfCBhc3luYyBhcyB1bnVzZWRDdXJyZW5jeUNvZGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVudXNlZEN1cnJlbmN5Q29kZXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIG10LTJcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuYWRkLXByaWNlLWluLWFub3RoZXItY3VycmVuY3knIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGN1cnJlbmN5Q29kZSBvZiB1bnVzZWRDdXJyZW5jeUNvZGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFByaWNlSW5DdXJyZW5jeShjdXJyZW5jeUNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbmN5Q29kZSB8IGxvY2FsZUN1cnJlbmN5TmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5zdG9jay1sZXZlbHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInRyYWNrLWludmVudG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy50cmFjay1pbnZlbnRvcnknIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmFjay1pbnZlbnRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJhY2tJbnZlbnRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuVFJVRVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS10cnVlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLkZBTFNFXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LWZhbHNlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLklOSEVSSVRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktaW5oZXJpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0taXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cub3V0LW9mLXN0b2NrLXRocmVzaG9sZCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInY2F0YWxvZy5vdXQtb2Ytc3RvY2stdGhyZXNob2xkLXRvb2x0aXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvdXRPZlN0b2NrVGhyZXNob2xkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEZvcm0uZ2V0KCd1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkJyk/LnZhbHVlICE9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVudG9yeUlzTm90VHJhY2tlZChkZXRhaWxGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2ZHJEaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pIHx8IGludmVudG9yeUlzTm90VHJhY2tlZChkZXRhaWxGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnVzZS1nbG9iYWwtdmFsdWUnIHwgdHJhbnNsYXRlIH19ICh7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pPC9sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZ3JpZCBzdG9jay1sZXZlbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdG9ja0xldmVsIG9mIHN0b2NrTGV2ZWxzRm9ybS5jb250cm9sc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJzdG9ja0xldmVsXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25OYW1lJyk/LnZhbHVlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6ICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjYXRhbG9nLnN0b2NrLW9uLWhhbmQnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidzdG9ja09uSGFuZF8nICsgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25JZCcpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInc3RvY2tPbkhhbmRfJyArIHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0xvY2F0aW9uSWQnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdG9ja09uSGFuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0xvY2F0aW9uTmFtZScpPy52YWx1ZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY2F0YWxvZy5zdG9jay1hbGxvY2F0ZWQnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrQWxsb2NhdGVkJyk/LnZhbHVlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidW51c2VkU3RvY2tMb2NhdGlvbiQgfCBhc3luYyBhcyB1bnVzZWRTdG9ja0xvY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1bnVzZWRTdG9ja0xvY2F0aW9ucy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gbXQtMlwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtc3RvY2stbG9jYXRpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0b2NrTG9jYXRpb24gb2YgdW51c2VkU3RvY2tMb2NhdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJtYXAtbWFya2VyXCI+PC9jbHItaWNvbj4ge3sgc3RvY2tMb2NhdGlvbi5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbjwvZm9ybT5cclxuIl19
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC12YXJpYW50LWRldGFpbC9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRXpHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUdILHlCQUF5QixFQUd6QixlQUFlLEVBQ2YsdUJBQXVCLEVBR3ZCLFVBQVUsRUFLVixVQUFVLEVBRVYsb0NBQW9DLEVBQ3BDLHdCQUF3QixHQUUzQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUNILG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsUUFBUSxFQUNSLFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxHQUNOLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7OztBQTRCL0YsTUFBTSxPQUFPLDZCQUNULFNBQVEsd0JBQWtGO0lBOEMxRixZQUNZLG9CQUEwQyxFQUMxQyxXQUF3QixFQUN4QixZQUEwQixFQUMxQixtQkFBd0MsRUFDdEMsV0FBd0IsRUFDMUIsY0FBaUM7UUFFekMsS0FBSyxFQUFFLENBQUM7UUFQQSx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBakQ3QixzQkFBaUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLGlCQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXpFLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBbUI7WUFDbEQsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsS0FBSztZQUNkLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxFQUFFLEVBQUU7WUFDUixhQUFhLEVBQUUsRUFBRTtZQUNqQixXQUFXLEVBQUUsQ0FBQztZQUNkLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixjQUFjLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDL0IsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuRixDQUFDLENBQUM7UUFDSCxvQkFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQU90QyxFQUFFLENBQUMsQ0FBQztRQUNOLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FNakMsRUFBRSxDQUFDLENBQUM7UUFDTixpQkFBWSxHQUFtQixFQUFFLENBQUM7UUFLekIsZUFBVSxHQUFHLFVBQVUsQ0FBQztJQWVqQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUU7WUFDaEcsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFDMUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0UsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDN0MsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQ3ZGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FDekQsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQ2pHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FDNUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDaEYsQ0FDSixDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ3pFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUU7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTthQUNwRCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7YUFDL0Isc0JBQXNCLEVBQUU7YUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQzthQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLG9FQUFvRTtRQUNwRSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BGLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDWixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7YUFDakIsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUMvQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQ3pELEVBQ0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FDM0QsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxZQUEwQjtRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDbkIsWUFBWTtZQUNaLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLEtBQWdCO1NBQzNCLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELGlCQUFpQixDQUFDLGlCQUE4QjtRQUM1QyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsYUFBcUU7UUFDbEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ25CLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsSUFBSTtZQUNyQyxXQUFXLEVBQUUsQ0FBQztZQUNkLGNBQWMsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELElBQUk7UUFDQSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQzFDLElBQUksQ0FDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixPQUFPLEVBQ1AsSUFBSSxDQUFDLFVBQVUsRUFDZixZQUFZLENBQ2MsRUFDOUI7Z0JBQ0ksSUFBSTtnQkFDSixTQUFTO2dCQUNULGNBQWM7Z0JBQ2QsS0FBSztnQkFDTCxlQUFlO2dCQUNmLGVBQWU7Z0JBQ2YsaUJBQWlCO2dCQUNqQixVQUFVO2dCQUNWLGdCQUFnQjtnQkFDaEIscUJBQXFCO2dCQUNyQiw4QkFBOEI7Z0JBQzlCLGNBQWM7YUFDakIsQ0FDeUIsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO2dCQUM1QixLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUTtxQkFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztxQkFDaEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDYixvRUFBb0U7b0JBQ3BFLGVBQWUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWdCO29CQUMvQyxvRUFBb0U7b0JBQ3BFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVk7aUJBQzFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO2dCQUN2QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtxQkFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztxQkFDaEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDYixvRUFBb0U7b0JBQ3BFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQU07b0JBQzNCLG9FQUFvRTtvQkFDcEUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBYTtvQkFDekMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUk7aUJBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLG9DQUFvQyxFQUFFO2dCQUNqRSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7YUFDakIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQ04sTUFBTSxDQUFDLEVBQUU7WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsZ0JBQWdCO2FBQzNCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdkMsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDNUQsTUFBTSxFQUFFLGdCQUFnQjthQUMzQixDQUFDLENBQUM7UUFDUCxDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JELENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxTQUEyQjtRQUM3QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzlELE9BQU8sQ0FDSCxjQUFjLEtBQUssVUFBVSxDQUFDLEtBQUs7WUFDbkMsQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxDQUFDLENBQ2pGLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQXFCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sS0FBSyxFQUFFLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQTZCO1FBQ3BDLE1BQU0sV0FBVyxHQUNiLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW9CO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDckMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDcEUsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUNwQixhQUFhLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQztTQUN4RSxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNwRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUN2QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRSxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNqQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixPQUFPLElBQUksQ0FBQyxZQUFZO2FBQ25CLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFUyxhQUFhLENBQ25CLE9BQW9FLEVBQ3BFLFlBQTBCO1FBRTFCLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNsRSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUN2QixFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZELGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUM7WUFDckQsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLDRCQUE0QjtZQUNsRSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO1lBQ2hELGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxhQUFhO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsZUFBZSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDNUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJO2dCQUNoRCxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7Z0JBQ25DLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYzthQUM1QyxDQUFDLENBQ0wsQ0FBQztTQUNMO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ2xCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtnQkFDaEMsTUFBTSxFQUFFLEtBQWdCO2FBQzNCLENBQUMsQ0FDTCxDQUFDO1NBQ0w7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyx3QkFBd0IsQ0FDekIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQ25DLE9BQU8sRUFDUCxrQkFBa0IsQ0FDckIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQixDQUNyQixPQUFvRSxFQUNwRSxnQkFBd0MsRUFDeEMsWUFBMEI7UUFFMUIsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQUM7WUFDN0MsWUFBWSxFQUFFLE9BQU87WUFDckIsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEtBQUs7WUFDckMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDcEMsWUFBWTtZQUNaLGtCQUFrQixFQUFFO2dCQUNoQixZQUFZO2dCQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7YUFDM0I7U0FDSixDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0gsR0FBRyxjQUFjO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xELGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3BELGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsYUFBYTtZQUNuRCxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWE7U0FDRyxDQUFDO0lBQy9ELENBQUM7OEdBL1VRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25FMUMsbWxoQkE0VUE7OzJGRHpRYSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBBc3NldCxcclxuICAgIENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VycmVuY3lDb2RlLFxyXG4gICAgRGF0YVNlcnZpY2UsXHJcbiAgICBmaW5kVHJhbnNsYXRpb24sXHJcbiAgICBnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyxcclxuICAgIEdldFByb2R1Y3RWYXJpYW50RGV0YWlsRG9jdW1lbnQsXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LFxyXG4gICAgR2xvYmFsRmxhZyxcclxuICAgIEl0ZW1PZixcclxuICAgIExhbmd1YWdlQ29kZSxcclxuICAgIE1vZGFsU2VydmljZSxcclxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBQZXJtaXNzaW9uLFxyXG4gICAgUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LFxyXG4gICAgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50LFxyXG4gICAgVXBkYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgcGljayB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvcGljayc7XHJcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvdW5pcXVlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgY29uY2F0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICAgIG1hcCxcclxuICAgIG1lcmdlTWFwLFxyXG4gICAgc2hhcmVSZXBsYXksXHJcbiAgICBza2lwLFxyXG4gICAgc3dpdGNoTWFwLFxyXG4gICAgc3dpdGNoTWFwVG8sXHJcbiAgICB0YWtlLFxyXG4gICAgdGFwLFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcGx5RmFjZXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9hcHBseS1mYWNldC1kaWFsb2cvYXBwbHktZmFjZXQtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgU2VsZWN0ZWRBc3NldHMge1xyXG4gICAgYXNzZXRzPzogQXNzZXRbXTtcclxuICAgIGZlYXR1cmVkQXNzZXQ/OiBBc3NldDtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZhcmlhbnRGb3JtVmFsdWUge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHRheENhdGVnb3J5SWQ6IHN0cmluZztcclxuICAgIHN0b2NrT25IYW5kOiBudW1iZXI7XHJcbiAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBib29sZWFuO1xyXG4gICAgb3V0T2ZTdG9ja1RocmVzaG9sZDogbnVtYmVyO1xyXG4gICAgdHJhY2tJbnZlbnRvcnk6IEdsb2JhbEZsYWc7XHJcbiAgICBmYWNldFZhbHVlSWRzOiBzdHJpbmdbXVtdO1xyXG4gICAgY3VzdG9tRmllbGRzPzogYW55O1xyXG59XHJcbnR5cGUgVCA9IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+O1xyXG50eXBlIFQxID0gVFsnc3RvY2tMZXZlbHMnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LXZhcmlhbnQtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LXZhcmlhbnQtZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3QtdmFyaWFudC1kZXRhaWwuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdFZhcmlhbnREZXRhaWxDb21wb25lbnRcclxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBHZXRQcm9kdWN0VmFyaWFudERldGFpbERvY3VtZW50LCAncHJvZHVjdFZhcmlhbnQnPlxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxyXG57XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbnMgPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG4gICAgcmVhZG9ubHkgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdFZhcmlhbnQnKTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbU9wdGlvbkZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIHN0b2NrTGV2ZWxzJDogT2JzZXJ2YWJsZTxOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5Wydwcm9kdWN0VmFyaWFudCddPlsnc3RvY2tMZXZlbHMnXT47XHJcbiAgICBkZXRhaWxGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cDxWYXJpYW50Rm9ybVZhbHVlPih7XHJcbiAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIHNrdTogJycsXHJcbiAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgdGF4Q2F0ZWdvcnlJZDogJycsXHJcbiAgICAgICAgc3RvY2tPbkhhbmQ6IDAsXHJcbiAgICAgICAgdXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZDogdHJ1ZSxcclxuICAgICAgICBvdXRPZlN0b2NrVGhyZXNob2xkOiAwLFxyXG4gICAgICAgIHRyYWNrSW52ZW50b3J5OiBHbG9iYWxGbGFnLlRSVUUsXHJcbiAgICAgICAgZmFjZXRWYWx1ZUlkczogW10sXHJcbiAgICAgICAgY3VzdG9tRmllbGRzOiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdldEN1c3RvbUZpZWxkc0RlZmF1bHRzKHRoaXMuY3VzdG9tRmllbGRzKSksXHJcbiAgICB9KTtcclxuICAgIHN0b2NrTGV2ZWxzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXk8XHJcbiAgICAgICAgRm9ybUdyb3VwPHtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gICAgICAgICAgICBzdG9ja09uSGFuZDogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPjtcclxuICAgICAgICB9PlxyXG4gICAgPihbXSk7XHJcbiAgICBwcmljZXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheTxcclxuICAgICAgICBGb3JtR3JvdXA8e1xyXG4gICAgICAgICAgICBwcmljZTogRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGN1cnJlbmN5Q29kZTogRm9ybUNvbnRyb2w8Q3VycmVuY3lDb2RlIHwgbnVsbD47XHJcbiAgICAgICAgICAgIGRlbGV0ZTogRm9ybUNvbnRyb2w8Ym9vbGVhbiB8IG51bGw+O1xyXG4gICAgICAgIH0+XHJcbiAgICA+KFtdKTtcclxuICAgIGFzc2V0Q2hhbmdlczogU2VsZWN0ZWRBc3NldHMgPSB7fTtcclxuICAgIHRheENhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5LCAndGF4Q2F0ZWdvcmllcyc+Pj47XHJcbiAgICB1bnVzZWRTdG9ja0xvY2F0aW9uJDogT2JzZXJ2YWJsZTxBcnJheTxJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4+PjtcclxuICAgIHVudXNlZEN1cnJlbmN5Q29kZXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcclxuICAgIGNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5IEdsb2JhbEZsYWcgPSBHbG9iYWxGbGFnO1xyXG4gICAgZ2xvYmFsVHJhY2tJbnZlbnRvcnk6IGJvb2xlYW47XHJcbiAgICBnbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiBudW1iZXI7XHJcbiAgICBmYWNldFZhbHVlcyQ6IE9ic2VydmFibGU8Tm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVsncHJvZHVjdFZhcmlhbnQnXT5bJ2ZhY2V0VmFsdWVzJ10+O1xyXG4gICAgY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByb2R1Y3REZXRhaWxTZXJ2aWNlOiBQcm9kdWN0RGV0YWlsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNldHRpbmdzLmdldEdsb2JhbFNldHRpbmdzKCdjYWNoZS1maXJzdCcpLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGdsb2JhbFNldHRpbmdzIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9IGdsb2JhbFNldHRpbmdzLnRyYWNrSW52ZW50b3J5O1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQgPSBnbG9iYWxTZXR0aW5ncy5vdXRPZlN0b2NrVGhyZXNob2xkO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudGF4Q2F0ZWdvcmllcyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnRheENhdGVnb3JpZXMuaXRlbXMpKTtcclxuICAgICAgICBjb25zdCBhdmFpbGFibGVDdXJyZW5jeUNvZGVzJCA9IHRoaXMucmVzdWx0JC5waXBlKFxyXG4gICAgICAgICAgICB0YXAoZGF0YSA9PiAodGhpcy5jaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZSA9IGRhdGEuYWN0aXZlQ2hhbm5lbC5kZWZhdWx0Q3VycmVuY3lDb2RlKSksXHJcbiAgICAgICAgICAgIG1hcChkYXRhID0+IGRhdGEuYWN0aXZlQ2hhbm5lbC5hdmFpbGFibGVDdXJyZW5jeUNvZGVzKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudW51c2VkQ3VycmVuY3lDb2RlcyQgPSBjb21iaW5lTGF0ZXN0KHRoaXMucHJpY2VzRm9ybS52YWx1ZUNoYW5nZXMsIGF2YWlsYWJsZUN1cnJlbmN5Q29kZXMkKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtwcmljZXMsIGN1cnJlbmN5Q29kZXNdKSA9PlxyXG4gICAgICAgICAgICAgICAgY3VycmVuY3lDb2Rlcy5maWx0ZXIoY29kZSA9PiAhcHJpY2VzLm1hcChwID0+IHAuY3VycmVuY3lDb2RlKS5pbmNsdWRlcyhjb2RlKSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzdG9ja0xvY2F0aW9ucyQgPSB0aGlzLnJlc3VsdCQucGlwZShtYXAoZGF0YSA9PiBkYXRhLnN0b2NrTG9jYXRpb25zLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRTdG9ja0xvY2F0aW9uJCA9IGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCBzdG9ja0xvY2F0aW9ucyQpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoW2VudGl0eSwgc3RvY2tMb2NhdGlvbnNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VkSWRzID0gZW50aXR5LnN0b2NrTGV2ZWxzLm1hcChsID0+IGwuc3RvY2tMb2NhdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvY2tMb2NhdGlvbnMuZmlsdGVyKGwgPT4gIXVzZWRJZHMuaW5jbHVkZXMobC5pZCkpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkID0gdGhpcy5kYXRhU2VydmljZS5zZXR0aW5nc1xyXG4gICAgICAgICAgICAuZ2V0QWN0aXZlQ2hhbm5lbCgnY2FjaGUtZmlyc3QnKVxyXG4gICAgICAgICAgICAucmVmZXRjaE9uQ2hhbm5lbENoYW5nZSgpXHJcbiAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmFjdGl2ZUNoYW5uZWwucHJpY2VzSW5jbHVkZVRheClcclxuICAgICAgICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuc3RvY2tMZXZlbHMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKGVudGl0eSA9PiBlbnRpdHk/LnN0b2NrTGV2ZWxzID8/IFtdKSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZXMkID0gdGhpcy5lbnRpdHkkLnBpcGUobWFwKHZhcmlhbnQgPT4gdmFyaWFudC5mYWNldFZhbHVlcyA/PyBbXSkpO1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnZmFjZXRWYWx1ZUlkcycpIS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgc2tpcCgxKSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5mYWNldFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGYWNldFZhbHVlcyh7IGZpbHRlcjogeyBpZDogeyBpbjogaWRzIH0gfSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5tYXBTaW5nbGUoKHsgZmFjZXRWYWx1ZXMgfSkgPT4gZmFjZXRWYWx1ZXMuaXRlbXMpLFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZmFjZXRWYWx1ZXMkID0gY29uY2F0KFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlcyQucGlwZSh0YWtlKDEpKSxcclxuICAgICAgICAgICAgZmFjZXRWYWx1ZXMkLnBpcGUoc3dpdGNoTWFwVG8oZm9ybUZhY2V0VmFsdWVJZENoYW5nZXMkKSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQcmljZUluQ3VycmVuY3koY3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGUpIHtcclxuICAgICAgICB0aGlzLnByaWNlc0Zvcm0ucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogMCxcclxuICAgICAgICAgICAgICAgIGRlbGV0ZTogZmFsc2UgYXMgYm9vbGVhbixcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZWxldGVQcmljZShkZWxldGVGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICBkZWxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSghZGVsZXRlRm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIGRlbGV0ZUZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU3RvY2tMb2NhdGlvbihzdG9ja0xvY2F0aW9uOiBJdGVtT2Y8R2V0UHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeSwgJ3N0b2NrTG9jYXRpb25zJz4pIHtcclxuICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25JZDogc3RvY2tMb2NhdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgIHN0b2NrTG9jYXRpb25OYW1lOiBzdG9ja0xvY2F0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBzdG9ja09uSGFuZDogMCxcclxuICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiAwLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt2YXJpYW50LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwaWNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0aW9ucycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2t1JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YXhDYXRlZ29yeUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNldFZhbHVlSWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZWF0dXJlZEFzc2V0SWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2V0SWRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFja0ludmVudG9yeScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3VzdG9tRmllbGRzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICApIGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RvY2tMZXZlbHNGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LnN0b2NrTGV2ZWxzID0gdGhpcy5zdG9ja0xldmVsc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xvY2F0aW9uSWQ6IGNvbnRyb2wudmFsdWUuc3RvY2tMb2NhdGlvbklkISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBjb250cm9sLnZhbHVlLnN0b2NrT25IYW5kISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJpY2VzRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5wcmljZXMgPSB0aGlzLnByaWNlc0Zvcm0uY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLmRpcnR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjb250cm9sID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogY29udHJvbC52YWx1ZS5wcmljZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeUNvZGU6IGNvbnRyb2wudmFsdWUuY3VycmVuY3lDb2RlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGU6IGNvbnRyb2wudmFsdWUuZGVsZXRlID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5tdXRhdGUoUHJvZHVjdFZhcmlhbnRVcGRhdGVNdXRhdGlvbkRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbaW5wdXRdLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaWNlc0Zvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0VmFyaWFudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LXVwZGF0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RWYXJpYW50JyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXNzZXRzQ2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISFPYmplY3QudmFsdWVzKHRoaXMuYXNzZXRDaGFuZ2VzKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaW52ZW50b3J5SXNOb3RUcmFja2VkKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyYWNrSW52ZW50b3J5ID0gZm9ybUdyb3VwLmdldCgndHJhY2tJbnZlbnRvcnknKT8udmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnkgPT09IEdsb2JhbEZsYWcuRkFMU0UgfHxcclxuICAgICAgICAgICAgKHRyYWNrSW52ZW50b3J5ID09PSBHbG9iYWxGbGFnLklOSEVSSVQgJiYgdGhpcy5nbG9iYWxUcmFja0ludmVudG9yeSA9PT0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25Hcm91cENvZGUob3B0aW9uR3JvdXBJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZW50aXR5Py5wcm9kdWN0Lm9wdGlvbkdyb3Vwcy5maW5kKGcgPT4gZy5pZCA9PT0gb3B0aW9uR3JvdXBJZCk7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwPy5jb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIG9wdGlvbk5hbWUob3B0aW9uOiBQcm9kdWN0T3B0aW9uRnJhZ21lbnQpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9XHJcbiAgICAgICAgICAgIG9wdGlvbi50cmFuc2xhdGlvbnMuZmluZCh0ID0+IHQubGFuZ3VhZ2VDb2RlID09PSB0aGlzLmxhbmd1YWdlQ29kZSkgPz8gb3B0aW9uLnRyYW5zbGF0aW9uc1swXTtcclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb24ubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdEdyb3VwID0gdGhpcy5kZXRhaWxGb3JtO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGYWNldFZhbHVlSWRzID0gcHJvZHVjdEdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMgPz8gW107XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiBjdXJyZW50RmFjZXRWYWx1ZUlkcy5maWx0ZXIoaWQgPT4gaWQgIT09IGZhY2V0VmFsdWVJZCksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZHVjdEdyb3VwLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0RmFjZXRWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKS5zdWJzY3JpYmUoZmFjZXRWYWx1ZUlkcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmYWNldFZhbHVlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RmFjZXRWYWx1ZUlkcyA9IHRoaXMuZGV0YWlsRm9ybS52YWx1ZS5mYWNldFZhbHVlSWRzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVJZHM6IHVuaXF1ZShbLi4uY3VycmVudEZhY2V0VmFsdWVJZHMsIC4uLmZhY2V0VmFsdWVJZHNdKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpc3BsYXlGYWNldFZhbHVlTW9kYWwoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZnJvbUNvbXBvbmVudChBcHBseUZhY2V0RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBzaXplOiAnbWQnLFxyXG4gICAgICAgICAgICAgICAgY2xvc2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKG1hcChmYWNldFZhbHVlcyA9PiBmYWNldFZhbHVlcyAmJiBmYWNldFZhbHVlcy5tYXAodiA9PiB2LmlkKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhcmlhbnQsIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgY29uc3QgZmFjZXRWYWx1ZUlkcyA9IHZhcmlhbnQuZmFjZXRWYWx1ZXMubWFwKGZ2ID0+IGZ2LmlkKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGlkOiB2YXJpYW50LmlkLFxyXG4gICAgICAgICAgICBlbmFibGVkOiB2YXJpYW50LmVuYWJsZWQsXHJcbiAgICAgICAgICAgIHNrdTogdmFyaWFudC5za3UsXHJcbiAgICAgICAgICAgIG5hbWU6IHZhcmlhbnRUcmFuc2xhdGlvbiA/IHZhcmlhbnRUcmFuc2xhdGlvbi5uYW1lIDogJycsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnQudGF4Q2F0ZWdvcnkuaWQsXHJcbiAgICAgICAgICAgIHN0b2NrT25IYW5kOiB2YXJpYW50LnN0b2NrTGV2ZWxzWzBdPy5zdG9ja09uSGFuZCA/PyAwLFxyXG4gICAgICAgICAgICB1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkOiB2YXJpYW50LnVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGQsXHJcbiAgICAgICAgICAgIG91dE9mU3RvY2tUaHJlc2hvbGQ6IHZhcmlhbnQub3V0T2ZTdG9ja1RocmVzaG9sZCxcclxuICAgICAgICAgICAgdHJhY2tJbnZlbnRvcnk6IHZhcmlhbnQudHJhY2tJbnZlbnRvcnksXHJcbiAgICAgICAgICAgIGZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zdG9ja0xldmVsc0Zvcm0uY2xlYXIoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHN0b2NrTGV2ZWwgb2YgdmFyaWFudC5zdG9ja0xldmVscykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b2NrTGV2ZWxzRm9ybS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbklkOiBzdG9ja0xldmVsLnN0b2NrTG9jYXRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RvY2tMb2NhdGlvbk5hbWU6IHN0b2NrTGV2ZWwuc3RvY2tMb2NhdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrT25IYW5kOiBzdG9ja0xldmVsLnN0b2NrT25IYW5kLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b2NrQWxsb2NhdGVkOiBzdG9ja0xldmVsLnN0b2NrQWxsb2NhdGVkLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJpY2VzRm9ybS5jbGVhcigpO1xyXG4gICAgICAgIGZvciAoY29uc3QgcHJpY2Ugb2YgdmFyaWFudC5wcmljZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmljZXNGb3JtLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJpY2UucHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lDb2RlOiBwcmljZS5jdXJyZW5jeUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlOiBmYWxzZSBhcyBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2N1c3RvbUZpZWxkcycpLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudCxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRUcmFuc2xhdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIHByb2R1Y3QgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIHByb2R1Y3Qgd2hpY2hcclxuICAgICAqIGNhbiB0aGVuIGJlIHBlcnNpc3RlZCB0byB0aGUgQVBJLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRWYXJpYW50KFxyXG4gICAgICAgIHZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50RGV0YWlsUXVlcnlbJ3Byb2R1Y3RWYXJpYW50J10+LFxyXG4gICAgICAgIHZhcmlhbnRGb3JtR3JvdXA6IHR5cGVvZiB0aGlzLmRldGFpbEZvcm0sXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0VmFyaWFudElucHV0IHwgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3QgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YXJpYW50LFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2YXJpYW50Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udXBkYXRlZFByb2R1Y3QsXHJcbiAgICAgICAgICAgIGFzc2V0SWRzOiB0aGlzLmFzc2V0Q2hhbmdlcy5hc3NldHM/Lm1hcChhID0+IGEuaWQpLFxyXG4gICAgICAgICAgICBmZWF0dXJlZEFzc2V0SWQ6IHRoaXMuYXNzZXRDaGFuZ2VzLmZlYXR1cmVkQXNzZXQ/LmlkLFxyXG4gICAgICAgICAgICBmYWNldFZhbHVlSWRzOiB2YXJpYW50Rm9ybUdyb3VwLnZhbHVlLmZhY2V0VmFsdWVJZHMsXHJcbiAgICAgICAgICAgIHRheENhdGVnb3J5SWQ6IHZhcmlhbnRGb3JtR3JvdXAudmFsdWUudGF4Q2F0ZWdvcnlJZCxcclxuICAgICAgICB9IGFzIFVwZGF0ZVByb2R1Y3RWYXJpYW50SW5wdXQgfCBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0O1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1ibG9jaz5cbiAgICA8dmRyLWFjdGlvbi1iYXI+XG4gICAgICAgIDx2ZHItYWItbGVmdCBbZ3Jvd109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jIGFzIGF2YWlsYWJsZUxhbmd1YWdlc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHZkci1wcm9kdWN0LXZhcmlhbnQtcXVpY2stanVtcCBbcHJvZHVjdElkXT1cImVudGl0eT8ucHJvZHVjdC5pZFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC92ZHItYWItbGVmdD5cblxuICAgICAgICA8dmRyLWFiLXJpZ2h0PlxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJwcm9kdWN0LXZhcmlhbnQtZGV0YWlsXCI+PC92ZHItYWN0aW9uLWJhci1pdGVtcz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnVXBkYXRlQ2F0YWxvZycsICdVcGRhdGVQcm9kdWN0J11cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIChkZXRhaWxGb3JtLmludmFsaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b2NrTGV2ZWxzRm9ybS5pbnZhbGlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZXNGb3JtLmludmFsaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChkZXRhaWxGb3JtLnByaXN0aW5lICYmIHN0b2NrTGV2ZWxzRm9ybS5wcmlzdGluZSAmJiBwcmljZXNGb3JtLnByaXN0aW5lKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWFzc2V0c0NoYW5nZWQoKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC92ZHItYWItcmlnaHQ+XG4gICAgPC92ZHItYWN0aW9uLWJhcj5cbjwvdmRyLXBhZ2UtYmxvY2s+XG48Zm9ybSBjbGFzcz1cImZvcm1cIiBbZm9ybUdyb3VwXT1cImRldGFpbEZvcm1cIiAqbmdJZj1cImVudGl0eSQgfCBhc3luYyBhcyB2YXJpYW50XCI+XG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XG4gICAgICAgIDx2ZHItcGFnZS1kZXRhaWwtc2lkZWJhclxuICAgICAgICAgICAgPjx2ZHItY2FyZD5cbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxuICAgICAgICAgICAgICAgICAgICA8Y2xyLXRvZ2dsZS13cmFwcGVyICp2ZHJJZlBlcm1pc3Npb25zPVwiWydVcGRhdGVDYXRhbG9nJywgJ1VwZGF0ZVByb2R1Y3QnXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHJUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZW5hYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRldGFpbEZvcm0uZ2V0KFsnZW5hYmxlZCddKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjb21tb24uZW5hYmxlZCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Nsci10b2dnbGUtd3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC92ZHItY2FyZD5cbiAgICAgICAgICAgIDx2ZHItY2FyZCAqbmdJZj1cInZhcmlhbnQub3B0aW9ucy5sZW5ndGhcIiBbdGl0bGVdPVwiJ2NhdGFsb2cucHJvZHVjdC1vcHRpb25zJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB2YXJpYW50Lm9wdGlvbnMgfCBzb3J0IDogJ2dyb3VwSWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvckZyb21dPVwib3B0aW9uR3JvdXBDb2RlKG9wdGlvbi5ncm91cElkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW52ZXJ0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBvcHRpb25Hcm91cENvZGUob3B0aW9uLmdyb3VwSWQpIH19Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbk5hbWUob3B0aW9uKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4uLy4uLycsICdvcHRpb25zJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tc21hbGwgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGVuY2lsXCI+PC9jbHItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmVkaXQtb3B0aW9ucycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZHItY2FyZD5cbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuZmFjZXRzJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYWNldHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZkci1mYWNldC12YWx1ZS1jaGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmFjZXRWYWx1ZSBvZiBmYWNldFZhbHVlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmFjZXRWYWx1ZV09XCJmYWNldFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZW1vdmFibGVdPVwidXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmFjZXRWYWx1ZShmYWNldFZhbHVlLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3Zkci1mYWNldC12YWx1ZS1jaGlwPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG10LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RmFjZXRWYWx1ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicGx1c1wiPjwvY2xyLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtZmFjZXRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XG5cbiAgICAgICAgICAgIDx2ZHItY2FyZD5cbiAgICAgICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCIgW2VudGl0eV09XCJlbnRpdHlcIiAvPlxuICAgICAgICAgICAgPC92ZHItY2FyZD5cbiAgICAgICAgPC92ZHItcGFnZS1kZXRhaWwtc2lkZWJhcj5cblxuICAgICAgICA8dmRyLXBhZ2UtYmxvY2s+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBoaWRkZW4geC1kYXRhPVwicHJldmVudHMgZW50ZXIga2V5IGZyb20gdHJpZ2dlcmluZyBvdGhlciBidXR0b25zXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8dmRyLWNhcmQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIShbJ1VwZGF0ZUNhdGFsb2cnLCAnVXBkYXRlUHJvZHVjdCddIHwgaGFzUGVybWlzc2lvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5za3UnIHwgdHJhbnNsYXRlXCIgZm9yPVwic2t1XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNrdVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNrdVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbnMgfCBoYXNQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZHItY2FyZD5cbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RWYXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cImRldGFpbEZvcm0uZ2V0KCdjdXN0b21GaWVsZHMnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cInByb2R1Y3QtdmFyaWFudC1kZXRhaWxcIlxuICAgICAgICAgICAgICAgIFtlbnRpdHkkXT1cImVudGl0eSRcIlxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cuYXNzZXRzJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDx2ZHItYXNzZXRzXG4gICAgICAgICAgICAgICAgICAgIFthc3NldHNdPVwiYXNzZXRDaGFuZ2VzLmFzc2V0cyB8fCB2YXJpYW50LmFzc2V0c1wiXG4gICAgICAgICAgICAgICAgICAgIFtmZWF0dXJlZEFzc2V0XT1cImFzc2V0Q2hhbmdlcy5mZWF0dXJlZEFzc2V0IHx8IHZhcmlhbnQuZmVhdHVyZWRBc3NldFwiXG4gICAgICAgICAgICAgICAgICAgIFt1cGRhdGVQZXJtaXNzaW9uc109XCJ1cGRhdGVQZXJtaXNzaW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXNzZXRDaGFuZ2VzID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC92ZHItY2FyZD5cbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NhdGFsb2cucHJpY2UtYW5kLXRheCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cudGF4LWNhdGVnb3J5JyB8IHRyYW5zbGF0ZVwiIGZvcj1cInRheENhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJ0YXhDYXRlZ29yeVwiIGZvcm1Db250cm9sTmFtZT1cInRheENhdGVnb3J5SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YXhDYXRlZ29yeSBvZiB0YXhDYXRlZ29yaWVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRheENhdGVnb3J5LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRheENhdGVnb3J5Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWQgcHJpY2VzXCIgKm5nRm9yPVwibGV0IHByaWNlIG9mIHByaWNlc0Zvcm0uY29udHJvbHNcIiBbZm9ybUdyb3VwXT1cInByaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY2F0YWxvZy5wcmljZScgfCB0cmFuc2xhdGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8IHByaWNlc0Zvcm0ubGVuZ3RoID8gJyAoJyArIHByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZSArICcpJyA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPCBwcmljZXNGb3JtLmxlbmd0aCAmJiBwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGUgPT09IGNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKCdjYXRhbG9nLmRlZmF1bHQtY3VycmVuY3knIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInByaWNlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlLXdyYXBwZXJcIiBbY2xhc3MucGVuZGluZy1kZWxldGlvbl09XCJwcmljZS52YWx1ZS5kZWxldGUgPT09IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWN1cnJlbmN5LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwcmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwicHJpY2UudmFsdWUuY3VycmVuY3lDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pIHx8IHByaWNlLnZhbHVlLmRlbGV0ZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiMSA8IHByaWNlc0Zvcm0uY29udHJvbHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXNtYWxsIGRlbGV0ZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByaWNlLnZhbHVlLmN1cnJlbmN5Q29kZSA9PT0gY2hhbm5lbERlZmF1bHRDdXJyZW5jeUNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURlbGV0ZVByaWNlKHByaWNlLmdldCgnZGVsZXRlJykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIj48L2Nsci1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8dmRyLXZhcmlhbnQtcHJpY2UtZGV0YWlsXG4gICAgICAgICAgICAgICAgICAgICAgICBbcHJpY2VdPVwicHJpY2UudmFsdWUucHJpY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJwcmljZS52YWx1ZS5jdXJyZW5jeUNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ByaWNlSW5jbHVkZXNUYXhdPVwiY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RheENhdGVnb3J5SWRdPVwiZGV0YWlsRm9ybS5nZXQoJ3RheENhdGVnb3J5SWQnKSEudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDx2ZHItdmFyaWFudC1wcmljZS1zdHJhdGVneS1kZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgW2NoYW5uZWxQcmljZUluY2x1ZGVzVGF4XT1cImNoYW5uZWxQcmljZUluY2x1ZGVzVGF4JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXT1cImNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhcmlhbnRdPVwidmFyaWFudFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidW51c2VkQ3VycmVuY3lDb2RlcyQgfCBhc3luYyBhcyB1bnVzZWRDdXJyZW5jeUNvZGVzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1bnVzZWRDdXJyZW5jeUNvZGVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIG10LTJcIiB2ZHJEcm9wZG93blRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtcHJpY2UtaW4tYW5vdGhlci1jdXJyZW5jeScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VycmVuY3lDb2RlIG9mIHVudXNlZEN1cnJlbmN5Q29kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFByaWNlSW5DdXJyZW5jeShjdXJyZW5jeUNvZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVuY3lDb2RlIHwgbG9jYWxlQ3VycmVuY3lOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY2F0YWxvZy5zdG9jay1sZXZlbHMnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInRyYWNrLWludmVudG9yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ2NhdGFsb2cudHJhY2staW52ZW50b3J5JyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInY2F0YWxvZy50cmFjay1pbnZlbnRvcnktdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInRyYWNrLWludmVudG9yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJhY2tJbnZlbnRvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIkdsb2JhbEZsYWcuVFJVRVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy50cmFjay1pbnZlbnRvcnktdHJ1ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLkZBTFNFXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnRyYWNrLWludmVudG9yeS1mYWxzZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJHbG9iYWxGbGFnLklOSEVSSVRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cudHJhY2staW52ZW50b3J5LWluaGVyaXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0taXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidjYXRhbG9nLm91dC1vZi1zdG9jay10aHJlc2hvbGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidjYXRhbG9nLm91dC1vZi1zdG9jay10aHJlc2hvbGQtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvdXRPZlN0b2NrVGhyZXNob2xkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEZvcm0uZ2V0KCd1c2VHbG9iYWxPdXRPZlN0b2NrVGhyZXNob2xkJyk/LnZhbHVlICE9PSBmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZlbnRvcnlJc05vdFRyYWNrZWQoZGV0YWlsRm9ybSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidXNlR2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzZUdsb2JhbE91dE9mU3RvY2tUaHJlc2hvbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHVwZGF0ZVBlcm1pc3Npb25zIHwgaGFzUGVybWlzc2lvbikgfHwgaW52ZW50b3J5SXNOb3RUcmFja2VkKGRldGFpbEZvcm0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7ICdjYXRhbG9nLnVzZS1nbG9iYWwtdmFsdWUnIHwgdHJhbnNsYXRlIH19ICh7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsT3V0T2ZTdG9ja1RocmVzaG9sZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk8L2xhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0taXRlbT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkIHN0b2NrLWxldmVsc1wiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdG9ja0xldmVsIG9mIHN0b2NrTGV2ZWxzRm9ybS5jb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwic3RvY2tMZXZlbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9ja0xldmVsLmdldCgnc3RvY2tMb2NhdGlvbk5hbWUnKT8udmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY2F0YWxvZy5zdG9jay1vbi1oYW5kJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cIidzdG9ja09uSGFuZF8nICsgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25JZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInc3RvY2tPbkhhbmRfJyArIHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0xvY2F0aW9uSWQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0b2NrT25IYW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9ucyB8IGhhc1Blcm1pc3Npb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvY2tMZXZlbC5nZXQoJ3N0b2NrTG9jYXRpb25OYW1lJyk/LnZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGFsb2cuc3RvY2stYWxsb2NhdGVkJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b2NrTGV2ZWwuZ2V0KCdzdG9ja0FsbG9jYXRlZCcpPy52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVudXNlZFN0b2NrTG9jYXRpb24kIHwgYXN5bmMgYXMgdW51c2VkU3RvY2tMb2NhdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVudXNlZFN0b2NrTG9jYXRpb25zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIG10LTJcIiB2ZHJEcm9wZG93blRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIj48L2Nsci1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtc3RvY2stbG9jYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCI+PC9jbHItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0b2NrTG9jYXRpb24gb2YgdW51c2VkU3RvY2tMb2NhdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFN0b2NrTG9jYXRpb24oc3RvY2tMb2NhdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJtYXAtbWFya2VyXCI+PC9jbHItaWNvbj4ge3sgc3RvY2tMb2NhdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxuICAgIDwvdmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cbjwvZm9ybT5cbiJdfQ==
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@vendure/admin-ui/core";
|
|
5
|
+
import * as i3 from "@ngx-translate/core";
|
|
6
|
+
export class VariantPriceStrategyDetailComponent {
|
|
7
|
+
calculatedPriceDiffersFromInputPrice() {
|
|
8
|
+
const defaultPrice = this.variant.prices.find(p => p.currencyCode === this.channelDefaultCurrencyCode) ??
|
|
9
|
+
this.variant.prices[0];
|
|
10
|
+
if (!defaultPrice) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (this.channelPriceIncludesTax) {
|
|
14
|
+
return this.variant.priceWithTax !== defaultPrice.price;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return this.variant.price !== defaultPrice.price;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: VariantPriceStrategyDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: VariantPriceStrategyDetailComponent, selector: "vdr-variant-price-strategy-detail", inputs: { channelPriceIncludesTax: "channelPriceIncludesTax", variant: "variant", channelDefaultCurrencyCode: "channelDefaultCurrencyCode" }, ngImport: i0, template: "<div *ngIf=\"calculatedPriceDiffersFromInputPrice()\" class=\"price-strategy-detail\">\n <vdr-form-item\n [label]=\"'catalog.calculated-price' | translate\"\n [tooltip]=\"'catalog.calculated-price-tooltip' | translate\"\n for=\"price\"\n >\n </vdr-form-item>\n <div class=\"form-grid mt-2\">\n <vdr-form-item [label]=\"'common.price' | translate\">\n {{ variant.price | localeCurrency : variant.currencyCode }}\n </vdr-form-item>\n <vdr-form-item [label]=\"'common.price-with-tax' | translate\">\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\n </vdr-form-item>\n </div>\n</div>\n", styles: [":host{display:block}.price-strategy-detail{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormItemComponent, selector: "vdr-form-item", inputs: ["label", "tooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: VariantPriceStrategyDetailComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{ selector: 'vdr-variant-price-strategy-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"calculatedPriceDiffersFromInputPrice()\" class=\"price-strategy-detail\">\n <vdr-form-item\n [label]=\"'catalog.calculated-price' | translate\"\n [tooltip]=\"'catalog.calculated-price-tooltip' | translate\"\n for=\"price\"\n >\n </vdr-form-item>\n <div class=\"form-grid mt-2\">\n <vdr-form-item [label]=\"'common.price' | translate\">\n {{ variant.price | localeCurrency : variant.currencyCode }}\n </vdr-form-item>\n <vdr-form-item [label]=\"'common.price-with-tax' | translate\">\n {{ variant.priceWithTax | localeCurrency : variant.currencyCode }}\n </vdr-form-item>\n </div>\n</div>\n", styles: [":host{display:block}.price-strategy-detail{margin-top:calc(var(--space-unit) * 2);padding-top:calc(var(--space-unit) * 2);border-top:1px solid var(--color-weight-150)}\n"] }]
|
|
26
|
+
}], propDecorators: { channelPriceIncludesTax: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], variant: [{
|
|
29
|
+
type: Input
|
|
30
|
+
}], channelDefaultCurrencyCode: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}] } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudC1wcmljZS1zdHJhdGVneS1kZXRhaWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3ZhcmlhbnQtcHJpY2Utc3RyYXRlZ3ktZGV0YWlsL3ZhcmlhbnQtcHJpY2Utc3RyYXRlZ3ktZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy92YXJpYW50LXByaWNlLXN0cmF0ZWd5LWRldGFpbC92YXJpYW50LXByaWNlLXN0cmF0ZWd5LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFZMUUsTUFBTSxPQUFPLG1DQUFtQztJQUs1QyxvQ0FBb0M7UUFDaEMsTUFBTSxZQUFZLEdBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDakYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQzNEO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxLQUFLLENBQUM7U0FDcEQ7SUFDTCxDQUFDOzhHQWpCUSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyx1TkNaaEQsa3JCQWdCQTs7MkZESmEsbUNBQW1DO2tCQU4vQyxTQUFTOytCQUNJLG1DQUFtQyxtQkFHNUIsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDdXJyZW5jeUNvZGUsXG4gICAgUHJvZHVjdFZhcmlhbnREZXRhaWxRdWVyeVByb2R1Y3RWYXJpYW50RnJhZ21lbnRGcmFnbWVudCxcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmRyLXZhcmlhbnQtcHJpY2Utc3RyYXRlZ3ktZGV0YWlsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdmFyaWFudC1wcmljZS1zdHJhdGVneS1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3ZhcmlhbnQtcHJpY2Utc3RyYXRlZ3ktZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFZhcmlhbnRQcmljZVN0cmF0ZWd5RGV0YWlsQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBjaGFubmVsUHJpY2VJbmNsdWRlc1RheDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB2YXJpYW50OiBQcm9kdWN0VmFyaWFudERldGFpbFF1ZXJ5UHJvZHVjdFZhcmlhbnRGcmFnbWVudEZyYWdtZW50O1xuICAgIEBJbnB1dCgpIGNoYW5uZWxEZWZhdWx0Q3VycmVuY3lDb2RlOiBDdXJyZW5jeUNvZGU7XG5cbiAgICBjYWxjdWxhdGVkUHJpY2VEaWZmZXJzRnJvbUlucHV0UHJpY2UoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRQcmljZSA9XG4gICAgICAgICAgICB0aGlzLnZhcmlhbnQucHJpY2VzLmZpbmQocCA9PiBwLmN1cnJlbmN5Q29kZSA9PT0gdGhpcy5jaGFubmVsRGVmYXVsdEN1cnJlbmN5Q29kZSkgPz9cbiAgICAgICAgICAgIHRoaXMudmFyaWFudC5wcmljZXNbMF07XG4gICAgICAgIGlmICghZGVmYXVsdFByaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2hhbm5lbFByaWNlSW5jbHVkZXNUYXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhcmlhbnQucHJpY2VXaXRoVGF4ICE9PSBkZWZhdWx0UHJpY2UucHJpY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YXJpYW50LnByaWNlICE9PSBkZWZhdWx0UHJpY2UucHJpY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiY2FsY3VsYXRlZFByaWNlRGlmZmVyc0Zyb21JbnB1dFByaWNlKClcIiBjbGFzcz1cInByaWNlLXN0cmF0ZWd5LWRldGFpbFwiPlxuICAgIDx2ZHItZm9ybS1pdGVtXG4gICAgICAgIFtsYWJlbF09XCInY2F0YWxvZy5jYWxjdWxhdGVkLXByaWNlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cIidjYXRhbG9nLmNhbGN1bGF0ZWQtcHJpY2UtdG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBmb3I9XCJwcmljZVwiXG4gICAgPlxuICAgIDwvdmRyLWZvcm0taXRlbT5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkIG10LTJcIj5cbiAgICAgICAgPHZkci1mb3JtLWl0ZW0gW2xhYmVsXT1cIidjb21tb24ucHJpY2UnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICB7eyB2YXJpYW50LnByaWNlIHwgbG9jYWxlQ3VycmVuY3kgOiB2YXJpYW50LmN1cnJlbmN5Q29kZSB9fVxuICAgICAgICA8L3Zkci1mb3JtLWl0ZW0+XG4gICAgICAgIDx2ZHItZm9ybS1pdGVtIFtsYWJlbF09XCInY29tbW9uLnByaWNlLXdpdGgtdGF4JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAge3sgdmFyaWFudC5wcmljZVdpdGhUYXggfCBsb2NhbGVDdXJyZW5jeSA6IHZhcmlhbnQuY3VycmVuY3lDb2RlIH19XG4gICAgICAgIDwvdmRyLWZvcm0taXRlbT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|