@vendure/admin-ui 2.2.5 → 2.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +9 -0
  2. package/catalog/components/product-detail/product-detail.component.d.ts +1 -4
  3. package/catalog/components/product-variant-list/product-variant-list.component.d.ts +1 -1
  4. package/catalog/providers/product-detail/product-detail.service.d.ts +1 -3
  5. package/core/common/version.d.ts +1 -1
  6. package/core/extension/components/angular-route.component.d.ts +20 -0
  7. package/core/extension/register-data-table-component.d.ts +1 -1
  8. package/core/extension/register-route-component.d.ts +1 -1
  9. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +1 -9
  10. package/core/shared/components/order-state-label/order-state-label.component.d.ts +1 -1
  11. package/core/shared/components/timeline-entry/timeline-entry.component.d.ts +2 -1
  12. package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +1 -1
  13. package/core/shared/providers/routing/can-deactivate-detail-guard.d.ts +2 -4
  14. package/esm2022/catalog/catalog.module.mjs +1 -1
  15. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +2 -2
  16. package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +4 -1
  17. package/esm2022/catalog/components/generate-product-variants/generate-product-variants.component.mjs +3 -1
  18. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +1 -14
  19. package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +6 -2
  20. package/esm2022/catalog/providers/product-detail/product-detail.service.mjs +43 -27
  21. package/esm2022/core/common/version.mjs +2 -2
  22. package/esm2022/core/extension/components/angular-route.component.mjs +51 -6
  23. package/esm2022/core/extension/register-data-table-component.mjs +2 -2
  24. package/esm2022/core/shared/components/asset-file-input/asset-file-input.component.mjs +1 -1
  25. package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
  26. package/esm2022/core/shared/components/asset-picker-dialog/asset-picker-dialog.component.mjs +2 -2
  27. package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +33 -33
  28. package/esm2022/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +2 -10
  29. package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
  30. package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +5 -3
  31. package/esm2022/core/shared/components/zone-selector/zone-selector.component.mjs +13 -13
  32. package/esm2022/core/shared/providers/routing/can-deactivate-detail-guard.mjs +6 -8
  33. package/esm2022/customer/components/customer-history/customer-history-entry-host.component.mjs +1 -1
  34. package/esm2022/customer/components/customer-history/customer-history.component.mjs +3 -3
  35. package/esm2022/customer/customer.routes.mjs +2 -2
  36. package/esm2022/marketing/marketing.module.mjs +1 -1
  37. package/esm2022/order/components/order-history/order-history-entry-host.component.mjs +1 -1
  38. package/esm2022/order/components/order-history/order-history.component.mjs +3 -3
  39. package/esm2022/react/react-components/RichTextEditor.mjs +8 -4
  40. package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +8 -8
  41. package/fesm2022/vendure-admin-ui-catalog.mjs +53 -41
  42. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  43. package/fesm2022/vendure-admin-ui-core.mjs +112 -73
  44. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  45. package/fesm2022/vendure-admin-ui-customer.mjs +4 -4
  46. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  47. package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
  48. package/fesm2022/vendure-admin-ui-order.mjs +3 -3
  49. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  50. package/fesm2022/vendure-admin-ui-react.mjs +7 -3
  51. package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
  52. package/fesm2022/vendure-admin-ui-settings.mjs +7 -7
  53. package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
  54. package/marketing/components/promotion-list/promotion-list.component.d.ts +1 -1
  55. package/package.json +2 -2
  56. package/react/react-components/RichTextEditor.d.ts +2 -0
  57. package/static/styles/component/prosemirror.scss +511 -0
  58. package/static/styles/styles.scss +2 -0
@@ -165,11 +165,11 @@ export class OrderHistoryComponent {
165
165
  this.noteIsPrivate = true;
166
166
  }
167
167
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OrderHistoryComponent, deps: [{ token: i1.HistoryEntryComponentService }], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OrderHistoryComponent, selector: "vdr-order-history", inputs: { order: "order", history: "history" }, outputs: { addNote: "addNote", updateNote: "updateNote", deleteNote: "deleteNote" }, ngImport: i0, template: "<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <ng-container *ngFor=\"let entry of history\">\r\n <vdr-order-history-entry-host\r\n *ngIf=\"hasCustomComponent(entry.type); else defaultComponents\"\r\n [order]=\"order\"\r\n [entry]=\"entry\"\r\n [expanded]=\"expanded\"\r\n (expandClick)=\"expanded = !expanded\"\r\n ></vdr-order-history-entry-host>\r\n <ng-template #defaultComponents>\r\n <vdr-timeline-entry\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <div\r\n class=\"flex items-center\"\r\n *ngIf=\"getModification(entry.data.modificationId) as modification\"\r\n >\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{\r\n modification.priceChange | localeCurrency : order.currencyCode\r\n }}</strong>\r\n <vdr-chip colorType=\"success\" class=\"mx-1\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" class=\"mx-1\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip *ngIf=\"getPayment(entry) as payment\" class=\"mr-1\">{{\r\n payment.amount | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularRefundTransition\">\r\n <ng-container *ngIf=\"getRefund(entry) as refund\">\r\n <div class=\"title\">{{ 'order.refund' | translate }} #{{ refund.id }}</div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip colorType=\"warning\" class=\"mr-1\">{{\r\n refund.total | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list\r\n [items]=\"getCancelledItems(refund.lines)\"\r\n ></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #regularRefundTransition>\r\n {{\r\n 'order.history-refund-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: entry.data.refundId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{\r\n 'order.history-items-cancelled'\r\n | translate : { count: getCancelledQuantity(entry) }\r\n }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry.data.lines) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"button-small ml-1\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CUSTOMER_UPDATED\">\r\n <div class=\"title\">\r\n {{\r\n 'order.history-customer-updated'\r\n | translate : { newCustomerName: entry.data.newCustomerName }\r\n }}\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.previous-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.previousCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"[\r\n '/customer',\r\n 'customers',\r\n entry.data.previousCustomerId\r\n ]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.previousCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.new-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.newCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/customer', 'customers', entry.data.newCustomerId]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.newCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"title\">\r\n {{ entry.type | translate }}\r\n </div>\r\n <vdr-history-entry-detail *ngIf=\"entry.data\">\r\n <vdr-object-tree [value]=\"entry.data\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n", styles: [":host{display:block}.entry-list{margin-inline-start:calc(var(--space-unit) * 2)}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}.visibility-select{display:flex;justify-content:space-between;align-items:baseline}.visibility-select .public{color:var(--color-warning-700)}.visibility-select .private{color:var(--color-success-700)}textarea.note{flex:1;height:36px;border-radius:3px;margin-inline-end:6px}.note-text{color:var(--color-grey-800);white-space:pre-wrap;max-width:580px}.cancelled-coupon-code{text-decoration:line-through}.note-visibility{text-transform:lowercase}.note-visibility.public{color:var(--color-warning-700)}.note-visibility.private{color:var(--color-success-700)}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.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: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select, vdr-currency-input" }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i1.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { kind: "component", type: i1.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }, { kind: "component", type: i1.TimelineEntryComponent, selector: "vdr-timeline-entry", inputs: ["displayType", "createdAt", "name", "featured", "iconShape", "isLast", "collapsed"], outputs: ["expandClick"] }, { kind: "component", type: i1.HistoryEntryDetailComponent, selector: "vdr-history-entry-detail" }, { kind: "component", type: i6.FulfillmentDetailComponent, selector: "vdr-fulfillment-detail", inputs: ["fulfillmentId", "order"] }, { kind: "component", type: i7.PaymentDetailComponent, selector: "vdr-payment-detail", inputs: ["payment", "currencyCode"] }, { kind: "component", type: i8.SimpleItemListComponent, selector: "vdr-simple-item-list", inputs: ["items"] }, { kind: "component", type: i9.ModificationDetailComponent, selector: "vdr-modification-detail", inputs: ["order", "modification"] }, { kind: "component", type: i10.OrderHistoryEntryHostComponent, selector: "vdr-order-history-entry-host", inputs: ["entry", "order", "expanded"], outputs: ["expandClick"], exportAs: ["historyEntry"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
168
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: OrderHistoryComponent, selector: "vdr-order-history", inputs: { order: "order", history: "history" }, outputs: { addNote: "addNote", updateNote: "updateNote", deleteNote: "deleteNote" }, ngImport: i0, template: "<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\" [isFirst]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <ng-container *ngFor=\"let entry of history\">\r\n <vdr-order-history-entry-host\r\n *ngIf=\"hasCustomComponent(entry.type); else defaultComponents\"\r\n [order]=\"order\"\r\n [entry]=\"entry\"\r\n [expanded]=\"expanded\"\r\n (expandClick)=\"expanded = !expanded\"\r\n ></vdr-order-history-entry-host>\r\n <ng-template #defaultComponents>\r\n <vdr-timeline-entry\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <div\r\n class=\"flex items-center\"\r\n *ngIf=\"getModification(entry.data.modificationId) as modification\"\r\n >\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{\r\n modification.priceChange | localeCurrency : order.currencyCode\r\n }}</strong>\r\n <vdr-chip colorType=\"success\" class=\"mx-1\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" class=\"mx-1\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip *ngIf=\"getPayment(entry) as payment\" class=\"mr-1\">{{\r\n payment.amount | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularRefundTransition\">\r\n <ng-container *ngIf=\"getRefund(entry) as refund\">\r\n <div class=\"title\">{{ 'order.refund' | translate }} #{{ refund.id }}</div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip colorType=\"warning\" class=\"mr-1\">{{\r\n refund.total | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list\r\n [items]=\"getCancelledItems(refund.lines)\"\r\n ></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #regularRefundTransition>\r\n {{\r\n 'order.history-refund-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: entry.data.refundId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{\r\n 'order.history-items-cancelled'\r\n | translate : { count: getCancelledQuantity(entry) }\r\n }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry.data.lines) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"button-small ml-1\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CUSTOMER_UPDATED\">\r\n <div class=\"title\">\r\n {{\r\n 'order.history-customer-updated'\r\n | translate : { newCustomerName: entry.data.newCustomerName }\r\n }}\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.previous-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.previousCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"[\r\n '/customer',\r\n 'customers',\r\n entry.data.previousCustomerId\r\n ]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.previousCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.new-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.newCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/customer', 'customers', entry.data.newCustomerId]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.newCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"title\">\r\n {{ entry.type | translate }}\r\n </div>\r\n <vdr-history-entry-detail *ngIf=\"entry.data\">\r\n <vdr-object-tree [value]=\"entry.data\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n", styles: [":host{display:block}.entry-list{margin-inline-start:calc(var(--space-unit) * 2)}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}.visibility-select{display:flex;justify-content:space-between;align-items:baseline}.visibility-select .public{color:var(--color-warning-700)}.visibility-select .private{color:var(--color-success-700)}textarea.note{flex:1;height:36px;border-radius:3px;margin-inline-end:6px}.note-text{color:var(--color-grey-800);white-space:pre-wrap;max-width:580px}.cancelled-coupon-code{text-decoration:line-through}.note-visibility{text-transform:lowercase}.note-visibility.public{color:var(--color-warning-700)}.note-visibility.private{color:var(--color-success-700)}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i2.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.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: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "directive", type: i1.FormFieldControlDirective, selector: "input, textarea, select, vdr-currency-input" }, { kind: "component", type: i1.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i1.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i1.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i1.LabeledDataComponent, selector: "vdr-labeled-data", inputs: ["label"] }, { kind: "component", type: i1.ObjectTreeComponent, selector: "vdr-object-tree", inputs: ["value", "isArrayItem"] }, { kind: "component", type: i1.TimelineEntryComponent, selector: "vdr-timeline-entry", inputs: ["displayType", "createdAt", "name", "featured", "iconShape", "isFirst", "isLast", "collapsed"], outputs: ["expandClick"] }, { kind: "component", type: i1.HistoryEntryDetailComponent, selector: "vdr-history-entry-detail" }, { kind: "component", type: i6.FulfillmentDetailComponent, selector: "vdr-fulfillment-detail", inputs: ["fulfillmentId", "order"] }, { kind: "component", type: i7.PaymentDetailComponent, selector: "vdr-payment-detail", inputs: ["payment", "currencyCode"] }, { kind: "component", type: i8.SimpleItemListComponent, selector: "vdr-simple-item-list", inputs: ["items"] }, { kind: "component", type: i9.ModificationDetailComponent, selector: "vdr-modification-detail", inputs: ["order", "modification"] }, { kind: "component", type: i10.OrderHistoryEntryHostComponent, selector: "vdr-order-history-entry-host", inputs: ["entry", "order", "expanded"], outputs: ["expandClick"], exportAs: ["historyEntry"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i1.LocaleCurrencyPipe, name: "localeCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
169
169
  }
170
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: OrderHistoryComponent, decorators: [{
171
171
  type: Component,
172
- args: [{ selector: 'vdr-order-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <ng-container *ngFor=\"let entry of history\">\r\n <vdr-order-history-entry-host\r\n *ngIf=\"hasCustomComponent(entry.type); else defaultComponents\"\r\n [order]=\"order\"\r\n [entry]=\"entry\"\r\n [expanded]=\"expanded\"\r\n (expandClick)=\"expanded = !expanded\"\r\n ></vdr-order-history-entry-host>\r\n <ng-template #defaultComponents>\r\n <vdr-timeline-entry\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <div\r\n class=\"flex items-center\"\r\n *ngIf=\"getModification(entry.data.modificationId) as modification\"\r\n >\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{\r\n modification.priceChange | localeCurrency : order.currencyCode\r\n }}</strong>\r\n <vdr-chip colorType=\"success\" class=\"mx-1\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" class=\"mx-1\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip *ngIf=\"getPayment(entry) as payment\" class=\"mr-1\">{{\r\n payment.amount | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularRefundTransition\">\r\n <ng-container *ngIf=\"getRefund(entry) as refund\">\r\n <div class=\"title\">{{ 'order.refund' | translate }} #{{ refund.id }}</div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip colorType=\"warning\" class=\"mr-1\">{{\r\n refund.total | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list\r\n [items]=\"getCancelledItems(refund.lines)\"\r\n ></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #regularRefundTransition>\r\n {{\r\n 'order.history-refund-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: entry.data.refundId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{\r\n 'order.history-items-cancelled'\r\n | translate : { count: getCancelledQuantity(entry) }\r\n }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry.data.lines) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"button-small ml-1\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CUSTOMER_UPDATED\">\r\n <div class=\"title\">\r\n {{\r\n 'order.history-customer-updated'\r\n | translate : { newCustomerName: entry.data.newCustomerName }\r\n }}\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.previous-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.previousCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"[\r\n '/customer',\r\n 'customers',\r\n entry.data.previousCustomerId\r\n ]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.previousCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.new-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.newCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/customer', 'customers', entry.data.newCustomerId]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.newCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"title\">\r\n {{ entry.type | translate }}\r\n </div>\r\n <vdr-history-entry-detail *ngIf=\"entry.data\">\r\n <vdr-object-tree [value]=\"entry.data\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n", styles: [":host{display:block}.entry-list{margin-inline-start:calc(var(--space-unit) * 2)}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}.visibility-select{display:flex;justify-content:space-between;align-items:baseline}.visibility-select .public{color:var(--color-warning-700)}.visibility-select .private{color:var(--color-success-700)}textarea.note{flex:1;height:36px;border-radius:3px;margin-inline-end:6px}.note-text{color:var(--color-grey-800);white-space:pre-wrap;max-width:580px}.cancelled-coupon-code{text-decoration:line-through}.note-visibility{text-transform:lowercase}.note-visibility.public{color:var(--color-warning-700)}.note-visibility.private{color:var(--color-success-700)}\n"] }]
172
+ args: [{ selector: 'vdr-order-history', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\" [isFirst]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <ng-container *ngFor=\"let entry of history\">\r\n <vdr-order-history-entry-host\r\n *ngIf=\"hasCustomComponent(entry.type); else defaultComponents\"\r\n [order]=\"order\"\r\n [entry]=\"entry\"\r\n [expanded]=\"expanded\"\r\n (expandClick)=\"expanded = !expanded\"\r\n ></vdr-order-history-entry-host>\r\n <ng-template #defaultComponents>\r\n <vdr-timeline-entry\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <div\r\n class=\"flex items-center\"\r\n *ngIf=\"getModification(entry.data.modificationId) as modification\"\r\n >\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{\r\n modification.priceChange | localeCurrency : order.currencyCode\r\n }}</strong>\r\n <vdr-chip colorType=\"success\" class=\"mx-1\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" class=\"mx-1\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip *ngIf=\"getPayment(entry) as payment\" class=\"mr-1\">{{\r\n payment.amount | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularRefundTransition\">\r\n <ng-container *ngIf=\"getRefund(entry) as refund\">\r\n <div class=\"title\">{{ 'order.refund' | translate }} #{{ refund.id }}</div>\r\n <div class=\"flex items-center\">\r\n <vdr-chip colorType=\"warning\" class=\"mr-1\">{{\r\n refund.total | localeCurrency : order.currencyCode\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list\r\n [items]=\"getCancelledItems(refund.lines)\"\r\n ></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #regularRefundTransition>\r\n {{\r\n 'order.history-refund-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: entry.data.refundId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{\r\n 'order.history-items-cancelled'\r\n | translate : { count: getCancelledQuantity(entry) }\r\n }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry.data.lines) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate : { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"button-small ml-1\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CUSTOMER_UPDATED\">\r\n <div class=\"title\">\r\n {{\r\n 'order.history-customer-updated'\r\n | translate : { newCustomerName: entry.data.newCustomerName }\r\n }}\r\n </div>\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-history-entry-detail>\r\n <vdr-labeled-data [label]=\"'order.previous-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.previousCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"[\r\n '/customer',\r\n 'customers',\r\n entry.data.previousCustomerId\r\n ]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.previousCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.new-customer' | translate\">\r\n <a\r\n *ngIf=\"entry.data.newCustomerId\"\r\n class=\"button-ghost\"\r\n [routerLink]=\"['/customer', 'customers', entry.data.newCustomerId]\"\r\n >\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon>\r\n <span>{{ entry.data.newCustomerName }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div class=\"title\">\r\n {{ entry.type | translate }}\r\n </div>\r\n <vdr-history-entry-detail *ngIf=\"entry.data\">\r\n <vdr-object-tree [value]=\"entry.data\"></vdr-object-tree>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n", styles: [":host{display:block}.entry-list{margin-inline-start:calc(var(--space-unit) * 2)}.note-entry{display:flex;align-items:center}.note-entry .note{flex:1}.note-entry button{margin:0}.visibility-select{display:flex;justify-content:space-between;align-items:baseline}.visibility-select .public{color:var(--color-warning-700)}.visibility-select .private{color:var(--color-success-700)}textarea.note{flex:1;height:36px;border-radius:3px;margin-inline-end:6px}.note-text{color:var(--color-grey-800);white-space:pre-wrap;max-width:580px}.cancelled-coupon-code{text-decoration:line-through}.note-visibility{text-transform:lowercase}.note-visibility.public{color:var(--color-warning-700)}.note-visibility.private{color:var(--color-success-700)}\n"] }]
173
173
  }], ctorParameters: () => [{ type: i1.HistoryEntryComponentService }], propDecorators: { order: [{
174
174
  type: Input
175
175
  }], history: [{
@@ -181,4 +181,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
181
181
  }], deleteNote: [{
182
182
  type: Output
183
183
  }] } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWhpc3Rvcnkvb3JkZXItaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWhpc3Rvcnkvb3JkZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFFSCxnQkFBZ0IsR0FJbkIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFoQyxNQUFNLE9BQU8scUJBQXFCO0lBVzlCLFlBQW9CLDRCQUEwRDtRQUExRCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBUnBFLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUNsRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDdEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQ2hFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ1IsU0FBSSxHQUFHLGdCQUFnQixDQUFDO0lBRWdELENBQUM7SUFFbEYsa0JBQWtCLENBQUMsSUFBWTtRQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBMkI7UUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7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RUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUEyQjtRQUMvQixNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDckMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7OEdBbExRLHFCQUFxQjtrR0FBckIscUJBQXFCLDhMQ2ZsQyw0b2xCQW1UQTs7MkZEcFNhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTtpR0FHdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgSGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZSxcclxuICAgIEhpc3RvcnlFbnRyeVR5cGUsXHJcbiAgICBPcmRlckRldGFpbEZyYWdtZW50LFxyXG4gICAgVGltZWxpbmVEaXNwbGF5VHlwZSxcclxuICAgIFRpbWVsaW5lSGlzdG9yeUVudHJ5LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1vcmRlci1oaXN0b3J5JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJIaXN0b3J5Q29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50O1xyXG4gICAgQElucHV0KCkgaGlzdG9yeTogVGltZWxpbmVIaXN0b3J5RW50cnlbXTtcclxuICAgIEBPdXRwdXQoKSBhZGROb3RlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5vdGU6IHN0cmluZzsgaXNQdWJsaWM6IGJvb2xlYW4gfT4oKTtcclxuICAgIEBPdXRwdXQoKSB1cGRhdGVOb3RlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW1lbGluZUhpc3RvcnlFbnRyeT4oKTtcclxuICAgIEBPdXRwdXQoKSBkZWxldGVOb3RlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW1lbGluZUhpc3RvcnlFbnRyeT4oKTtcclxuICAgIG5vdGUgPSAnJztcclxuICAgIG5vdGVJc1ByaXZhdGUgPSB0cnVlO1xyXG4gICAgZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHJlYWRvbmx5IHR5cGUgPSBIaXN0b3J5RW50cnlUeXBlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZTogSGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZSkge31cclxuXHJcbiAgICBoYXNDdXN0b21Db21wb25lbnQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5oaXN0b3J5RW50cnlDb21wb25lbnRTZXJ2aWNlLmdldENvbXBvbmVudCh0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VHlwZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBUaW1lbGluZURpc3BsYXlUeXBlIHtcclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnRGVsaXZlcmVkJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX0ZVTEZJTExNRU5UX1RSQU5TSVRJT04pIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTikge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0RlY2xpbmVkJyB8fCBlbnRyeS5kYXRhLnRvID09PSAnQ2FuY2VsbGVkJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfQ0FOQ0VMTEFUSU9OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGltZWxpbmVJY29uKGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSkge1xyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1NUQVRFX1RSQU5TSVRJT04pIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWydzdWNjZXNzLXN0YW5kYXJkJywgJ2lzLXNvbGlkJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdDYW5jZWxsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Jhbic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfUEFZTUVOVF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY3JlZGl0LWNhcmQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY3JlZGl0LWNhcmQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX05PVEUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdub3RlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfTU9ESUZJRUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwZW5jaWwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9DVVNUT01FUl9VUERBVEVEKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnc3dpdGNoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlRfVFJBTlNJVElPTikge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ1NoaXBwZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RydWNrJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0RlbGl2ZXJlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndHJ1Y2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzRmVhdHVyZWQoZW50cnk6IFRpbWVsaW5lSGlzdG9yeUVudHJ5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCcgfHxcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRhdGEudG8gPT09ICdTZXR0bGVkJztcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcgfHwgZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCc7XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9GVUxGSUxMTUVOVF9UUkFOU0lUSU9OOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnIHx8IGVudHJ5LmRhdGEudG8gPT09ICdTaGlwcGVkJztcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX05PVEU6XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9NT0RJRklFRDpcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX0NVU1RPTUVSX1VQREFURUQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RnVsZmlsbG1lbnQoXHJcbiAgICAgICAgZW50cnk6IFRpbWVsaW5lSGlzdG9yeUVudHJ5LFxyXG4gICAgKTogTm9uTnVsbGFibGU8T3JkZXJEZXRhaWxGcmFnbWVudFsnZnVsZmlsbG1lbnRzJ10+W251bWJlcl0gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlQgfHxcclxuICAgICAgICAgICAgICAgIGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlRfVFJBTlNJVElPTikgJiZcclxuICAgICAgICAgICAgdGhpcy5vcmRlci5mdWxmaWxsbWVudHNcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXIuZnVsZmlsbG1lbnRzLmZpbmQoZiA9PiBmLmlkID09PSBlbnRyeS5kYXRhLmZ1bGZpbGxtZW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXltZW50KFxyXG4gICAgICAgIGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSxcclxuICAgICk6IE5vbk51bGxhYmxlPE9yZGVyRGV0YWlsRnJhZ21lbnRbJ3BheW1lbnRzJ10+W251bWJlcl0gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTiAmJiB0aGlzLm9yZGVyLnBheW1lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yZGVyLnBheW1lbnRzLmZpbmQocCA9PiBwLmlkID09PSBlbnRyeS5kYXRhLnBheW1lbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJlZnVuZChcclxuICAgICAgICBlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnksXHJcbiAgICApOiBOb25OdWxsYWJsZTxPcmRlckRldGFpbEZyYWdtZW50WydwYXltZW50cyddPltudW1iZXJdWydyZWZ1bmRzJ11bbnVtYmVyXSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfUkVGVU5EX1RSQU5TSVRJT04gJiYgdGhpcy5vcmRlci5wYXltZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxSZWZ1bmRzID0gdGhpcy5vcmRlci5wYXltZW50cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAocmVmdW5kcywgcGF5bWVudCkgPT4gcmVmdW5kcy5jb25jYXQocGF5bWVudC5yZWZ1bmRzKSxcclxuICAgICAgICAgICAgICAgIFtdIGFzIE5vbk51bGxhYmxlPE9yZGVyRGV0YWlsRnJhZ21lbnRbJ3BheW1lbnRzJ10+W251bWJlcl1bJ3JlZnVuZHMnXSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbFJlZnVuZHMuZmluZChyID0+IHIuaWQgPT09IGVudHJ5LmRhdGEucmVmdW5kSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDYW5jZWxsZWRRdWFudGl0eShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBlbnRyeS5kYXRhLmxpbmVzLnJlZHVjZSgodG90YWwsIGxpbmUpID0+IHRvdGFsICsgbGluZS5xdWFudGl0eSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2FuY2VsbGVkSXRlbXMoXHJcbiAgICAgICAgY2FuY2VsbGF0aW9uTGluZXM6IEFycmF5PHsgb3JkZXJMaW5lSWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlciB9PixcclxuICAgICk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBxdWFudGl0eTogbnVtYmVyIH0+IHtcclxuICAgICAgICBjb25zdCBpdGVtTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5vcmRlci5saW5lcykge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsYXRpb25MaW5lID0gY2FuY2VsbGF0aW9uTGluZXMuZmluZChsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoY2FuY2VsbGF0aW9uTGluZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBpdGVtTWFwLmdldChsaW5lLnByb2R1Y3RWYXJpYW50Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbU1hcC5zZXQobGluZS5wcm9kdWN0VmFyaWFudC5uYW1lLCBjYW5jZWxsYXRpb25MaW5lLnF1YW50aXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpdGVtTWFwLmVudHJpZXMoKSkubWFwKChbbmFtZSwgcXVhbnRpdHldKSA9PiAoeyBuYW1lLCBxdWFudGl0eSB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpY2F0aW9uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5tb2RpZmljYXRpb25zLmZpbmQobSA9PiBtLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHsgYWRtaW5pc3RyYXRvciB9ID0gZW50cnk7XHJcbiAgICAgICAgaWYgKGFkbWluaXN0cmF0b3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2FkbWluaXN0cmF0b3IuZmlyc3ROYW1lfSAke2FkbWluaXN0cmF0b3IubGFzdE5hbWV9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21lciA9IHRoaXMub3JkZXIuY3VzdG9tZXI7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21lcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2N1c3RvbWVyLmZpcnN0TmFtZX0gJHtjdXN0b21lci5sYXN0TmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBhZGROb3RlVG9PcmRlcigpIHtcclxuICAgICAgICB0aGlzLmFkZE5vdGUuZW1pdCh7IG5vdGU6IHRoaXMubm90ZSwgaXNQdWJsaWM6ICF0aGlzLm5vdGVJc1ByaXZhdGUgfSk7XHJcbiAgICAgICAgdGhpcy5ub3RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5ub3RlSXNQcml2YXRlID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZW50cnktbGlzdFwiIFtjbGFzcy5leHBhbmRlZF09XCJleHBhbmRlZFwiPlxyXG4gICAgPHZkci10aW1lbGluZS1lbnRyeSBpY29uU2hhcGU9XCJub3RlXCIgZGlzcGxheVR5cGU9XCJtdXRlZFwiIFtmZWF0dXJlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGUtZW50cnlcIj5cclxuICAgICAgICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwibm90ZVwiIG5hbWU9XCJub3RlXCIgY2xhc3M9XCJub3RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgW2Rpc2FibGVkXT1cIiFub3RlXCIgKGNsaWNrKT1cImFkZE5vdGVUb09yZGVyKClcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uYWRkLW5vdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aXNpYmlsaXR5LXNlbGVjdFwiPlxyXG4gICAgICAgICAgICA8Y2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xyQ2hlY2tib3ggWyhuZ01vZGVsKV09XCJub3RlSXNQcml2YXRlXCIgLz5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnb3JkZXIubm90ZS1pcy1wcml2YXRlJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm90ZUlzUHJpdmF0ZVwiIGNsYXNzPVwicHJpdmF0ZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ29yZGVyLm5vdGUtb25seS12aXNpYmxlLXRvLWFkbWluaXN0cmF0b3JzJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIW5vdGVJc1ByaXZhdGVcIiBjbGFzcz1cInB1YmxpY1wiPlxyXG4gICAgICAgICAgICAgICAge3sgJ29yZGVyLm5vdGUtdmlzaWJsZS10by1jdXN0b21lcicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC92ZHItdGltZWxpbmUtZW50cnk+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBoaXN0b3J5XCI+XHJcbiAgICAgICAgPHZkci1vcmRlci1oaXN0b3J5LWVudHJ5LWhvc3RcclxuICAgICAgICAgICAgKm5nSWY9XCJoYXNDdXN0b21Db21wb25lbnQoZW50cnkudHlwZSk7IGVsc2UgZGVmYXVsdENvbXBvbmVudHNcIlxyXG4gICAgICAgICAgICBbb3JkZXJdPVwib3JkZXJcIlxyXG4gICAgICAgICAgICBbZW50cnldPVwiZW50cnlcIlxyXG4gICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAoZXhwYW5kQ2xpY2spPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIlxyXG4gICAgICAgID48L3Zkci1vcmRlci1oaXN0b3J5LWVudHJ5LWhvc3Q+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29tcG9uZW50cz5cclxuICAgICAgICAgICAgPHZkci10aW1lbGluZS1lbnRyeVxyXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlUeXBlXT1cImdldERpc3BsYXlUeXBlKGVudHJ5KVwiXHJcbiAgICAgICAgICAgICAgICBbaWNvblNoYXBlXT1cImdldFRpbWVsaW5lSWNvbihlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgW2NyZWF0ZWRBdF09XCJlbnRyeS5jcmVhdGVkQXRcIlxyXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiZ2V0TmFtZShlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgW2ZlYXR1cmVkXT1cImlzRmVhdHVyZWQoZW50cnkpXCJcclxuICAgICAgICAgICAgICAgIFtjb2xsYXBzZWRdPVwiIWV4cGFuZGVkICYmICFpc0ZlYXR1cmVkKGVudHJ5KVwiXHJcbiAgICAgICAgICAgICAgICAoZXhwYW5kQ2xpY2spPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJlbnRyeS50eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiZW50cnkuZGF0YS50byA9PT0gJ0RlbGl2ZXJlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LW9yZGVyLWZ1bGZpbGxlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LW9yZGVyLWNhbmNlbGxlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJlbnRyeS5kYXRhLnRvICE9PSAnQ2FuY2VsbGVkJyAmJiBlbnRyeS5kYXRhLnRvICE9PSAnRGVsaXZlcmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIuaGlzdG9yeS1vcmRlci10cmFuc2l0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgZnJvbTogZW50cnkuZGF0YS5mcm9tLCB0bzogZW50cnkuZGF0YS50byB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfTU9ESUZJRURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1vcmRlci1tb2RpZmllZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRNb2RpZmljYXRpb24oZW50cnkuZGF0YS5tb2RpZmljYXRpb25JZCkgYXMgbW9kaWZpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLm1vZGlmeS1vcmRlci1wcmljZS1kaWZmZXJlbmNlJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb24ucHJpY2VDaGFuZ2UgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCBjb2xvclR5cGU9XCJzdWNjZXNzXCIgY2xhc3M9XCJteC0xXCIgKm5nSWY9XCJtb2RpZmljYXRpb24uaXNTZXR0bGVkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIubW9kaWZpY2F0aW9uLXNldHRsZWQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgY29sb3JUeXBlPVwiZXJyb3JcIiBjbGFzcz1cIm14LTFcIiAqbmdJZj1cIiFtb2RpZmljYXRpb24uaXNTZXR0bGVkXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIubW9kaWZpY2F0aW9uLW5vdC1zZXR0bGVkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLW1vZGlmaWNhdGlvbi1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGlmaWNhdGlvbl09XCJtb2RpZmljYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1tb2RpZmljYXRpb24tZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfUEFZTUVOVF9UUkFOU0lUSU9OXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCc7IGVsc2UgcmVndWxhclBheW1lbnRUcmFuc2l0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1wYXltZW50LXNldHRsZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCAqbmdJZj1cImdldFBheW1lbnQoZW50cnkpIGFzIHBheW1lbnRcIiBjbGFzcz1cIm1yLTFcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXltZW50LmFtb3VudCB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWwgKm5nSWY9XCJnZXRQYXltZW50KGVudHJ5KSBhcyBwYXltZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcGF5bWVudC1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXltZW50XT1cInBheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29kZV09XCJvcmRlci5jdXJyZW5jeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcGF5bWVudC1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVndWxhclBheW1lbnRUcmFuc2l0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIuaGlzdG9yeS1wYXltZW50LXRyYW5zaXRpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGVudHJ5LmRhdGEuZnJvbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBlbnRyeS5kYXRhLnRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGdldFBheW1lbnQoZW50cnkpPy50cmFuc2FjdGlvbklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZS5PUkRFUl9SRUZVTkRfVFJBTlNJVElPTlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cnkuZGF0YS50byA9PT0gJ1NldHRsZWQnOyBlbHNlIHJlZ3VsYXJSZWZ1bmRUcmFuc2l0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UmVmdW5kKGVudHJ5KSBhcyByZWZ1bmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyAnb3JkZXIucmVmdW5kJyB8IHRyYW5zbGF0ZSB9fSAje3sgcmVmdW5kLmlkIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcCBjb2xvclR5cGU9XCJ3YXJuaW5nXCIgY2xhc3M9XCJtci0xXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnVuZC50b3RhbCB8IGxvY2FsZUN1cnJlbmN5IDogb3JkZXIuY3VycmVuY3lDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItbGFiZWxlZC1kYXRhIFtsYWJlbF09XCInb3JkZXIuY2FuY2VsbGF0aW9uLXJlYXNvbicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeS5kYXRhLnJlYXNvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGEgW2xhYmVsXT1cIidvcmRlci5jb250ZW50cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXNpbXBsZS1pdGVtLWxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImdldENhbmNlbGxlZEl0ZW1zKHJlZnVuZC5saW5lcylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1zaW1wbGUtaXRlbS1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFyUmVmdW5kVHJhbnNpdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3RvcnktcmVmdW5kLXRyYW5zaXRpb24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGVudHJ5LmRhdGEuZnJvbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvOiBlbnRyeS5kYXRhLnRvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVudHJ5LmRhdGEucmVmdW5kSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0NBTkNFTExBVElPTlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3RvcnktaXRlbXMtY2FuY2VsbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBjb3VudDogZ2V0Q2FuY2VsbGVkUXVhbnRpdHkoZW50cnkpIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbCAqbmdJZj1cImdldENhbmNlbGxlZEl0ZW1zKGVudHJ5LmRhdGEubGluZXMpIGFzIGl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLmNhbmNlbGxhdGlvbi1yZWFzb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkuZGF0YS5yZWFzb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItbGFiZWxlZC1kYXRhIFtsYWJlbF09XCInb3JkZXIuY29udGVudHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1zaW1wbGUtaXRlbS1saXN0IFtpdGVtc109XCJpdGVtc1wiPjwvdmRyLXNpbXBsZS1pdGVtLWxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLnNoaXBwaW5nLWNhbmNlbGxlZCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeS5kYXRhLnNoaXBwaW5nQ2FuY2VsbGVkIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfRlVMRklMTE1FTlRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmhpc3RvcnktZnVsZmlsbG1lbnQtY3JlYXRlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbCAqbmdJZj1cImdldEZ1bGZpbGxtZW50KGVudHJ5KSBhcyBmdWxmaWxsbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mdWxmaWxsbWVudC1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVsZmlsbG1lbnRJZF09XCJmdWxmaWxsbWVudC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1mdWxmaWxsbWVudC1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfRlVMRklMTE1FTlRfVFJBTlNJVElPTlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cnkuZGF0YS50byA9PT0gJ0RlbGl2ZXJlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LWZ1bGZpbGxtZW50LWRlbGl2ZXJlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnRyYWNraW5nLWNvZGUnIHwgdHJhbnNsYXRlIH19OiB7eyBnZXRGdWxmaWxsbWVudChlbnRyeSk/LnRyYWNraW5nQ29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJ5LmRhdGEudG8gPT09ICdTaGlwcGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmhpc3RvcnktZnVsZmlsbG1lbnQtc2hpcHBlZCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLnRyYWNraW5nLWNvZGUnIHwgdHJhbnNsYXRlIH19OiB7eyBnZXRGdWxmaWxsbWVudChlbnRyeSk/LnRyYWNraW5nQ29kZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJ5LmRhdGEudG8gIT09ICdEZWxpdmVyZWQnICYmIGVudHJ5LmRhdGEudG8gIT09ICdTaGlwcGVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JkZXIuaGlzdG9yeS1mdWxmaWxsbWVudC10cmFuc2l0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgZnJvbTogZW50cnkuZGF0YS5mcm9tLCB0bzogZW50cnkuZGF0YS50byB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbCAqbmdJZj1cImdldEZ1bGZpbGxtZW50KGVudHJ5KSBhcyBmdWxmaWxsbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mdWxmaWxsbWVudC1kZXRhaWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVsZmlsbG1lbnRJZF09XCJmdWxmaWxsbWVudC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1mdWxmaWxsbWVudC1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfTk9URVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGUtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZW50cnkuaXNQdWJsaWNcIiBjbGFzcz1cIm5vdGUtdmlzaWJpbGl0eSBwdWJsaWNcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnB1YmxpYycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFlbnRyeS5pc1B1YmxpY1wiIGNsYXNzPVwibm90ZS12aXNpYmlsaXR5IHByaXZhdGVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLnByaXZhdGUnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkuZGF0YS5ub3RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXNtYWxsIG1sLTFcIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImVsbGlwc2lzLXZlcnRpY2FsXCIgc2l6ZT1cIjEyXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRyRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlTm90ZS5lbWl0KGVudHJ5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISgnVXBkYXRlT3JkZXInIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlZGl0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZWRpdCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU5vdGUuZW1pdChlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoJ1VwZGF0ZU9yZGVyJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIiBjbGFzcz1cImlzLWRhbmdlclwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0NPVVBPTl9BUFBMSUVEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LWNvdXBvbi1jb2RlLWFwcGxpZWQnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy9tYXJrZXRpbmcnLCAncHJvbW90aW9ucycsIGVudHJ5LmRhdGEucHJvbW90aW9uSWRdXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5kYXRhLmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfQ09VUE9OX1JFTU9WRURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmhpc3RvcnktY291cG9uLWNvZGUtcmVtb3ZlZCcgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY2hpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwiY2FuY2VsbGVkLWNvdXBvbi1jb2RlXCI+e3sgZW50cnkuZGF0YS5jb3Vwb25Db2RlIH19PC9zcGFuPjwvdmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfQ1VTVE9NRVJfVVBEQVRFRFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3RvcnktY3VzdG9tZXItdXBkYXRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IG5ld0N1c3RvbWVyTmFtZTogZW50cnkuZGF0YS5uZXdDdXN0b21lck5hbWUgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90ZS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkuZGF0YS5ub3RlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLnByZXZpb3VzLWN1c3RvbWVyJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbnRyeS5kYXRhLnByZXZpb3VzQ3VzdG9tZXJJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1naG9zdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9jdXN0b21lcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbWVycycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZGF0YS5wcmV2aW91c0N1c3RvbWVySWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ1c2VyXCIgY2xhc3M9XCJpcy1zb2xpZFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbnRyeS5kYXRhLnByZXZpb3VzQ3VzdG9tZXJOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYXJyb3cgcmlnaHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItbGFiZWxlZC1kYXRhIFtsYWJlbF09XCInb3JkZXIubmV3LWN1c3RvbWVyJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbnRyeS5kYXRhLm5ld0N1c3RvbWVySWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZ2hvc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvY3VzdG9tZXInLCAnY3VzdG9tZXJzJywgZW50cnkuZGF0YS5uZXdDdXN0b21lcklkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInVzZXJcIiBjbGFzcz1cImlzLXNvbGlkXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGVudHJ5LmRhdGEubmV3Q3VzdG9tZXJOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiYXJyb3cgcmlnaHRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeS50eXBlIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWhpc3RvcnktZW50cnktZGV0YWlsICpuZ0lmPVwiZW50cnkuZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1vYmplY3QtdHJlZSBbdmFsdWVdPVwiZW50cnkuZGF0YVwiPjwvdmRyLW9iamVjdC10cmVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3Zkci10aW1lbGluZS1lbnRyeT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHZkci10aW1lbGluZS1lbnRyeSBbaXNMYXN0XT1cInRydWVcIiBbY3JlYXRlZEF0XT1cIm9yZGVyLmNyZWF0ZWRBdFwiIFtmZWF0dXJlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LW9yZGVyLWNyZWF0ZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3Zkci10aW1lbGluZS1lbnRyeT5cclxuPC9kaXY+XHJcbiJdfQ==
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWhpc3Rvcnkvb3JkZXItaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL29yZGVyL3NyYy9jb21wb25lbnRzL29yZGVyLWhpc3Rvcnkvb3JkZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFFSCxnQkFBZ0IsR0FJbkIsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFoQyxNQUFNLE9BQU8scUJBQXFCO0lBVzlCLFlBQW9CLDRCQUEwRDtRQUExRCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBUnBFLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUNsRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDdEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQ2hFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ1IsU0FBSSxHQUFHLGdCQUFnQixDQUFDO0lBRWdELENBQUM7SUFFbEYsa0JBQWtCLENBQUMsSUFBWTtRQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBMkI7UUFDdEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7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RUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUEyQjtRQUMvQixNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDckMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxPQUFPLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7OEdBbExRLHFCQUFxQjtrR0FBckIscUJBQXFCLDhMQ2ZsQywrcGxCQW1UQTs7MkZEcFNhLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDSSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTtpR0FHdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgSGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZSxcclxuICAgIEhpc3RvcnlFbnRyeVR5cGUsXHJcbiAgICBPcmRlckRldGFpbEZyYWdtZW50LFxyXG4gICAgVGltZWxpbmVEaXNwbGF5VHlwZSxcclxuICAgIFRpbWVsaW5lSGlzdG9yeUVudHJ5LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1vcmRlci1oaXN0b3J5JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9vcmRlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL29yZGVyLWhpc3RvcnkuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JkZXJIaXN0b3J5Q29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIG9yZGVyOiBPcmRlckRldGFpbEZyYWdtZW50O1xyXG4gICAgQElucHV0KCkgaGlzdG9yeTogVGltZWxpbmVIaXN0b3J5RW50cnlbXTtcclxuICAgIEBPdXRwdXQoKSBhZGROb3RlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5vdGU6IHN0cmluZzsgaXNQdWJsaWM6IGJvb2xlYW4gfT4oKTtcclxuICAgIEBPdXRwdXQoKSB1cGRhdGVOb3RlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW1lbGluZUhpc3RvcnlFbnRyeT4oKTtcclxuICAgIEBPdXRwdXQoKSBkZWxldGVOb3RlID0gbmV3IEV2ZW50RW1pdHRlcjxUaW1lbGluZUhpc3RvcnlFbnRyeT4oKTtcclxuICAgIG5vdGUgPSAnJztcclxuICAgIG5vdGVJc1ByaXZhdGUgPSB0cnVlO1xyXG4gICAgZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgIHJlYWRvbmx5IHR5cGUgPSBIaXN0b3J5RW50cnlUeXBlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZTogSGlzdG9yeUVudHJ5Q29tcG9uZW50U2VydmljZSkge31cclxuXHJcbiAgICBoYXNDdXN0b21Db21wb25lbnQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5oaXN0b3J5RW50cnlDb21wb25lbnRTZXJ2aWNlLmdldENvbXBvbmVudCh0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNwbGF5VHlwZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBUaW1lbGluZURpc3BsYXlUeXBlIHtcclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnRGVsaXZlcmVkJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX0ZVTEZJTExNRU5UX1RSQU5TSVRJT04pIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTikge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0RlY2xpbmVkJyB8fCBlbnRyeS5kYXRhLnRvID09PSAnQ2FuY2VsbGVkJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlcnJvcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfQ0FOQ0VMTEFUSU9OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnZGVmYXVsdCc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGltZWxpbmVJY29uKGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSkge1xyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1NUQVRFX1RSQU5TSVRJT04pIHtcclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gWydzdWNjZXNzLXN0YW5kYXJkJywgJ2lzLXNvbGlkJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVudHJ5LmRhdGEudG8gPT09ICdDYW5jZWxsZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Jhbic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfUEFZTUVOVF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY3JlZGl0LWNhcmQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OKSB7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnY3JlZGl0LWNhcmQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX05PVEUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdub3RlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfTU9ESUZJRUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdwZW5jaWwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9DVVNUT01FUl9VUERBVEVEKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnc3dpdGNoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlRfVFJBTlNJVElPTikge1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ1NoaXBwZWQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RydWNrJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZW50cnkuZGF0YS50byA9PT0gJ0RlbGl2ZXJlZCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndHJ1Y2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzRmVhdHVyZWQoZW50cnk6IFRpbWVsaW5lSGlzdG9yeUVudHJ5KTogYm9vbGVhbiB7XHJcbiAgICAgICAgc3dpdGNoIChlbnRyeS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9TVEFURV9UUkFOU0lUSU9OOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCcgfHxcclxuICAgICAgICAgICAgICAgICAgICBlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1JFRlVORF9UUkFOU0lUSU9OOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRhdGEudG8gPT09ICdTZXR0bGVkJztcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS5kYXRhLnRvID09PSAnU2V0dGxlZCcgfHwgZW50cnkuZGF0YS50byA9PT0gJ0NhbmNlbGxlZCc7XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9GVUxGSUxMTUVOVF9UUkFOU0lUSU9OOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnIHx8IGVudHJ5LmRhdGEudG8gPT09ICdTaGlwcGVkJztcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX05PVEU6XHJcbiAgICAgICAgICAgIGNhc2UgSGlzdG9yeUVudHJ5VHlwZS5PUkRFUl9NT0RJRklFRDpcclxuICAgICAgICAgICAgY2FzZSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX0NVU1RPTUVSX1VQREFURUQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RnVsZmlsbG1lbnQoXHJcbiAgICAgICAgZW50cnk6IFRpbWVsaW5lSGlzdG9yeUVudHJ5LFxyXG4gICAgKTogTm9uTnVsbGFibGU8T3JkZXJEZXRhaWxGcmFnbWVudFsnZnVsZmlsbG1lbnRzJ10+W251bWJlcl0gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlQgfHxcclxuICAgICAgICAgICAgICAgIGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfRlVMRklMTE1FTlRfVFJBTlNJVElPTikgJiZcclxuICAgICAgICAgICAgdGhpcy5vcmRlci5mdWxmaWxsbWVudHNcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JkZXIuZnVsZmlsbG1lbnRzLmZpbmQoZiA9PiBmLmlkID09PSBlbnRyeS5kYXRhLmZ1bGZpbGxtZW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXltZW50KFxyXG4gICAgICAgIGVudHJ5OiBUaW1lbGluZUhpc3RvcnlFbnRyeSxcclxuICAgICk6IE5vbk51bGxhYmxlPE9yZGVyRGV0YWlsRnJhZ21lbnRbJ3BheW1lbnRzJ10+W251bWJlcl0gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSBIaXN0b3J5RW50cnlUeXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTiAmJiB0aGlzLm9yZGVyLnBheW1lbnRzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yZGVyLnBheW1lbnRzLmZpbmQocCA9PiBwLmlkID09PSBlbnRyeS5kYXRhLnBheW1lbnRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFJlZnVuZChcclxuICAgICAgICBlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnksXHJcbiAgICApOiBOb25OdWxsYWJsZTxPcmRlckRldGFpbEZyYWdtZW50WydwYXltZW50cyddPltudW1iZXJdWydyZWZ1bmRzJ11bbnVtYmVyXSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEhpc3RvcnlFbnRyeVR5cGUuT1JERVJfUkVGVU5EX1RSQU5TSVRJT04gJiYgdGhpcy5vcmRlci5wYXltZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxSZWZ1bmRzID0gdGhpcy5vcmRlci5wYXltZW50cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAocmVmdW5kcywgcGF5bWVudCkgPT4gcmVmdW5kcy5jb25jYXQocGF5bWVudC5yZWZ1bmRzKSxcclxuICAgICAgICAgICAgICAgIFtdIGFzIE5vbk51bGxhYmxlPE9yZGVyRGV0YWlsRnJhZ21lbnRbJ3BheW1lbnRzJ10+W251bWJlcl1bJ3JlZnVuZHMnXSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFsbFJlZnVuZHMuZmluZChyID0+IHIuaWQgPT09IGVudHJ5LmRhdGEucmVmdW5kSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDYW5jZWxsZWRRdWFudGl0eShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBlbnRyeS5kYXRhLmxpbmVzLnJlZHVjZSgodG90YWwsIGxpbmUpID0+IHRvdGFsICsgbGluZS5xdWFudGl0eSwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2FuY2VsbGVkSXRlbXMoXHJcbiAgICAgICAgY2FuY2VsbGF0aW9uTGluZXM6IEFycmF5PHsgb3JkZXJMaW5lSWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlciB9PixcclxuICAgICk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBxdWFudGl0eTogbnVtYmVyIH0+IHtcclxuICAgICAgICBjb25zdCBpdGVtTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGhpcy5vcmRlci5saW5lcykge1xyXG4gICAgICAgICAgICBjb25zdCBjYW5jZWxsYXRpb25MaW5lID0gY2FuY2VsbGF0aW9uTGluZXMuZmluZChsID0+IGwub3JkZXJMaW5lSWQgPT09IGxpbmUuaWQpO1xyXG4gICAgICAgICAgICBpZiAoY2FuY2VsbGF0aW9uTGluZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBpdGVtTWFwLmdldChsaW5lLnByb2R1Y3RWYXJpYW50Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgaXRlbU1hcC5zZXQobGluZS5wcm9kdWN0VmFyaWFudC5uYW1lLCBjYW5jZWxsYXRpb25MaW5lLnF1YW50aXR5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShpdGVtTWFwLmVudHJpZXMoKSkubWFwKChbbmFtZSwgcXVhbnRpdHldKSA9PiAoeyBuYW1lLCBxdWFudGl0eSB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kaWZpY2F0aW9uKGlkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcmRlci5tb2RpZmljYXRpb25zLmZpbmQobSA9PiBtLmlkID09PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShlbnRyeTogVGltZWxpbmVIaXN0b3J5RW50cnkpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHsgYWRtaW5pc3RyYXRvciB9ID0gZW50cnk7XHJcbiAgICAgICAgaWYgKGFkbWluaXN0cmF0b3IpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2FkbWluaXN0cmF0b3IuZmlyc3ROYW1lfSAke2FkbWluaXN0cmF0b3IubGFzdE5hbWV9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXN0b21lciA9IHRoaXMub3JkZXIuY3VzdG9tZXI7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21lcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2N1c3RvbWVyLmZpcnN0TmFtZX0gJHtjdXN0b21lci5sYXN0TmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBhZGROb3RlVG9PcmRlcigpIHtcclxuICAgICAgICB0aGlzLmFkZE5vdGUuZW1pdCh7IG5vdGU6IHRoaXMubm90ZSwgaXNQdWJsaWM6ICF0aGlzLm5vdGVJc1ByaXZhdGUgfSk7XHJcbiAgICAgICAgdGhpcy5ub3RlID0gJyc7XHJcbiAgICAgICAgdGhpcy5ub3RlSXNQcml2YXRlID0gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZW50cnktbGlzdFwiIFtjbGFzcy5leHBhbmRlZF09XCJleHBhbmRlZFwiPlxyXG4gICAgPHZkci10aW1lbGluZS1lbnRyeSBpY29uU2hhcGU9XCJub3RlXCIgZGlzcGxheVR5cGU9XCJtdXRlZFwiIFtmZWF0dXJlZF09XCJ0cnVlXCIgW2lzRmlyc3RdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RlLWVudHJ5XCI+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cIm5vdGVcIiBuYW1lPVwibm90ZVwiIGNsYXNzPVwibm90ZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIFtkaXNhYmxlZF09XCIhbm90ZVwiIChjbGljayk9XCJhZGROb3RlVG9PcmRlcigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmFkZC1ub3RlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmlzaWJpbGl0eS1zZWxlY3RcIj5cclxuICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsckNoZWNrYm94IFsobmdNb2RlbCldPVwibm90ZUlzUHJpdmF0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ29yZGVyLm5vdGUtaXMtcHJpdmF0ZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm5vdGVJc1ByaXZhdGVcIiBjbGFzcz1cInByaXZhdGVcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5ub3RlLW9ubHktdmlzaWJsZS10by1hZG1pbmlzdHJhdG9ycycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFub3RlSXNQcml2YXRlXCIgY2xhc3M9XCJwdWJsaWNcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdvcmRlci5ub3RlLXZpc2libGUtdG8tY3VzdG9tZXInIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdmRyLXRpbWVsaW5lLWVudHJ5PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZW50cnkgb2YgaGlzdG9yeVwiPlxyXG4gICAgICAgIDx2ZHItb3JkZXItaGlzdG9yeS1lbnRyeS1ob3N0XHJcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzQ3VzdG9tQ29tcG9uZW50KGVudHJ5LnR5cGUpOyBlbHNlIGRlZmF1bHRDb21wb25lbnRzXCJcclxuICAgICAgICAgICAgW29yZGVyXT1cIm9yZGVyXCJcclxuICAgICAgICAgICAgW2VudHJ5XT1cImVudHJ5XCJcclxuICAgICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCJcclxuICAgICAgICAgICAgKGV4cGFuZENsaWNrKT1cImV4cGFuZGVkID0gIWV4cGFuZGVkXCJcclxuICAgICAgICA+PC92ZHItb3JkZXItaGlzdG9yeS1lbnRyeS1ob3N0PlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbXBvbmVudHM+XHJcbiAgICAgICAgICAgIDx2ZHItdGltZWxpbmUtZW50cnlcclxuICAgICAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCJnZXREaXNwbGF5VHlwZShlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgW2ljb25TaGFwZV09XCJnZXRUaW1lbGluZUljb24oZW50cnkpXCJcclxuICAgICAgICAgICAgICAgIFtjcmVhdGVkQXRdPVwiZW50cnkuY3JlYXRlZEF0XCJcclxuICAgICAgICAgICAgICAgIFtuYW1lXT1cImdldE5hbWUoZW50cnkpXCJcclxuICAgICAgICAgICAgICAgIFtmZWF0dXJlZF09XCJpc0ZlYXR1cmVkKGVudHJ5KVwiXHJcbiAgICAgICAgICAgICAgICBbY29sbGFwc2VkXT1cIiFleHBhbmRlZCAmJiAhaXNGZWF0dXJlZChlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgKGV4cGFuZENsaWNrKT1cImV4cGFuZGVkID0gIWV4cGFuZGVkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZW50cnkudHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfU1RBVEVfVFJBTlNJVElPTlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cImVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1vcmRlci1mdWxmaWxsZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiAqbmdJZj1cImVudHJ5LmRhdGEudG8gPT09ICdDYW5jZWxsZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1vcmRlci1jYW5jZWxsZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiZW50cnkuZGF0YS50byAhPT0gJ0NhbmNlbGxlZCcgJiYgZW50cnkuZGF0YS50byAhPT0gJ0RlbGl2ZXJlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3Rvcnktb3JkZXItdHJhbnNpdGlvbidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IGZyb206IGVudHJ5LmRhdGEuZnJvbSwgdG86IGVudHJ5LmRhdGEudG8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX01PRElGSUVEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmhpc3Rvcnktb3JkZXItbW9kaWZpZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0TW9kaWZpY2F0aW9uKGVudHJ5LmRhdGEubW9kaWZpY2F0aW9uSWQpIGFzIG1vZGlmaWNhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5tb2RpZnktb3JkZXItcHJpY2UtZGlmZmVyZW5jZScgfCB0cmFuc2xhdGUgfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uLnByaWNlQ2hhbmdlIHwgbG9jYWxlQ3VycmVuY3kgOiBvcmRlci5jdXJyZW5jeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgY29sb3JUeXBlPVwic3VjY2Vzc1wiIGNsYXNzPVwibXgtMVwiICpuZ0lmPVwibW9kaWZpY2F0aW9uLmlzU2V0dGxlZFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1zZXR0bGVkJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3Zkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwIGNvbG9yVHlwZT1cImVycm9yXCIgY2xhc3M9XCJteC0xXCIgKm5nSWY9XCIhbW9kaWZpY2F0aW9uLmlzU2V0dGxlZFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLm1vZGlmaWNhdGlvbi1ub3Qtc2V0dGxlZCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1tb2RpZmljYXRpb24tZGV0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcmRlcl09XCJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RpZmljYXRpb25dPVwibW9kaWZpY2F0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItbW9kaWZpY2F0aW9uLWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX1BBWU1FTlRfVFJBTlNJVElPTlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50cnkuZGF0YS50byA9PT0gJ1NldHRsZWQnOyBlbHNlIHJlZ3VsYXJQYXltZW50VHJhbnNpdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ29yZGVyLmhpc3RvcnktcGF5bWVudC1zZXR0bGVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgKm5nSWY9XCJnZXRQYXltZW50KGVudHJ5KSBhcyBwYXltZW50XCIgY2xhc3M9XCJtci0xXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bWVudC5hbW91bnQgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWhpc3RvcnktZW50cnktZGV0YWlsICpuZ0lmPVwiZ2V0UGF5bWVudChlbnRyeSkgYXMgcGF5bWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXBheW1lbnQtZGV0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGF5bWVudF09XCJwYXltZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvZGVdPVwib3JkZXIuY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXBheW1lbnQtZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJQYXltZW50VHJhbnNpdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3RvcnktcGF5bWVudC10cmFuc2l0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBlbnRyeS5kYXRhLmZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogZW50cnkuZGF0YS50byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnZXRQYXltZW50KGVudHJ5KT8udHJhbnNhY3Rpb25JZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInR5cGUuT1JERVJfUkVGVU5EX1RSQU5TSVRJT05cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJ5LmRhdGEudG8gPT09ICdTZXR0bGVkJzsgZWxzZSByZWd1bGFyUmVmdW5kVHJhbnNpdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFJlZnVuZChlbnRyeSkgYXMgcmVmdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3sgJ29yZGVyLnJlZnVuZCcgfCB0cmFuc2xhdGUgfX0gI3t7IHJlZnVuZC5pZCB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXAgY29sb3JUeXBlPVwid2FybmluZ1wiIGNsYXNzPVwibXItMVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZ1bmQudG90YWwgfCBsb2NhbGVDdXJyZW5jeSA6IG9yZGVyLmN1cnJlbmN5Q29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvdmRyLWNoaXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLmNhbmNlbGxhdGlvbi1yZWFzb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkuZGF0YS5yZWFzb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItbGFiZWxlZC1kYXRhIFtsYWJlbF09XCInb3JkZXIuY29udGVudHMnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1zaW1wbGUtaXRlbS1saXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJnZXRDYW5jZWxsZWRJdGVtcyhyZWZ1bmQubGluZXMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItc2ltcGxlLWl0ZW0tbGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVndWxhclJlZnVuZFRyYW5zaXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5oaXN0b3J5LXJlZnVuZC10cmFuc2l0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBlbnRyeS5kYXRhLmZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bzogZW50cnkuZGF0YS50byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbnRyeS5kYXRhLnJlZnVuZElkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZS5PUkRFUl9DQU5DRUxMQVRJT05cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5oaXN0b3J5LWl0ZW1zLWNhbmNlbGxlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZSA6IHsgY291bnQ6IGdldENhbmNlbGxlZFF1YW50aXR5KGVudHJ5KSB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWwgKm5nSWY9XCJnZXRDYW5jZWxsZWRJdGVtcyhlbnRyeS5kYXRhLmxpbmVzKSBhcyBpdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGEgW2xhYmVsXT1cIidvcmRlci5jYW5jZWxsYXRpb24tcmVhc29uJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVudHJ5LmRhdGEucmVhc29uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1sYWJlbGVkLWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLmNvbnRlbnRzJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItc2ltcGxlLWl0ZW0tbGlzdCBbaXRlbXNdPVwiaXRlbXNcIj48L3Zkci1zaW1wbGUtaXRlbS1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGEgW2xhYmVsXT1cIidvcmRlci5zaGlwcGluZy1jYW5jZWxsZWQnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkuZGF0YS5zaGlwcGluZ0NhbmNlbGxlZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItbGFiZWxlZC1kYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0ZVTEZJTExNRU5UXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LWZ1bGZpbGxtZW50LWNyZWF0ZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWwgKm5nSWY9XCJnZXRGdWxmaWxsbWVudChlbnRyeSkgYXMgZnVsZmlsbG1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZnVsZmlsbG1lbnQtZGV0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGZpbGxtZW50SWRdPVwiZnVsZmlsbG1lbnQuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcmRlcl09XCJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZnVsZmlsbG1lbnQtZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0ZVTEZJTExNRU5UX1RSQU5TSVRJT05cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVudHJ5LmRhdGEudG8gPT09ICdEZWxpdmVyZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1mdWxmaWxsbWVudC1kZWxpdmVyZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci50cmFja2luZy1jb2RlJyB8IHRyYW5zbGF0ZSB9fToge3sgZ2V0RnVsZmlsbG1lbnQoZW50cnkpPy50cmFja2luZ0NvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyeS5kYXRhLnRvID09PSAnU2hpcHBlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LWZ1bGZpbGxtZW50LXNoaXBwZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci50cmFja2luZy1jb2RlJyB8IHRyYW5zbGF0ZSB9fToge3sgZ2V0RnVsZmlsbG1lbnQoZW50cnkpPy50cmFja2luZ0NvZGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnRyeS5kYXRhLnRvICE9PSAnRGVsaXZlcmVkJyAmJiBlbnRyeS5kYXRhLnRvICE9PSAnU2hpcHBlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yZGVyLmhpc3RvcnktZnVsZmlsbG1lbnQtdHJhbnNpdGlvbidcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGUgOiB7IGZyb206IGVudHJ5LmRhdGEuZnJvbSwgdG86IGVudHJ5LmRhdGEudG8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWwgKm5nSWY9XCJnZXRGdWxmaWxsbWVudChlbnRyeSkgYXMgZnVsZmlsbG1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZnVsZmlsbG1lbnQtZGV0YWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGZpbGxtZW50SWRdPVwiZnVsZmlsbG1lbnQuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcmRlcl09XCJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItZnVsZmlsbG1lbnQtZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1oaXN0b3J5LWVudHJ5LWRldGFpbD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX05PVEVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub3RlLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5LmlzUHVibGljXCIgY2xhc3M9XCJub3RlLXZpc2liaWxpdHkgcHVibGljXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5wdWJsaWMnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZW50cnkuaXNQdWJsaWNcIiBjbGFzcz1cIm5vdGUtdmlzaWJpbGl0eSBwcml2YXRlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1vbi5wcml2YXRlJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVudHJ5LmRhdGEubm90ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1zbWFsbCBtbC0xXCIgdmRyRHJvcGRvd25UcmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiIHNpemU9XCIxMlwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bi1tZW51IHZkclBvc2l0aW9uPVwiYm90dG9tLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZU5vdGUuZW1pdChlbnRyeSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEoJ1VwZGF0ZU9yZGVyJyB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWRpdFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmVkaXQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVOb3RlLmVtaXQoZW50cnkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKCdVcGRhdGVPcmRlcicgfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5kZWxldGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwidHlwZS5PUkRFUl9DT1VQT05fQVBQTElFRFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1jb3Vwb24tY29kZS1hcHBsaWVkJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jaGlwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvbWFya2V0aW5nJywgJ3Byb21vdGlvbnMnLCBlbnRyeS5kYXRhLnByb21vdGlvbklkXVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZGF0YS5jb3Vwb25Db2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItY2hpcD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0NPVVBPTl9SRU1PVkVEXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdvcmRlci5oaXN0b3J5LWNvdXBvbi1jb2RlLXJlbW92ZWQnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWNoaXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cImNhbmNlbGxlZC1jb3Vwb24tY29kZVwiPnt7IGVudHJ5LmRhdGEuY291cG9uQ29kZSB9fTwvc3Bhbj48L3Zkci1jaGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0eXBlLk9SREVSX0NVU1RPTUVSX1VQREFURURcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcmRlci5oaXN0b3J5LWN1c3RvbWVyLXVwZGF0ZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlIDogeyBuZXdDdXN0b21lck5hbWU6IGVudHJ5LmRhdGEubmV3Q3VzdG9tZXJOYW1lIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGUtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVudHJ5LmRhdGEubm90ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1sYWJlbGVkLWRhdGEgW2xhYmVsXT1cIidvcmRlci5wcmV2aW91cy1jdXN0b21lcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW50cnkuZGF0YS5wcmV2aW91c0N1c3RvbWVySWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZ2hvc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvY3VzdG9tZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjdXN0b21lcnMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmRhdGEucHJldmlvdXNDdXN0b21lcklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidXNlclwiIGNsYXNzPVwiaXMtc29saWRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZW50cnkuZGF0YS5wcmV2aW91c0N1c3RvbWVyTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWxhYmVsZWQtZGF0YSBbbGFiZWxdPVwiJ29yZGVyLm5ldy1jdXN0b21lcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW50cnkuZGF0YS5uZXdDdXN0b21lcklkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLWdob3N0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2N1c3RvbWVyJywgJ2N1c3RvbWVycycsIGVudHJ5LmRhdGEubmV3Q3VzdG9tZXJJZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ1c2VyXCIgY2xhc3M9XCJpcy1zb2xpZFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBlbnRyeS5kYXRhLm5ld0N1c3RvbWVyTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFycm93IHJpZ2h0XCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWxhYmVsZWQtZGF0YT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWhpc3RvcnktZW50cnktZGV0YWlsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnkudHlwZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1oaXN0b3J5LWVudHJ5LWRldGFpbCAqbmdJZj1cImVudHJ5LmRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItb2JqZWN0LXRyZWUgW3ZhbHVlXT1cImVudHJ5LmRhdGFcIj48L3Zkci1vYmplY3QtdHJlZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItaGlzdG9yeS1lbnRyeS1kZXRhaWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC92ZHItdGltZWxpbmUtZW50cnk+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx2ZHItdGltZWxpbmUtZW50cnkgW2lzTGFzdF09XCJ0cnVlXCIgW2NyZWF0ZWRBdF09XCJvcmRlci5jcmVhdGVkQXRcIiBbZmVhdHVyZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICB7eyAnb3JkZXIuaGlzdG9yeS1vcmRlci1jcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC92ZHItdGltZWxpbmUtZW50cnk+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -36,7 +36,7 @@ import { useRichTextEditor } from '../react-hooks/use-rich-text-editor';
36
36
  */
37
37
  export const RichTextEditor = forwardRef((props, ref) => {
38
38
  const [data, setData] = useState('');
39
- const { readOnly, ...rest } = props;
39
+ const { readOnly, label, ...rest } = props;
40
40
  const { ref: _ref, editor } = useRichTextEditor({
41
41
  attributes: props.attributes,
42
42
  isReadOnly: () => readOnly || false,
@@ -58,12 +58,16 @@ export const RichTextEditor = forwardRef((props, ref) => {
58
58
  },
59
59
  });
60
60
  useEffect(() => {
61
- if (props.onMount && editor)
61
+ if (props.onMount && editor) {
62
62
  props.onMount(editor);
63
+ }
64
+ if (typeof props.defaultValue === 'string') {
65
+ editor.update(props.defaultValue);
66
+ }
63
67
  }, []);
64
68
  return (React.createElement(React.Fragment, null,
65
- React.createElement("div", { ref: _ref, ...rest }),
69
+ React.createElement("div", { ref: _ref, ...rest }, label && React.createElement("label", { className: "rich-text-label" }, label)),
66
70
  React.createElement("input", { type: "hidden", value: data, ref: ref })));
67
71
  });
68
72
  RichTextEditor.displayName = 'RichTextEditor';
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmljaFRleHRFZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0L3NyYy9yZWFjdC1jb21wb25lbnRzL1JpY2hUZXh0RWRpdG9yLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUlWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxHQUNYLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFleEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUF5QixFQUFFLEdBQW1DLEVBQUUsRUFBRTtJQUN4RyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDO1FBQzVDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxJQUFJLEtBQUs7UUFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNqQixLQUFLLENBQUMsUUFBUSxDQUFDO29CQUNYLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7aUJBQ08sQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQzdCLE9BQU8sRUFBRSxJQUFJO29CQUNiLFVBQVUsRUFBRSxJQUFJO2lCQUNuQixDQUFDLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNMLENBQUM7S0FDSixDQUFDLENBQUM7SUFDSCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ1gsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLE1BQU07WUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZELENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLE9BQU8sQ0FDSDtRQUNJLDZCQUFLLEdBQUcsRUFBRSxJQUFJLEtBQU0sSUFBSSxHQUFJO1FBQzVCLCtCQUFPLElBQUksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFJLENBQy9DLENBQ04sQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xyXG4gICAgQ2hhbmdlRXZlbnQsXHJcbiAgICBGb3J3YXJkZWRSZWYsXHJcbiAgICBJbnB1dEhUTUxBdHRyaWJ1dGVzLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIHVzZUVmZmVjdCxcclxuICAgIHVzZVN0YXRlLFxyXG59IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgUHJvc2VtaXJyb3JTZXJ2aWNlIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IHVzZVJpY2hUZXh0RWRpdG9yIH0gZnJvbSAnLi4vcmVhY3QtaG9va3MvdXNlLXJpY2gtdGV4dC1lZGl0b3InO1xyXG5cclxuZXhwb3J0IHR5cGUgUmljaFRleHRFZGl0b3JUeXBlID0gSW5wdXRIVE1MQXR0cmlidXRlczxIVE1MSW5wdXRFbGVtZW50PiAmIHtcclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBDb250cm9sIHRoZSBET00gYXR0cmlidXRlcyBvZiB0aGUgZWRpdGFibGUgZWxlbWVudC4gTWF5IGJlIGVpdGhlciBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiBnb2luZyBmcm9tIGFuIGVkaXRvciBzdGF0ZSB0byBhbiBvYmplY3QuXHJcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCB3aWxsIGdldCBhIGNsYXNzIFwiUHJvc2VNaXJyb3JcIiwgYW5kIHdpbGwgaGF2ZSBpdHMgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBkZXRlcm1pbmVkIGJ5IHRoZSBlZGl0YWJsZSBwcm9wLlxyXG4gICAgICogQWRkaXRpb25hbCBjbGFzc2VzIHByb3ZpZGVkIGhlcmUgd2lsbCBiZSBhZGRlZCB0byB0aGUgY2xhc3MuIEZvciBvdGhlciBhdHRyaWJ1dGVzLCB0aGUgdmFsdWUgcHJvdmlkZWQgZmlyc3QgKGFzIGluIHNvbWVQcm9wKSB3aWxsIGJlIHVzZWQuXHJcbiAgICAgKiBDb3BpZWQgZnJvbSByZWFsIHByb3BlcnR5IGRlc2NyaXB0aW9uLlxyXG4gICAgICovXHJcbiAgICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIHJlYWRPbmx5PzogYm9vbGVhbjtcclxuICAgIG9uTW91bnQ/OiAoZWRpdG9yOiBQcm9zZW1pcnJvclNlcnZpY2UpID0+IHZvaWQ7XHJcbn07XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgcmljaCB0ZXh0IGVkaXRvciBjb21wb25lbnQgd2hpY2ggdXNlcyBQcm9zZU1pcnJvciAocmljaCB0ZXh0IGVkaXRvcikgdW5kZXIgdGhlIGhvb2QuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIGltcG9ydCB7IFJpY2hUZXh0RWRpdG9yIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvcmVhY3QnO1xyXG4gKiBpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG4gKlxyXG4gKiBleHBvcnQgZnVuY3Rpb24gTXlDb21wb25lbnQoKSB7XHJcbiAqICAgY29uc3Qgb25TdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XHJcbiAqICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAqICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKGUudGFyZ2V0IGFzIEhUTUxGb3JtRWxlbWVudCk7XHJcbiAqICAgICBjb25zdCBjb250ZW50ID0gZm9ybS5nZXQoXCJjb250ZW50XCIpO1xyXG4gKiAgICAgY29uc29sZS5sb2coY29udGVudCk7XHJcbiAqICAgfTtcclxuICpcclxuICogICByZXR1cm4gKFxyXG4gKiAgICAgPGZvcm0gY2xhc3NOYW1lPVwidy1mdWxsXCIgb25TdWJtaXQ9e29uU3VibWl0fT5cclxuICogICAgICAgPFJpY2hUZXh0RWRpdG9yXHJcbiAqICAgICAgICAgbmFtZT1cImNvbnRlbnRcIlxyXG4gKiAgICAgICAgIHJlYWRPbmx5PXtmYWxzZX1cclxuICogICAgICAgICBvbk1vdW50PXsoZSkgPT4gY29uc29sZS5sb2coXCJNb3VudGVkXCIsIGUpfVxyXG4gKiAgICAgICAvPlxyXG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIj5cclxuICogICAgICAgICBTdWJtaXRcclxuICogICAgICAgPC9idXR0b24+XHJcbiAqICAgICA8L2Zvcm0+XHJcbiAqICAgKTtcclxuICogfVxyXG4gKiBgYGBcclxuICpcclxuICogQGRvY3NDYXRlZ29yeSByZWFjdC1jb21wb25lbnRzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUmljaFRleHRFZGl0b3IgPSBmb3J3YXJkUmVmKChwcm9wczogUmljaFRleHRFZGl0b3JUeXBlLCByZWY6IEZvcndhcmRlZFJlZjxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcbiAgICBjb25zdCB7IHJlYWRPbmx5LCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHsgcmVmOiBfcmVmLCBlZGl0b3IgfSA9IHVzZVJpY2hUZXh0RWRpdG9yKHtcclxuICAgICAgICBhdHRyaWJ1dGVzOiBwcm9wcy5hdHRyaWJ1dGVzLFxyXG4gICAgICAgIGlzUmVhZE9ubHk6ICgpID0+IHJlYWRPbmx5IHx8IGZhbHNlLFxyXG4gICAgICAgIG9uVGV4dElucHV0OiB0ZXh0ID0+IHtcclxuICAgICAgICAgICAgc2V0RGF0YSh0ZXh0KTtcclxuICAgICAgICAgICAgaWYgKHByb3BzLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy5vbkNoYW5nZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB7IHZhbHVlOiB0ZXh0IH0sXHJcbiAgICAgICAgICAgICAgICB9IGFzIENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVmICYmICdjdXJyZW50JyBpbiByZWYgJiYgcmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LnZhbHVlID0gdGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHtcclxuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMub25Nb3VudCAmJiBlZGl0b3IpIHByb3BzLm9uTW91bnQoZWRpdG9yKTtcclxuICAgIH0sIFtdKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgICAgPGRpdiByZWY9e19yZWZ9IHsuLi5yZXN0fSAvPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPXtkYXRhfSByZWY9e3JlZn0gLz5cclxuICAgICAgICA8Lz5cclxuICAgICk7XHJcbn0pO1xyXG5cclxuUmljaFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnUmljaFRleHRFZGl0b3InO1xyXG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmljaFRleHRFZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0L3NyYy9yZWFjdC1jb21wb25lbnRzL1JpY2hUZXh0RWRpdG9yLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUlWLFVBQVUsRUFDVixTQUFTLEVBQ1QsUUFBUSxHQUNYLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFnQnhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLENBQUMsS0FBeUIsRUFBRSxHQUFtQyxFQUFFLEVBQUU7SUFDeEcsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQVMsRUFBRSxDQUFDLENBQUM7SUFDN0MsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7UUFDNUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLElBQUksS0FBSztRQUNuQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssQ0FBQyxRQUFRLENBQUM7b0JBQ1gsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtpQkFDTyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtvQkFDN0IsT0FBTyxFQUFFLElBQUk7b0JBQ2IsVUFBVSxFQUFFLElBQUk7aUJBQ25CLENBQUMsQ0FBQztnQkFDSCxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQztLQUNKLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDWCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLE9BQU8sQ0FDSDtRQUNJLDZCQUFLLEdBQUcsRUFBRSxJQUFJLEtBQU0sSUFBSSxJQUNuQixLQUFLLElBQUksK0JBQU8sU0FBUyxFQUFDLGlCQUFpQixJQUFFLEtBQUssQ0FBUyxDQUMxRDtRQUNOLCtCQUFPLElBQUksRUFBQyxRQUFRLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFJLENBQy9DLENBQ04sQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICAgIENoYW5nZUV2ZW50LFxuICAgIEZvcndhcmRlZFJlZixcbiAgICBJbnB1dEhUTUxBdHRyaWJ1dGVzLFxuICAgIGZvcndhcmRSZWYsXG4gICAgdXNlRWZmZWN0LFxuICAgIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9zZW1pcnJvclNlcnZpY2UgfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcbmltcG9ydCB7IHVzZVJpY2hUZXh0RWRpdG9yIH0gZnJvbSAnLi4vcmVhY3QtaG9va3MvdXNlLXJpY2gtdGV4dC1lZGl0b3InO1xuXG5leHBvcnQgdHlwZSBSaWNoVGV4dEVkaXRvclR5cGUgPSBJbnB1dEhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+ICYge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIENvbnRyb2wgdGhlIERPTSBhdHRyaWJ1dGVzIG9mIHRoZSBlZGl0YWJsZSBlbGVtZW50LiBNYXkgYmUgZWl0aGVyIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uIGdvaW5nIGZyb20gYW4gZWRpdG9yIHN0YXRlIHRvIGFuIG9iamVjdC5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCB3aWxsIGdldCBhIGNsYXNzIFwiUHJvc2VNaXJyb3JcIiwgYW5kIHdpbGwgaGF2ZSBpdHMgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZSBkZXRlcm1pbmVkIGJ5IHRoZSBlZGl0YWJsZSBwcm9wLlxuICAgICAqIEFkZGl0aW9uYWwgY2xhc3NlcyBwcm92aWRlZCBoZXJlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNsYXNzLiBGb3Igb3RoZXIgYXR0cmlidXRlcywgdGhlIHZhbHVlIHByb3ZpZGVkIGZpcnN0IChhcyBpbiBzb21lUHJvcCkgd2lsbCBiZSB1c2VkLlxuICAgICAqIENvcGllZCBmcm9tIHJlYWwgcHJvcGVydHkgZGVzY3JpcHRpb24uXG4gICAgICovXG4gICAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgcmVhZE9ubHk/OiBib29sZWFuO1xuICAgIG9uTW91bnQ/OiAoZWRpdG9yOiBQcm9zZW1pcnJvclNlcnZpY2UpID0+IHZvaWQ7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQSByaWNoIHRleHQgZWRpdG9yIGNvbXBvbmVudCB3aGljaCB1c2VzIFByb3NlTWlycm9yIChyaWNoIHRleHQgZWRpdG9yKSB1bmRlciB0aGUgaG9vZC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IFJpY2hUZXh0RWRpdG9yIH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvcmVhY3QnO1xuICogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbiAqXG4gKiBleHBvcnQgZnVuY3Rpb24gTXlDb21wb25lbnQoKSB7XG4gKiAgIGNvbnN0IG9uU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICogICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAqICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKGUudGFyZ2V0IGFzIEhUTUxGb3JtRWxlbWVudCk7XG4gKiAgICAgY29uc3QgY29udGVudCA9IGZvcm0uZ2V0KFwiY29udGVudFwiKTtcbiAqICAgICBjb25zb2xlLmxvZyhjb250ZW50KTtcbiAqICAgfTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0gY2xhc3NOYW1lPVwidy1mdWxsXCIgb25TdWJtaXQ9e29uU3VibWl0fT5cbiAqICAgICAgIDxSaWNoVGV4dEVkaXRvclxuICogICAgICAgICBuYW1lPVwiY29udGVudFwiXG4gKiAgICAgICAgIHJlYWRPbmx5PXtmYWxzZX1cbiAqICAgICAgICAgb25Nb3VudD17KGUpID0+IGNvbnNvbGUubG9nKFwiTW91bnRlZFwiLCBlKX1cbiAqICAgICAgIC8+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAqICAgICAgICAgU3VibWl0XG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Zvcm0+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAZG9jc0NhdGVnb3J5IHJlYWN0LWNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IFJpY2hUZXh0RWRpdG9yID0gZm9yd2FyZFJlZigocHJvcHM6IFJpY2hUZXh0RWRpdG9yVHlwZSwgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcbiAgICBjb25zdCB7IHJlYWRPbmx5LCBsYWJlbCwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgY29uc3QgeyByZWY6IF9yZWYsIGVkaXRvciB9ID0gdXNlUmljaFRleHRFZGl0b3Ioe1xuICAgICAgICBhdHRyaWJ1dGVzOiBwcm9wcy5hdHRyaWJ1dGVzLFxuICAgICAgICBpc1JlYWRPbmx5OiAoKSA9PiByZWFkT25seSB8fCBmYWxzZSxcbiAgICAgICAgb25UZXh0SW5wdXQ6IHRleHQgPT4ge1xuICAgICAgICAgICAgc2V0RGF0YSh0ZXh0KTtcbiAgICAgICAgICAgIGlmIChwcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB7IHZhbHVlOiB0ZXh0IH0sXG4gICAgICAgICAgICAgICAgfSBhcyBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmICYmICdjdXJyZW50JyBpbiByZWYgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudC52YWx1ZSA9IHRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnQoJ2lucHV0Jywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJlZi5jdXJyZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLm9uTW91bnQgJiYgZWRpdG9yKSB7XG4gICAgICAgICAgICBwcm9wcy5vbk1vdW50KGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5kZWZhdWx0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlZGl0b3IudXBkYXRlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgcmVmPXtfcmVmfSB7Li4ucmVzdH0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDxsYWJlbCBjbGFzc05hbWU9XCJyaWNoLXRleHQtbGFiZWxcIj57bGFiZWx9PC9sYWJlbD59XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e2RhdGF9IHJlZj17cmVmfSAvPlxuICAgICAgICA8Lz5cbiAgICApO1xufSk7XG5cblJpY2hUZXh0RWRpdG9yLmRpc3BsYXlOYW1lID0gJ1JpY2hUZXh0RWRpdG9yJztcbiJdfQ==