@spartacus/order
Version:
Order feature library for Spartacus
45 lines • 18.7 kB
JavaScript
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../amend-order.service";
import * as i2 from "@spartacus/storefront";
import * as i3 from "@angular/common";
import * as i4 from "@spartacus/core";
export class CancelOrReturnItemsComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.isConfirmation = false;
this.form$ = this.orderAmendService.getForm();
}
getControl(form, entry) {
var _a, _b, _c;
const control = ((_a = form.get('entries')) === null || _a === void 0 ? void 0 : _a.get((_c = (_b = entry.entryNumber) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : ''));
return control;
}
setAll(form) {
this.entries.forEach((entry) => this.getControl(form, entry).setValue(this.getMaxAmendQuantity(entry)));
}
getItemPrice(entry) {
return this.orderAmendService.getAmendedPrice(entry);
}
getMaxAmendQuantity(entry) {
return this.orderAmendService.getMaxAmendQuantity(entry);
}
isCancellation() {
return this.orderAmendService.isCancellation();
}
}
CancelOrReturnItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrReturnItemsComponent, deps: [{ token: i1.OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
CancelOrReturnItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: { entries: "entries", isConfirmation: "isConfirmation" }, ngImport: i0, template: "<div *ngIf=\"form$ | async as form\">\n <button\n *ngIf=\"!isConfirmation\"\n class=\"btn btn-link cx-action-link\"\n (click)=\"setAll(form)\"\n >\n {{ 'orderDetails.cancellationAndReturn.setAll' | cxTranslate }}\n </button>\n\n <div class=\"d-none d-md-block cx-item-list-header\">\n <div class=\"row\">\n <div class=\"text-left col-6\">\n {{ 'orderDetails.cancellationAndReturn.item' | cxTranslate }}\n </div>\n <div class=\"text-center col-2\">\n {{ 'orderDetails.cancellationAndReturn.itemPrice' | cxTranslate }}\n </div>\n <div *ngIf=\"!isConfirmation\" class=\"text-center col-2\">\n {{ 'orderDetails.cancellationAndReturn.quantity' | cxTranslate }}\n </div>\n <div class=\"cx-item-list-qty col-2 text-right\">\n {{\n (isCancellation()\n ? 'orderDetails.cancellationAndReturn.cancelQty'\n : 'orderDetails.cancellationAndReturn.returnQty'\n ) | cxTranslate\n }}\n </div>\n <div *ngIf=\"isConfirmation\" class=\"cx-item-list-total col-2\">\n {{ 'orderDetails.cancellationAndReturn.totalPrice' | cxTranslate }}\n </div>\n </div>\n </div>\n\n <div class=\"cx-item-list-row\" *ngFor=\"let item of entries; let i = index\">\n <div class=\"row cx-item-list-items\">\n <!-- Item Image -->\n <cx-media\n class=\"col-2\"\n [container]=\"item.product.images?.PRIMARY\"\n format=\"thumbnail\"\n ></cx-media>\n\n <!-- Item Information -->\n <div class=\"cx-info col-10\">\n <div class=\"cx-info-container row\">\n <!-- Item Description -->\n <div class=\"col-md-4 col-xl-5 cx-list-item-desc\">\n <div *ngIf=\"item.product.name\" class=\"cx-name\">\n {{ item.product.name }}\n </div>\n <div *ngIf=\"item.product.code\" class=\"cx-code\">\n {{ 'cartItems.id' | cxTranslate }} {{ item.product.code }}\n </div>\n <!-- Variants -->\n <ng-container *ngIf=\"item.product.baseOptions?.length\">\n <div\n *ngFor=\"\n let variant of item.product.baseOptions[0]?.selected\n ?.variantOptionQualifiers\n \"\n class=\"cx-property\"\n >\n <div class=\"cx-label\" *ngIf=\"variant.name\">\n {{ variant.name }}:\n </div>\n <div class=\"cx-value\" *ngIf=\"variant.value\">\n {{ variant.value }}\n </div>\n </div>\n </ng-container>\n </div>\n <!-- Price -->\n <div\n *ngIf=\"item.basePrice\"\n class=\"cx-price col-md-3 col-lg-3 col-xl-2\"\n >\n <div class=\"cx-label d-block d-md-none d-lg-none d-xl-none\">\n {{ 'orderDetails.cancellationAndReturn.itemPrice' | cxTranslate }}\n </div>\n <div *ngIf=\"item.basePrice\" class=\"cx-value\">\n {{ item.basePrice?.formattedValue }}\n </div>\n </div>\n <!-- item Quantity -->\n <div *ngIf=\"!isConfirmation\" class=\"cx-request-qty col-md-3\">\n <div\n class=\"cx-label d-block d-md-none d-lg-none d-xl-none\"\n placement=\"left\"\n title=\"{{ 'cartItems.quantityTitle' | cxTranslate }}\"\n >\n {{ 'orderDetails.cancellationAndReturn.quantity' | cxTranslate }}\n </div>\n <div class=\"cx-value\">\n {{ getMaxAmendQuantity(item) }}\n </div>\n </div>\n <!-- Amended Quantity -->\n <div class=\"cx-quantity col-xs-12 col-md-2 col-sm-12\">\n <div class=\"cx-label d-block d-md-none d-lg-none d-xl-none\">\n {{\n (isCancellation()\n ? 'orderDetails.cancellationAndReturn.cancelQty'\n : 'orderDetails.cancellationAndReturn.returnQty'\n ) | cxTranslate\n }}\n </div>\n\n <div\n *ngIf=\"isConfirmation\"\n class=\"w-100 text-center cx-order-quantity-value\"\n >\n {{ getControl(form, item).value }}\n </div>\n <cx-item-counter\n *ngIf=\"!isConfirmation\"\n [min]=\"0\"\n [max]=\"getMaxAmendQuantity(item)\"\n [control]=\"getControl(form, item)\"\n >\n </cx-item-counter>\n </div>\n <!-- Total Price -->\n <div *ngIf=\"isConfirmation\" class=\"cx-total col-3\">\n <div class=\"cx-label d-block d-md-none\">\n {{\n 'orderDetails.cancellationAndReturn.totalPrice' | cxTranslate\n }}\n </div>\n <div class=\"cx-value\">\n {{ getItemPrice(item)?.formattedValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i2.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i2.ItemCounterComponent, selector: "cx-item-counter", inputs: ["control", "min", "max", "step", "allowZero", "readonly"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3.AsyncPipe, "cxTranslate": i4.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrReturnItemsComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-amend-order-items',
templateUrl: './amend-order-items.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: i1.OrderAmendService }]; }, propDecorators: { entries: [{
type: Input
}], isConfirmation: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1lbmQtb3JkZXItaXRlbXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL29yZGVyL2NvbXBvbmVudHMvYW1lbmQtb3JkZXIvYW1lbmQtb3JkZXItaXRlbXMvYW1lbmQtb3JkZXItaXRlbXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL29yZGVyL2NvbXBvbmVudHMvYW1lbmQtb3JkZXIvYW1lbmQtb3JkZXItaXRlbXMvYW1lbmQtb3JkZXItaXRlbXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVcxRSxNQUFNLE9BQU8sNEJBQTRCO0lBTXZDLFlBQXNCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBSmpELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLFVBQUssR0FBMEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRUgsQ0FBQztJQUU5RCxVQUFVLENBQUMsSUFBZSxFQUFFLEtBQWlCOztRQUMzQyxNQUFNLE9BQU8sR0FBZ0IsQ0FDM0IsTUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxHQUFHLENBQUMsTUFBQSxNQUFBLEtBQUssQ0FBQyxXQUFXLDBDQUFFLFFBQVEsRUFBRSxtQ0FBSSxFQUFFLENBQUMsQ0FDOUQsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBZTtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFpQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pELENBQUM7O3lIQS9CVSw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw4SENYekMsOCtKQTBJQTsyRkQvSGEsNEJBQTRCO2tCQUx4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxvQ0FBb0M7b0JBQ2pELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDt3R0FFVSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT3JkZXJFbnRyeSwgUHJpY2UgfSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3JkZXJBbWVuZFNlcnZpY2UgfSBmcm9tICcuLi9hbWVuZC1vcmRlci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3gtYW1lbmQtb3JkZXItaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYW1lbmQtb3JkZXItaXRlbXMuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2FuY2VsT3JSZXR1cm5JdGVtc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGVudHJpZXM6IE9yZGVyRW50cnlbXTtcbiAgQElucHV0KCkgaXNDb25maXJtYXRpb24gPSBmYWxzZTtcblxuICBmb3JtJDogT2JzZXJ2YWJsZTxGb3JtR3JvdXA+ID0gdGhpcy5vcmRlckFtZW5kU2VydmljZS5nZXRGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9yZGVyQW1lbmRTZXJ2aWNlOiBPcmRlckFtZW5kU2VydmljZSkge31cblxuICBnZXRDb250cm9sKGZvcm06IEZvcm1Hcm91cCwgZW50cnk6IE9yZGVyRW50cnkpOiBGb3JtQ29udHJvbCB7XG4gICAgY29uc3QgY29udHJvbCA9IDxGb3JtQ29udHJvbD4oXG4gICAgICBmb3JtLmdldCgnZW50cmllcycpPy5nZXQoZW50cnkuZW50cnlOdW1iZXI/LnRvU3RyaW5nKCkgPz8gJycpXG4gICAgKTtcbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxuXG4gIHNldEFsbChmb3JtOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+XG4gICAgICB0aGlzLmdldENvbnRyb2woZm9ybSwgZW50cnkpLnNldFZhbHVlKHRoaXMuZ2V0TWF4QW1lbmRRdWFudGl0eShlbnRyeSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEl0ZW1QcmljZShlbnRyeTogT3JkZXJFbnRyeSk6IFByaWNlIHtcbiAgICByZXR1cm4gdGhpcy5vcmRlckFtZW5kU2VydmljZS5nZXRBbWVuZGVkUHJpY2UoZW50cnkpO1xuICB9XG5cbiAgZ2V0TWF4QW1lbmRRdWFudGl0eShlbnRyeTogT3JkZXJFbnRyeSkge1xuICAgIHJldHVybiB0aGlzLm9yZGVyQW1lbmRTZXJ2aWNlLmdldE1heEFtZW5kUXVhbnRpdHkoZW50cnkpO1xuICB9XG5cbiAgaXNDYW5jZWxsYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJBbWVuZFNlcnZpY2UuaXNDYW5jZWxsYXRpb24oKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImZvcm0kIHwgYXN5bmMgYXMgZm9ybVwiPlxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCIhaXNDb25maXJtYXRpb25cIlxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGN4LWFjdGlvbi1saW5rXCJcbiAgICAoY2xpY2spPVwic2V0QWxsKGZvcm0pXCJcbiAgPlxuICAgIHt7ICdvcmRlckRldGFpbHMuY2FuY2VsbGF0aW9uQW5kUmV0dXJuLnNldEFsbCcgfCBjeFRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtYmxvY2sgY3gtaXRlbS1saXN0LWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxlZnQgY29sLTZcIj5cbiAgICAgICAge3sgJ29yZGVyRGV0YWlscy5jYW5jZWxsYXRpb25BbmRSZXR1cm4uaXRlbScgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgY29sLTJcIj5cbiAgICAgICAge3sgJ29yZGVyRGV0YWlscy5jYW5jZWxsYXRpb25BbmRSZXR1cm4uaXRlbVByaWNlJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNDb25maXJtYXRpb25cIiBjbGFzcz1cInRleHQtY2VudGVyIGNvbC0yXCI+XG4gICAgICAgIHt7ICdvcmRlckRldGFpbHMuY2FuY2VsbGF0aW9uQW5kUmV0dXJuLnF1YW50aXR5JyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjeC1pdGVtLWxpc3QtcXR5IGNvbC0yIHRleHQtcmlnaHRcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAoaXNDYW5jZWxsYXRpb24oKVxuICAgICAgICAgICAgPyAnb3JkZXJEZXRhaWxzLmNhbmNlbGxhdGlvbkFuZFJldHVybi5jYW5jZWxRdHknXG4gICAgICAgICAgICA6ICdvcmRlckRldGFpbHMuY2FuY2VsbGF0aW9uQW5kUmV0dXJuLnJldHVyblF0eSdcbiAgICAgICAgICApIHwgY3hUcmFuc2xhdGVcbiAgICAgICAgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJjeC1pdGVtLWxpc3QtdG90YWwgY29sLTJcIj5cbiAgICAgICAge3sgJ29yZGVyRGV0YWlscy5jYW5jZWxsYXRpb25BbmRSZXR1cm4udG90YWxQcmljZScgfCBjeFRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjeC1pdGVtLWxpc3Qtcm93XCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZW50cmllczsgbGV0IGkgPSBpbmRleFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY3gtaXRlbS1saXN0LWl0ZW1zXCI+XG4gICAgICA8IS0tIEl0ZW0gSW1hZ2UgLS0+XG4gICAgICA8Y3gtbWVkaWFcbiAgICAgICAgY2xhc3M9XCJjb2wtMlwiXG4gICAgICAgIFtjb250YWluZXJdPVwiaXRlbS5wcm9kdWN0LmltYWdlcz8uUFJJTUFSWVwiXG4gICAgICAgIGZvcm1hdD1cInRodW1ibmFpbFwiXG4gICAgICA+PC9jeC1tZWRpYT5cblxuICAgICAgPCEtLSBJdGVtIEluZm9ybWF0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImN4LWluZm8gY29sLTEwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjeC1pbmZvLWNvbnRhaW5lciByb3dcIj5cbiAgICAgICAgICA8IS0tIEl0ZW0gRGVzY3JpcHRpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC14bC01IGN4LWxpc3QtaXRlbS1kZXNjXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5wcm9kdWN0Lm5hbWVcIiBjbGFzcz1cImN4LW5hbWVcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5wcm9kdWN0Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0ucHJvZHVjdC5jb2RlXCIgY2xhc3M9XCJjeC1jb2RlXCI+XG4gICAgICAgICAgICAgIHt7ICdjYXJ0SXRlbXMuaWQnIHwgY3hUcmFuc2xhdGUgfX0ge3sgaXRlbS5wcm9kdWN0LmNvZGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBWYXJpYW50cyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnByb2R1Y3QuYmFzZU9wdGlvbnM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QuYmFzZU9wdGlvbnNbMF0/LnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgID8udmFyaWFudE9wdGlvblF1YWxpZmllcnNcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3gtcHJvcGVydHlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LWxhYmVsXCIgKm5nSWY9XCJ2YXJpYW50Lm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHZhcmlhbnQubmFtZSB9fTpcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtdmFsdWVcIiAqbmdJZj1cInZhcmlhbnQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHZhcmlhbnQudmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFByaWNlIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5iYXNlUHJpY2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJjeC1wcmljZSBjb2wtbWQtMyBjb2wtbGctMyBjb2wteGwtMlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LWxhYmVsIGQtYmxvY2sgZC1tZC1ub25lIGQtbGctbm9uZSBkLXhsLW5vbmVcIj5cbiAgICAgICAgICAgICAge3sgJ29yZGVyRGV0YWlscy5jYW5jZWxsYXRpb25BbmRSZXR1cm4uaXRlbVByaWNlJyB8IGN4VHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmJhc2VQcmljZVwiIGNsYXNzPVwiY3gtdmFsdWVcIj5cbiAgICAgICAgICAgICAge3sgaXRlbS5iYXNlUHJpY2U/LmZvcm1hdHRlZFZhbHVlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGl0ZW0gUXVhbnRpdHkgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0NvbmZpcm1hdGlvblwiIGNsYXNzPVwiY3gtcmVxdWVzdC1xdHkgY29sLW1kLTNcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjeC1sYWJlbCBkLWJsb2NrIGQtbWQtbm9uZSBkLWxnLW5vbmUgZC14bC1ub25lXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ2NhcnRJdGVtcy5xdWFudGl0eVRpdGxlJyB8IGN4VHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ29yZGVyRGV0YWlscy5jYW5jZWxsYXRpb25BbmRSZXR1cm4ucXVhbnRpdHknIHwgY3hUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LXZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGdldE1heEFtZW5kUXVhbnRpdHkoaXRlbSkgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gQW1lbmRlZCBRdWFudGl0eSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3gtcXVhbnRpdHkgY29sLXhzLTEyIGNvbC1tZC0yIGNvbC1zbS0xMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LWxhYmVsIGQtYmxvY2sgZC1tZC1ub25lIGQtbGctbm9uZSBkLXhsLW5vbmVcIj5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAoaXNDYW5jZWxsYXRpb24oKVxuICAgICAgICAgICAgICAgICAgPyAnb3JkZXJEZXRhaWxzLmNhbmNlbGxhdGlvbkFuZFJldHVybi5jYW5jZWxRdHknXG4gICAgICAgICAgICAgICAgICA6ICdvcmRlckRldGFpbHMuY2FuY2VsbGF0aW9uQW5kUmV0dXJuLnJldHVyblF0eSdcbiAgICAgICAgICAgICAgICApIHwgY3hUcmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIGN4LW9yZGVyLXF1YW50aXR5LXZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgZ2V0Q29udHJvbChmb3JtLCBpdGVtKS52YWx1ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y3gtaXRlbS1jb3VudGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQ29uZmlybWF0aW9uXCJcbiAgICAgICAgICAgICAgW21pbl09XCIwXCJcbiAgICAgICAgICAgICAgW21heF09XCJnZXRNYXhBbWVuZFF1YW50aXR5KGl0ZW0pXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Q29udHJvbChmb3JtLCBpdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2N4LWl0ZW0tY291bnRlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFRvdGFsIFByaWNlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NvbmZpcm1hdGlvblwiIGNsYXNzPVwiY3gtdG90YWwgY29sLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjeC1sYWJlbCBkLWJsb2NrIGQtbWQtbm9uZVwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdvcmRlckRldGFpbHMuY2FuY2VsbGF0aW9uQW5kUmV0dXJuLnRvdGFsUHJpY2UnIHwgY3hUcmFuc2xhdGVcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN4LXZhbHVlXCI+XG4gICAgICAgICAgICAgIHt7IGdldEl0ZW1QcmljZShpdGVtKT8uZm9ybWF0dGVkVmFsdWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19